Compare commits

...

4696 Commits

Author SHA1 Message Date
Adorian Doran be33fd7a0f Merge branch 'main' of https://github.com/TriliumNext/Trilium
Checks / main (push) Successful in 4s
CodeQL Advanced / Analyze (actions) (push) Failing after 21m41s
CodeQL Advanced / Analyze (javascript-typescript) (push) Failing after 55s
Dev / Test development (push) Failing after 54s
Dev / Build Docker image (push) Has been skipped
Dev / Check Docker build (Dockerfile) (push) Has been skipped
Dev / Check Docker build (Dockerfile.alpine) (push) Has been skipped
2026-05-02 12:24:23 +03:00
Adorian Doran 73f0924b78 client/keyboard actions: update the cheatsheet 2026-05-02 12:24:13 +03:00
Adorian Doran 278eeffdb4 Add a keyboard shortcut (Ctrl+H/Cmd+Shift+H) to show/hide archived notes in the tree (#9631) 2026-05-02 11:44:14 +03:00
Adorian Doran 1acca255ad client/keyboard actions: add a Mac-only binding 2026-05-02 11:42:27 +03:00
Adorian Doran ea0ab71a88 client/keyboard actions: fix a typo and a missing await 2026-05-02 11:28:08 +03:00
Adorian Doran 4ad5243806 client/keyboard actions: add a command to toggle archived notes visibility 2026-05-02 11:19:35 +03:00
Elian Doran 41c7b0e22f Update .gitignore (#9618) 2026-04-30 17:41:05 +03:00
misch334 20f718951b Update .gitignore 2026-04-30 10:49:17 +00:00
Elian Doran 3db4375424 fix(deps): update dependency i18next to v26.0.8 (#9600) 2026-04-30 07:01:26 +03:00
Elian Doran 9b0bf05cc2 Translations update from Hosted Weblate (#9613) 2026-04-30 06:59:56 +03:00
Ulices 82e4446040 Translated using Weblate (Spanish)
Currently translated at 100.0% (2008 of 2008 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-29 18:10:01 +02:00
Giovi 26eedbbdae Translated using Weblate (Italian)
Currently translated at 99.9% (2007 of 2008 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-29 18:09:59 +02:00
Aindriú Mac Giolla Eoin a866696e5c Translated using Weblate (Irish)
Currently translated at 99.9% (2007 of 2008 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-29 18:09:54 +02:00
renovate[bot] efc6a0a95e fix(deps): update dependency i18next to v26.0.8 2026-04-29 15:37:13 +00:00
Elian Doran 8f4f94f953 docs(user): fix typo regarding anchors 2026-04-28 19:14:15 +03:00
Elian Doran 852d5facbe Revert "chore(server): allow cross-site cookie for standalone sync purposes"
This reverts commit 33ecb735d3.
2026-04-28 18:10:30 +03:00
Elian Doran b515fe6a98 Revert "chore(server): set Access-Control-Allow-Credentials"
This reverts commit 415468bcf8.
2026-04-28 18:10:16 +03:00
Elian Doran 9527be49c3 docs(user): improve documentation on password reset 2026-04-28 17:56:30 +03:00
Elian Doran 0304108818 docs(user): document the content width 2026-04-28 17:38:56 +03:00
Elian Doran 49e89e8dfa chore(deps): update dependency i18next-fs-backend to v2.6.5 (#9528) 2026-04-28 08:24:15 +03:00
Elian Doran 9d3174199d chore(deps): update dependency express-rate-limit to v8.4.1 (#9599) 2026-04-28 08:23:35 +03:00
Elian Doran d898c9eec7 chore(deps): update dependency @redocly/cli to v2.30.0 (#9601) 2026-04-28 08:22:57 +03:00
renovate[bot] 67e1bc0ff7 chore(deps): update dependency @redocly/cli to v2.30.0 2026-04-28 00:55:10 +00:00
renovate[bot] 0ce83d8403 chore(deps): update dependency express-rate-limit to v8.4.1 2026-04-28 00:53:27 +00:00
Adorian Doran 361a6618b7 contributor list: update display name 2026-04-27 20:52:18 +03:00
Elian Doran 632124cf2a Translations update from Hosted Weblate (#9595) 2026-04-27 13:40:54 +03:00
green 2a7c6781d0 Translated using Weblate (Japanese)
Currently translated at 99.9% (2007 of 2008 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-27 08:10:09 +00:00
Artyom Rybakov a21913521a Translated using Weblate (Russian)
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ru/
2026-04-27 08:09:58 +00:00
Artyom Rybakov 78b09d1b67 Translated using Weblate (Russian)
Currently translated at 85.8% (1723 of 2008 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2026-04-27 08:09:52 +00:00
renovate[bot] 5c2df90f5b chore(deps): update dependency i18next-fs-backend to v2.6.5 2026-04-27 05:04:14 +00:00
Elian Doran 2e0c8b10f5 fix(deps): update dependency @zumer/snapdom to v2.9.0 (#9592) 2026-04-27 08:01:57 +03:00
Elian Doran c949ab6362 fix(deps): update dependency i18next to v26.0.7 (#9588) 2026-04-27 08:01:43 +03:00
renovate[bot] 4f8ee2f1df fix(deps): update dependency i18next to v26.0.7 2026-04-27 04:37:52 +00:00
Elian Doran abd212e9c9 chore(deps): update dependency vite to v8.0.10 (#9586) 2026-04-27 07:36:02 +03:00
Elian Doran 0c8b2523df fix(deps): update dependency i18next-http-backend to v3.0.6 (#9589) 2026-04-27 07:34:53 +03:00
Elian Doran 0793e5b730 chore(deps): update dependency express-rate-limit to v8.4.0 (#9590) 2026-04-27 07:34:17 +03:00
Elian Doran 4924a64f0c chore(deps): update dependency @redocly/cli to v2.29.2 (#9585) 2026-04-27 07:33:34 +03:00
Elian Doran 5065044c07 chore(deps): update dependency stylelint to v17.9.0 (#9591) 2026-04-27 07:33:11 +03:00
Elian Doran 59d80b0641 chore(deps): update pnpm to v10.33.2 (#9587) 2026-04-27 07:32:35 +03:00
renovate[bot] 9ebc3eb959 fix(deps): update dependency @zumer/snapdom to v2.9.0 2026-04-27 02:21:04 +00:00
renovate[bot] d7ff8908b2 chore(deps): update dependency stylelint to v17.9.0 2026-04-27 02:20:25 +00:00
renovate[bot] 4591e2b4bf chore(deps): update dependency express-rate-limit to v8.4.0 2026-04-27 02:19:45 +00:00
renovate[bot] 35279f0815 fix(deps): update dependency i18next-http-backend to v3.0.6 2026-04-27 02:19:07 +00:00
renovate[bot] 269ff2b78d chore(deps): update pnpm to v10.33.2 2026-04-27 02:17:35 +00:00
renovate[bot] a5ab6be14b chore(deps): update dependency vite to v8.0.10 2026-04-27 02:17:21 +00:00
renovate[bot] 93a985848a chore(deps): update dependency @redocly/cli to v2.29.2 2026-04-27 02:15:27 +00:00
Elian Doran 712c7c76ba Translations update from Hosted Weblate (#9583) 2026-04-26 13:01:50 +03:00
Ulices 7503dbdadf Translated using Weblate (Spanish)
Currently translated at 99.1% (1988 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-26 09:56:32 +02:00
Elian Doran 45fa6a8de0 Release bugfixes (#9582) 2026-04-26 10:56:24 +03:00
Elian Doran f84d050580 e2e(server): pdf test affected by virtualization 2026-04-26 10:43:43 +03:00
Elian Doran 2955ab4f90 chore(client): revert changes to translations in other languages 2026-04-26 10:35:34 +03:00
Elian Doran 96e0503265 fix(spreadsheet): search triggers regardless of note context 2026-04-26 10:34:14 +03:00
Elian Doran df78622d90 chore(spreadsheet): mitigate cross-workspace formula contamination 2026-04-26 10:27:34 +03:00
Elian Doran 5972b728df chore(client): fix JSON issues caused by merge 2026-04-26 10:22:19 +03:00
Elian Doran 8fee6b7f43 chore(spreadsheet): address requested change 2026-04-26 10:16:42 +03:00
Elian Doran e4044f363a Merge remote-tracking branch 'origin/main' into feature/release_bugfixes
; Conflicts:
;	apps/client/src/translations/cn/translation.json
;	apps/client/src/translations/es/translation.json
;	apps/client/src/translations/ga/translation.json
;	apps/client/src/translations/it/translation.json
;	apps/client/src/translations/tw/translation.json
2026-04-26 10:08:48 +03:00
Elian Doran ec96fa0c31 fix(print_preview): print report behind the modal 2026-04-26 10:00:03 +03:00
Elian Doran 979d408a44 chore(print_preview): increase deboucing 2026-04-26 09:46:40 +03:00
Elian Doran ca29a11b09 feat(print_preview): display dialog first and preview second 2026-04-26 09:44:29 +03:00
Elian Doran 8c8e797dda refactor(print_preview): extract styles 2026-04-26 09:27:10 +03:00
Elian Doran f9a5935b85 chore(print_preview): reuse existing widgets 2026-04-26 09:20:43 +03:00
Elian Doran 5e406a077d chore(pdfjs): reduce triggering of save events 2026-04-26 08:51:39 +03:00
Elian Doran 3c0700f5cd chore(deps): update dependency @redocly/cli to v2.29.1 (#9576) 2026-04-26 08:07:18 +03:00
Elian Doran a19a080f91 fix(deps): update ckeditor monorepo to v48.0.1 (#9579) 2026-04-26 08:06:21 +03:00
Elian Doran afd43b68ad fix(deps): update dependency mind-elixir to v5.11.0 (#9581) 2026-04-26 08:05:36 +03:00
Elian Doran aa13193fd8 chore(deps): update dependency @types/tabulator-tables to v6.3.2 (#9577) 2026-04-26 08:05:08 +03:00
Elian Doran 59d386bc9a chore(deps): update pnpm to v10.33.1 (#9578) 2026-04-26 08:04:07 +03:00
Elian Doran 361169803f chore(deps): update dependency electron to v41.3.0 (#9580) 2026-04-26 08:03:13 +03:00
renovate[bot] 303d614c2a fix(deps): update dependency mind-elixir to v5.11.0 2026-04-26 02:11:13 +00:00
renovate[bot] d211dfce2d chore(deps): update dependency electron to v41.3.0 2026-04-26 02:10:39 +00:00
renovate[bot] 5e84ebdc9c fix(deps): update ckeditor monorepo to v48.0.1 2026-04-26 02:10:01 +00:00
renovate[bot] c22eecdbc4 chore(deps): update pnpm to v10.33.1 2026-04-26 02:09:23 +00:00
renovate[bot] 1337fd19b8 chore(deps): update dependency @types/tabulator-tables to v6.3.2 2026-04-26 02:09:10 +00:00
renovate[bot] cf1110639f chore(deps): update dependency @redocly/cli to v2.29.1 2026-04-26 02:08:32 +00:00
Elian Doran 4e1b71dac2 fix(pdfjs): not reacting to deleting highlights or moving (closes #9069) 2026-04-25 21:24:48 +03:00
Elian Doran a2424cd0df docs(user): mention changes to PDF 2026-04-25 21:02:29 +03:00
Elian Doran 4b57ebf06f chore(pdf): remove unnecessary highlight types 2026-04-25 20:54:55 +03:00
Elian Doran 36e597ca3e fix(pdf): toolbar shifting when clicking on an annotation 2026-04-25 20:45:03 +03:00
Elian Doran 992f72b139 fix(pdf): not reacting to new annotations 2026-04-25 20:38:07 +03:00
Elian Doran 2a668b82b1 fix(pdf): annotation color changes not considered 2026-04-25 20:25:26 +03:00
Elian Doran 62eb825e52 feat(pdf): support as template 2026-04-25 20:22:59 +03:00
Elian Doran d976076ae5 chore(pdf): remove grouping annotations by page 2026-04-25 19:18:21 +03:00
Elian Doran 345932d392 fix(pdf): readability on dakr theme 2026-04-25 19:17:15 +03:00
Elian Doran faa4fce987 feat(pdf): improve color rendering of highlights 2026-04-25 19:16:02 +03:00
Elian Doran 778b4b2850 Translations update from Hosted Weblate (#9574) 2026-04-25 18:22:41 +03:00
Elian Doran becc66721d Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-25 18:22:19 +03:00
noobhjy 2b79c43737 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2026-04-25 15:09:59 +00:00
Giovi 86a8a7bf2f Translated using Weblate (Italian)
Currently translated at 99.9% (2004 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-25 15:09:57 +00:00
Giovi c07636b822 Translated using Weblate (Italian)
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2026-04-25 15:09:51 +00:00
noobhjy 6479d4f038 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 91.2% (1829 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-25 15:09:50 +00:00
Elian Doran d100278935 fix(pdf): wrong icon for comment annotations 2026-04-25 13:04:09 +03:00
Elian Doran 4d2c346b80 fix(pdf): navigate to the correct position of an annotation 2026-04-25 13:03:08 +03:00
Elian Doran 1184cd6faf fix(pdf): annotation icons not showing 2026-04-25 12:59:18 +03:00
Elian Doran 7311e1a734 fix(pdf): highlights not processed correctly 2026-04-25 12:53:12 +03:00
Elian Doran efeed4942a feat(pdf): start listing annotations 2026-04-25 12:44:34 +03:00
Elian Doran f24d81ffa2 feat(pdf): make searchable using PDF.js builtin mechanism 2026-04-25 12:30:49 +03:00
Elian Doran 8d6597f198 feat(pdf): make printable using PDF.js builtin mechanism 2026-04-25 12:26:57 +03:00
Elian Doran 7ee0d9a1c9 fix(pdf): language not always applied 2026-04-25 12:19:32 +03:00
Elian Doran fad82c2138 chore(sidebar/pdf): bring back to column-layout 2026-04-25 12:09:14 +03:00
Elian Doran e8bb093e84 feat(sidebar/pdf): virtualize pages to improve performance 2026-04-25 12:08:02 +03:00
Elian Doran c920dfb4a0 chore(sidebar): make grow sections individually scrollable 2026-04-25 12:00:07 +03:00
Elian Doran f35724a844 fix(sidebar): collapse state not correct 2026-04-25 11:55:00 +03:00
Elian Doran 2ee764d581 feat(llm): improve sidebar fit 2026-04-25 11:54:47 +03:00
Elian Doran 1673d9cfdb feat(sidebar): improve layout when space is constrained 2026-04-25 11:52:43 +03:00
Elian Doran 86f13bd0e3 feat(pdf): render in share with native PDF provider 2026-04-25 11:49:39 +03:00
Elian Doran ef7d123c95 fix(sidebar): table of contents & pages not scrollable 2026-04-25 11:49:26 +03:00
Elian Doran bd9eae5c9d docs(user): mention markdown ToC 2026-04-25 11:38:32 +03:00
Elian Doran d363a4870b feat(pdf): add read-only badge 2026-04-25 11:38:10 +03:00
Elian Doran c63c7a6f16 docs(user): mention read-only in PDF 2026-04-25 11:30:39 +03:00
Elian Doran 42e1d881da chore(note_list): hide toolbar in PDF as previously handled 2026-04-25 11:30:21 +03:00
Elian Doran 4b30b1dd08 feat(pdf): support read-only mode 2026-04-25 11:27:46 +03:00
Elian Doran 6289643e80 chore(llm): make images and Mermaid fit 2026-04-25 11:14:47 +03:00
Elian Doran f113d3b132 feat(llm): instruct to not create notes unless needed 2026-04-25 11:06:11 +03:00
Elian Doran 09412150f1 feat(llm): instruct to make use of extended Markdown features 2026-04-25 11:01:37 +03:00
Elian Doran 7df8d8be23 chore(llm): remove breaks handling 2026-04-25 10:51:13 +03:00
Elian Doran 34ebc6e375 feat(llm): render with full Markdown support 2026-04-25 10:50:10 +03:00
Elian Doran 7d0b1a7fc1 feat(llm): render math 2026-04-25 10:47:57 +03:00
Elian Doran 72a7e8daa6 chore(llm): use shared Markdown renderer 2026-04-25 10:45:48 +03:00
Elian Doran 14ec83ef41 chore(llm): use instant scrolling for streaming as well 2026-04-25 10:35:28 +03:00
Elian Doran e340db8664 feat(delete_notes): use virtualization if many notes are being deleted 2026-04-25 10:26:58 +03:00
Elian Doran 2276dd17a4 fix(llm): first scroll to button had an animation 2026-04-25 10:24:23 +03:00
Elian Doran 967dfbfdcd feat(llm): don't scrol up if the user is already at the top 2026-04-25 10:22:44 +03:00
Elian Doran 8618248d57 feat(spreadsheet): use the default font 2026-04-25 10:06:44 +03:00
Elian Doran 92975c75c8 fix(ocr): confusing message when processing image-based PDFs 2026-04-25 09:54:41 +03:00
Elian Doran b711f2bb6e feat(markdown): basic footnote support 2026-04-25 09:42:36 +03:00
Elian Doran 7db48b8b84 docs(user): mention shared notes functionality 2026-04-25 09:40:51 +03:00
Elian Doran ffb36f6a54 fix(spreadsheet): find not dismissed by changing note type 2026-04-25 09:32:49 +03:00
Elian Doran b0dfb9ecd7 fix(share/markdown): not rendering inline mermaid or math 2026-04-25 09:29:10 +03:00
Elian Doran 571e52a115 chore(share/markdown): use proper (CKEditor-like) formatting 2026-04-25 09:25:57 +03:00
Elian Doran 68e99437b5 fix(share/markdown): bare code blocks rendered with syntax highlighting 2026-04-25 09:25:44 +03:00
Elian Doran 3a165bc385 fix(spreadsheet): hide find dialog when switching to a different note 2026-04-25 09:22:36 +03:00
Elian Doran 1571267496 feat(markdown): basic rendering in share 2026-04-25 09:20:31 +03:00
Elian Doran cf9e4d8d45 chore(deps): update dependency @electron/rebuild to v4.0.4 (#9566) 2026-04-25 08:23:20 +03:00
Elian Doran 776ef050a5 chore(deps): update dependency electron to v41.2.2 (#9567) 2026-04-25 08:22:32 +03:00
Elian Doran 95b8d90c73 chore(deps): update vitest monorepo to v4.1.5 (#9568) 2026-04-25 08:21:14 +03:00
Elian Doran df07dec9f6 fix(deps): update dependency dompurify to v3.4.1 (#9569) 2026-04-25 08:20:45 +03:00
Elian Doran 1d58e48a7a fix(deps): update dependency @codemirror/search to v6.7.0 (#9570) 2026-04-25 08:19:58 +03:00
Elian Doran 02086131af chore: delete accidentally committed files 2026-04-25 08:13:47 +03:00
renovate[bot] a322dbafd1 fix(deps): update dependency @codemirror/search to v6.7.0 2026-04-25 01:20:07 +00:00
renovate[bot] 12a127ce71 fix(deps): update dependency dompurify to v3.4.1 2026-04-25 01:19:04 +00:00
renovate[bot] c1edc2c924 chore(deps): update vitest monorepo to v4.1.5 2026-04-25 01:18:03 +00:00
renovate[bot] aa1596173c chore(deps): update dependency electron to v41.2.2 2026-04-25 01:16:59 +00:00
renovate[bot] b37a43c541 chore(deps): update dependency @electron/rebuild to v4.0.4 2026-04-25 01:15:59 +00:00
Elian Doran b502d2c9f5 chore(llm): add hint for tool parallelization 2026-04-24 21:17:03 +03:00
Elian Doran 14eaba444c Merge branch 'feature/release_bugfixes' of https://github.com/TriliumNext/Trilium into feature/release_bugfixes 2026-04-24 21:16:45 +03:00
Elian Doran 15d44e0794 feat(spreadsheet): add hyperlink support 2026-04-24 19:13:53 +03:00
Elian Doran af3663c254 feat(ckeditor5-keyboard-marker): improve alignment 2026-04-24 19:05:27 +03:00
Elian Doran 48c6901d3e chore(ckeditor5-keyboard-marker): reduce margin 2026-04-24 18:57:44 +03:00
Elian Doran d1004ad66e feat(ckeditor5-keyboard-marker): use two-step caret movement 2026-04-24 18:55:21 +03:00
Elian Doran 04cd631021 feat(ckeditor): disable spellchecking for shortcuts 2026-04-24 18:51:40 +03:00
Elian Doran b95b7460ea feat(ckeditor): improve the style of keyboard shortcuts 2026-04-24 18:50:33 +03:00
Elian Doran 980974cf86 feat(backup): append the date when downloading a backup for easy reference 2026-04-24 18:43:27 +03:00
Elian Doran 5dbdcd8bc9 fix(backup): slashes not displayed well in the backup toast 2026-04-24 18:34:00 +03:00
Elian Doran cce90782d6 fix(breadcrumb): children shown even if subtree is hidden 2026-04-24 18:12:14 +03:00
Elian Doran c4657c72e5 feat(markdown): use lexer-based ToC 2026-04-24 17:43:50 +03:00
Elian Doran d4fa608dfe feat(markdown): add HTML-based table of contents 2026-04-24 17:37:16 +03:00
Elian Doran b0c91bd889 feat(llm): group similar tool calls together 2026-04-24 12:43:51 +03:00
Elian Doran dd2f32c840 chore(llm): improve spacing in full-page chat 2026-04-24 12:23:48 +03:00
Elian Doran 298db2cba6 feat(llm): support admonitions 2026-04-24 10:57:22 +03:00
Elian Doran b156595693 fix(markdown): inline title not changing when switching MIME type 2026-04-24 10:10:19 +03:00
Elian Doran ea20193d6b fix(markdown): wrong preview background for read-only 2026-04-24 10:08:11 +03:00
Elian Doran 1ee4aef2b1 feat(markdown): don't auto-highlight 2026-04-24 10:01:16 +03:00
Elian Doran 0980916e31 fix(markdown): slow rendering due to syntax highlighting 2026-04-24 09:49:24 +03:00
Elian Doran 58d984f197 feat(markdown): improve rendering of images 2026-04-24 09:45:48 +03:00
Elian Doran a4ab139a51 chore(llm): improve cost analysis 2026-04-24 09:36:08 +03:00
Elian Doran d3b5c702b4 chore(client): basic stylelint with only directionality warnings 2026-04-24 09:36:08 +03:00
Elian Doran 0a18a681c4 chore(llm): integrate Opus 4.7 2026-04-24 09:36:08 +03:00
Elian Doran 698d37f222 chore(deps): update typescript-eslint monorepo to v8.59.0 (#9561) 2026-04-24 08:39:54 +03:00
Elian Doran bac6780346 chore(deps): update apple-actions/import-codesign-certs action to v7 (#9562) 2026-04-24 08:39:40 +03:00
Elian Doran 0f746f31a1 fix(deps): update ai sdk (#9496) 2026-04-24 08:35:13 +03:00
Elian Doran a70287be48 chore(deps): update dependency stylelint to v17.8.0 (#9504) 2026-04-24 08:26:05 +03:00
renovate[bot] 47c65ddab2 chore(deps): update typescript-eslint monorepo to v8.59.0 2026-04-24 05:22:11 +00:00
Elian Doran 6854df59be chore(deps): update dependency @redocly/cli to v2.29.0 (#9560) 2026-04-24 08:20:14 +03:00
Elian Doran 5b5b611494 fix(deps): update dependency @excalidraw/excalidraw to v0.18.1 (#9559) 2026-04-24 08:20:04 +03:00
Elian Doran bb9f8e8325 chore(deps): update dependency vite to v8.0.9 (#9558) 2026-04-24 08:19:35 +03:00
Elian Doran 62e78f0b21 chore(deps): update dependency eslint-plugin-playwright to v2.10.2 (#9557) 2026-04-24 08:17:46 +03:00
renovate[bot] 8dce0ef98d chore(deps): update apple-actions/import-codesign-certs action to v7 2026-04-24 00:54:14 +00:00
renovate[bot] 8d2740637c chore(deps): update dependency @redocly/cli to v2.29.0 2026-04-24 00:53:09 +00:00
renovate[bot] bfe921da85 fix(deps): update dependency @excalidraw/excalidraw to v0.18.1 2026-04-24 00:52:13 +00:00
renovate[bot] bbb7a77174 chore(deps): update dependency vite to v8.0.9 2026-04-24 00:51:10 +00:00
renovate[bot] 84c34748c0 chore(deps): update dependency eslint-plugin-playwright to v2.10.2 2026-04-24 00:50:15 +00:00
Elian Doran 9048119bf1 fix(deps): update dependency i18next to v26.0.6 (#9527) 2026-04-23 22:44:50 +03:00
renovate[bot] 8afb294bff fix(deps): update dependency i18next to v26.0.6 2026-04-23 19:34:30 +00:00
Elian Doran f8f8138100 Update dependency i18next-fs-backend to v2.6.4 [SECURITY] (#9542) 2026-04-23 22:32:17 +03:00
Elian Doran 007764cec9 Basic script deployer (#9543) 2026-04-23 22:31:40 +03:00
Elian Doran f0a8002a15 chore(spreadsheet): improve translation for read-only 2026-04-23 22:16:07 +03:00
Elian Doran 1a29db8607 fix(spreadsheet): read-only not working 2026-04-23 21:52:10 +03:00
Elian Doran 860af33710 feat(spreadsheet): basic search support 2026-04-23 21:44:15 +03:00
Elian Doran 8576eebff0 refactor(server): use different mechanism for detecting if note is templateable 2026-04-23 21:37:19 +03:00
Elian Doran 20825a3cac feat(spreadsheet): add print support 2026-04-23 21:35:24 +03:00
Elian Doran c3a5bedfaf fix(spreadsheet): cannot be used as a template 2026-04-23 21:33:42 +03:00
Elian Doran 6cdb26a843 feat(spreadsheet): hide the font family selector 2026-04-23 21:31:40 +03:00
Elian Doran b1c8bc0483 feat(tree): disable hide subtree on root note 2026-04-23 21:25:09 +03:00
Elian Doran 1927e1feaa feat(status_bar): add a help button for the attribute pane 2026-04-23 21:22:15 +03:00
Elian Doran 0349989da4 Merge branch 'feature/various_fixes' into feature/release_bugfixes
; Conflicts:
;	apps/client/src/widgets/react/Modal.tsx
2026-04-23 21:15:30 +03:00
Elian Doran f8ad52bcfa chore(client): get rid of data-in-app-help-page 2026-04-23 21:14:40 +03:00
Elian Doran dd2a3617e2 chore(client): get rid of data-help-page 2026-04-23 21:11:53 +03:00
Elian Doran b60b74e66d fix(search): help button not working (closes #9537) 2026-04-23 21:08:05 +03:00
Elian Doran 6602b65e0a Translations update from Hosted Weblate (#9546) 2026-04-23 21:06:18 +03:00
renovate[bot] 4542f2caea Update dependency stylelint to v17.8.0 2026-04-23 17:56:40 +00:00
renovate[bot] d8da52f98b Update ai sdk 2026-04-23 17:55:01 +00:00
renovate[bot] aab67b270c Update dependency i18next-fs-backend to v2.6.4 [SECURITY] 2026-04-23 17:54:09 +00:00
Antonio Sanchez Castellón 6131ba7829 Translated using Weblate (Spanish)
Currently translated at 97.2% (1949 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-23 17:51:44 +00:00
Aindriú Mac Giolla Eoin 6981e2b488 Translated using Weblate (Irish)
Currently translated at 99.9% (2004 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-23 17:51:44 +00:00
Ulices 3c6810c79e Translated using Weblate (Spanish)
Currently translated at 91.9% (1843 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-23 17:51:43 +00:00
Francis C. dc645eff02 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 96.4% (1933 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-04-23 17:51:43 +00:00
Francis C. 4effdd6835 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2026-04-23 17:51:42 +00:00
Elian Doran 904c3659da chore(ci): remove claude workflow 2026-04-23 20:51:28 +03:00
Elian Doran 0077b35854 test(script-deployer): fix failing test due to non-refreshed cache 2026-04-23 20:48:44 +03:00
Elian Doran 7cf5e7f1d9 feat(script-deployer): make notes read-only 2026-04-23 19:42:35 +03:00
Elian Doran 1107d0c65a chore(script-deployer): address requested changes 2026-04-23 19:42:30 +03:00
Elian Doran ca797737b4 feat(scripts/auto-import-rnote): handle v0.14 raw images 2026-04-23 19:29:35 +03:00
Elian Doran 199eac394d feat(scripts/auto-import-rnote): suppport v0.13 vs v0.14 2026-04-23 19:29:21 +03:00
Elian Doran 074edeefab fix(script_deployer): Node.js imports not working 2026-04-23 19:23:13 +03:00
Elian Doran f297dd882c fix(scripts): basic importer for rnote 2026-04-23 19:16:00 +03:00
Elian Doran 82056e59bf fix(script_deployer): labels not applied on already existing note 2026-04-23 19:07:53 +03:00
Elian Doran 51972bdaa6 feat(script_deployer): support execute 2026-04-23 19:06:27 +03:00
Elian Doran ff4480a9d6 fix(scripts/auto-import-xopp): stroke too thick 2026-04-23 19:02:47 +03:00
Elian Doran a0449ff7bf feat(script_deployer): backend-script to import to XOPP 2026-04-23 19:02:29 +03:00
Elian Doran 2aa7c06b82 Update dependency vite-plugin-static-copy to v4.1.0 (#9545) 2026-04-23 06:54:45 +03:00
renovate[bot] d53f152fdf Update dependency vite-plugin-static-copy to v4.1.0 2026-04-23 01:55:28 +00:00
Elian Doran e26e69441e chore(script_deployer): basic support for backend notes 2026-04-22 21:51:58 +03:00
Elian Doran 8574593989 chore(script_deployer): fix thickness in XOPP import 2026-04-22 21:34:34 +03:00
Elian Doran 1164fb7dc7 test(script_deployer): add deployment tests 2026-04-22 21:28:53 +03:00
Elian Doran a51e6801e8 chore(script_deployer): improve types 2026-04-22 21:21:43 +03:00
Elian Doran c24301440e chore(script_deployer): preserve JSX 2026-04-22 21:13:43 +03:00
Elian Doran 366461fdce chore(script_deployer): fix more typecheck issues 2026-04-22 21:10:36 +03:00
Elian Doran a92c4f23c2 feat(script_deployer): add watch 2026-04-22 21:08:08 +03:00
Elian Doran 7c86272705 feat(script_deployer): basic TypeScript support 2026-04-22 20:59:48 +03:00
Elian Doran 5e9c514596 chore(script_deployer): basic typecheck 2026-04-22 20:36:20 +03:00
Elian Doran ae787b8f82 chore(script_deployer): refresh all active contexts 2026-04-22 20:25:06 +03:00
Elian Doran 7d103e0c31 chore(script_deployer): add tsconfig 2026-04-22 20:21:32 +03:00
Elian Doran dcfb58cc83 feat(script_deployer): basic auto-refresh for render notes 2026-04-22 20:06:06 +03:00
Elian Doran 5935028082 feat(script_deployer): basic support for syncing 2026-04-22 19:48:32 +03:00
Elian Doran 5cec43047e chore(script_deployer): change render note to subnote 2026-04-22 19:45:28 +03:00
Elian Doran 155413468e chore(script_deployer): basic deployment scheme 2026-04-22 19:41:29 +03:00
Elian Doran daeb51a43c chore(script_deployer): ensure script directory 2026-04-22 19:38:46 +03:00
Elian Doran d3a2884739 chore(script_deployer): add an existing script 2026-04-22 19:33:01 +03:00
Elian Doran 5ac532d709 fix(script_deployer): translations not working 2026-04-22 19:24:11 +03:00
Elian Doran aee87c5556 chore(script_deployer): basic setup 2026-04-22 19:21:15 +03:00
Elian Doran 3a9104e723 Translations update from Hosted Weblate (#9533) 2026-04-22 07:46:44 +03:00
Francis C. b11f1f51e4 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 94.8% (1901 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-04-22 04:45:05 +00:00
Giovi a4a2243fbf Translated using Weblate (Italian)
Currently translated at 90.2% (1810 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-22 04:45:05 +00:00
passkal4 b967129ad9 Translated using Weblate (Uyghur)
Currently translated at 46.3% (930 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-22 04:45:04 +00:00
Hosted Weblate 0563817e75 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-04-22 04:45:04 +00:00
Elian Doran 96a3e2275f Update dependency electron to v41.2.1 (#9497) 2026-04-22 07:44:53 +03:00
Elian Doran b5e2dccefd Update dependency i18next-http-backend to v3.0.5 (#9529) 2026-04-22 07:43:04 +03:00
Elian Doran da3a5ae247 Update dependency marked to v18.0.2 (#9530) 2026-04-22 07:42:30 +03:00
Elian Doran dad48dc279 Update dependency wxt to v0.20.25 (#9531) 2026-04-22 07:42:06 +03:00
Elian Doran 7362a946fc Update dependency @redocly/cli to v2.28.1 (#9516) 2026-04-22 07:41:37 +03:00
Elian Doran 57b1d5c0d4 Update dependency @codemirror/view to v6.41.1 (#9526) 2026-04-22 07:41:16 +03:00
renovate[bot] 843bd44d9d Update dependency wxt to v0.20.25 2026-04-22 01:52:38 +00:00
renovate[bot] 56967ae2d2 Update dependency marked to v18.0.2 2026-04-22 01:51:55 +00:00
renovate[bot] 609ebb8b0a Update dependency i18next-http-backend to v3.0.5 2026-04-22 01:51:12 +00:00
renovate[bot] 2d4cc8181c Update dependency @codemirror/view to v6.41.1 2026-04-22 01:49:04 +00:00
Elian Doran a0544699f0 fix(markdown): crashing in quick edit 2026-04-21 23:22:26 +03:00
Elian Doran c56cad1479 feat(dialogs): open help in quick edit 2026-04-21 21:22:46 +03:00
Elian Doran 3f7ee2c76c fix(revisions): broken diffing for some note types 2026-04-21 20:50:11 +03:00
Elian Doran be37179c97 fix(server): hash code changed after introduction of OCR
See https://github.com/TriliumNext/Trilium/commit/b4e5d9dbc24ef26a7f50f10d0fae21c9e3b5d7c5#r182901277
2026-04-21 20:30:48 +03:00
Elian Doran 3b57d2bacf Update dependency express-openid-connect to v2.20.2 (#9498) 2026-04-21 19:04:10 +03:00
Elian Doran 33ecb735d3 chore(server): allow cross-site cookie for standalone sync purposes 2026-04-21 16:57:50 +03:00
Elian Doran 415468bcf8 chore(server): set Access-Control-Allow-Credentials 2026-04-21 16:18:56 +03:00
Elian Doran cf826f636d Update dependency eslint-linter-browserify to v10.2.1 (#9518) 2026-04-21 10:28:30 +03:00
Elian Doran 9bb6a6e36c Update dependency i18next to v26.0.5 (#9500) 2026-04-21 10:26:26 +03:00
Elian Doran 79b642ce97 Update dependency wxt to v0.20.24 (#9521) 2026-04-21 09:12:36 +03:00
renovate[bot] 5f38d5611a Update dependency wxt to v0.20.24 2026-04-21 05:28:35 +00:00
renovate[bot] 8822476fd8 Update dependency i18next to v26.0.5 2026-04-21 05:25:58 +00:00
Elian Doran 1213d88619 Update dependency eslint to v10.2.1 (#9517) 2026-04-21 08:24:55 +03:00
Elian Doran dfc3b9d700 Update dependency marked to v18.0.1 (#9519) 2026-04-21 08:23:48 +03:00
Elian Doran 4a3ea5e35f Update dependency react-i18next to v17.0.4 (#9520) 2026-04-21 08:23:11 +03:00
Elian Doran bb14ba65f3 Translations update from Hosted Weblate (#9509) 2026-04-21 08:22:24 +03:00
renovate[bot] 5c39a713b4 Update dependency eslint to v10.2.1 2026-04-21 05:17:51 +00:00
Endric Barnekow b7e6ab7ff5 Translated using Weblate (German)
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-04-21 07:15:36 +02:00
Ulices a082452c71 Translated using Weblate (Spanish)
Currently translated at 87.1% (1747 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-21 07:15:36 +02:00
Giovi b359d1d21c Translated using Weblate (Italian)
Currently translated at 88.4% (1773 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-21 07:15:35 +02:00
passkal4 077a18a7d8 Translated using Weblate (Uyghur)
Currently translated at 36.0% (722 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-21 07:15:35 +02:00
noobhjy f5c2fd2a5d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 90.5% (1815 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-21 07:15:34 +02:00
Endric Barnekow 89bff082f4 Translated using Weblate (German)
Currently translated at 89.2% (1789 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-04-21 07:15:33 +02:00
green c1b8952509 Translated using Weblate (Japanese)
Currently translated at 99.9% (2004 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-21 07:15:33 +02:00
Giovi 298ad3afc7 Translated using Weblate (Italian)
Currently translated at 99.7% (405 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2026-04-21 07:15:32 +02:00
Mr. Dalgali e118c46993 Translated using Weblate (Turkish)
Currently translated at 17.0% (27 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/tr/
2026-04-21 07:15:32 +02:00
Endric Barnekow ae3e4ecc4e Translated using Weblate (German)
Currently translated at 87.4% (1754 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-04-21 07:15:31 +02:00
Ulices f05cb47ad8 Translated using Weblate (Spanish)
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/es/
2026-04-21 07:15:31 +02:00
Ulices 96534ecc39 Translated using Weblate (Spanish)
Currently translated at 85.9% (1724 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-21 07:15:30 +02:00
Endric Barnekow b4b7adc3fd Translated using Weblate (German)
Currently translated at 99.7% (405 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-04-21 07:15:30 +02:00
passkal4 c73686ec5a Translated using Weblate (Uyghur)
Currently translated at 28.4% (570 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-21 07:15:29 +02:00
Mr. Dalgali 6e3ade51ae Translated using Weblate (Turkish)
Currently translated at 5.9% (120 of 2005 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/tr/
2026-04-21 07:15:28 +02:00
Hosted Weblate 73f094f9a6 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-04-21 07:15:28 +02:00
Elian Doran 8a1267a7b6 Update ckeditor5 config packages to v15 (major) (#9522) 2026-04-21 08:15:21 +03:00
renovate[bot] bf2965016d Update ckeditor5 config packages to v15 2026-04-21 02:08:04 +00:00
renovate[bot] 042b29b174 Update dependency react-i18next to v17.0.4 2026-04-21 02:02:59 +00:00
renovate[bot] 523b64e9e8 Update dependency marked to v18.0.1 2026-04-21 02:00:52 +00:00
renovate[bot] 3006ebd8b5 Update dependency eslint-linter-browserify to v10.2.1 2026-04-21 01:58:57 +00:00
renovate[bot] 0ccd7a6c11 Update dependency @redocly/cli to v2.28.1 2026-04-21 01:54:53 +00:00
Adorian Doran ca52fabb8a Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-04-21 01:31:45 +03:00
Adorian Doran cbeb539c69 style/about dialog: tweak the background color for the nightly channel 2026-04-21 01:31:42 +03:00
Elian Doran a988543487 fix(share): unchecked TODOs not visible in dark theme (closes #8944) 2026-04-20 08:56:44 +03:00
Elian Doran d625565830 Update Node.js to v24.15.0 (#9505) 2026-04-20 08:22:34 +03:00
Elian Doran ef7facc3f0 Update dependency force-graph to v1.51.4 (#9499) 2026-04-20 08:21:49 +03:00
Elian Doran b20d2436fa Update dependency @types/express-session to v1.19.0 (#9503) 2026-04-20 08:20:00 +03:00
Elian Doran 516a177bfb Update actions/checkout action to v6 (#9506) 2026-04-20 08:19:27 +03:00
Elian Doran 26efc3a8ff Update dependency wxt to v0.20.23 (#9502) 2026-04-20 08:18:11 +03:00
Elian Doran 91e989719b Update dependency typescript to v6.0.3 (#9501) 2026-04-20 08:17:15 +03:00
renovate[bot] 390877931b Update actions/checkout action to v6 2026-04-20 01:09:06 +00:00
renovate[bot] f794a34132 Update Node.js to v24.15.0 2026-04-20 01:08:59 +00:00
renovate[bot] 67f5fc3dbc Update dependency @types/express-session to v1.19.0 2026-04-20 01:08:10 +00:00
renovate[bot] 753475ee46 Update dependency wxt to v0.20.23 2026-04-20 01:07:31 +00:00
renovate[bot] 90e4e73316 Update dependency typescript to v6.0.3 2026-04-20 01:06:55 +00:00
renovate[bot] b5a4956188 Update dependency force-graph to v1.51.4 2026-04-20 01:05:37 +00:00
renovate[bot] e00c72079a Update dependency express-openid-connect to v2.20.2 2026-04-20 01:04:57 +00:00
renovate[bot] 99bce0c262 Update dependency electron to v41.2.1 2026-04-20 01:04:14 +00:00
Elian Doran f48509ea2f Translations update from Hosted Weblate (#9493) 2026-04-19 19:53:53 +03:00
Hosted Weblate 1d0bc138fd Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-19 16:01:26 +00:00
Abi Quinn 326c0234ff Translated using Weblate (English (United Kingdom))
Currently translated at 8.5% (170 of 1999 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/en_GB/
2026-04-19 16:01:24 +00:00
Abi Quinn bbbacf7f78 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/en_GB/
2026-04-19 16:01:23 +00:00
Abi Quinn fd428a81e0 Translated using Weblate (English (United Kingdom))
Currently translated at 91.1% (144 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/en_GB/
2026-04-19 16:01:22 +00:00
green ba0e9e2eaa Translated using Weblate (Japanese)
Currently translated at 99.9% (1998 of 1999 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-19 16:01:22 +00:00
Abi Quinn 286f412906 Translated using Weblate (English (United Kingdom))
Currently translated at 35.4% (144 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/en_GB/
2026-04-19 16:01:21 +00:00
Francis C. 4708d55a99 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 90.1% (1803 of 1999 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-04-19 16:01:21 +00:00
Aindriú Mac Giolla Eoin 5952d13498 Translated using Weblate (Irish)
Currently translated at 99.9% (1998 of 1999 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-19 16:01:20 +00:00
passkal4 6d39bd91d9 Translated using Weblate (Uyghur)
Currently translated at 17.7% (355 of 1999 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-19 16:01:20 +00:00
green b97fd784ea Translated using Weblate (Japanese)
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-19 16:01:19 +00:00
Aindriú Mac Giolla Eoin e7bbdf8cc1 Translated using Weblate (Irish)
Currently translated at 100.0% (406 of 406 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ga/
2026-04-19 16:01:19 +00:00
Adorian Doran fe334ca8eb contributor list: fix broken list 2026-04-19 19:01:04 +03:00
Adorian Doran 9e37a803f7 A new about dialog (#9151) 2026-04-19 18:44:44 +03:00
Adorian Doran c4d832eebc contributor list: update script name, change a comment 2026-04-19 18:33:35 +03:00
Adorian Doran 5921d1f1a6 client/about dialog: fix some issues 2026-04-19 18:21:33 +03:00
Elian Doran b04945e793 chore(client): remove limit on contributors 2026-04-19 15:47:13 +03:00
Elian Doran 2c744122ca chore: update contributors list 2026-04-19 15:44:52 +03:00
Elian Doran adc648d277 chore(scripts): tweak criteria for contributors 2026-04-19 15:34:14 +03:00
Elian Doran a403aca054 chore(scripts): group translators separately 2026-04-19 13:16:08 +03:00
Elian Doran e7f85bb447 chore(scripts): filter contributors by minimum commits 2026-04-19 13:12:41 +03:00
Elian Doran e6e6c1feff chore(scripts): filter contributors by role 2026-04-19 13:03:57 +03:00
Elian Doran 415d9364de Merge remote-tracking branch 'origin/main' into feat/about-dialog-overhaul 2026-04-19 12:49:46 +03:00
Elian Doran 8a2b649714 Print collection - add missing link/titles for reference-link links (#9489) 2026-04-19 12:41:03 +03:00
Elian Doran 9c655baab9 Update softprops/action-gh-release action to v3 (#9470) 2026-04-19 12:37:21 +03:00
Elian Doran ae6f5fad3b chore(deps): update dependency officeparser to v6.1.0 (#9482) 2026-04-19 12:36:47 +03:00
Elian Doran f9baac34cc fix(ocr): use correct officeparser v6.1.0 API
v6.1.0 renamed parseOfficeAsync to OfficeParser.parseOffice (static
method) and returns an AST object with toText() instead of a plain
string.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 12:10:08 +03:00
Elian Doran 9d1f831737 chore(ci): disable signing for nightlies temporarily 2026-04-19 11:15:40 +03:00
Elian Doran 3839dad55d fix(print): margins not taken into consideration 2026-04-19 11:11:56 +03:00
Adorian Doran 900f308349 contributor list: switch to manual update, add a tool for a reference list (local Git + GitHub listing) 2026-04-19 11:10:45 +03:00
Elian Doran 4ae3a00464 chore: remove Electron repro project 2026-04-19 10:55:29 +03:00
Elian Doran bc21fd560f fix(server): increase sync version to match new DB schema 2026-04-19 10:18:44 +03:00
Elian Doran ab1d1f97c8 Translations update from Hosted Weblate (#9487) 2026-04-19 00:10:37 +03:00
noobhjy 9a85d7ec26 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 92.5% (1818 of 1965 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-18 19:57:01 +00:00
noobhjy f702930731 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (404 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2026-04-18 19:57:00 +00:00
passkal4 f449fffaf5 Translated using Weblate (Uyghur)
Currently translated at 44.5% (180 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-18 19:57:00 +00:00
passkal4 78777e69fc Translated using Weblate (Uyghur)
Currently translated at 9.2% (182 of 1965 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-18 19:56:59 +00:00
passkal4 2d7df2d079 Translated using Weblate (Uyghur)
Currently translated at 93.6% (148 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ug/
2026-04-18 19:56:59 +00:00
passkal4 fbbdb6e6e6 Translated using Weblate (Uyghur)
Currently translated at 95.7% (114 of 119 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ug/
2026-04-18 19:56:58 +00:00
passkal4 797b5ffd80 Translated using Weblate (Uyghur)
Currently translated at 43.8% (177 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-18 19:56:57 +00:00
passkal4 04954a46d0 Translated using Weblate (Uyghur)
Currently translated at 9.0% (178 of 1965 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-18 19:56:57 +00:00
Hosted Weblate fafa080cfc Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-18 19:56:56 +00:00
passkal4 62e30d76fb Translated using Weblate (Uyghur)
Currently translated at 42.8% (173 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-18 19:56:55 +00:00
passkal4 ca78285fea Translated using Weblate (Uyghur)
Currently translated at 91.1% (144 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ug/
2026-04-18 19:56:55 +00:00
passkal4 7a47928b82 Translated using Weblate (Uyghur)
Currently translated at 8.9% (175 of 1965 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-18 19:56:54 +00:00
Hosted Weblate 63e2a33543 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-04-18 19:56:53 +00:00
Elian Doran caf53877e3 fix(deps): update dependency @codemirror/language-data to v6.5.2 (#9479) 2026-04-18 22:56:46 +03:00
contributor e9b1b2de21 chore(print): parallelize loading note reference links 2026-04-18 22:23:53 +03:00
contributor 9d8d7bd496 fix(print): missing note title for reference links 2026-04-18 22:00:04 +03:00
contributor 4579e4d31b Revert "fix(print): add missing note title for links (content renderer aware of printing)"
This reverts commit 62a8fb2228.
2026-04-18 21:59:08 +03:00
Elian Doran 8d41ba85a8 docs(user): add documentation on code & print improvements 2026-04-18 21:35:29 +03:00
Adorian Doran 4e55b29041 Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-04-18 20:36:13 +03:00
Adorian Doran ac1bcefe80 client/property sheet component: fix width limit on mobile 2026-04-18 20:31:48 +03:00
Adorian Doran 1d8a8107af style/property sheet component: improve appearance 2026-04-18 20:29:49 +03:00
Adorian Doran 36270397c2 git mailmap: update 2026-04-18 20:21:52 +03:00
Adorian Doran b349922add client/about dialog: make full page on mobile 2026-04-18 20:20:39 +03:00
Adorian Doran dbea88fa56 client/modal dialog: add support for full page dialogs on mobile 2026-04-18 20:20:06 +03:00
claude[bot] b2bcccb4c7 fix(ocr): adapt OfficeProcessor to officeparser v6.1.0 ESM changes
v6.1.0 added native ESM with Node16 resolution and a strict exports
field, breaking deep subpath imports like
officeparser/dist/parsers/ExcelParser.js. Switch to the main package
entry and use parseOfficeAsync(), which accepts a Buffer and
auto-detects the format via magic bytes.

Co-authored-by: Elian Doran <eliandoran@users.noreply.github.com>
2026-04-18 17:07:02 +00:00
Elian Doran 9d60bb804d Named revisions (#9490) 2026-04-18 20:04:54 +03:00
Elian Doran 189867ca03 Merge branch 'main' into renovate/officeparser-6.x 2026-04-18 19:56:55 +03:00
Elian Doran 23cb66bba9 chore(revisions): address requested changes 2026-04-18 19:55:36 +03:00
Elian Doran 10a2e21636 chore(etapi): revert change to revision API 2026-04-18 19:55:36 +03:00
Elian Doran 2fa0a4b35c fix(ci): grant write permissions to interactive Claude workflow
The contents, pull-requests, and issues permissions were set to read, preventing Claude from pushing commits and commenting on PRs/issues.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 19:51:44 +03:00
Elian Doran 8d20fec5b8 Merge branch 'main' into feature/named_revisions 2026-04-18 19:41:14 +03:00
Elian Doran 1d25d79a3f fix(ci): grant write permission to Claude code review workflow
The pull-requests permission was set to read, preventing Claude from posting review comments on PRs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 19:30:32 +03:00
Elian Doran c61c6ae64c Merge branch 'feature/named_revisions' of github.com:TriliumNext/Trilium into feature/named_revisions 2026-04-18 19:22:05 +03:00
Elian Doran fb3c487c0d test(server): fix ETAPI related test 2026-04-18 19:22:03 +03:00
Elian Doran 087fc5f2c4 Merge branch 'main' into feature/named_revisions 2026-04-18 19:20:48 +03:00
Elian Doran e01d835709 feat(revisions): add a shortcut to save named revisions 2026-04-18 19:13:37 +03:00
Elian Doran 662d6fa91c chore(deps): update dependency wxt to v0.20.22 (#9477) 2026-04-18 18:50:45 +03:00
Elian Doran 03a4e1d4c1 fix(deps): update dependency react-i18next to v17.0.3 (#9480) 2026-04-18 18:50:17 +03:00
Elian Doran 9d953ea700 docs(user): update note revisions to new layout 2026-04-18 18:47:21 +03:00
Elian Doran da96d2bc88 feat(revisions): dedicated no revisions modal 2026-04-18 18:08:11 +03:00
Elian Doran dabbbbb874 fix(revisions): context menu on mobile + regression in tab switcher 2026-04-18 18:01:34 +03:00
Elian Doran ffe60580db fix(revisions): layout on mobile 2026-04-18 17:55:03 +03:00
Elian Doran a2cd75c2c4 feat(revisions): preserve monospace for code notes diff 2026-04-18 17:36:31 +03:00
Elian Doran f4cf8829f7 feat(revisions): improve the layout even further & rebrand description to name 2026-04-18 17:23:44 +03:00
Elian Doran fb5520a3c5 feat(revisions): relocate the description 2026-04-18 17:17:02 +03:00
Elian Doran bd30e9efc1 feat(revisions): declutter the header 2026-04-18 17:11:22 +03:00
Elian Doran f9310c5cde feat(revisions): improve title display 2026-04-18 17:00:19 +03:00
Elian Doran 01c57fc8db feat(revisions): display sidebar in full-height 2026-04-18 16:48:54 +03:00
Elian Doran f22eaee4e2 Merge remote-tracking branch 'origin/main' into feature/named_revisions 2026-04-18 16:45:08 +03:00
Adorian Doran 2742df7cd1 client/about dialog: fix a typo 2026-04-18 16:10:00 +03:00
Adorian Doran c031a99fc0 client/about dialog: update the license URL 2026-04-18 16:07:39 +03:00
Adorian Doran 83d08d890d style/about dialog: improve appearance 2026-04-18 16:05:09 +03:00
Adorian Doran e2c79ff047 client: refactor 2026-04-18 15:54:10 +03:00
Adorian Doran e624c204ff client/fluid container: fix a bug 2026-04-18 15:53:08 +03:00
contributor 62a8fb2228 fix(print): add missing note title for links (content renderer aware of printing) 2026-04-18 15:41:44 +03:00
Elian Doran 7473d50711 fix(deps): update ai sdk (#9478) 2026-04-18 15:14:02 +03:00
Elian Doran 41a90f1904 chore(deps): update dependency @redocly/cli to v2.28.0 (#9481) 2026-04-18 15:13:43 +03:00
Elian Doran ae6803d711 Add Claude Code GitHub Workflow (#9488) 2026-04-18 15:12:53 +03:00
Elian Doran 81dfc59846 "Claude Code Review workflow" 2026-04-18 15:11:00 +03:00
Elian Doran d1528a2f3a "Claude PR Assistant workflow" 2026-04-18 15:10:58 +03:00
Elian Doran 36f635b7d5 chore(deps): update node.js to v24.15.0 (#9483) 2026-04-18 15:00:10 +03:00
Elian Doran 6278a376b7 Translations update from Hosted Weblate (#9486) 2026-04-18 14:59:37 +03:00
Elian Doran 20fca6c0df feat(revisions): improve layout and highlighting 2026-04-18 14:51:15 +03:00
Elian Doran 1ab04cf951 feat(revisions): improve grouping with smart auto-titles 2026-04-18 14:46:56 +03:00
Elian Doran 3ece5d6213 feat(revisions): group revisions and improve display 2026-04-18 14:39:31 +03:00
Elian Doran 65aba291ca feat(revisions): highlight inserted/removed images 2026-04-18 14:27:07 +03:00
Elian Doran b3e877f5dd feat(revisions): remove paddings for a smoother display 2026-04-18 14:24:11 +03:00
Elian Doran 066be7fa33 feat(revisions): group less used options into overflow menu 2026-04-18 14:18:29 +03:00
Elian Doran 6390f59fcf feat(revisions): improve header layout 2026-04-18 14:07:38 +03:00
Elian Doran 81ea86100f feat(revisions): add full date in tooltip 2026-04-18 13:52:19 +03:00
Elian Doran d086c8664b feat(revisions): improve layout of note revision list 2026-04-18 13:51:04 +03:00
Elian Doran 03d6c81659 chore(revisions): get rid of source tag 2026-04-18 13:35:47 +03:00
Elian Doran 270f135632 feat(revisions): add a fall-back title for revisions 2026-04-18 13:33:44 +03:00
Elian Doran 6436e56448 feat(revisions): display date in relative time 2026-04-18 13:30:09 +03:00
Elian Doran 315a97701b feat(revisions): add an icon based on the source 2026-04-18 13:26:38 +03:00
Elian Doran 927c359716 feat(revisions): basic rich diff 2026-04-18 13:22:09 +03:00
Elian Doran fc5252e6b8 feat(llm): provide description when saving a revision 2026-04-18 12:54:17 +03:00
Elian Doran 69e757459f feat(revisions): improve the list of revisions 2026-04-18 12:53:57 +03:00
Elian Doran 62189cfa04 refactor(revisions): extract inline styles to CSS 2026-04-18 12:48:03 +03:00
Elian Doran 4b35881889 feat(revisions): add a source field 2026-04-18 12:46:13 +03:00
green 1c508b830e Translated using Weblate (Japanese)
Currently translated at 100.0% (404 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-18 11:41:53 +02:00
green e5f97b6fdd Translated using Weblate (Japanese)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ja/
2026-04-18 11:41:53 +02:00
Francis C. 0bdebca2b6 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 89.7% (1760 of 1962 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-04-18 11:41:53 +02:00
passkal4 7dfdc7f31a Translated using Weblate (Uyghur)
Currently translated at 78.9% (94 of 119 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ug/
2026-04-18 11:41:53 +02:00
passkal4 ec7b9e08e3 Translated using Weblate (Uyghur)
Currently translated at 23.0% (93 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-18 11:41:53 +02:00
Francis C. a915c60c38 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.2% (401 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2026-04-18 11:41:53 +02:00
green 676a988433 Translated using Weblate (Japanese)
Currently translated at 99.9% (1961 of 1962 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-18 11:41:53 +02:00
Elian Doran 15951886bd Bundle of assigned issues (#9476) 2026-04-18 12:41:45 +03:00
Elian Doran 8aaa4d7bde feat(revisions): add a description field 2026-04-18 12:40:33 +03:00
Elian Doran a439e7c29b docs(user): sync 2026-04-18 12:30:12 +03:00
Elian Doran 85bd4790ac fix(markdown): wrong management of backtick-escaped triple backtips 2026-04-18 12:24:18 +03:00
Elian Doran 4876d4b8c6 chore: address requested changes 2026-04-18 12:21:27 +03:00
Elian Doran 81a54d8398 fix(dialogs): focus on first field in note type chooser (closes #9433) 2026-04-18 12:06:15 +03:00
Elian Doran 8e91a9eb0e chore(desktop): don't use subdirectory when changing electron path 2026-04-18 12:04:02 +03:00
Elian Doran 2a7309477c fix(desktop): handling of electron path not correct for portable installations 2026-04-18 12:01:58 +03:00
Adorian Doran 837cb37642 Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-04-18 11:58:15 +03:00
renovate[bot] c69e3b7e14 chore(deps): update dependency @redocly/cli to v2.28.0 2026-04-18 08:42:38 +00:00
Adorian Doran 7c3bb8c589 client: refactor 2026-04-18 11:22:16 +03:00
Adorian Doran 2c6c7cb037 client: create a fluid wrapper component 2026-04-18 11:15:18 +03:00
Elian Doran 8446e98b21 feat(text): add a copy button to bookmarks 2026-04-18 11:14:13 +03:00
Elian Doran 96ddb79d06 fix(text): add link doesn't clear bookmark section when removing the note selection 2026-04-18 11:07:13 +03:00
Elian Doran 4244b66cea feat(text): rebrand bookmarks to anchors 2026-04-18 11:06:50 +03:00
Elian Doran 15c121f950 docs(user): document linking to bookmarks 2026-04-18 10:54:57 +03:00
Adorian Doran 683814c9d2 client/about dialog: refactor 2026-04-18 10:47:20 +03:00
Elian Doran b01feed4a2 feat(text): add bookmark title for non-mirrored link 2026-04-18 10:45:51 +03:00
Adorian Doran 3ce2af9abe client/property sheet component: add support for CSS class names 2026-04-18 10:44:59 +03:00
Elian Doran 7219fc875d feat(text): improve display of reference links with bookmarks 2026-04-18 10:43:14 +03:00
Elian Doran 131e10f4fe fix(text): clicking on a bookmark link won't scroll properly 2026-04-18 10:35:46 +03:00
Adorian Doran 8cc5e0282e client/about dialog: refactor 2026-04-18 10:35:09 +03:00
Adorian Doran 426d5daf73 client/refactor: create a separate property sheet component 2026-04-18 10:34:47 +03:00
Elian Doran 480da09bcc fix(client): internalBookmark not hidden 2026-04-18 10:30:03 +03:00
Elian Doran ae004c4334 feat(text): basic insert link with anchors 2026-04-18 10:29:43 +03:00
Elian Doran 4dcbd36b2d feat(text): add a slash command for bookmarks 2026-04-18 10:22:58 +03:00
Adorian Doran 5539c901fe style/about dialog: make the property sheet responsive 2026-04-18 10:20:30 +03:00
Elian Doran 84fff30723 feat(server): mark bookmarks as internal links 2026-04-18 10:17:39 +03:00
Elian Doran bdf4e40577 fix(server): bookmarks not processed due to self-closing tag 2026-04-18 10:17:28 +03:00
Elian Doran 79d639108b feat(status_bar): display system links in dev mode 2026-04-18 10:12:41 +03:00
Elian Doran 5b957dd111 chore(server): start processing bookmarks 2026-04-18 10:09:41 +03:00
Elian Doran c0b1ff31e5 fix(server): safe import strips out bookmarks from note 2026-04-18 09:56:41 +03:00
Elian Doran cc010e1568 chore(desktop/appimage): fix path for packaging 2026-04-18 09:54:19 +03:00
Adorian Doran d240fb32bb style/about dialog: refactor 2026-04-18 09:49:05 +03:00
Elian Doran 374eeaeb08 feat(print): respect user's detail font when printing 2026-04-18 09:38:21 +03:00
Elian Doran 1674bf0a87 fix(print): wait for custom fonts to be loaded (closes #8097) 2026-04-18 09:28:54 +03:00
Elian Doran a617b59765 fix(print): text notes would override custom font 2026-04-18 09:26:50 +03:00
renovate[bot] e5daa75cb4 chore(deps): update node.js to v24.15.0 2026-04-18 02:36:30 +00:00
renovate[bot] a9e7cd7bfe chore(deps): update dependency officeparser to v6.1.0 2026-04-18 02:36:22 +00:00
renovate[bot] 84d46c0a29 fix(deps): update dependency react-i18next to v17.0.3 2026-04-18 02:34:41 +00:00
renovate[bot] 036d09f99e fix(deps): update dependency @codemirror/language-data to v6.5.2 2026-04-18 02:33:50 +00:00
renovate[bot] 6c2ce8f39c fix(deps): update ai sdk 2026-04-18 02:32:56 +00:00
renovate[bot] 77b89c5a01 chore(deps): update dependency wxt to v0.20.22 2026-04-18 02:32:03 +00:00
Elian Doran 65d3224c1a fix(tree): hidden notes appearing on root import (closes #5520) 2026-04-17 23:47:59 +03:00
Elian Doran 7d6fd54562 chore(client): fix TODO related to hidden node 2026-04-17 23:32:24 +03:00
Elian Doran 1a07dff373 feat(electron): disable terminal from portable mode 2026-04-17 23:29:38 +03:00
Elian Doran e99cf74988 feat(electron): customizable Electron directory (closes #4192) 2026-04-17 23:29:27 +03:00
Elian Doran 1acbf5ba45 feat(electron): generate appimage (closes #409) 2026-04-17 23:26:24 +03:00
Elian Doran 64bc1271e1 fix(server): prevent NaN potentially corrupting the backup when migrating 2026-04-17 23:03:28 +03:00
Elian Doran 06f7818ee3 Basic Markdown support (#9475) 2026-04-17 22:30:54 +03:00
Elian Doran a0548e1627 fix(deps): update dependency unpdf to v1.6.0 (#9469) 2026-04-17 22:27:21 +03:00
Elian Doran 2639c5a225 chore: fix typecheck error 2026-04-17 22:22:22 +03:00
Elian Doran bfc22864f6 Translations update from Hosted Weblate (#9474) 2026-04-17 22:04:05 +03:00
Elian Doran 69763c8b14 feat(markdown): render preview as Markdown 2026-04-17 21:41:35 +03:00
Elian Doran 75b4877c87 fix(import/mime): importing a Markdown file with conversion to text disabled is treated as file instead of code 2026-04-17 21:35:14 +03:00
Elian Doran 9ff466c9f5 docs: add more details to Markdown note type 2026-04-17 21:33:43 +03:00
Elian Doran 5f32d83c79 fix(markdown): always maintain horizontal layout 2026-04-17 21:24:43 +03:00
Elian Doran eb3adfa733 docs: add documentation on the new Markdown type 2026-04-17 20:59:00 +03:00
Elian Doran 80aac52066 feat(markdown): improve display mode selector on mobile 2026-04-17 20:40:36 +03:00
Elian Doran 0335ece20b fix(markdown): syncing doesn't work on read-only notes 2026-04-17 20:40:36 +03:00
Elian Doran e2d6fdb09a refactor(markdown): use different mechanism for syncing based on init 2026-04-17 20:40:36 +03:00
Elian Doran 79ea95cb39 Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-17 20:18:26 +03:00
Elian Doran 84bc385bab chore(markdown): add a small separator between buttons 2026-04-17 19:09:30 +03:00
Elian Doran 1af2a07a57 fix(markdown): align button order between layouts to avoid shifts 2026-04-17 19:09:08 +03:00
Elian Doran 98b92b7220 fix(markdown): read-only code not scrollable 2026-04-17 19:06:50 +03:00
Elian Doran 9b94d232a8 feat(layout): remove lock/unlock buttons in new layout 2026-04-17 18:58:33 +03:00
Elian Doran fef8b6f58e feat(client): handle editing temporarily mind map, canvas, spreadsheet & mermaid 2026-04-17 18:47:41 +03:00
noobhjy 7bb15029cf Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (403 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2026-04-17 17:33:49 +02:00
green c328b858a4 Translated using Weblate (Japanese)
Currently translated at 99.9% (1957 of 1958 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-17 17:33:48 +02:00
noobhjy c2d5ba8e52 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 90.7% (1777 of 1958 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-17 17:33:47 +02:00
Hosted Weblate aa7615e72e Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-04-17 17:33:46 +02:00
Elian Doran e0c951e758 feat(attachments): display text attachments for file role 2026-04-17 18:31:42 +03:00
Elian Doran 9b1b0c5574 fix(import/enex): attachments were imported as files (closs #9473) 2026-04-17 18:15:52 +03:00
Elian Doran 1b4400db03 feat(split): use grouped buttons for view selectors 2026-04-17 12:20:36 +03:00
Elian Doran 9a3d160c34 chore(split): bring back lazy loading for editor 2026-04-17 12:10:56 +03:00
Elian Doran 8457c22be3 feat(split): smoother switching between view modes 2026-04-17 12:06:57 +03:00
Elian Doran fb5f89108f fix(split): source view not occupying the right width 2026-04-17 10:47:06 +03:00
Elian Doran b6144f3d09 chore(mermaid): add view changer 2026-04-17 10:45:54 +03:00
Elian Doran 5fe6611a91 refactor(markdown): handle source view at split editor level 2026-04-17 10:33:21 +03:00
Elian Doran 8760d683a3 feat(markdown): add a display mode switcher 2026-04-17 10:29:21 +03:00
renovate[bot] 07a22722ae chore(deps): update softprops/action-gh-release action to v3 2026-04-17 06:46:59 +00:00
Elian Doran 9565c398f8 chore(deps): update softprops/action-gh-release action to v2.6.2 (#9462) 2026-04-17 09:45:28 +03:00
Elian Doran d22b0079dc feat(markdown): add read-only toggle button 2026-04-17 08:24:43 +03:00
Elian Doran dee9959d5b feat(markdown): don't alter h1 and h2 2026-04-17 08:17:48 +03:00
Elian Doran 3f39e6f7f1 feat(client): mark spreadsheet and markdown as new note types 2026-04-17 08:15:23 +03:00
Elian Doran f03e527cb0 feat(markdown): integrate into note types 2026-04-17 08:14:02 +03:00
Elian Doran 66819cb73f fix(export/markdown): wrong extension (.mkd or .code) 2026-04-17 08:06:26 +03:00
Elian Doran 9f4c3ed35a feat(markdown): basic support hash-based wikilinks 2026-04-17 07:49:38 +03:00
Elian Doran e33446c219 feat(markdown): flickerless Markdown rendering even when changing it 2026-04-17 07:46:17 +03:00
Elian Doran daf5740610 feat(markdown): use a Mermaid cache to avoid flicker while editing something else 2026-04-17 07:41:30 +03:00
Elian Doran 9464e2aff5 feat(markdown): respect heading style 2026-04-17 07:39:06 +03:00
Elian Doran 5ef74d5639 fix(markdown): mermaid not rendering 2026-04-17 07:35:17 +03:00
Elian Doran 822e7ffbab feat(markdown): support full feature set (math, admonitions) 2026-04-17 07:32:08 +03:00
Elian Doran 11b0bec47d chore(markdown): improve max width of Mermaid diagrams 2026-04-17 07:15:39 +03:00
Elian Doran 0c051327cf feat(markdown): render with ReadOnlyText 2026-04-17 07:13:46 +03:00
Elian Doran e943891e2f chore(markdown): improve code margins when scrolling 2026-04-17 07:09:36 +03:00
Elian Doran 438442345e feat(codemirror): enable nested syntax highlighting for MD (closes #9150) 2026-04-17 07:05:01 +03:00
Elian Doran d2c51d5175 chore(deps): update dependency dotenv to v17.4.2 (#9459) 2026-04-17 07:02:15 +03:00
Elian Doran 12e07dbfcd feat(markdown): basic block highlighting in preview 2026-04-17 07:00:07 +03:00
Elian Doran dbe37730c3 chore(markdown): make preview selectable 2026-04-17 06:52:01 +03:00
Elian Doran 0dfbfaa61c refactor(markdown): get rid of DOM queries 2026-04-17 06:51:31 +03:00
Elian Doran f1d557645c fix(deps): update ai sdk (#9464) 2026-04-17 06:50:33 +03:00
Elian Doran 08e3a4aefc chore(deps): update dependency rollup-plugin-webpack-stats to v3.1.1 (#9460) 2026-04-17 06:50:19 +03:00
Elian Doran ff215bd228 chore(deps): update dependency sanitize-html to v2.17.3 [security] (#9458) 2026-04-17 06:50:00 +03:00
Elian Doran dc57d6131a refactor(markdown): clean up a bit the sync rendering 2026-04-17 06:46:04 +03:00
Elian Doran 3417f82e27 feat(markdown): basic block-based sync 2026-04-17 06:43:50 +03:00
Elian Doran 1ec270dba2 feat(markdown): basic percentage-based scroll 2026-04-17 06:38:12 +03:00
Elian Doran 6d2496599f feat(markdown): make preview scrollable 2026-04-17 06:35:45 +03:00
Elian Doran 18d69f94d2 feat(markdown): introduce some padding 2026-04-17 06:32:49 +03:00
Elian Doran b84e50065c feat(markdown): compact title 2026-04-17 06:29:27 +03:00
Elian Doran 81c266f69b fix(markdown): scroll padding affecting height 2026-04-17 06:25:47 +03:00
Elian Doran e9d8aa82f4 feat(markdown): basic note type integration 2026-04-17 06:20:59 +03:00
renovate[bot] da76d4c50e chore(deps): update dependency dotenv to v17.4.2 2026-04-17 03:08:59 +00:00
Elian Doran ec7f6a9325 chore(deps): update dependency wxt to v0.20.21 (#9461) 2026-04-17 06:05:32 +03:00
Elian Doran 28e33e3c58 chore(deps): update typescript-eslint monorepo to v8.58.2 (#9463) 2026-04-17 06:03:12 +03:00
Elian Doran c6ee5fabee chore(deps): update dependency happy-dom to v20.9.0 (#9465) 2026-04-17 06:02:23 +03:00
Elian Doran 1048ecb7c0 chore(deps): update dependency stylelint to v17.7.0 (#9466) 2026-04-17 06:01:54 +03:00
renovate[bot] b1af1510f4 fix(deps): update ai sdk 2026-04-17 03:01:17 +00:00
Elian Doran 944d0542b6 fix(deps): update dependency globals to v17.5.0 (#9468) 2026-04-17 06:01:12 +03:00
Elian Doran cee2338c1b fix(deps): update dependency diff to v9 (#9471) 2026-04-17 06:00:12 +03:00
Elian Doran 93db35518a fix(deps): update dependency better-sqlite3 to v12.9.0 (#9467) 2026-04-17 05:59:06 +03:00
renovate[bot] 63dcdc4e83 fix(deps): update dependency diff to v9 2026-04-17 00:15:19 +00:00
renovate[bot] 5a073398ed fix(deps): update dependency unpdf to v1.6.0 2026-04-17 00:14:36 +00:00
renovate[bot] 6166a8df43 fix(deps): update dependency globals to v17.5.0 2026-04-17 00:13:59 +00:00
renovate[bot] 57c3f2df17 fix(deps): update dependency better-sqlite3 to v12.9.0 2026-04-17 00:13:22 +00:00
renovate[bot] 244d0f5568 chore(deps): update dependency stylelint to v17.7.0 2026-04-17 00:12:43 +00:00
renovate[bot] eb426ca3a7 chore(deps): update dependency happy-dom to v20.9.0 2026-04-17 00:12:04 +00:00
renovate[bot] d17634aaa8 chore(deps): update typescript-eslint monorepo to v8.58.2 2026-04-17 00:10:44 +00:00
renovate[bot] 78efebaeea chore(deps): update softprops/action-gh-release action to v2.6.2 2026-04-17 00:10:01 +00:00
renovate[bot] 4357901c24 chore(deps): update dependency wxt to v0.20.21 2026-04-17 00:09:53 +00:00
renovate[bot] 8b8a955782 chore(deps): update dependency rollup-plugin-webpack-stats to v3.1.1 2026-04-17 00:09:11 +00:00
renovate[bot] 5153306a68 chore(deps): update dependency sanitize-html to v2.17.3 [security] 2026-04-16 21:12:03 +00:00
Elian Doran fc2d171fcf Translations update from Hosted Weblate (#9456) 2026-04-16 23:25:35 +03:00
green ab10a19932 Translated using Weblate (Japanese)
Currently translated at 99.9% (1956 of 1957 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-16 22:15:03 +02:00
Elian Doran 3f9b26d42c feat(nix): experiment with reusing deps when source code changes 2026-04-16 23:14:50 +03:00
Elian Doran bf9ee98406 docs(user): add license 2026-04-16 23:05:01 +03:00
Elian Doran 3dc93fde37 feat(desktop): disable cache in dev mode 2026-04-16 23:00:57 +03:00
Elian Doran 8ec6125ec4 fix(launch_bar): some context menus intercepted by browser 2026-04-16 23:00:41 +03:00
Elian Doran 999bfbc118 feat(launch_bar): add a context menu to every option to easily remove them 2026-04-16 22:52:02 +03:00
Elian Doran 889e44363a feat(client): make view source searchable 2026-04-16 22:26:56 +03:00
Elian Doran 53413be08c fex: UI overlap in attribute editing (#9453) 2026-04-16 21:49:53 +03:00
Adorian Doran 28b1eb71ba Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-04-16 21:08:39 +03:00
Adorian Doran 4bc1d93b75 style/about dialog: lower CSS selector specificity 2026-04-16 21:07:47 +03:00
Zaki Ur Rehman f64b029009 refactor: ensure only the changed lines are shown 2026-04-16 23:04:29 +05:00
Adorian Doran d65d7dba3f client/about dialog: refactor 2026-04-16 21:04:06 +03:00
Adorian Doran 12a83510ed style/about dialog: add a different background color for nightly builds 2026-04-16 20:59:05 +03:00
Zaki Ur Rehman b2f02962fc refactor: show only modified lines 2026-04-16 22:54:48 +05:00
Adorian Doran 262c89d252 style/about dialog: tweak the tooltip clues 2026-04-16 20:48:53 +03:00
Adorian Doran 7f75ab0638 client/about dialog: define the strings for a brief history 2026-04-16 20:47:30 +03:00
Elian Doran 30a82f3cfc Translations update from Hosted Weblate (#9455) 2026-04-16 18:45:40 +03:00
Hosted Weblate 011cce05af Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-16 17:27:19 +02:00
noobhjy 735712123c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 88.8% (1716 of 1932 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-16 17:27:17 +02:00
passkal4 603b232d1f Translated using Weblate (Uyghur)
Currently translated at 21.3% (86 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-16 17:27:16 +02:00
Elian Doran ce836bccc2 Translations update from Hosted Weblate (#9454) 2026-04-16 18:26:58 +03:00
Elian Doran d8db862c22 test(client,server): guard against duplicate JSON keys 2026-04-16 18:25:37 +03:00
Elian Doran d2836ef84c fix revisions dialog shows translation keys instead of values (#9447) 2026-04-16 18:22:46 +03:00
Hosted Weblate 09d1c85bd3 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-04-16 17:06:46 +02:00
Elian Doran e88cb60711 Translations update from Hosted Weblate (#9452) 2026-04-16 18:06:28 +03:00
Zaki Ur Rehman 6bc3176251 fix: resolve context menu state reset issue causing UI text overlap 2026-04-16 18:29:57 +05:00
Zaki Ur Rehman c888826192 fex: UI overlap in attribute editing 2026-04-16 18:06:14 +05:00
Aindriú Mac Giolla Eoin cd6f63a908 Translated using Weblate (Irish)
Currently translated at 99.9% (1931 of 1932 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-16 12:44:52 +02:00
Aindriú Mac Giolla Eoin c36264203f Translated using Weblate (Irish)
Currently translated at 100.0% (403 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ga/
2026-04-16 12:44:48 +02:00
Elian Doran 1044776218 Translations update from Hosted Weblate (#9448) 2026-04-16 08:57:16 +03:00
passkal4 093e671fb5 Translated using Weblate (Uyghur)
Currently translated at 52.1% (62 of 119 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ug/
2026-04-16 05:50:57 +00:00
passkal4 0e76f412ec Translated using Weblate (Uyghur)
Currently translated at 14.3% (58 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-16 05:50:56 +00:00
passkal4 1154a1f7bf Translated using Weblate (Uyghur)
Currently translated at 51.2% (61 of 119 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ug/
2026-04-16 05:50:55 +00:00
green 062d0863a1 Translated using Weblate (Japanese)
Currently translated at 99.9% (1931 of 1932 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-16 05:50:54 +00:00
passkal4 8b202b6760 Translated using Weblate (Uyghur)
Currently translated at 14.1% (57 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-16 05:50:53 +00:00
Ulices 2fc907e756 Translated using Weblate (Spanish)
Currently translated at 85.3% (1649 of 1932 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-16 05:50:52 +00:00
Hosted Weblate 5218373f3e Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-04-16 05:50:51 +00:00
Elian Doran 6221f17beb Update dependency ejs to v5.0.2 (#9427) 2026-04-16 08:50:43 +03:00
Elian Doran f96f64bd84 Update dependency typedoc to v0.28.19 (#9428) 2026-04-16 08:50:12 +03:00
Elian Doran 13cdba199a Update dependency reveal.js to v6.0.1 (#9430) 2026-04-16 08:49:43 +03:00
Elian Doran 4aa4d4880d Update univer monorepo to v0.20.1 (#9431) 2026-04-16 08:49:07 +03:00
Elian Doran 51f1559473 Update dependency @ai-sdk/google to v3.0.62 (#9429) 2026-04-16 08:47:47 +03:00
Elian Doran ff9f0ad676 Update dependency dompurify to v3.4.0 [SECURITY] (#9445) 2026-04-16 08:47:13 +03:00
contributor 7e3683b8c2 fix revisions dialog shows translation keys instead of values 2026-04-16 08:14:30 +03:00
renovate[bot] 0df186ef7d Update dependency dompurify to v3.4.0 [SECURITY] 2026-04-16 04:07:11 +00:00
renovate[bot] ff3b6c4011 Update univer monorepo to v0.20.1 2026-04-15 20:51:08 +00:00
renovate[bot] 0b5332fbb3 Update dependency typedoc to v0.28.19 2026-04-15 20:50:32 +00:00
renovate[bot] f285f7e14f Update dependency reveal.js to v6.0.1 2026-04-15 20:49:57 +00:00
renovate[bot] 794ad9410b Update dependency ejs to v5.0.2 2026-04-15 20:49:25 +00:00
renovate[bot] 60f3ddd354 Update dependency @ai-sdk/google to v3.0.62 2026-04-15 20:48:53 +00:00
Elian Doran 20235509ef Translations update from Hosted Weblate (#9432) 2026-04-15 23:43:47 +03:00
green 0ece1270c7 Translated using Weblate (Japanese)
Currently translated at 99.9% (1919 of 1920 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-15 22:38:49 +02:00
passkal4 a32eeb27e3 Translated using Weblate (Uyghur)
Currently translated at 87.9% (139 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ug/
2026-04-15 22:38:48 +02:00
Hosted Weblate e50ef8552b Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-15 22:38:48 +02:00
seb2020 c34df3a17a Translated using Weblate (French)
Currently translated at 88.8% (1671 of 1880 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2026-04-15 22:38:47 +02:00
passkal4 48e90396bd Translated using Weblate (Uyghur)
Currently translated at 8.4% (159 of 1880 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-15 22:38:46 +02:00
passkal4 d147bbe63d Translated using Weblate (Uyghur)
Currently translated at 1.4% (6 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ug/
2026-04-15 22:38:45 +02:00
passkal4 a82d9dad1b Translated using Weblate (Uyghur)
Currently translated at 6.7% (8 of 119 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ug/
2026-04-15 22:38:45 +02:00
passkal4 5ad0cb2b4b Translated using Weblate (Uyghur)
Currently translated at 3.1% (5 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ug/
2026-04-15 22:38:44 +02:00
passkal4 a0e9082364 Translated using Weblate (Uyghur)
Currently translated at 1.4% (28 of 1880 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ug/
2026-04-15 22:38:43 +02:00
passkal4 1442041cda Added translation using Weblate (Uyghur) 2026-04-15 22:38:43 +02:00
passkal4 4b9d253745 Added translation using Weblate (Uyghur) 2026-04-15 22:38:42 +02:00
passkal4 3c0d5b7614 Added translation using Weblate (Uyghur) 2026-04-15 22:38:42 +02:00
passkal4 f0293b7f07 Added translation using Weblate (Uyghur) 2026-04-15 22:38:41 +02:00
green 2bf2d977ad Translated using Weblate (Japanese)
Currently translated at 99.9% (1879 of 1880 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-15 22:38:41 +02:00
Marcel 7e1090c59d Translated using Weblate (German)
Currently translated at 100.0% (403 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-04-15 22:38:40 +02:00
Ulices a4c419de6f Translated using Weblate (Spanish)
Currently translated at 87.0% (1637 of 1880 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-04-15 22:38:39 +02:00
green 263479adee Translated using Weblate (Japanese)
Currently translated at 100.0% (403 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-15 22:38:39 +02:00
Artyom Rybakov c0c0cea376 Translated using Weblate (Russian)
Currently translated at 100.0% (403 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ru/
2026-04-15 22:38:38 +02:00
Artyom Rybakov 1bf36574e2 Translated using Weblate (Russian)
Currently translated at 91.8% (1726 of 1880 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2026-04-15 22:38:38 +02:00
Marcel 3ed6297011 Translated using Weblate (German)
Currently translated at 91.8% (1726 of 1880 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-04-15 22:38:37 +02:00
Ulices 3bd98d6a1b Translated using Weblate (Spanish)
Currently translated at 100.0% (403 of 403 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/es/
2026-04-15 22:38:36 +02:00
Elian Doran ecc872828c Feature/small improvements (#9440) 2026-04-15 23:38:27 +03:00
Elian Doran 9c5d6e0a19 Merge branch 'main' into feature/small_improvements 2026-04-15 22:47:05 +03:00
Elian Doran 98d718031b test(commons): fix failure in locale 2026-04-15 22:46:24 +03:00
Elian Doran 9bd78c5f83 feat(print): display detailed error on print failure 2026-04-15 22:45:23 +03:00
Elian Doran 598317ea6e chore: add reproduction sample for printing issue 2026-04-15 22:43:34 +03:00
Elian Doran 99878a1d48 fix(print): overlapping toasts on error 2026-04-15 22:40:09 +03:00
Elian Doran 264021360a fix(print): infinite re-rendering when changing an option 2026-04-15 22:04:35 +03:00
Elian Doran ae4dc53647 chore: address requested changes 2026-04-15 21:58:35 +03:00
Elian Doran 6dd51f66ab Merge branch 'main' into feature/small_improvements 2026-04-15 19:07:43 +03:00
Elian Doran 61262e899b chore(commons): fix typecheck 2026-04-15 19:06:24 +03:00
Elian Doran 0ebec2ce5d refactor(print): simplify and modularize 2026-04-15 18:51:20 +03:00
Elian Doran 6225f92a7d feat(print): add printer descriptions 2026-04-15 18:33:18 +03:00
Elian Doran 6c9ffe1d80 feat(print): use dropdown with icons for printers 2026-04-15 18:25:13 +03:00
Elian Doran 9116cbcba4 feat(code): adjust word wrap through note actions 2026-04-15 18:18:37 +03:00
Elian Doran d0e61e39d0 feat(print): selectable printer 2026-04-15 18:17:28 +03:00
Elian Doran c691a9c6e6 feat(code): adjustable word wrap at note level 2026-04-15 18:02:54 +03:00
Elian Doran 94e70c0318 feat(print): integrate with print preview and merge with export to PDF 2026-04-15 17:37:27 +03:00
Elian Doran edb2ec2a6f feat(code): normalize indentation 2026-04-15 17:34:30 +03:00
Elian Doran f68a481edc feat(print/pdf): disable selection in preview 2026-04-15 17:14:44 +03:00
Elian Doran 3a1f0b2be1 chore(code): fix inconsistency in status bar naming 2026-04-15 17:14:15 +03:00
Elian Doran bf5d6c4e01 feat(print/pdf): basic support for printing only a subset of pages 2026-04-15 10:26:25 +03:00
Elian Doran ba13f86f5f feat(print/pdf): improve error management 2026-04-15 10:10:28 +03:00
Elian Doran e7c30927f7 chore(print/pdf): bring back footers regardless of margin 2026-04-15 10:08:24 +03:00
Elian Doran 634b2b3a84 chore(print/pdf): bring back 2cm as the default margin 2026-04-15 09:59:47 +03:00
Elian Doran 83cb437133 fix(print/pdf): default / none / minimum margins appearing the same 2026-04-15 09:58:36 +03:00
Elian Doran 37e8514400 chore(print/pdf): align margin selector 2026-04-15 09:52:15 +03:00
Elian Doran 341a5310e1 feat(code): basic tabs vs spaces 2026-04-15 09:42:20 +03:00
Elian Doran 9e4a5c892e feat(print/pdf): basic support for margins 2026-04-15 09:41:45 +03:00
Elian Doran 307536b70f feat(code): separate reindentation from display width 2026-04-15 09:33:06 +03:00
Elian Doran f12d73a5c7 feat(code): reindent on changing tab width 2026-04-15 09:14:55 +03:00
Elian Doran b20e2459c3 refactor(code): simplify status bar widget 2026-04-15 09:06:47 +03:00
Elian Doran 692a31772d feat(code): status bar indentation selector 2026-04-15 09:01:23 +03:00
Elian Doran 6a05288be4 feat(code): adjustable tab width via attribute 2026-04-14 23:58:01 +03:00
Elian Doran fc82b9374e feat(print/pdf): debounce rendering when changing scale 2026-04-14 23:51:14 +03:00
Elian Doran 457bba9337 feat(print/pdf): basic support for scale 2026-04-14 23:48:12 +03:00
Elian Doran 249b08f1ce fix(options): code preview doesn't reflect tab width 2026-04-14 23:40:39 +03:00
Elian Doran 54a6e3d9a1 feat(code): adjustable default tab width 2026-04-14 23:33:32 +03:00
Elian Doran f7a36fc997 feat(print/pdf): adjustable page size 2026-04-14 23:31:05 +03:00
Elian Doran 1952b44141 chore(print/pdf): make use of attribute for adjusting orientation 2026-04-14 23:24:37 +03:00
Elian Doran cd84e6ba08 fix(text): tab width is reset when component is re-rendered 2026-04-14 23:10:57 +03:00
Elian Doran 454c18ff0e feat(print/pdf): use segmented buttons instead of toggle 2026-04-14 23:10:13 +03:00
Elian Doran 4d4e63998f feat(print/pdf): add toggle for landscape 2026-04-14 22:58:15 +03:00
Elian Doran 2db1e2d750 fix(server): HMR WS port interferes between server & desktop 2026-04-14 22:50:06 +03:00
Elian Doran cb03f3cec5 chore(text): tab width doesn't adjust when pressing the spinner 2026-04-14 22:33:29 +03:00
Elian Doran b2ec9a2f47 chore(text): make sure tab size constant is available regardless of theme 2026-04-14 22:30:53 +03:00
Elian Doran 71b3ee143f feat(print): basic PDF preview 2026-04-14 22:30:29 +03:00
Elian Doran 22eb2697d5 feat(text): adjustable tab width (closes #5701) 2026-04-14 22:25:20 +03:00
Elian Doran 59994a5877 feat(find): allow searching in view source 2026-04-14 22:21:29 +03:00
Elian Doran c35bc6fbd2 feat(options): add tab width selector 2026-04-14 22:15:13 +03:00
Elian Doran 2d6c2b2cd0 test(server): validate tesseract language codes 2026-04-14 21:59:01 +03:00
Elian Doran 6b6573bf02 feat(i18n: set up Uyghur as content language 2026-04-14 21:54:33 +03:00
Elian Doran 278da994ce fix(server): wrong DB version (closes #9418) 2026-04-14 21:43:38 +03:00
Elian Doran ab00772559 chore(deps): update pnpm/action-setup action to v6 (#9417) 2026-04-14 17:30:47 +03:00
Elian Doran 49e432fb66 fix(deps): update ai sdk (#9416) 2026-04-14 08:32:21 +03:00
renovate[bot] 6f73ea5847 fix(deps): update ai sdk 2026-04-14 04:57:36 +00:00
renovate[bot] 743db3a9cd chore(deps): update pnpm/action-setup action to v6 2026-04-14 00:38:33 +00:00
Elian Doran b899a0b5f8 fix(link): file URLs not working with Unicode characters on Windows (closes #8973) 2026-04-13 21:06:59 +03:00
Elian Doran c6ea68c012 feat(link): add an error when link couldn't be opened 2026-04-13 21:06:59 +03:00
Elian Doran 9fc750533c fix(mermaid): nbsp entity causing issues (closes #9413) 2026-04-13 21:06:58 +03:00
Elian Doran 7d52c62155 Translations update from Hosted Weblate (#9414) 2026-04-13 20:00:27 +03:00
Hosted Weblate 27801a859a Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-13 16:27:14 +00:00
Giovi 25a28abb2d Translated using Weblate (Italian)
Currently translated at 100.0% (402 of 402 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2026-04-13 16:27:08 +00:00
noobhjy 591a9a6963 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.3% (1819 of 1869 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-13 16:27:07 +00:00
Giovi f2815de17e Translated using Weblate (Italian)
Currently translated at 99.9% (1868 of 1869 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-13 16:27:07 +00:00
Elian Doran b61b5100f0 Settings improvements (#9412) 2026-04-13 19:26:53 +03:00
Elian Doran 51f06f064e e2e(options): fix changes to options 2026-04-13 19:17:38 +03:00
Elian Doran 27ed4165dc chore(options): address requested changes 2026-04-13 19:13:10 +03:00
Elian Doran 24167c0691 e2e(options): fix i18n change 2026-04-13 19:12:10 +03:00
Elian Doran 203c725e0c i18n(server): password not correct 2026-04-13 18:21:41 +03:00
Elian Doran 9326751923 feat(options/password): use modals for changing the password 2026-04-13 18:18:04 +03:00
Elian Doran 9ba1eeaf20 feat(options/password): use options row for protected session timeout 2026-04-13 18:14:39 +03:00
Elian Doran ae676f38d3 fix(options): automatic read-only size confused with OTP by KeepassXC
See https://github.com/keepassxreboot/keepassxc-browser/issues/2282
2026-04-13 18:12:22 +03:00
Elian Doran 1765917393 refactor(options): remove workaround for title sections 2026-04-13 18:10:33 +03:00
Elian Doran 02336f4e53 feat(options/other): improve predefined search engines 2026-04-13 18:02:25 +03:00
Elian Doran 3ce508c5ee feat(options/other): improve descriptions 2026-04-13 17:52:54 +03:00
Elian Doran 266f542028 feat(options/other): improve desktop-specific options 2026-04-13 17:50:37 +03:00
Elian Doran 0f605ba994 feat(options/appearance): improve desktop-specific options 2026-04-13 17:45:23 +03:00
Elian Doran d4333400c4 refactor(options/appearance): use simpler mechanism for theme note icon 2026-04-13 17:39:57 +03:00
Elian Doran 7180569357 feat(options/appearance): display icon for custom themes 2026-04-13 17:37:39 +03:00
Elian Doran b88eaaeeec feat(options/appearance): group and add icons to theme selector 2026-04-13 17:34:49 +03:00
Elian Doran b9e8cd5697 chore(options/appearance): integrate application theme into first section 2026-04-13 17:29:32 +03:00
Elian Doran 92d011503d feat(options/appearance): improve content width section 2026-04-13 17:26:37 +03:00
Elian Doran a62a7e351e feat(options/appearance): use toggles everywhere 2026-04-13 17:23:25 +03:00
Elian Doran 19e07bc6fd chore(options/appearance): improve font description slightly 2026-04-13 17:21:57 +03:00
Elian Doran f9b0a88a4e fix(options/appearance): theme defined not previewed correctly 2026-04-13 17:19:40 +03:00
Elian Doran 00b85bb7bd feat(options/appearance): improve font buttons 2026-04-13 17:18:20 +03:00
Elian Doran 17fb3f576d chore(options/appearance): improve font buttons 2026-04-13 17:09:41 +03:00
Elian Doran 49878d64aa chore(options/appearance): integrate font description properly 2026-04-13 17:07:03 +03:00
Elian Doran 368dd1adc4 fix(options/appearance): font modal styles are affected 2026-04-13 17:05:18 +03:00
Elian Doran 2e8f6a495b feat(options/appearance): use modal for font selection 2026-04-13 17:01:46 +03:00
Elian Doran 2a23b8a868 feat(options/appearance): add font preview in dropdown 2026-04-13 16:56:43 +03:00
Elian Doran 8e56585575 feat(options/appearance): improve font selection further 2026-04-13 16:53:45 +03:00
Elian Doran 80f40a439c feat(options/appearance): improve font selection 2026-04-13 16:45:01 +03:00
Elian Doran 9d49324557 feat(options/text): improve formatting toolbar 2026-04-13 16:41:33 +03:00
Elian Doran 85ebe59a3b feat(options/appearance): merge layout style with orientation 2026-04-13 16:38:25 +03:00
Elian Doran 692d33bedf feat(options/appearance): add illustration for vertical/horizontal layout 2026-04-13 16:36:51 +03:00
Elian Doran cd0763e807 feat(options/text): add visual representation for layout 2026-04-13 16:32:37 +03:00
Elian Doran 93920bdfb4 feat(options/text): add for heading style & formatting toolbar 2026-04-13 16:31:43 +03:00
Elian Doran 09fdcb3839 chore(options/text): merge multiple options into single section 2026-04-13 16:27:48 +03:00
Elian Doran 6ff7219300 chore(options/text): use options row for code blocks 2026-04-13 16:22:06 +03:00
Elian Doran 7e246f599d chore(options/text): use options row for features 2026-04-13 16:20:36 +03:00
Elian Doran f422155dee chore(options/code): use options row for apperance 2026-04-13 16:18:40 +03:00
Elian Doran 05d4d3a1a2 chore(options/code): merge sections 2026-04-13 16:15:54 +03:00
Elian Doran d716fec524 chore(options/backup): use action button for download 2026-04-13 16:11:02 +03:00
Elian Doran 66347e4bad chore(options/backup): merge the sections together 2026-04-13 16:09:48 +03:00
Elian Doran e740e729c3 chore(options/sync): get rid of save button 2026-04-13 16:03:21 +03:00
Elian Doran 4baa22a01a chore(options/sync): floating help button 2026-04-13 16:00:37 +03:00
Elian Doran 7c1f509eca chore(options/sync): merge sections and use options row 2026-04-13 15:56:41 +03:00
Elian Doran 0ead37fd5c chore(options/other): use toggles 2026-04-13 15:48:59 +03:00
Elian Doran a33de6454f chore(options/other): improve section titles 2026-04-13 15:26:13 +03:00
Elian Doran 4a9e7c843e chore(options/other): merge note revisions 2026-04-13 15:22:52 +03:00
Elian Doran 1f6c88dcc1 chore(options/other): use options row for inputs with unit 2026-04-13 15:21:03 +03:00
Elian Doran 43d9d726f8 chore(options/i18n): simplify first week of the year 2026-04-13 15:15:21 +03:00
Elian Doran c5667d9141 chore(options/advanced): move sync at the bottom 2026-04-13 15:11:42 +03:00
Elian Doran 7455d235d1 chore(options/advanced): use options row for database anonymization 2026-04-13 15:11:10 +03:00
Elian Doran 3dc0d25c4d chore(options/advanced): merge database-related options 2026-04-13 15:01:51 +03:00
Elian Doran c352d46a5b chore(options/advanced): use options row for database integrity check 2026-04-13 14:59:31 +03:00
Elian Doran c262187496 chore(options/advanced): use options row for sync 2026-04-13 14:56:45 +03:00
Elian Doran 0c5a8a24da refactor(options): create OptionsRowWithToggle 2026-04-13 14:40:46 +03:00
Elian Doran e5a9622720 fix(note_actions): copy reference to clipboard button not working (closes #9406) 2026-04-13 14:21:24 +03:00
Elian Doran ad864cfe48 feat(search): try to improve search performance through some creative mechanisms... (#9034) 2026-04-13 14:17:24 +03:00
Elian Doran f58dd12983 chore(search): use loop to prevent nested strip tags injection 2026-04-13 14:03:17 +03:00
Elian Doran e40504b7f0 chore(search): address requested changes 2026-04-13 13:43:25 +03:00
Elian Doran 301f23cd2d test(server): clean up search scripts 2026-04-13 13:38:06 +03:00
Elian Doran 885e94cf58 test(server): migrate database 2026-04-13 13:30:53 +03:00
Elian Doran 6763f4f403 chore(becca): add log for cache memory consumption 2026-04-13 13:29:58 +03:00
Elian Doran ead70ad394 fix(autocomplete): fuzzy search not working if the search one was not enabled 2026-04-13 13:20:42 +03:00
Elian Doran 597c6eb15b chore(options): improve descriptions for search 2026-04-13 13:14:45 +03:00
Elian Doran 47ce77e04c refactor(search): simplify branching for autocomplete 2026-04-13 13:05:54 +03:00
Elian Doran 6e90a4168e feat(autocomplete): toggle for fuzzy matching (closes #8360) 2026-04-13 13:03:29 +03:00
Elian Doran 9b2be57365 docs: remove search analysis 2026-04-13 12:56:50 +03:00
Elian Doran 5ba7803ea9 Merge branch 'main' into feat/search-perf-take1
Resolved conflicts:
- search_result.ts: Keep optimized index-based token iteration
- search.ts: Merge OCR text representation support with perf optimizations

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-13 12:45:24 +03:00
Elian Doran 88743f158b chore(deps): update dependency vite to v8.0.8 (#9398) 2026-04-13 10:25:30 +03:00
Elian Doran f360b1fb55 fix(etapi): correct calendar year/month endpoint descriptions and year pattern; docs: add trilium-fastmcp integration (#9383) 2026-04-13 09:59:45 +03:00
Elian Doran dda9e51a37 Translations update from Hosted Weblate (#9404) 2026-04-13 09:58:37 +03:00
Elian Doran ef9002dede Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-13 09:58:13 +03:00
renovate[bot] 37df2dd9b2 chore(deps): update dependency vite to v8.0.8 2026-04-13 06:57:10 +00:00
green 7ec5945517 Translated using Weblate (Japanese)
Currently translated at 100.0% (402 of 402 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-13 06:56:53 +00:00
Aindriú Mac Giolla Eoin 0150b5b61e Translated using Weblate (Irish)
Currently translated at 99.9% (1863 of 1864 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-13 06:56:53 +00:00
green d41d727950 Translated using Weblate (Japanese)
Currently translated at 99.9% (1863 of 1864 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-13 06:56:52 +00:00
Aindriú Mac Giolla Eoin 224c31d16b Translated using Weblate (Irish)
Currently translated at 100.0% (402 of 402 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ga/
2026-04-13 06:56:51 +00:00
noobhjy b67bd01858 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.5% (1818 of 1864 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-13 06:56:51 +00:00
Elian Doran 5459ec33df fix(deps): update ai sdk (#9400) 2026-04-13 09:56:43 +03:00
Elian Doran 59999e5adc chore(deps): update vitest monorepo to v4.1.4 (#9399) 2026-04-13 09:54:16 +03:00
Elian Doran fc009923e5 chore(deps): update ckeditor5 config packages to v14.1.0 (#9401) 2026-04-13 09:53:27 +03:00
Elian Doran 9303f54026 chore(deps): update actions/github-script action to v9 (#9402) 2026-04-13 09:52:32 +03:00
renovate[bot] 7e30b8c029 chore(deps): update actions/github-script action to v9 2026-04-13 01:37:35 +00:00
renovate[bot] c1596d2a25 chore(deps): update ckeditor5 config packages to v14.1.0 2026-04-13 01:37:28 +00:00
renovate[bot] 2411d7bc76 fix(deps): update ai sdk 2026-04-13 01:36:47 +00:00
renovate[bot] a44ff4c78b chore(deps): update vitest monorepo to v4.1.4 2026-04-13 01:36:07 +00:00
Elian Doran f9aaccdfe2 chore(docker): set up tooling for building better-sqlite3 from scratch 2026-04-13 01:06:34 +03:00
Elian Doran 4c02d70dae fix(toc): not rendering math the first time 2026-04-13 00:08:40 +03:00
Adorian Doran e6db4a51d1 client/about dialog: update the version format 2026-04-12 21:13:00 +03:00
Adorian Doran d3c927ed88 style/about dialog: exclude the brackets from the contributor role tooltip cue 2026-04-12 20:59:29 +03:00
Adorian Doran 3a8f0e0fcd Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-04-12 18:52:49 +03:00
Elian Doran 9a427f4b9f chore(client): dev server not working due to prefresh bug
See https://github.com/preactjs/prefresh/issues/610
2026-04-12 17:32:03 +03:00
Adorian Doran 3720851ff7 Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-04-12 17:15:40 +03:00
Elian Doran 6a83356cf7 chore(deps): update dependency @lezer/common to v1.5.2 (#9386) 2026-04-12 13:13:51 +03:00
Elian Doran 233c41acc0 fix(deps): update dependency i18next to v26.0.4 (#9388) 2026-04-12 13:13:12 +03:00
Elian Doran 3b0451da9e fix(deps): update dependency ai to v6.0.154 (#9387) 2026-04-12 13:11:26 +03:00
Elian Doran e217a3146f chore(deps): update dependency @redocly/cli to v2.26.0 (#9389) 2026-04-12 13:10:41 +03:00
Elian Doran 97c42ef1cb fix(deps): update dependency @zumer/snapdom to v2.8.0 (#9391) 2026-04-12 13:09:06 +03:00
Elian Doran b12a524de8 chore(deps): update dependency electron to v41.2.0 (#9390) 2026-04-12 11:56:45 +03:00
Elian Doran ee37fee2c0 Revert "Update dependency minimatch@3>brace-expansion to v5" (#9393) 2026-04-12 11:35:35 +03:00
Elian Doran ef5d9f980e Merge branch 'main' into revert-9307-renovate/minimatch3-brace-expansion-5.x 2026-04-12 11:35:27 +03:00
Elian Doran fadbc906e2 chore(deps): update dependency @prefresh/vite to v3 (#9392) 2026-04-12 09:39:14 +03:00
Elian Doran ba816fc132 Revert "Update dependency minimatch@3>brace-expansion to v5" 2026-04-12 09:37:53 +03:00
renovate[bot] 5ea615da1e chore(deps): update dependency @prefresh/vite to v3 2026-04-12 00:47:10 +00:00
renovate[bot] ceb955b72b fix(deps): update dependency @zumer/snapdom to v2.8.0 2026-04-12 00:46:12 +00:00
renovate[bot] 43823bcb37 chore(deps): update dependency electron to v41.2.0 2026-04-12 00:45:14 +00:00
renovate[bot] 7984ada306 chore(deps): update dependency @redocly/cli to v2.26.0 2026-04-12 00:44:11 +00:00
renovate[bot] d3e0c8d894 fix(deps): update dependency i18next to v26.0.4 2026-04-12 00:43:10 +00:00
renovate[bot] cee1be11ab fix(deps): update dependency ai to v6.0.154 2026-04-12 00:42:06 +00:00
renovate[bot] 230b3207a5 chore(deps): update dependency @lezer/common to v1.5.2 2026-04-12 00:41:03 +00:00
Elias Soares 62ff35c080 Merge remote-tracking branch 'origin/fix/etapi-calendar-descriptions-and-mcp-docs' into fix/etapi-calendar-descriptions-and-mcp-docs 2026-04-11 20:41:35 -03:00
Elias Soares e2043c14f2 improv: applying Gemini's suggestions 2026-04-11 20:41:08 -03:00
Elian Doran a7f9032347 feat(llm): add note mutation tools (rename, delete, move, clone) (#9339) 2026-04-12 01:32:14 +03:00
Elian Doran f137868f92 feat(llm): add stop generation button (#9341) 2026-04-12 00:48:55 +03:00
Elian Doran 175e200d88 fix(llm): stopping a tool call leaves an infinite spinner 2026-04-12 00:48:01 +03:00
Elian Doran 74f951023b Merge remote-tracking branch 'origin/main' into feat/llm-stop-generation 2026-04-12 00:37:27 +03:00
Elian Doran 3e697338e1 Translations update from Hosted Weblate (#9381) 2026-04-11 22:18:18 +03:00
Elias Soares bae77017a9 Merge branch 'main' into fix/etapi-calendar-descriptions-and-mcp-docs 2026-04-11 14:28:57 -03:00
Elias Soares 32a2834bf3 fix(etapi): correct calendar year/month endpoint descriptions and year pattern; docs: add trilium-fastmcp integration 2026-04-11 14:25:49 -03:00
Hosted Weblate 4bffc1c156 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-11 16:38:08 +00:00
green ac4c5f7d8c Translated using Weblate (Japanese)
Currently translated at 99.9% (1851 of 1852 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-11 16:38:04 +00:00
AggelosPnS 8f41e55b3c Translated using Weblate (Greek)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/el/
2026-04-11 16:38:02 +00:00
AggelosPnS ad8aab7b15 Translated using Weblate (Greek)
Currently translated at 96.2% (152 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/el/
2026-04-11 16:38:00 +00:00
AggelosPnS 7e779669ea Translated using Weblate (Greek)
Currently translated at 2.6% (49 of 1852 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/el/
2026-04-11 16:37:58 +00:00
green 5b01791021 Translated using Weblate (Japanese)
Currently translated at 100.0% (401 of 401 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-11 16:37:55 +00:00
Elian Doran 14bb068626 fix(tree): deleting ancestor of the current note doesn't correctly navigate 2026-04-11 19:36:50 +03:00
Elian Doran 1c93636538 fix(tree): navigating to parent note when deleting a non-active note (closes #9380) 2026-04-11 19:31:44 +03:00
Elian Doran b402a7a32b Easy fixes v2 (#9377) 2026-04-11 19:19:57 +03:00
Elian Doran 3a7167a65d chore: address requested changes 2026-04-11 19:19:32 +03:00
Elian Doran 6dd7e9cb38 chore(delete): address requested changes 2026-04-11 14:30:44 +03:00
Elian Doran 4ffa016045 fix(sidebar): highlights with math split in read-only text 2026-04-11 14:28:58 +03:00
Elian Doran 2d6f1ee9b7 fix(sidebar): editable mode equations sometimes not rendering 2026-04-11 14:26:22 +03:00
Elian Doran a1f0615afe chore: fix typecheck 2026-04-11 14:25:01 +03:00
Elian Doran 03ff9c4b27 fix(sidebar): highlights not rendering math in read-only text 2026-04-11 14:23:07 +03:00
Elian Doran 67a48bbec7 fix(sidebar): duplicate equations rendering 2026-04-11 14:14:18 +03:00
Elian Doran 2b63af82ec fix(sidebar): equations not rendered for read-only text 2026-04-11 13:53:10 +03:00
Elian Doran c5ee7083d8 chore(sidebar): deduplicate math rendering 2026-04-11 13:49:13 +03:00
Elian Doran 0696f7724d chore(react): add an option to make options row stacked 2026-04-11 13:43:10 +03:00
Elian Doran b7231e3464 feat(delete): improve translations 2026-04-11 13:35:27 +03:00
Elian Doran 214c6c93fd feat(similarity): filter out hidden notes (closes #4584) 2026-04-11 13:34:04 +03:00
Elian Doran 7037ae4ba8 feat(delete): hide removal of clones completely if no clones are affected 2026-04-11 13:24:09 +03:00
Elian Doran 46d6d6fdee feat(include_note): remember value of box size (closes #1623) 2026-04-11 13:23:13 +03:00
Elian Doran ae751bfb91 feat(delete): improve layout of the note path 2026-04-11 13:20:28 +03:00
Elian Doran bd0117c52f feat(delete): borderless table 2026-04-11 13:10:38 +03:00
Elian Doran 1402695dbe feat(delete): improve table for broken relations 2026-04-11 13:01:18 +03:00
Elian Doran 72c42afb50 feat(delete): use proper note links and show icons 2026-04-11 12:53:36 +03:00
Elian Doran 2752e0998e feat(delete): render broken relations as a table 2026-04-11 12:50:34 +03:00
Elian Doran 52114e08ba chore(delete): remove redundant list of clones 2026-04-11 12:44:28 +03:00
Elian Doran a98721c016 fix(ckeditor/include_note): changing expandability doesn't refresh 2026-04-11 12:43:34 +03:00
Elian Doran c3ab2d09d5 feat(ckeditor/include_note): add a new size for expandable items (closes #4134) 2026-04-11 12:43:17 +03:00
Elian Doran 9ef7802651 chore(delete): remove self-descriptive title 2026-04-11 12:35:27 +03:00
Elian Doran a913d33a9e chore(ckeditor/include_note): remove debug logs 2026-04-11 12:35:01 +03:00
Elian Doran 49dc7135a7 feat(delete): different behavior when only deleted clones 2026-04-11 12:34:34 +03:00
Elian Doran 7e77560d70 fix(ckeditor/include_note): undo not working after select mechanism 2026-04-11 12:23:22 +03:00
Elian Doran 35cb110151 chore(delete): add missing translations 2026-04-11 12:20:06 +03:00
Elian Doran 4e49c2458d refactor(delete): deduplicate form toggle 2026-04-11 12:19:47 +03:00
Elian Doran 755e5fc416 feat(delete): improve dialog slightly by using cards and options rows 2026-04-11 12:17:25 +03:00
Elian Doran 5d4fd0269f refactor(ckeditor/include_note): use different method for intercepting selection 2026-04-11 12:13:24 +03:00
Elian Doran 461abf768c feat(ckeditor/include_note): add a way to change size after creation (closes #3705) 2026-04-11 12:07:16 +03:00
Elian Doran 602bebe498 feat(server): improve note path display to use chevrons instead of slashes to separate notes (closes #762) 2026-04-11 11:43:57 +03:00
Elian Doran 6c31b35f08 refactor(delete): reuse components for delete note list 2026-04-11 11:42:14 +03:00
Elian Doran ccf95ad885 feat(delete): clarify "Delete also all clones" based on actual number of clones (closes #2362) 2026-04-11 11:39:05 +03:00
Elian Doran fb33921308 feat(script): add warning if trying to render an unavailable protected server-side note (closes #21) 2026-04-11 11:17:58 +03:00
Elian Doran 1121ee0133 feat(script): add warning if trying to render a protected note without the session active 2026-04-11 11:15:31 +03:00
Elian Doran 77af4bd288 feat(link): allow bookends: and highlights: protocols (closes #2817) 2026-04-11 11:11:43 +03:00
Elian Doran a1a2119e37 fix(server): indentation in HTML not preserved (closes #3151) 2026-04-11 11:07:59 +03:00
Elian Doran afd2806a67 feat(script): increase warning toast time 2026-04-11 11:02:56 +03:00
Elian Doran 3410f0f5bc feat(script): warn if user is trying to run the script in a wrong environment (closes #342) 2026-04-11 11:01:04 +03:00
Elian Doran 4ed2226206 fix(script): logging api.startNote not working (closes #3751) 2026-04-11 10:57:05 +03:00
Elian Doran b8d7277d88 feat(server): remove old keyboard shortcuts from options (closes #4543) 2026-04-11 10:48:09 +03:00
Elian Doran 1becc18354 fix(ckeditor5): internal link enabled in code block (closes #1712) 2026-04-11 10:41:24 +03:00
Elian Doran 9366d351e0 chore(edit-demo): ensure proper tree expansion state 2026-04-11 10:32:27 +03:00
Elian Doran e27f5cd419 docs(demo): statistics not rendering (closes #4178) 2026-04-11 10:27:49 +03:00
Elian Doran b7c1116738 chore(deps): update vitest monorepo to v4.1.3 (#9374) 2026-04-11 10:03:26 +03:00
renovate[bot] a6a3d743f7 chore(deps): update vitest monorepo to v4.1.3 2026-04-11 06:39:38 +00:00
Elian Doran dd3f3e9e5c fix(deps): update ai sdk (#9375) 2026-04-11 09:34:36 +03:00
Elian Doran ad2732b249 chore(deps): update typescript-eslint monorepo to v8.58.1 (#9373) 2026-04-11 09:33:57 +03:00
Elian Doran 10c04bdda0 Translations update from Hosted Weblate (#9371) 2026-04-11 09:00:34 +03:00
noobhjy 26d88afeb7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (401 of 401 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2026-04-11 07:59:57 +02:00
noobhjy 376d19563d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.4% (1823 of 1852 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-11 07:59:57 +02:00
Francis C. d2895f0f42 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.9% (1851 of 1852 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-04-11 07:59:56 +02:00
Francis C. 30310ef2ba Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (401 of 401 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2026-04-11 07:59:56 +02:00
Hosted Weblate 924a9747f1 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-11 07:59:55 +02:00
Elian Doran f8ed48d2d2 fix(deps): update dependency marked to v18 (#9376) 2026-04-11 08:59:47 +03:00
renovate[bot] 9cdb2a73e3 chore(deps): update typescript-eslint monorepo to v8.58.1 2026-04-11 05:58:20 +00:00
Elian Doran ad3258b88e chore(deps): update dependency vite to v8.0.7 (#9372) 2026-04-11 08:52:36 +03:00
renovate[bot] 4461ab080a fix(deps): update ai sdk 2026-04-11 05:44:10 +00:00
renovate[bot] 9b07f156b2 fix(deps): update dependency marked to v18 2026-04-11 01:54:33 +00:00
renovate[bot] 94c7967800 chore(deps): update dependency vite to v8.0.7 2026-04-11 01:50:19 +00:00
Elian Doran a5b248e663 feat(ckeditor): match style for admonitions in floating toolbar 2026-04-11 00:50:20 +03:00
Elian Doran 1ec43722e8 fix(ckeditor): admonitions overshadowing floating toolbar 2026-04-11 00:47:51 +03:00
Elian Doran 88c548cc70 feat(ckeditor): add a toolbar to switch admonition types 2026-04-11 00:47:36 +03:00
Elian Doran daafe251da feat(text): click to copy inline code in read-only text 2026-04-11 00:40:41 +03:00
Elian Doran 147ecbccda feat(ckeditor): add copy button for inline code 2026-04-11 00:36:43 +03:00
Elian Doran be5d2d07bc Easy fixes v1 (#9370) 2026-04-11 00:29:15 +03:00
Elian Doran adbe8f6c42 feat(options/sync): improve timeout layout 2026-04-11 00:16:41 +03:00
Elian Doran 18aec84be5 chore(client): address requested changes 2026-04-11 00:16:20 +03:00
Elian Doran 5f68958aa7 chore(client): address requested changes 2026-04-10 23:54:27 +03:00
Elian Doran 4787f644a6 feat(options): friendlier zoom factor selection (closes #5444) 2026-04-10 23:38:29 +03:00
Elian Doran 524f8df866 feat(search): add an option to open all results (closes #5376) 2026-04-10 23:36:29 +03:00
Elian Doran bb381c1349 refactor(highlights): remove unnecessary logic in old layout (closes #5375) 2026-04-10 23:21:00 +03:00
Elian Doran 36c31dac14 refactor(client): remove unused translation 2026-04-10 23:20:35 +03:00
Elian Doran 01b6926054 test(server): sync options with various scenarios 2026-04-10 23:20:24 +03:00
Elian Doran 84cfa0a9f7 fix(server): overriding sync_options affected by the timeScale 2026-04-10 23:17:47 +03:00
Elian Doran cb83c51632 chore(ai): update system prompt regarding tests 2026-04-10 23:17:09 +03:00
Elian Doran 97256ba291 feat(options): add nicer sync timeout selector (closes #5513) 2026-04-10 23:12:07 +03:00
Elian Doran d3c596aaa0 feat(highlights): render highlighted equations in new layout 2026-04-10 23:03:30 +03:00
Elian Doran 3d2fa57873 fix(toc): equations sometimes duplicated 2026-04-10 23:01:07 +03:00
Elian Doran c435050018 refactor(client): deduplicate checks for title/icon editability 2026-04-10 22:36:13 +03:00
Elian Doran 14f761de36 fix(options): icons can be modified 2026-04-10 22:35:06 +03:00
Elian Doran 626438d8f5 fix(options): titles can be modified (closes #5371) 2026-04-10 22:33:39 +03:00
Elian Doran e29555a89b fix(collections/calendar): displaying deep children (closes #7944) 2026-04-10 22:17:55 +03:00
Elian Doran 05da2d7a50 fix(collections/table): unable to set number cell to zero (closes #6555) 2026-04-10 22:11:10 +03:00
Elian Doran 1124533557 fix(edit-docs): wrong starting note 2026-04-10 22:01:41 +03:00
Elian Doran 878603c7b0 fix(jump_to_note): caret at the end when entering command mode (closes #7942) 2026-04-10 21:17:38 +03:00
Elian Doran 19583cd84a fix(edit-demo): cloned notes lost due to async issue 2026-04-10 21:14:39 +03:00
Elian Doran 9f26d6efdc feat(text): render note icons in autocompletion (closes #8188) 2026-04-10 21:11:49 +03:00
Elian Doran 043e620231 fix(setup): trailing slash affects sync (closes #8045) 2026-04-10 21:09:29 +03:00
Elian Doran d3dbdd4ceb docs(scripting): typos in "Trilium Demo" note (closes #8230) 2026-04-10 21:02:05 +03:00
Elian Doran 0859165072 docs(scripting): missing step in word count widget (closes #8561) 2026-04-10 20:54:13 +03:00
Elian Doran ca7ab6105d chore(ai): keep system prompts in sync 2026-04-10 20:48:15 +03:00
Elian Doran 3af2b32783 fix(react): workaround for bootstrap tooltip error (closes #8900) 2026-04-10 20:43:41 +03:00
Elian Doran 8d5df7e888 chore(ai): update system prompt for reusing components and using translations 2026-04-10 20:42:33 +03:00
Elian Doran 126ee27505 feat(search): some error messages were not translated (closes #8850) 2026-04-10 20:38:13 +03:00
Elian Doran fc2d8452b5 feat(search): clarify error message for full-text search after expressions 2026-04-10 20:31:23 +03:00
Elian Doran 1b8c234f30 feat(search): clarify error message for use of unquoted note 2026-04-10 20:28:37 +03:00
Elian Doran 540b607459 fix(note_map): freezing the app if there are too many notes (closes #8916) 2026-04-10 20:13:00 +03:00
Elian Doran ee229bd0d7 fix(client): note title doesn't get selected anymore when creating new note (closes #8407) 2026-04-10 20:04:23 +03:00
Elian Doran 439d39d8fa Editing quirks (#9362) 2026-04-10 13:42:03 +03:00
Elian Doran 8c379d03a9 Update apps/client/src/widgets/collections/calendar/index.tsx
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-10 13:41:25 +03:00
Elian Doran ff31104b99 fix(collections/calendar): unnecessary start date set when editing a note in quick edit 2026-04-10 13:31:44 +03:00
Elian Doran dfe6063929 fix(client): spaced update saving more times than necesssary and causing performance issues 2026-04-10 12:00:08 +03:00
Elian Doran a4b716f8c7 fix(board): clicking on a URL would open th quick edit panel 2026-04-10 11:38:42 +03:00
Elian Doran 7efc36efef fix(collections): not reacting to changes in reordering 2026-04-10 11:35:32 +03:00
Elian Doran 1554c9907e fix(server): not starting due to dependency update 2026-04-10 11:34:46 +03:00
Elian Doran df46ddcf60 chore(deps): update pnpm lock 2026-04-10 11:28:18 +03:00
Elian Doran 6fb19d0287 feat: add download button for backups (#9190) 2026-04-10 11:00:04 +03:00
Elian Doran d702f69415 Update dependency minimatch@3>brace-expansion to v5 (#9307) 2026-04-10 10:41:05 +03:00
Elian Doran eb81e830a1 Update dependency eslint-linter-browserify to v10.2.0 (#9334) 2026-04-10 10:38:45 +03:00
Elian Doran a24b9d7a38 fix(web-clipper): Remove trailing / from triliumServerUrl (#9344) 2026-04-10 10:37:14 +03:00
Elian Doran efeaa1e895 chore(deps): audit fix 2026-04-10 10:29:50 +03:00
Elian Doran a239eba6ce chore(llm): update backend script to be aware of the changes 2026-04-10 10:24:44 +03:00
Elian Doran d009582252 feat(script): mark cheerio as deprecated and provide alternative 2026-04-10 10:22:15 +03:00
Elian Doran fe710823c1 docs(user): add breaking change documentation for axios 2026-04-10 10:15:24 +03:00
Elian Doran bfe593ae52 feat(server): remove axios 2026-04-10 09:59:51 +03:00
Elian Doran f653a22557 chore(deps): remove upath 2026-04-10 09:51:49 +03:00
Elian Doran 96e7f22520 Update ai sdk (#9357) 2026-04-10 09:49:30 +03:00
Elian Doran e6d3d22db7 Update dependency fuse.js to v7.3.0 (#9335) 2026-04-10 09:46:01 +03:00
Elian Doran 1258dedab3 Update dependency marked to v17.0.6 (#9348) 2026-04-10 08:18:26 +03:00
Elian Doran ec15c7e63e Update dependency eslint-plugin-simple-import-sort to v13 (#9359) 2026-04-10 08:17:44 +03:00
Elian Doran 5037eaf205 Update codemirror themes (#9358) 2026-04-10 08:16:43 +03:00
renovate[bot] cb706453aa Update dependency eslint-plugin-simple-import-sort to v13 2026-04-10 02:14:33 +00:00
renovate[bot] 772ebbf929 Update codemirror themes 2026-04-10 02:13:55 +00:00
renovate[bot] 60e1aca3b1 Update ai sdk 2026-04-10 02:13:17 +00:00
Elian Doran 741ae4b070 chore(server): fix dist creation 2026-04-09 22:31:50 +03:00
Tomas Adamek 49476d72fc Update apps/server/src/services/llm/tools/hierarchy_tools.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-09 20:50:59 +02:00
renovate[bot] 31eaa4181d Update dependency fuse.js to v7.3.0 2026-04-09 15:03:57 +00:00
Elian Doran ca13a8accd Update dependency katex to v0.16.45 (#9347) 2026-04-09 18:01:24 +03:00
Elian Doran 78b1f119dc Update dependency dotenv to v17.4.1 (#9346) 2026-04-09 18:00:51 +03:00
Elian Doran 2908b29c0d Translations update from Hosted Weblate (#9351) 2026-04-09 15:25:40 +03:00
Elian Doran 91afa08cdc Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-09 15:24:53 +03:00
Lorinc936 9e701645d5 Merge branch 'TriliumNext:main' into main 2026-04-09 11:23:49 +00:00
Giovi d93b0442d2 Translated using Weblate (Italian)
Currently translated at 100.0% (395 of 395 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2026-04-09 11:10:04 +00:00
Giovi ce4f9f5f01 Translated using Weblate (Italian)
Currently translated at 100.0% (1846 of 1846 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-09 11:10:03 +00:00
Aindriú Mac Giolla Eoin 353d638823 Translated using Weblate (Irish)
Currently translated at 100.0% (395 of 395 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ga/
2026-04-09 11:10:01 +00:00
Ali Kaya 995a774140 Translated using Weblate (Turkish)
Currently translated at 7.5% (30 of 395 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/tr/
2026-04-09 11:10:00 +00:00
green c131b245bc Translated using Weblate (Japanese)
Currently translated at 100.0% (1846 of 1846 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-09 11:09:58 +00:00
Ali Kaya 42aabaf9b5 Translated using Weblate (Turkish)
Currently translated at 6.5% (121 of 1846 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/tr/
2026-04-09 11:09:56 +00:00
Bas Wouters 84cce151b8 Translated using Weblate (Dutch)
Currently translated at 4.1% (76 of 1846 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nl/
2026-04-09 11:09:54 +00:00
Bas Wouters e3e6316af7 Translated using Weblate (Dutch)
Currently translated at 26.7% (31 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/nl/
2026-04-09 11:09:53 +00:00
green 96e64c4f17 Translated using Weblate (Japanese)
Currently translated at 100.0% (395 of 395 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-09 11:09:52 +00:00
Aindriú Mac Giolla Eoin 3005917256 Translated using Weblate (Irish)
Currently translated at 100.0% (1846 of 1846 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-09 11:09:50 +00:00
renovate[bot] 0fa121cdf2 fix(deps): update dependency marked to v17.0.6 2026-04-09 01:14:36 +00:00
renovate[bot] 3bf6215249 fix(deps): update dependency katex to v0.16.45 2026-04-09 01:13:57 +00:00
renovate[bot] 2ef045a66d chore(deps): update dependency dotenv to v17.4.1 2026-04-09 01:13:19 +00:00
renovate[bot] 2316f38978 chore(deps): update dependency minimatch@3>brace-expansion to v5 2026-04-08 21:14:49 +00:00
renovate[bot] b65bf12247 fix(deps): update dependency eslint-linter-browserify to v10.2.0 2026-04-08 21:13:29 +00:00
Bart Visscher 55291d43a6 fix(web-clipper): Remove trailing / from triliumServerUrl 2026-04-08 16:38:17 +02:00
Tomáš Adámek 01bee95833 fix: extract finalizeStream helper, re-throw non-AbortError exceptions
- Extract duplicated cleanup logic into shared finalizeStream() function
- Add else branch to re-throw non-AbortError exceptions instead of swallowing them
2026-04-08 16:17:37 +02:00
Tomáš Adámek 5938fa6ffb fix: address review — shared PROTECTED_SYSTEM_NOTES, protection checks, soft delete description
- Move PROTECTED_SYSTEM_NOTES to helpers.ts for shared use
- move_note: check against full system notes set, add protected parent check
- clone_note: add source note protection + protected parent checks
- delete_note: fix description to say 'soft delete' (recoverable)
2026-04-08 16:08:02 +02:00
Elian Doran 743fe5a75d chore(deps): update dependency vite-plugin-static-copy to v4.0.1 (#9333) 2026-04-08 08:03:36 +03:00
renovate[bot] 0c2fdba586 chore(deps): update dependency vite-plugin-static-copy to v4.0.1 2026-04-08 01:34:23 +00:00
Elian Doran a2c5adec3d Extra bugfixes (#9332) 2026-04-07 21:28:45 +03:00
Elian Doran 6089c8c7c6 Merge branch 'feature/extra_bugfixes' of https://github.com/TriliumNext/Trilium into feature/extra_bugfixes 2026-04-07 20:52:26 +03:00
Elian Doran f28f725519 fix(server,desktop): not running correctly if placed in dot-hidden directory 2026-04-07 20:46:25 +03:00
Elian Doran 22d853e0b0 Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Elian Doran <contact@eliandoran.me>
2026-04-07 20:26:55 +03:00
Elian Doran 0f1d395651 refactor(script): move runScript to executeScript at BNote level 2026-04-07 19:59:14 +03:00
Elian Doran 3a0bab217d fix(share): hard-coded root-level paths 2026-04-07 19:48:06 +03:00
Elian Doran f824cb5f15 feat(script): add API to execute backend 2026-04-07 19:40:12 +03:00
Elian Doran 40fd8d6d1a fix(quick_search): ctrl+click & middle click not working (closes #9220) 2026-04-07 19:18:16 +03:00
Elian Doran e37f73bce0 fix(tab_bar): changing note icon reflect in the tab icon (closes #8994) 2026-04-07 19:11:26 +03:00
Elian Doran d1cd08972f chore(share): use i18n for more strings 2026-04-07 19:07:20 +03:00
Elian Doran 5a13ca6409 feat(share): render dates on the client side 2026-04-07 19:06:33 +03:00
Elian Doran eb3fd73415 fix(share): translation not used in template (closes #8722) 2026-04-07 18:54:13 +03:00
Elian Doran 1764fcbba2 fix(script): useContext not provided in imports (closes #9152) 2026-04-07 18:49:54 +03:00
Elian Doran 19f3552bfc fix(calendar): colors unreadable on dark theme (closes #8989)
The calendar event has a light yellow background with light yellow text in dark theme, making it nearly unreadable.

The root cause is a CSS load order issue. The :root defaults in index.css:1-10 are loaded after the dark theme's :root overrides (since component CSS loads after global CSS in Vite), so the defaults (95% lightness, 80% saturation) stomp over the dark theme values (20% lightness, 25% saturation). The background stays light, but --custom-color correctly gets the dark-adjusted (light) text color → light-on-light = bad contrast.

The fix: remove the :root block and use var() fallbacks instead, so there's no :root competition.
2026-04-07 18:48:32 +03:00
Elian Doran cedce6cf32 feat(relation_map): rename relations through context menu (closes #442) 2026-04-07 18:47:00 +03:00
Elian Doran 26cf215150 fix(share): webviews occupied very little height (closes #9215) 2026-04-07 18:08:23 +03:00
Elian Doran d21557069c fix(import/zip): ZIPs without language encoding flag importing garbage (closes #3013) 2026-04-07 17:01:34 +03:00
Elian Doran 28b2547229 Translations update from Hosted Weblate (#9327) 2026-04-07 16:13:33 +03:00
Hosted Weblate d75f556074 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-07 15:03:00 +02:00
Ali Kaya eb66810e59 Translated using Weblate (Turkish)
Currently translated at 5.6% (104 of 1842 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/tr/
2026-04-07 15:02:55 +02:00
Tomas Adamek 540b39206d Translated using Weblate (Czech)
Currently translated at 100.0% (1842 of 1842 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/cs/
2026-04-07 15:02:55 +02:00
Tomas Adamek 5baea04c5d Translated using Weblate (Czech)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/cs/
2026-04-07 15:02:54 +02:00
Giovi f5e65748a7 Translated using Weblate (Italian)
Currently translated at 100.0% (1842 of 1842 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-07 15:02:53 +02:00
Elian Doran de84e09062 Custom dictionary (#9317) 2026-04-07 16:02:34 +03:00
Elian Doran c81c88c930 fix(log): occassional race condition when creating log dir 2026-04-07 15:54:11 +03:00
Elian Doran 2cb39ea7e3 fix(migration): don't crash on idempotent column creation 2026-04-07 15:30:24 +03:00
Elian Doran 6986963e45 e2e(server): update after changing spellcheck settings 2026-04-07 15:23:19 +03:00
Elian Doran dc9b0093d9 fix(server): server-side rendered pages use old style 2026-04-07 15:18:38 +03:00
Elian Doran 40f9927842 docs(user): mention updates to spell check 2026-04-07 14:44:51 +03:00
Elian Doran ff02f5f3ed Merge remote-tracking branch 'origin/main' into feature/custom_dictionary 2026-04-07 14:36:20 +03:00
Tomáš Adámek dc40f6b530 feat(llm): add stop generation button
Allow users to stop an in-progress LLM generation by aborting the
SSE connection. The send button transforms into a red stop button
during streaming.

- AbortController passed to fetch() signal for stream cancellation
- On abort, partial content is finalized and saved as a message
- Stop button replaces send button during streaming with danger color
- Button is always clickable during streaming (not disabled)
2026-04-07 13:28:23 +02:00
Elian Doran 22149b94a1 chore(spellcheck): address requested changes 2026-04-07 14:26:55 +03:00
Tomáš Adámek d771454aa5 feat(llm): add note mutation tools (rename, delete, move, clone)
Add four new LLM tools for note management:
- rename_note: Change the title of an existing note
- delete_note: Delete a note with system note protection
- move_note: Move a note to a new parent using branch service
- clone_note: Clone a note to an additional parent

All mutation tools are marked with mutates: true for the tool
approval system. Protected and system notes are guarded against
modification.
2026-04-07 13:19:16 +02:00
Elian Doran 372d25667f fix(deps): update codemirror themes (#9322) 2026-04-07 14:08:32 +03:00
Elian Doran 21f6cc00eb feat(options/spellcheck): improve display in browser 2026-04-07 13:31:22 +03:00
Elian Doran 620a080128 feat(options/media): hide spellcheck related setting in browser 2026-04-07 13:28:44 +03:00
Elian Doran 6a972aaf3d feat(codemirror): add four more themes 2026-04-07 13:25:25 +03:00
Elian Doran d878d6b20b chore(deps): update dependency eslint to v10.2.0 (#9324) 2026-04-07 10:57:43 +03:00
Elian Doran ec075311f4 fix(deps): update dependency preact to v10.29.1 (#9323) 2026-04-07 08:26:20 +03:00
Elian Doran 237c9bb62a fix(deps): update ai sdk (#9321) 2026-04-07 08:22:23 +03:00
Elian Doran 5aa9733bd7 chore(deps): update dependency typedoc-plugin-missing-exports to v4.1.3 (#9320) 2026-04-07 08:20:42 +03:00
renovate[bot] a157a003c5 chore(deps): update dependency eslint to v10.2.0 2026-04-07 05:20:05 +00:00
renovate[bot] e40869d3f8 fix(deps): update dependency preact to v10.29.1 2026-04-07 05:19:03 +00:00
Elian Doran edaecfad4d fix(deps): update univer monorepo to v0.20.0 (#9325) 2026-04-07 08:18:48 +03:00
Elian Doran 983a98ae15 chore(deps): update dependency turndown to v7.2.4 (#9319) 2026-04-07 08:18:10 +03:00
Elian Doran 20ad902feb chore(deps): update dependency @types/node to v24.12.2 (#9318) 2026-04-07 08:15:55 +03:00
renovate[bot] 05de9c6e41 fix(deps): update univer monorepo to v0.20.0 2026-04-07 01:09:37 +00:00
renovate[bot] df281cbbaa fix(deps): update codemirror themes 2026-04-07 01:07:46 +00:00
renovate[bot] a979d11b8c fix(deps): update ai sdk 2026-04-07 01:07:09 +00:00
renovate[bot] f7ff9c114f chore(deps): update dependency typedoc-plugin-missing-exports to v4.1.3 2026-04-07 01:06:33 +00:00
renovate[bot] 807dbdd133 chore(deps): update dependency turndown to v7.2.4 2026-04-07 01:05:58 +00:00
renovate[bot] 4aa944237f chore(deps): update dependency @types/node to v24.12.2 2026-04-07 01:05:24 +00:00
Elian Doran 48db55e3da chore(deps): update dependency vite to v8.0.5 [security] (#9313) 2026-04-06 22:33:44 +03:00
Elian Doran bd1491e6e5 feat(options/i18n): add reference to spell check 2026-04-06 22:08:23 +03:00
Elian Doran ac35730e3b feat(options/spellcheck): add button to reload app 2026-04-06 21:56:31 +03:00
Elian Doran 00023adbc0 Revert "feat(options/spellcheck): merge into single card"
This reverts commit 7b056fe1af.
2026-04-06 21:53:17 +03:00
Elian Doran a70142a4dc feat(options/spellcheck): add button to edit custom words 2026-04-06 21:50:54 +03:00
Elian Doran 7b056fe1af feat(options/spellcheck): merge into single card 2026-04-06 21:44:49 +03:00
Elian Doran 467be38bd1 feat(options/spellcheck): improve language selection 2026-04-06 21:39:58 +03:00
renovate[bot] 933054a095 chore(deps): update dependency vite to v8.0.5 [security] 2026-04-06 18:36:10 +00:00
Elian Doran f56482157c chore(ai): update system prompt 2026-04-06 21:25:54 +03:00
Elian Doran 5d0c91d91d fix(spellcheck): don't remove local words every time 2026-04-06 20:46:38 +03:00
Elian Doran 03136611a1 fix(spellcheck): don't merge words every time 2026-04-06 20:44:13 +03:00
Elian Doran 3e7488e4f3 feat(spellcheck): clean up local words 2026-04-06 20:36:51 +03:00
Elian Doran 3ed7d48d42 feat(spellcheck): save new words to custom dictionary 2026-04-06 20:28:22 +03:00
Elian Doran ef72d89172 fix(spellcheck): custom dictionary not actually saved due to CLS 2026-04-06 20:16:02 +03:00
Elian Doran ad97071862 feat(spellcheck): basic logic to save words 2026-04-06 20:09:29 +03:00
Elian Doran 2291892946 chore(server): create hidden note for the dictionary 2026-04-06 19:55:42 +03:00
Elian Doran bf8cfa1421 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-04-06 19:48:42 +03:00
Elian Doran bdd806efff refactor: delegate theme management completely to client via bootstrap 2026-04-06 19:45:18 +03:00
Elian Doran c912c4af7b fix(webview): refresh content for SPAs with "query string" in hash (#8883) 2026-04-06 18:50:16 +03:00
Elian Doran fc7f359f28 Update Web Clipper.md (#9294) 2026-04-06 16:51:46 +03:00
Elian Doran 21598f6189 chore(desktop): change more electron fuses for increased safety 2026-04-06 15:15:47 +03:00
Elian Doran a1987ea193 Feature/cleanup ck modules (#9310) 2026-04-06 13:27:26 +03:00
Elian Doran 480d167131 fix(desktop): cannot print/export to PDF on Linux wayland (closes #7967) 2026-04-06 13:11:06 +03:00
Elian Doran d873accf3e Merge remote-tracking branch 'origin/main' into feature/cleanup_ck_modules 2026-04-06 12:41:45 +03:00
Elian Doran 94b448863c chore(deps): update dependency esbuild to v0.28.0 (#9302) 2026-04-06 12:34:15 +03:00
Elian Doran 32acc8555d fix(deps): update dependency @eslint/js to v10 (#9308) 2026-04-06 12:33:56 +03:00
Elian Doran d68ad84155 Refactor/build warnings due to imports (#9309) 2026-04-06 12:32:32 +03:00
Elian Doran 45e82b7f33 test(ckeditor5-mermaid): fix type errors 2026-04-06 12:31:53 +03:00
Elian Doran 55ad0fe9f0 test(ckeditor5-mermaid): broken tests after change in rendering 2026-04-06 12:30:33 +03:00
Elian Doran 559815273e fix(ckeditor5-mermaid): protect against multiple init 2026-04-06 12:27:12 +03:00
Elian Doran af76740fd9 fix(ckeditor5-mermaid): protect against stale renders 2026-04-06 12:26:17 +03:00
Elian Doran 7dadd50bfe chore(ckeditor5-mermaid): don't remove parent element on error 2026-04-06 12:25:50 +03:00
Elian Doran dd4cab22c1 chore(client): address requested changes 2026-04-06 12:22:00 +03:00
Elian Doran c4d3e776a1 refactor(client): the last circular dependency 2026-04-06 12:20:40 +03:00
Elian Doran 19bb7f5ddb refactor(server): remove unnecessary route 2026-04-06 12:18:36 +03:00
Elian Doran d212120f9b refactor(client): read locales from common instead of going through the server 2026-04-06 12:16:32 +03:00
Elian Doran 42da1872e7 fix(client): crashing due to circular dependency 2026-04-06 12:10:33 +03:00
Elian Doran a080b50c45 refactor(client): duplicate toast import 2026-04-06 12:06:27 +03:00
Elian Doran 6d31e9b028 feat(ckeditor5-mermaid): use more modern mechanism for rendering with less flicker 2026-04-06 12:03:29 +03:00
Elian Doran b606afa858 refactor(ckeditor5-mermaid): get rid of any runtime dependencies 2026-04-06 11:59:24 +03:00
Elian Doran f9446304b3 refactor(ckeditor5-mermaid): switch to es-toolkit 2026-04-06 11:57:31 +03:00
renovate[bot] fbe312d580 chore(deps): update dependency esbuild to v0.28.0 2026-04-06 08:54:56 +00:00
Elian Doran 8d383caaff chore(deps): update dependency @electron/fuses to v2 (#9304) 2026-04-06 11:53:07 +03:00
Elian Doran 6caf4fa7ce chore(deps): update dependency copy-webpack-plugin to v14 (#9305) 2026-04-06 11:52:29 +03:00
Elian Doran 606d58b08c chore(ckeditor5-*): remove unnecessary publishing stack 2026-04-06 11:49:47 +03:00
Elian Doran 09258179f0 refactor(client): one more ineffective dynamic import due to appContext 2026-04-06 11:46:35 +03:00
Elian Doran 40e986b188 refactor(client): ineffective dynamic imports 2026-04-06 11:41:35 +03:00
Elian Doran 37e47041bf Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-04-06 11:41:09 +03:00
Elian Doran 543438bca0 chore(ai): mention instructions for adding new locale 2026-04-06 11:28:10 +03:00
Elian Doran b31290c1fc fix(deps): update dependency fuse.js to v7.2.0 (#9303) 2026-04-06 11:22:33 +03:00
Elian Doran d41111a209 docs(dev): remove unnecessary step for adding new locale 2026-04-06 11:21:17 +03:00
Elian Doran 828b523382 feat(i18n): enable Czech 2026-04-06 11:20:58 +03:00
Elian Doran 32409ecbee Translations update from Hosted Weblate (#9295) 2026-04-06 11:16:03 +03:00
renovate[bot] 3ca2cec63a chore(deps): update dependency copy-webpack-plugin to v14 2026-04-06 08:14:46 +00:00
Francis C. 1ed2db0c82 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1842 of 1842 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-04-06 08:13:48 +00:00
Francis C. 2423b74dd0 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2026-04-06 08:13:48 +00:00
Tomas Adamek 3f781ea298 Translated using Weblate (Czech)
Currently translated at 98.9% (1822 of 1842 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/cs/
2026-04-06 08:13:47 +00:00
Tomas Adamek 30c5c49aef Translated using Weblate (Czech)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/cs/
2026-04-06 08:13:47 +00:00
Tomas Adamek 9421e39c34 Translated using Weblate (Czech)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/cs/
2026-04-06 08:13:46 +00:00
Tomas Adamek c46805cf4f Translated using Weblate (Czech)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/cs/
2026-04-06 08:13:46 +00:00
Elian Doran f181343fca chore(deps): update dependency @redocly/cli to v2.25.4 (#9297) 2026-04-06 11:13:37 +03:00
Elian Doran 8a512e4f73 chore(deps): update dependency electron to v41 (#9306) 2026-04-06 11:13:01 +03:00
Elian Doran 06a3750168 chore(renovate): group AI SDK updates 2026-04-06 11:09:07 +03:00
renovate[bot] 35c1a5642d fix(deps): update dependency @eslint/js to v10 2026-04-06 01:05:51 +00:00
renovate[bot] f29df2ad28 chore(deps): update dependency electron to v41 2026-04-06 01:03:55 +00:00
renovate[bot] 75a5714451 chore(deps): update dependency @electron/fuses to v2 2026-04-06 01:01:53 +00:00
renovate[bot] 2882863b5b fix(deps): update dependency fuse.js to v7.2.0 2026-04-06 01:00:57 +00:00
renovate[bot] 773b6cca14 chore(deps): update dependency @redocly/cli to v2.25.4 2026-04-06 00:54:32 +00:00
Elian Doran f97370c8f7 Dependency cleanup (#9293) 2026-04-05 23:04:03 +03:00
Elian Doran afad96a375 Merge remote-tracking branch 'origin/main' into feature/dependency_cleanup 2026-04-05 22:56:13 +03:00
Elian Doran 9e5ababfcb chore(deps): update dependency electron to v41.1.1 (#9277) 2026-04-05 22:51:05 +03:00
Elian Doran dc1e0e8db4 fix(desktop): tesseract.js not copied 2026-04-05 22:22:58 +03:00
Elian Doran 1e861d1125 chore(ocr): externalize tesseract.js completely 2026-04-05 22:20:38 +03:00
Elian Doran baa93cb371 chore(ocr): expose needed dependencies 2026-04-05 22:14:01 +03:00
Elian Doran 61dcc8db47 Revert "fix(ocr): not working in server prod"
This reverts commit f4f881e839.
2026-04-05 21:53:53 +03:00
ce603 15505ffcd8 Update docs/User Guide/User Guide/Installation & Setup/Web Clipper.md
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-05 14:41:25 -04:00
Elian Doran 2c557eb015 Revert "fix(desktop): failing in prod due to tesseract"
This reverts commit 9e34fcb8a8.
2026-04-05 21:36:11 +03:00
Elian Doran f5a80526ab fix(deps): update dependency mermaid to v11.14.0 (#9282) 2026-04-05 21:35:45 +03:00
ce603 96cef35f09 Update Web Clipper.md
Update web clipper docs with published store links
2026-04-05 14:28:51 -04:00
Elian Doran 27e1455874 fix(mermaid): treeview clipped when padding 2026-04-05 21:27:39 +03:00
Elian Doran 278d8428de feat(mermaid): integrate two new note types 2026-04-05 21:26:42 +03:00
Elian Doran 164e667158 chore: remove empty dependencies list in JSON 2026-04-05 21:05:11 +03:00
Elian Doran 28b31791e7 fix(codemirror): broken dependency on electron-window-state 2026-04-05 21:03:24 +03:00
Elian Doran 9515768e62 fix(server): broken dependency on electron-window-state 2026-04-05 21:02:03 +03:00
Elian Doran fbbad19cb7 chore(deps): update dependency electron to v40.8.5 [security] (#9291) 2026-04-05 20:59:58 +03:00
Elian Doran eab353ca2e chore(deps): remove unnecessary depedencies 2026-04-05 20:58:02 +03:00
Elian Doran cb9ee20763 chore(deps): remove hard-coded dependency to @smithy/middleware-retry 2026-04-05 20:55:43 +03:00
Elian Doran dac12532bc Merge branch 'main' into renovate/electron-41.x 2026-04-05 20:49:33 +03:00
Elian Doran 1d99734ea0 chore(ci): try to bypass operation not permitted in Electron build
7
node_modules/fs-xattr install: gyp http 200 https://nodejs.org/download/release/v24.14.1/node-v24.14.1-headers.tar.gz
node_modules/wxt/node_modules/esbuild postinstall$ node install.js
node_modules/wxt/node_modules/esbuild postinstall: Done
node_modules/macos-alias install: gyp http GET https://nodejs.org/download/release/v24.14.1/SHASUMS256.txt
node_modules/macos-alias install: gyp http 200 https://nodejs.org/download/release/v24.14.1/SHASUMS256.txt
node_modules/fs-xattr install: gyp http GET https://nodejs.org/download/release/v24.14.1/SHASUMS256.txt
node_modules/fs-xattr install: gyp http 200 https://nodejs.org/download/release/v24.14.1/SHASUMS256.txt
node_modules/electron postinstall: Done
.../remote/node_modules/electron postinstall: Done
 ERR_PNPM_EPERM  EPERM: operation not permitted, link '/Users/runner/work/Trilium/Trilium/node_modules/@electron/remote/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Helpers' -> 'apps/desktop/node_modules/_tmp_3196_65c494775712c8b30c73644d84dc191e/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Helpers'
2026-04-05 20:49:06 +03:00
Elian Doran 3e764c762a chore(desktop): remove unnecessary dependencies 2026-04-05 20:43:37 +03:00
Elian Doran 7be51168d3 Merge branch 'main' into renovate/electron-41.x 2026-04-05 20:38:36 +03:00
Elian Doran 530d193734 fix(forge): build no longer working due to audit 2026-04-05 20:37:33 +03:00
Elian Doran aba5ff75af fix(server): sync version not increased after breaking changes 2026-04-05 20:22:49 +03:00
Elian Doran 9e34fcb8a8 fix(desktop): failing in prod due to tesseract 2026-04-05 20:15:08 +03:00
Elian Doran 055dd9cd01 chore(toast): fix button alignment if no title & make buttons full-width 2026-04-05 20:14:54 +03:00
Elian Doran 1437fdc4e3 feat(ocr): warn if text wasn't retrieved on manual to due low confidence 2026-04-05 20:14:38 +03:00
Elian Doran e5c67b16ac fix(flake): failing due to symlinks to /build 2026-04-05 20:12:59 +03:00
Elian Doran 94987314b8 feat(ocr): warn about OCR confidence too low 2026-04-05 20:03:12 +03:00
Elian Doran f4f881e839 fix(ocr): not working in server prod 2026-04-05 19:58:48 +03:00
renovate[bot] 92f5901b95 chore(deps): update dependency electron to v41.1.1 2026-04-05 16:44:14 +00:00
renovate[bot] 1c0cb601cb chore(deps): update dependency electron to v40.8.5 [security] 2026-04-05 16:43:32 +00:00
Elian Doran 109f06f8bb Merge branch 'release/v0.102.2'
; Conflicts:
;	apps/desktop/package.json
;	apps/server/src/routes/api/image.ts
;	apps/server/src/share/routes.ts
;	pnpm-lock.yaml
2026-04-05 19:41:24 +03:00
Elian Doran bf23439792 chore(release): prepare for v0.102.2
Checks / main (push) Successful in 2s
/ Check Docker build (Dockerfile) (push) Failing after 39s
/ Check Docker build (Dockerfile.alpine) (push) Failing after 40s
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Has been skipped
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Has been skipped
/ Merge manifest lists (push) Has been skipped
Release / Sanity Check (push) Failing after 45s
Release / Make Electron (arm64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-24.04-arm name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been skipped
Release / Build Linux Server (arm64, ubuntu-24.04-arm) (push) Has been skipped
Release / Build Linux Server (x64, ubuntu-22.04) (push) Has been skipped
Release / Publish release (push) Has been skipped
2026-04-05 19:30:04 +03:00
Elian Doran b7a0bc08be Various bugfixes (#9274) 2026-04-05 19:28:59 +03:00
Elian Doran 9d6a26dda9 docs(security): add more details & change reporting mechanism 2026-04-05 19:28:30 +03:00
Elian Doran a01ce2c3fc docs(release): release notes for v0.102.2 2026-04-05 19:28:03 +03:00
Elian Doran ba6298af27 Translations update from Hosted Weblate (#9289) 2026-04-05 17:11:26 +03:00
green 3d17e0aa75 Translated using Weblate (Japanese)
Currently translated at 100.0% (1837 of 1837 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-05 14:10:34 +00:00
Elian Doran 7e18166160 chore(deps): update dependency esbuild to v0.27.5 (#9278) 2026-04-05 17:10:26 +03:00
Elian Doran 40d8571797 Translations update from Hosted Weblate (#9288) 2026-04-05 17:09:36 +03:00
Elian Doran 25e04e358a Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-05 17:08:56 +03:00
Aindriú Mac Giolla Eoin e473e12c0e Translated using Weblate (Irish)
Currently translated at 100.0% (1837 of 1837 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-05 14:09:52 +02:00
Aindriú Mac Giolla Eoin dfb20df16f Translated using Weblate (Irish)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ga/
2026-04-05 14:09:49 +02:00
Elian Doran efcbf439ee chore(deps): update dependency http-proxy-agent to v9 (#9283) 2026-04-05 13:54:41 +03:00
renovate[bot] 514f7fedbc chore(deps): update dependency http-proxy-agent to v9 2026-04-05 10:35:14 +00:00
Elian Doran ee88fedacd chore(deps): update dependency https-proxy-agent to v9 (#9284) 2026-04-05 13:32:40 +03:00
renovate[bot] 2933f9c49f chore(deps): update dependency esbuild to v0.27.5 2026-04-05 10:26:58 +00:00
Elian Doran 1cca5d989c chore(deps): update dependency @playwright/test to v1.59.1 (#9276) 2026-04-05 13:25:47 +03:00
Elian Doran 9981020728 chore(deps): update dependency dotenv to v17.4.0 (#9280) 2026-04-05 13:25:17 +03:00
Elian Doran 56843dcf8b chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55.3.1 (#9275) 2026-04-05 13:24:29 +03:00
Elian Doran e661118192 fix(deps): update dependency @codemirror/view to v6.41.0 (#9281) 2026-04-05 13:23:16 +03:00
Elian Doran 54a7de6cb0 fix(deps): update dependency mathlive to v0.109.1 (#9279) 2026-04-05 13:22:48 +03:00
Elian Doran 13b1e0afbb fix(desktop): make failing due to wrong version of fuses 2026-04-05 12:46:39 +03:00
Elian Doran 4a48796142 chore(ci): trigger dev on release branches as well 2026-04-05 12:37:33 +03:00
Elian Doran 9a4fef80b9 chore(deps): fix pnpm lock 2026-04-05 12:15:07 +03:00
Elian Doran 79dc4b39f1 chore(client): address requested changes 2026-04-05 12:11:05 +03:00
Elian Doran 9bc18b774e test(server): add unit tests for sanitizeSvg 2026-04-05 12:11:05 +03:00
Elian Doran 465c36407c Update apps/server/src/etapi/notes.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-05 12:10:52 +03:00
Elian Doran b99486259e Update apps/server/src/etapi/notes.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-05 12:10:44 +03:00
Elian Doran ecf5475966 Update apps/desktop/package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-05 12:10:29 +03:00
Elian Doran 90822cc8a3 chore: address requested changes 2026-04-05 11:59:45 +03:00
Elian Doran 5c46209ddc feat(server): improve request handling for SVGs 2026-04-05 11:28:28 +03:00
Elian Doran 176de87b6b feat(desktop): add Electron fuses 2026-04-05 11:01:22 +03:00
Elian Doran 7f199c527b feat(share): improve request handling for SVGs 2026-04-05 10:52:36 +03:00
Elian Doran 2432e230c5 chore(etapi): enforce MIME for image upload 2026-04-05 10:44:47 +03:00
Elian Doran fc1be0d23d fix(ckeditor5-mermaid): use textContent for diagram source rendering 2026-04-05 10:17:16 +03:00
renovate[bot] d084b9e941 chore(deps): update dependency https-proxy-agent to v9 2026-04-05 01:33:43 +00:00
renovate[bot] 6678c0af49 fix(deps): update dependency mermaid to v11.14.0 2026-04-05 01:32:26 +00:00
renovate[bot] 37754ecf31 fix(deps): update dependency @codemirror/view to v6.41.0 2026-04-05 01:31:45 +00:00
renovate[bot] 709d9633a1 chore(deps): update dependency dotenv to v17.4.0 2026-04-05 01:31:06 +00:00
renovate[bot] 7ca57efaad fix(deps): update dependency mathlive to v0.109.1 2026-04-05 01:30:27 +00:00
renovate[bot] 342fedca1c chore(deps): update dependency @playwright/test to v1.59.1 2026-04-05 01:28:20 +00:00
renovate[bot] b1262b0448 chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55.3.1 2026-04-05 01:27:37 +00:00
Elian Doran 626aca5181 fix(client): toasts could render HTML content 2026-04-04 22:21:25 +03:00
Elian Doran 8204322b46 fix(openid): use more secure RNG 2026-04-04 22:02:33 +03:00
Elian Doran 70ce86cd53 fix(scripts): electron rebuild failing in flake 2026-04-04 22:01:43 +03:00
Elian Doran ed3b86cd49 fix(import): no longer preserve named note IDs 2026-04-04 21:27:37 +03:00
Elian Doran b371675494 chore(commons): mark docName as a dangerous attribute 2026-04-04 21:25:05 +03:00
Elian Doran ff06c8e7bd fix(client): validate docName attribute in doc renderer 2026-04-04 21:21:50 +03:00
Elian Doran 8ff41d8fa9 fix(server): align attachment upload validation with note upload 2026-04-04 20:46:03 +03:00
Elian Doran 5f5b9ba8cb Clean up dependencies (#9272) 2026-04-04 14:03:41 +03:00
Elian Doran a3221470e7 refactor(ckeditor): get rid of lint-staged 2026-04-04 13:34:59 +03:00
Elian Doran 0e115bd92a refactor(ckeditor): get rid of unnecessary http-server & ts-node 2026-04-04 13:32:45 +03:00
Elian Doran 95a50c0ba6 refactor(ckeditor): get rid of ckeditor5-package-tools 2026-04-04 13:27:07 +03:00
Elian Doran e323ccb259 refactor(turndown-plugin-gfm): convert tests from turndown-attendant to vite 2026-04-04 13:23:49 +03:00
Elian Doran 3294d0b93b refactor(splitjs): convert tests from karma to vitest 2026-04-04 13:13:07 +03:00
Elian Doran 55e8694990 test(server): remove redundant log 2026-04-04 13:10:03 +03:00
Elian Doran b3888b391a chore(deps): fix minimatch issue 2026-04-04 13:09:53 +03:00
Elian Doran f2907ab40f chore(deps): clean up some redundancies in overrides 2026-04-04 13:06:56 +03:00
Elian Doran 7e7218cbdf Merge remote-tracking branch 'origin/main' into chore/audit
; Conflicts:
;	pnpm-lock.yaml
2026-04-04 12:58:46 +03:00
Elian Doran e41c9cb7f4 chore(deps): revert override for file-type 2026-04-04 12:57:09 +03:00
Elian Doran 20f96c88e4 Translations update from Hosted Weblate (#9271) 2026-04-04 12:53:52 +03:00
Elian Doran 66afda1343 Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-04 12:53:35 +03:00
Hosted Weblate c5a6212065 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-04-04 11:50:19 +02:00
noobhjy 3e7e355575 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.1% (1800 of 1815 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-04 11:50:18 +02:00
green fb9eb3e4b5 Translated using Weblate (Japanese)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-04 11:50:17 +02:00
green a35ac82f24 Translated using Weblate (Japanese)
Currently translated at 100.0% (1815 of 1815 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-04 11:50:17 +02:00
Elian Doran 66add6b9e4 fix(deps): update ckeditor monorepo to v48 (major) (#9270) 2026-04-04 12:50:07 +03:00
Elian Doran fe81bde1c9 chore(scripts): fix electron rebuild failing due to Python on NixOS 2026-04-04 12:49:03 +03:00
Elian Doran 6b223098ab chore(deps): auto-fix deps 2026-04-04 12:45:11 +03:00
Elian Doran 788e867a6c fix(scripts): use flake when rebuilding Electron in postinstall script 2026-04-04 12:38:23 +03:00
Elian Doran 7ad8d307dc Merge remote-tracking branch 'origin/main' into renovate/major-ckeditor-monorepo
; Conflicts:
;	pnpm-lock.yaml
2026-04-04 12:34:17 +03:00
Elian Doran b6d4ac5ada fix(text): signature change in CK watchdog 2026-04-04 12:30:02 +03:00
Elian Doran 0a069854e5 chore(deps): update dependency pdfjs-dist to v5.6.205 (#9227) 2026-04-04 12:26:08 +03:00
Elian Doran 8770afa211 fix(ckeditor): changes in icon package structure 2026-04-04 12:25:07 +03:00
Elian Doran 312c193b1a fix(text): patches no longer applying after version upgrade 2026-04-04 12:22:52 +03:00
Elian Doran 3700e2bb93 chore(ai): update copilot instructions for PDF.js update 2026-04-04 12:17:43 +03:00
renovate[bot] a9be72081c fix(deps): update ckeditor monorepo to v48 2026-04-04 09:16:52 +00:00
Elian Doran f57b57791b fix(pdfjs): potential cache issue with PDF.js (closes #9176) 2026-04-04 12:16:10 +03:00
Elian Doran 5cf249afa4 fix(deps): update dependency i18next to v26.0.3 (#9264) 2026-04-04 12:13:12 +03:00
Elian Doran 3f24627f67 chore(deps): update dependency tesseract.js to v7 (#9269) 2026-04-04 12:12:41 +03:00
Elian Doran 806c3fdc00 Merge remote-tracking branch 'origin/main' into renovate/pdfjs-dist-5.x 2026-04-04 12:11:47 +03:00
Elian Doran e81ee88cda feat(pdfjs): update viewer to v5.6.205 2026-04-04 12:09:26 +03:00
Elian Doran db46f63337 chore(deps): update dependency @smithy/middleware-retry to v4.4.46 (#9261) 2026-04-04 12:05:39 +03:00
Elian Doran 395102026d test(ocr): image processor with PNG 2026-04-04 12:04:19 +03:00
renovate[bot] b62c078de6 fix(deps): update dependency i18next to v26.0.3 2026-04-04 08:57:28 +00:00
Elian Doran 47c1c08bed Improved tools & MC (#9256) 2026-04-04 11:53:14 +03:00
Elian Doran a23c4f03e0 fix(deps): update dependency @ai-sdk/google to v3.0.55 (#9263) 2026-04-04 11:52:34 +03:00
Elian Doran 5a6da60fe8 chore(deps): update dependency @playwright/test to v1.59.0 (#9267) 2026-04-04 11:52:12 +03:00
Elian Doran 588c47aee7 chore(deps): update dependency yauzl to v3.3.0 (#9268) 2026-04-04 11:51:39 +03:00
Elian Doran 36fd51219a chore(deps): update dependency i18next-fs-backend to v2.6.3 (#9262) 2026-04-04 11:50:41 +03:00
Elian Doran bc43a79d97 fix(deps): update dependency i18next-http-backend to v3.0.4 (#9265) 2026-04-04 11:50:28 +03:00
Elian Doran 5c22c029d7 fix(deps): update dependency react-i18next to v17.0.2 (#9266) 2026-04-04 11:50:15 +03:00
Elian Doran 126d9be9d8 fix(llm): one more async tool 2026-04-04 11:44:34 +03:00
Elian Doran 09be2822e0 fix(llm): some tools were async 2026-04-04 11:35:38 +03:00
Elian Doran a93029f789 fix(llm): misuse of transactions in tool use due to async 2026-04-04 11:21:10 +03:00
Elian Doran 48cf214f4c chore(deps): address requested changes 2026-04-04 11:07:06 +03:00
Elian Doran 6834bad7b0 chore(deps): update pnpm lock 2026-04-04 10:44:16 +03:00
Elian Doran 855458bab0 feat(options): improve alignment of option rows 2026-04-04 10:40:31 +03:00
Elian Doran 5be48bf8c8 feat(options/advanced): use tabular layout for experimental features 2026-04-04 10:35:57 +03:00
Elian Doran 80ac0eea62 feat(options/llm): don't show settings unless the experimental setting is on 2026-04-04 10:33:24 +03:00
Elian Doran 5995ec468d feat(options/llm): improve layout for MCP card 2026-04-04 10:26:27 +03:00
Elian Doran e9a876e8f0 feat(options/llm): display endpoint URL 2026-04-04 10:24:11 +03:00
Elian Doran 90223a5ffd chore(mcp): address requested changes 2026-04-04 10:15:05 +03:00
Elian Doran 8331daae5b chore(mcp): better loopback detection 2026-04-04 10:11:27 +03:00
Elian Doran 027280954a chore(llm): remove some lesser used fields from LLM response 2026-04-04 09:59:00 +03:00
Elian Doran 5138a63d23 chore(llm): encourage not to duplicate reference links with note titles 2026-04-04 09:44:11 +03:00
Elian Doran be95cf5510 refactor(commons): deduplicate wikilink plugins 2026-04-04 09:40:48 +03:00
Elian Doran 4082328c2b feat(llm): encourage LLM to use reference links 2026-04-04 09:34:15 +03:00
Elian Doran 729e840af2 refactor(llm): build system prompt using arrays 2026-04-04 09:26:26 +03:00
Elian Doran e4a38fe277 feat(llm): improve prompt when no access to web 2026-04-04 09:24:26 +03:00
Elian Doran a5cb9c7de6 feat(llm): improve prompt when no access to notes 2026-04-04 09:23:17 +03:00
Elian Doran 7543109583 chore(llm): redesign thinking card 2026-04-04 09:15:40 +03:00
renovate[bot] bff2f10fa4 chore(deps): update dependency tesseract.js to v7 2026-04-04 01:10:29 +00:00
renovate[bot] 37120bf153 chore(deps): update dependency yauzl to v3.3.0 2026-04-04 01:09:23 +00:00
renovate[bot] b88c85db5e chore(deps): update dependency @playwright/test to v1.59.0 2026-04-04 01:08:16 +00:00
renovate[bot] c682e3dfc0 fix(deps): update dependency react-i18next to v17.0.2 2026-04-04 01:07:09 +00:00
renovate[bot] 6c0bbb7778 fix(deps): update dependency i18next-http-backend to v3.0.4 2026-04-04 01:05:58 +00:00
renovate[bot] bde8c40d16 fix(deps): update dependency @ai-sdk/google to v3.0.55 2026-04-04 01:03:43 +00:00
renovate[bot] c4d352ba26 chore(deps): update dependency i18next-fs-backend to v2.6.3 2026-04-04 01:02:39 +00:00
renovate[bot] cc1c0696ad chore(deps): update dependency @smithy/middleware-retry to v4.4.46 2026-04-04 01:01:28 +00:00
Elian Doran 186b784004 feat(llm): improve bubble layout 2026-04-03 22:52:31 +03:00
Elian Doran 5441d15654 refactor(llm): use separate component for expandable card 2026-04-03 22:38:11 +03:00
Elian Doran bd61af89ae feat(llm): further improve display of citations 2026-04-03 22:34:01 +03:00
Elian Doran eddd77f97f feat(llm): group sources in expandable header 2026-04-03 22:31:58 +03:00
Elian Doran ab0338c318 fix(llm): duplicate citations 2026-04-03 22:17:40 +03:00
Elian Doran 1892bec772 fix(llm): tools calls not displayed while in progress 2026-04-03 22:13:51 +03:00
Elian Doran bf7070a7da fix(llm): tools calls not displayed during streaming 2026-04-03 22:02:19 +03:00
Elian Doran 314331b956 chore(llm): improve tool call slightly 2026-04-03 21:36:31 +03:00
Elian Doran 6ff949fdb5 feat(llm): improve tool call icons 2026-04-03 21:30:55 +03:00
Elian Doran 21d24b7bea feat(llm): group tool calls 2026-04-03 21:25:16 +03:00
Elian Doran 8522151949 refactor(llm): remove legacy tool use 2026-04-03 21:20:44 +03:00
Elian Doran 3720099b1d chore(llm): use boxicons chevron 2026-04-03 21:16:53 +03:00
Elian Doran 073873c33c chore(llm): improve tool card slightly 2026-04-03 21:15:02 +03:00
Elian Doran 25bf62faa3 refactor(llm): split CSS into components 2026-04-03 21:06:50 +03:00
Elian Doran e54cb9c626 feat(llm): basic nesting support 2026-04-03 21:00:22 +03:00
Elian Doran 208330d73a feat(llm): display tool calls as table 2026-04-03 20:53:52 +03:00
Elian Doran 343e3e67ed refactor(llm): extract tool call card to separate file 2026-04-03 20:47:44 +03:00
Elian Doran 6447003927 chore(llm): increase maximum number of steps 2026-04-03 20:38:11 +03:00
Elian Doran cbdf925703 fix(llm): cannot create non-standard note types 2026-04-03 20:31:24 +03:00
Elian Doran 7440e4a610 feat(llm): limit number of results in note meta 2026-04-03 20:26:53 +03:00
Elian Doran 54a5c3fac0 feat(llm): mention child notes directly in system prompt 2026-04-03 20:12:54 +03:00
Elian Doran 42e60da127 feat(llm): mention total number of results in search 2026-04-03 19:55:11 +03:00
Elian Doran 325dc9c8a8 feat(llm): add content preview & parent title to search 2026-04-03 19:52:47 +03:00
Elian Doran 877427f0db refactor(llm): extract helpers out of tools 2026-04-03 19:49:01 +03:00
Elian Doran 1a64e7ba63 feat(llm): provide attachments list directly in note meta 2026-04-03 19:44:23 +03:00
Elian Doran 7dfa59a845 feat(llm): encourage through system prompt 2026-04-03 19:37:58 +03:00
Elian Doran 62fd19368d feat(llm): display content preview for attachments 2026-04-03 19:33:07 +03:00
Elian Doran 058518fcba feat(llm): allow reading attachment content with OCR integration 2026-04-03 19:30:03 +03:00
Elian Doran 6e1d10f052 chore(ai): update system prompt for tool creation 2026-04-03 19:24:47 +03:00
Elian Doran af988fec69 refactor(llm): wrong types in MCP server 2026-04-03 19:20:25 +03:00
Elian Doran dd5979aec8 refactor(llm): don't rely on ETAPI mappers 2026-04-03 19:17:59 +03:00
Elian Doran 657fbeba79 refactor(llm): use same method for meta between get_note and system prompt 2026-04-03 19:12:15 +03:00
Elian Doran 4a0d45ad7d feat(llm): get_attachment + get_note_attachments 2026-04-03 19:09:43 +03:00
Elian Doran f47ec21aa8 feat(llm): provide content preview in system prompt 2026-04-03 18:59:46 +03:00
Elian Doran be40d65982 feat(llm): format system prompt metadata as YAML 2026-04-03 18:54:58 +03:00
Elian Doran faebacb883 feat(llm): inject meta-data directly in the system prompt 2026-04-03 18:51:33 +03:00
Elian Doran df0efc39d5 refactor(llm): get rid of context-aware tools 2026-04-03 18:48:59 +03:00
Elian Doran 57a299de8f feat(llm): inject current note ID in the system prompt 2026-04-03 18:48:32 +03:00
Elian Doran be724ec45f feat(llm/tools): split read_note into get_note and get_content_note 2026-04-03 18:42:00 +03:00
Elian Doran 98c70e662d feat(llm/tools): get attachments by note 2026-04-03 18:25:00 +03:00
Elian Doran 4ed9b84d75 chore(llm): synchronize provider configuration 2026-04-03 18:16:46 +03:00
Elian Doran b7f05acfd3 fix(mcp): issues after merge 2026-04-03 18:09:33 +03:00
Elian Doran 45ebb37a01 Merge remote-tracking branch 'origin/main' into feature/mcp 2026-04-03 17:57:47 +03:00
Elian Doran f77adea800 chore(deps): update typescript-eslint monorepo to v8.58.0 (#9237) 2026-04-03 17:17:10 +03:00
Elian Doran 88b855ed47 Translations update from Hosted Weblate (#9243) 2026-04-03 17:16:25 +03:00
Skriep 4fa689873f Translated using Weblate (Italian)
Currently translated at 99.2% (1774 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-04-03 08:36:34 +00:00
Skriep d76b9329fc Translated using Weblate (Russian)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ru/
2026-04-03 08:36:32 +00:00
noobhjy 1c43ddd3a9 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.1% (1736 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-04-03 08:36:31 +00:00
Skriep 1aedbcef94 Translated using Weblate (Russian)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2026-04-03 08:36:29 +00:00
Skriep 295280861a Translated using Weblate (English)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/en/
2026-04-03 08:36:28 +00:00
noobhjy 9f70e20fa0 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.7% (390 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2026-04-03 08:36:26 +00:00
Aindriú Mac Giolla Eoin a20e96eb6a Translated using Weblate (Irish)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ga/
2026-04-03 08:36:25 +00:00
Aindriú Mac Giolla Eoin 9b238a3ac6 Translated using Weblate (Irish)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-04-03 08:36:24 +00:00
Marc 0167597ae0 Translated using Weblate (French)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2026-04-03 08:36:22 +00:00
Marc a4f6071c8b Translated using Weblate (French)
Currently translated at 100.0% (119 of 119 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/fr/
2026-04-03 08:36:21 +00:00
Marc aa0b0bd249 Translated using Weblate (French)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/fr/
2026-04-03 08:36:19 +00:00
green c6185a51c2 Translated using Weblate (Japanese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-04-03 08:36:18 +00:00
green 9c9c717025 Translated using Weblate (Japanese)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-04-03 08:36:16 +00:00
Marc 00342ed569 Translated using Weblate (French)
Currently translated at 89.7% (1604 of 1787 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2026-04-03 08:36:14 +00:00
Elian Doran 1f0a6b4a79 feat(ocr): add OCR (#5834) 2026-04-03 11:35:36 +03:00
Elian Doran 3e767b4723 chore(ocr): remove accidentally commited file 2026-04-03 11:25:41 +03:00
Elian Doran e539b11718 chore(ocr): upgrade to officeprocessor v6 to avoid pdfjs issues 2026-04-03 11:11:53 +03:00
Elian Doran 2fca8c3850 fix(build): missing pdfjs-dist 2026-04-03 10:33:19 +03:00
Elian Doran 0d3f70a231 chore(server): try to bypass officeparser PDFjs issue 2026-04-03 10:02:54 +03:00
Elian Doran a3a52aaafe chore(ocr): switch to unpdf due to issues with pdfjs-dist 2026-04-03 09:22:56 +03:00
Elian Doran a6c4401973 chore(server): remove pdf-parse dependency 2026-04-03 09:04:56 +03:00
Elian Doran 2e34ec2a17 chore(server): remove sharp from externals 2026-04-03 09:04:04 +03:00
Elian Doran 927afec83c chore(ocr): remove multi-page TIFF support for now to remove dependency to sharp 2026-04-03 08:50:02 +03:00
Elian Doran 8bd1da0552 fix(deps): update dependency i18next to v26.0.2 (#9255) 2026-04-03 08:42:50 +03:00
renovate[bot] 4f571fc3d7 fix(deps): update dependency i18next to v26.0.2 2026-04-03 00:49:43 +00:00
Elian Doran c3f8e523cc fix(deps): update dependency lodash-es to v4.18.1 [security] (#9252) 2026-04-02 23:14:01 +03:00
Elian Doran 9878f76f65 fix(ocr): sharp failing on Alpine 2026-04-02 22:56:22 +03:00
Elian Doran 23799562ae refactor(ocr): reuse office processor for PDFs 2026-04-02 22:53:57 +03:00
Elian Doran f441a145b5 fix(server): prod not starting due to bundling issues 2026-04-02 22:42:53 +03:00
Elian Doran 7189764916 chore(ocr): support overriding cache dir 2026-04-02 22:00:37 +03:00
Elian Doran 70bc707e3a chore(ocr): address requested changes 2026-04-02 21:58:54 +03:00
Elian Doran 90215bde8b chore(ocr): remove unnecessary index 2026-04-02 21:55:07 +03:00
Elian Doran 2b3ae5285b test(server): update integration DB to latest migration 2026-04-02 21:49:19 +03:00
Elian Doran 9b6d0db5b6 test(server): fix outdated tests in search result 2026-04-02 21:48:42 +03:00
Elian Doran 723da88ff8 chore(ocr): disable auto-processing by default 2026-04-02 21:46:05 +03:00
Elian Doran 5bcf2f4356 chore(deps): remove deprecated types for tesseract 2026-04-02 21:34:32 +03:00
Elian Doran 42680574c1 chore(deps): update pnpm lock 2026-04-02 21:34:03 +03:00
Elian Doran 82e723c915 test(ocr): fix broken tests 2026-04-02 21:27:46 +03:00
renovate[bot] ac9560d9d7 chore(deps): update typescript-eslint monorepo to v8.58.0 2026-04-02 18:18:05 +00:00
Elian Doran 32f95efa54 fix(ocr): image OCR in search results not shown 2026-04-02 21:14:56 +03:00
Elian Doran 3da416908d feat(ocr): display content snippet in quick search 2026-04-02 21:04:18 +03:00
Elian Doran d79d2e9ad2 fix(ocr): too many blob queries in search 2026-04-02 20:58:11 +03:00
Elian Doran 30ba36894d chore(ocr): optimize search algorithm
OCRContentExpression now takes all tokens as an array (like NoteContentFulltextExp), iterates over the input note set from becca, and checks text representations in-memory — zero SQL queries.
parse.ts creates a single OCRContentExpression(tokens) instead of N separate instances.
The LIMIT 50 and the N+1 blob→note/attachment queries are gone entirely.
2026-04-02 20:54:22 +03:00
Elian Doran b747402352 chore(ocr): get rid of costly ranking for OCR 2026-04-02 20:48:41 +03:00
Elian Doran 0398a9bda3 refactor(ocr): potential race condition with image upload 2026-04-02 20:40:17 +03:00
Elian Doran 72dff88384 refactor(ocr): get rid of unused routes and services 2026-04-02 20:34:37 +03:00
Elian Doran 0314a9755f refactor(ocr): minor changes 2026-04-02 20:32:58 +03:00
Elian Doran bc967b15b2 chore(server): fix accidental changes 2026-04-02 20:28:17 +03:00
Elian Doran 8ac686a19f fix(ocr): TIFF overlapping with image processor 2026-04-02 20:26:31 +03:00
Elian Doran aafecaa3a4 refactor(ocr): get rid of fake metadata 2026-04-02 20:24:31 +03:00
Elian Doran bb23b08b15 refactor(ocr): get rid of unused clean up 2026-04-02 20:23:03 +03:00
Elian Doran 476396da53 refactor(ocr): deduplicate batch processing 2026-04-02 20:19:32 +03:00
Elian Doran 5112971848 refactor(ocr): reduce duplication 2026-04-02 20:17:24 +03:00
Elian Doran 2d852c38ec feat(ocr): automatic processing of attachments 2026-04-02 20:00:55 +03:00
Elian Doran f163cacddc feat(ocr): integrate viewing attachment OCR 2026-04-02 19:51:11 +03:00
Elian Doran 6ecb1cb2b0 feat(settings): cross-reference OCR and language & region settings 2026-04-02 17:09:27 +03:00
Elian Doran 24fefe0711 refactor(ocr): remove unnecessary methods 2026-04-02 13:17:38 +03:00
Elian Doran e5eba69d0d fix(ocr): cannot handle image/tiff 2026-04-02 12:51:58 +03:00
Elian Doran bdd2b7e317 fix(ocr): properly handle office MIME types 2026-04-02 12:41:45 +03:00
Elian Doran ad29375975 chore(ocr): remove unimplemented logic 2026-04-02 12:36:10 +03:00
Elian Doran cf73a4ef43 feat(llm): integrate with OCR 2026-04-02 12:16:17 +03:00
Elian Doran 60a2621928 chore(ocr): remove last extraction date
Wasn't useful because blobs are hash-identified
2026-04-02 12:04:27 +03:00
Elian Doran b4e5d9dbc2 feat(ocr): not well integrate with sync 2026-04-02 11:43:19 +03:00
Elian Doran 650b700415 feat(options/media): use a slider for JPEG quality 2026-04-02 11:17:54 +03:00
renovate[bot] 212f742164 fix(deps): update dependency lodash-es to v4.18.1 [security] 2026-04-02 08:16:15 +00:00
Elian Doran 6f2296eb05 feat(ocr): use a slider for confidence 2026-04-02 11:09:36 +03:00
Elian Doran 722efd74c2 fix(ocr): default confidence level is too low 2026-04-02 11:06:58 +03:00
Elian Doran 5dc9b6defe chore(ocr): deduplicate & fix percentage for confidence in log 2026-04-02 11:04:26 +03:00
Elian Doran 605fbaaa4a fix(ocr): automatic OCR not respecting language 2026-04-02 11:01:20 +03:00
Elian Doran 23b46865c5 refactor(ocr): simplify initialization of image processor 2026-04-02 10:59:58 +03:00
Elian Doran ac310eaaf5 feat(ocr): handle cache dir properly 2026-04-02 10:54:15 +03:00
Elian Doran 010f59df8a chore(ocr): make OCR text representation selectable 2026-04-02 10:25:41 +03:00
Elian Doran 44a5dccd61 chore(ocr): remove master switch 2026-04-02 10:22:34 +03:00
Elian Doran acbbf021a1 refactor(ocr): remove unnecessary translations 2026-04-02 10:13:03 +03:00
Elian Doran 731fece258 feat(ocr): reintroduce batch processing 2026-04-02 10:08:24 +03:00
Elian Doran 8d255d1b89 feat(ocr): make "process OCR" always reprocess 2026-04-02 10:02:06 +03:00
Elian Doran 64318c92e7 fix(ocr): route default interfering with content language 2026-04-02 10:00:12 +03:00
Elian Doran 49fc7e48d4 feat(ocr): integrate with content language 2026-04-02 09:52:28 +03:00
Elian Doran ec9fa0baee chore(options): rename options to match media scope 2026-04-01 22:42:17 +03:00
Elian Doran ba91d91fd1 chore(options): start adding options for OCR 2026-04-01 22:37:32 +03:00
Elian Doran 0aa1fea9dc chore(options): improve media layout slightly 2026-04-01 22:30:41 +03:00
renovate[bot] 1551f01f49 chore(deps): update dependency pdfjs-dist to v5.6.205 2026-04-01 19:04:32 +00:00
Elian Doran d46748602e chore(settings): rebrand Images settings page to Media 2026-04-01 22:01:21 +03:00
Elian Doran 9cfad0fe6a refactor(ocr): move TextRepresentationResponse into server_api 2026-04-01 21:45:28 +03:00
Elian Doran 6d3cff84a4 feat(ocr): allow reprocessing of a file 2026-04-01 17:21:12 +03:00
Elian Doran 010230645c fix(ocr): text displayed in monospace 2026-04-01 17:20:10 +03:00
Elian Doran 5979290f0c refactor(ocr): get rid of inline styles 2026-04-01 17:18:58 +03:00
Elian Doran e648872257 fix(ocr): incorrect date display 2026-04-01 17:17:49 +03:00
Elian Doran e4910ae31a fix(ocr): pdf extraction not working due to import 2026-04-01 17:14:37 +03:00
Elian Doran d8ea0c7bcf feat(ocr): allow manual processing of OCR 2026-04-01 17:09:26 +03:00
Elian Doran 6393d2c188 chore(ocr): remove trainneddata artifact 2026-04-01 17:08:15 +03:00
Elian Doran d9f0a163cf refactor(ocr): use idiomatic status handling 2026-04-01 17:04:36 +03:00
Elian Doran 6534beec14 fix(ocr): errors not properly shown due to lack of convention 2026-04-01 16:58:34 +03:00
Elian Doran 6d050340ee fix(client): server errors don't reject the promise 2026-04-01 16:53:50 +03:00
Elian Doran 0e7f7fa208 chore(ocr): fix type issues & integrate ReadOnlyTextRepresentation 2026-04-01 16:45:38 +03:00
Elian Doran 287be0bd25 chore(scripts): integrate filter-tsc-output from standalone branch 2026-04-01 16:39:54 +03:00
Elian Doran 18cf2ff873 test(ocr): fix type issues 2026-04-01 16:35:45 +03:00
Elian Doran b626fb448b refactor(ocr): get rid of require imports 2026-04-01 16:30:27 +03:00
Elian Doran 38f6fb5a7f refactor(ocr): rename ocr_last_processed to textExtractionLastProcessed 2026-04-01 16:26:16 +03:00
Elian Doran 5846df7d02 refactor(ocr): rename ocr_text to textRepresentation 2026-04-01 16:14:08 +03:00
Elian Doran 9462d6109c Merge remote-tracking branch 'origin/main' into feat/add-ocr-capabilities 2026-04-01 15:59:05 +03:00
Elian Doran f0c93cd06e feat(llm): improve display of blocks while streaming 2026-04-01 15:38:23 +03:00
Elian Doran 14e0507689 fix(llm): web search not translated 2026-04-01 15:28:49 +03:00
Elian Doran 393b90f7be feat(llm): display skill read 2026-04-01 15:27:31 +03:00
Elian Doran 47ee5c1d84 feat(llm): display affected note in read current note 2026-04-01 15:11:34 +03:00
Elian Doran 1cb6f2d351 chore(llm): improve layout for tool card 2026-04-01 15:09:45 +03:00
Elian Doran bb72b0cdfc refactor(llm): proper translation use for element interpolation 2026-04-01 15:04:07 +03:00
Elian Doran ab2467b074 feat(llm): display note creation result 2026-04-01 14:57:45 +03:00
Elian Doran 2d652523bb feat(llm): display a reference to the affected note in tool calls 2026-04-01 14:55:18 +03:00
Elian Doran 55df50253f feat(llm): improve tool call style slightly 2026-04-01 14:51:17 +03:00
Elian Doran d009914ff9 chore(llm): update system prompt for tool creation 2026-04-01 14:48:13 +03:00
Elian Doran 5e97222206 feat(llm): display friendly tool names 2026-04-01 14:47:17 +03:00
Elian Doran 038705483b refactor(llm): integrate tools requiring context 2026-04-01 12:34:14 +03:00
Elian Doran 10c9ba5783 refactor(llm): different way to register tools 2026-04-01 12:20:08 +03:00
Elian Doran a1d008688b chore(llm): harden MCP against uninitialized database 2026-04-01 11:56:46 +03:00
Elian Doran 78a043c536 test(llm): test MCP using supertest 2026-04-01 11:52:49 +03:00
Elian Doran acdc840f17 feat(llm): improve MCP settings card 2026-04-01 11:46:54 +03:00
Elian Doran 63d4b8894b feat(llm): gate MCP access behind option 2026-04-01 11:44:01 +03:00
Elian Doran 23ccbf9642 chore(llm): add instructions for MCP use 2026-04-01 11:30:47 +03:00
Elian Doran a5793ff768 chore(mcp): add MCP config for localhost 2026-04-01 11:29:29 +03:00
Elian Doran a84e2f72c3 feat(llm/mcp): first implementation 2026-04-01 11:19:10 +03:00
Elian Doran 0d805a01c1 fix(deps): update dependency i18next to v26 (#9224) 2026-04-01 10:58:03 +03:00
Elian Doran ba90a1c396 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-04-01 10:38:47 +03:00
Elian Doran 465927e730 chore(deps): update dependency vite-plugin-static-copy to v4 (#9147) 2026-04-01 10:28:46 +03:00
Elian Doran 74f3c14a62 fix(llm): sidebar chat lost when saving to note 2026-04-01 10:26:33 +03:00
Elian Doran 2eb40c7b42 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-04-01 09:30:37 +03:00
Elian Doran 457c5f85af chore(client/i18n): fix weird translation 2026-04-01 09:30:34 +03:00
copilot-swe-agent[bot] c6ef3d774a fix: update vite.config.mts for vite-plugin-static-copy v4 breaking change
Agent-Logs-Url: https://github.com/TriliumNext/Trilium/sessions/df2e0038-ab36-4d77-b73a-f4739f9db838

Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com>
2026-03-31 20:31:34 +00:00
copilot-swe-agent[bot] 7f1e4c0969 fix: remove showSupportNotice from i18next init options (removed in v26)
Agent-Logs-Url: https://github.com/TriliumNext/Trilium/sessions/41f772f7-49b7-4905-8b17-cf90165fc736

Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com>
2026-03-31 20:13:27 +00:00
renovate[bot] e55cd7841f fix(deps): update dependency i18next to v26 2026-03-31 20:03:35 +00:00
Elian Doran 8b5b32fecb chore(deps): update dependency typescript to v6 (#9162) 2026-03-31 23:01:09 +03:00
copilot-swe-agent[bot] 819c9a7506 fix: resolve TypeScript 6 typecheck issues
- Remove deprecated `downlevelIteration` from tsconfig.base.json (not needed for ES2022+ target)
- Add `noUncheckedSideEffectImports: false` to tsconfig.base.json and ckeditor5 package tsconfigs to allow CSS/plugin side-effect imports
- Remove deprecated `baseUrl: "."` from 6 package tsconfig.lib.json files (unused without `paths`)
- Replace `NodeJS.Timeout` with `ReturnType<typeof setTimeout>` in debounce.ts

Agent-Logs-Url: https://github.com/TriliumNext/Trilium/sessions/8e861e56-2be6-4c61-9558-a666abbe3ff0

Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com>
2026-03-31 19:22:16 +00:00
Elian Doran 4b3ef50d4b Feature/llm tools (#9241) 2026-03-31 22:10:16 +03:00
Elian Doran bc945c5196 Translations update from Hosted Weblate (#9242) 2026-03-31 22:08:37 +03:00
Giovi 57ea3c576e Translated using Weblate (Italian)
Currently translated at 100.0% (1775 of 1775 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-03-31 19:06:02 +00:00
Marc 450e15f558 Translated using Weblate (French)
Currently translated at 89.0% (1581 of 1775 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2026-03-31 19:06:01 +00:00
Marc a66ef977a0 Translated using Weblate (French)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/fr/
2026-03-31 19:05:59 +00:00
Marc 96a474adc1 Translated using Weblate (French)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/fr/
2026-03-31 19:05:59 +00:00
Giovi 1fe22aeef1 Translated using Weblate (Italian)
Currently translated at 100.0% (391 of 391 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2026-03-31 19:05:58 +00:00
Elian Doran a97897527e fix(deps): update univer monorepo to v0.19.0 (#9223) 2026-03-31 22:05:49 +03:00
Elian Doran 86bbb4d885 chore(deps): update dependency @redocly/cli to v2.25.3 (#9233) 2026-03-31 21:59:25 +03:00
Elian Doran 041f8314ab fix(deps): update dependency mind-elixir to v5.10.0 (#9228) 2026-03-31 21:58:13 +03:00
Elian Doran dffdeff798 chore(deps): fix flake lock 2026-03-31 21:52:55 +03:00
Adorian Doran d61e399c67 style/about dialog: add an animation to the donate button 2026-03-31 21:48:14 +03:00
Adorian Doran 601f246bdc style/about dialog: move the brief history tooltip from the contributor name link to the role string 2026-03-31 21:29:32 +03:00
copilot-swe-agent[bot] 6f08dc3ada Merge branch 'main' into renovate/mind-elixir-5.x - resolve translations conflict
Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com>
2026-03-31 18:21:21 +00:00
copilot-swe-agent[bot] 07e1b86586 chore: keep only English mind-map translations (others handled by Weblate)
Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com>
2026-03-31 18:20:11 +00:00
Adorian Doran ce4883ea39 Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-03-31 21:12:12 +03:00
copilot-swe-agent[bot] 2deda8947e feat: migrate mind-elixir i18n to use own translations integrated with Weblate
- Remove deprecated `locale` option and LOCALE_MAPPINGS constant from MindMap.tsx
- Add `buildMindElixirLangPack()` function using i18next translations for contextMenu.locale
- Add mind-map translation keys to all 37 locale translation files
- Languages with specific translations: de, es, fr, it, ja, pt, pt_br, ru, ro, cn, tw, fi, ko, nl, nb-NO, sv
- Other languages fall back to English via i18next

Agent-Logs-Url: https://github.com/TriliumNext/Trilium/sessions/f2cb95ee-9a97-4618-ba9a-5fb7f31ab965

Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com>
2026-03-31 18:08:38 +00:00
Elian Doran adb9532d1b chore(deps): update dependency @smithy/middleware-retry to v4.4.45 (#9234) 2026-03-31 21:06:22 +03:00
Elian Doran a2959342a9 chore(deps): update dependency express-rate-limit to v8.3.2 (#9236) 2026-03-31 21:05:58 +03:00
Elian Doran f528833232 chore(llm): relocate skills to assets 2026-03-31 20:52:17 +03:00
Elian Doran a6b8785341 chore(llm): address requested changes 2026-03-31 20:32:19 +03:00
Elian Doran 6e7a14fb3e chore(llm): update to AI SDK 6 2026-03-31 20:24:49 +03:00
Elian Doran 708180a037 fix(llm): sending empty messages crashes on Anthropic 2026-03-31 19:47:39 +03:00
Elian Doran 04efa2742c feat(llm): basic support for Google Gemini 2026-03-31 19:28:42 +03:00
Elian Doran 0e2c96d544 feat(llm): add web search to OpenAI 2026-03-31 19:08:41 +03:00
Elian Doran a45c1818a5 refactor(llm): deduplicate logic between providers 2026-03-31 19:05:38 +03:00
Elian Doran f04f47d17a fix(llm): not returning full list of models 2026-03-31 18:59:02 +03:00
Elian Doran cabce14a49 chore(llm): set up for ChatGPT 2026-03-31 18:51:19 +03:00
Elian Doran 5f669684c4 feat(llm): enforce MIME type in code notes 2026-03-31 18:39:47 +03:00
Elian Doran 4d169809bd chore(llm): improve render notes skill 2026-03-31 18:12:42 +03:00
Elian Doran 2929d64fa0 chore(llm): improve TSX import skill 2026-03-31 18:07:28 +03:00
Elian Doran 20311d31f6 chore(llm): modify frontend script to prefer Preact 2026-03-31 16:04:48 +03:00
Elian Doran c13b68ef42 feat(llm): basic skill to write scripts 2026-03-31 16:01:20 +03:00
Elian Doran 8eff623b67 Merge remote-tracking branch 'origin/main' into feature/llm_tools 2026-03-31 15:52:10 +03:00
Elian Doran f4b9207379 fix(llm/sidebar): no longer properly persisting the chat 2026-03-31 15:52:05 +03:00
Elian Doran 90930e19e7 feat(llm): improve search discoverability 2026-03-31 15:41:56 +03:00
Elian Doran 8c0dacd6d7 feat(llm): basic skill to do search 2026-03-31 15:36:50 +03:00
Elian Doran c617bea45a feat(llm): basic tool to get subtree 2026-03-31 15:15:14 +03:00
Elian Doran bac25c9173 feat(llm): basic tool to get child notes 2026-03-31 15:04:02 +03:00
renovate[bot] acfc3f617e chore(deps): update dependency typescript to v6 2026-03-31 11:14:01 +00:00
Elian Doran 4c6aa3baf1 Translations update from Hosted Weblate (#9240) 2026-03-31 14:11:37 +03:00
Elian Doran ed2d72c008 AI reintegration test (#9225) 2026-03-31 14:11:02 +03:00
Marc 3cb82c58a1 Translated using Weblate (French)
Currently translated at 99.3% (157 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/fr/
2026-03-31 13:09:51 +02:00
Marc d87e3cb24d Translated using Weblate (French)
Currently translated at 90.2% (1551 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2026-03-31 13:09:50 +02:00
Elian Doran 8a4c46c40b feat(server): protect becca against protoype pollution 2026-03-31 14:03:49 +03:00
Elian Doran 5f3dcdb7e5 fix(renovate): set up a minimum release age before doing updates 2026-03-31 10:53:37 +03:00
Elian Doran 8964c316b8 Revert "chore(deps): update dependency axios to v1.14.1" (#9239) 2026-03-31 10:46:43 +03:00
Elian Doran 230f682a27 Revert "chore(deps): update dependency axios to v1.14.1" 2026-03-31 10:46:30 +03:00
Elian Doran 8f25d048df chore(deps): update dependency axios to v1.14.1 (#9235) 2026-03-31 07:32:25 +03:00
renovate[bot] 90fcf3153c chore(deps): update dependency express-rate-limit to v8.3.2 2026-03-31 01:48:59 +00:00
renovate[bot] 069c4cf5c4 chore(deps): update dependency axios to v1.14.1 2026-03-31 01:48:18 +00:00
renovate[bot] f10e55ad71 chore(deps): update dependency @smithy/middleware-retry to v4.4.45 2026-03-31 01:47:36 +00:00
renovate[bot] a934c7842b chore(deps): update dependency @redocly/cli to v2.25.3 2026-03-31 01:46:56 +00:00
Elian Doran a2b6bc0493 chore(llm): address requested changes 2026-03-30 22:20:44 +03:00
Elian Doran 24e418bf7c Translations update from Hosted Weblate (#9232) 2026-03-30 22:03:35 +03:00
Hosted Weblate 3fc3ef4ea8 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-03-30 18:59:12 +00:00
Elian Doran 952d6b9851 feat(db): add missing sqlite indices to help with performance (#9141) 2026-03-30 21:58:54 +03:00
Elian Doran 841c58ca8c chore: fix type errors 2026-03-30 20:23:00 +03:00
Elian Doran 41164add15 chore(deps): fix OOM caused by Zod
See https://github.com/vercel/ai/issues/7351
2026-03-30 20:17:37 +03:00
Elian Doran f4858d3684 refactor(llm): simplify the saving process 2026-03-30 19:40:38 +03:00
Elian Doran be60479122 fix(llm): XSS risk when displaying the message 2026-03-30 19:36:22 +03:00
Elian Doran 948f160d14 fix(llm): XSS risk when displaying the message 2026-03-30 19:31:56 +03:00
Elian Doran 768c733f92 fix(llm): missing translation for name 2026-03-30 19:31:44 +03:00
Elian Doran 1a02be7c91 fix(llm): usage not reset when opening an empty chat 2026-03-30 19:23:42 +03:00
Elian Doran ac75f6f7a6 feat(llm): hide the feature behind an experimental flag 2026-03-30 19:19:04 +03:00
Elian Doran b2befb4feb feat(llm): automatic refresh of note title 2026-03-30 19:08:54 +03:00
Elian Doran 3e49399f82 fix(llm): automatic title not working for standalone chats 2026-03-30 19:03:17 +03:00
Elian Doran eaaaf3effd fix(llm): automatic title not persisted 2026-03-30 18:59:49 +03:00
Elian Doran f2cd1be3af fix(llm): history doesn't show last notes correctly 2026-03-30 18:55:41 +03:00
Elian Doran b4fcf41420 feat(llm): basic auto-title 2026-03-30 18:52:22 +03:00
Elian Doran 5feccae2a0 feat(llm): enable cache control in Anthropic 2026-03-30 18:26:49 +03:00
Elian Doran d28318005d feat(llm): basic support for attributes 2026-03-30 18:26:23 +03:00
Elian Doran fcf39d7786 feat(llm): show footer only on hover 2026-03-30 18:14:23 +03:00
Elian Doran 5e9fc614d7 feat(llm): display message time 2026-03-30 18:08:20 +03:00
Elian Doran a860803cc4 feat(llm): add usage underneath the message 2026-03-30 18:02:06 +03:00
Elian Doran c40f5953fa feat(llm): make the prompt usage more compact 2026-03-30 17:56:07 +03:00
Elian Doran 241282296e fix(llm): report append to note not supporting all string content types 2026-03-30 17:50:28 +03:00
Elian Doran 8a8143167f feat(llm): report tool call errors 2026-03-30 17:45:58 +03:00
Elian Doran 12797293f0 feat(llm): improve model name display 2026-03-30 17:40:57 +03:00
Elian Doran af0eb9551a feat(llm): save revision before changing content 2026-03-30 17:32:40 +03:00
Elian Doran 8a492450da feat(llm): render tools inline 2026-03-30 17:29:25 +03:00
Elian Doran f3cb356b2b chore(llm): allow editing all string note types 2026-03-30 17:20:18 +03:00
Elian Doran 8ea1b7afba chore(llm): always mention note type 2026-03-30 17:16:49 +03:00
Elian Doran 911c1bdd0c feat(llm): use Markdown instead of HTML 2026-03-30 17:13:20 +03:00
Elian Doran 41f3274c7e feat(llm): use tool-based approach for reading current note 2026-03-30 17:08:47 +03:00
Elian Doran 0fc62dda78 chore(llm): styling of history menu 2026-03-30 16:38:11 +03:00
Elian Doran e482c911c4 chore(desktop): add script to start prod with no dir 2026-03-30 12:45:30 +03:00
renovate[bot] 0e59126c52 fix(deps): update dependency mind-elixir to v5.10.0 2026-03-30 01:32:10 +00:00
Elian Doran abbe6437a9 chore(llm): use NoItems for type widget as well 2026-03-29 23:58:30 +03:00
Elian Doran f2d67d4128 fix(desktop): stream not working on Electron 2026-03-29 23:50:23 +03:00
Elian Doran 7c9e02996e fix(desktop): unable to list providers 2026-03-29 23:47:37 +03:00
Elian Doran dc560edb7c fix(deps): update dependency preact-render-to-string to v6.6.7 (#9221) 2026-03-29 23:23:55 +03:00
renovate[bot] f7bbcee386 fix(deps): update dependency preact-render-to-string to v6.6.7 2026-03-29 20:23:27 +00:00
Elian Doran 2182d4b440 fix(deps): update dependency react-i18next to v17.0.1 (#9222) 2026-03-29 23:21:15 +03:00
Elian Doran c43e10c4af feat(llm): add tool to create note 2026-03-29 23:01:05 +03:00
Elian Doran 25037324ab feat(llm): improve handling when there is no provider set 2026-03-29 22:55:28 +03:00
Elian Doran b8f9916d13 feat(llm): add tools to append or replace note content 2026-03-29 22:53:06 +03:00
Elian Doran ed8b9cc943 feat(llm): integrate API keys with provider settings 2026-03-29 22:46:07 +03:00
Elian Doran efbe7e0a21 feat(llm): add provider config in options 2026-03-29 22:42:05 +03:00
Elian Doran 46dd500d37 chore(llm): improve button for note access 2026-03-29 22:21:42 +03:00
Elian Doran 261c95fb06 feat(llm): add button to toggle access to the note 2026-03-29 22:20:26 +03:00
Elian Doran 41a122f722 feat(llm): allow the sidebar chat access to the note content 2026-03-29 22:09:29 +03:00
Elian Doran 490406e12a feat(llm): create empty settings page 2026-03-29 22:03:52 +03:00
Elian Doran d12677094d chore(llm): improve chat bar size in sidebar 2026-03-29 21:54:50 +03:00
Elian Doran 3c69792744 feat(llm): improve layout with send button & context window 2026-03-29 21:52:35 +03:00
Elian Doran 395e79adbf fix(llm): sidebar chat box required scrolling to reach 2026-03-29 21:46:04 +03:00
Elian Doran d5e56d8e29 feat(llm): integrate chat options into model selector 2026-03-29 21:43:27 +03:00
Elian Doran e4c4873aa7 feat(llm): group legacy models into submenu 2026-03-29 21:35:33 +03:00
Elian Doran 293da1d4ef feat(llm): display cost next to the title 2026-03-29 21:29:59 +03:00
Elian Doran d1c206a05a feat(llm): add same selectors in sidebar 2026-03-29 21:22:54 +03:00
Elian Doran 37b370511f chore(llm): get rid of different chat bar for sidebar 2026-03-29 21:14:09 +03:00
Elian Doran 734ef5533a refactor(llm): extract chat input bar into separate component 2026-03-29 21:11:51 +03:00
Elian Doran 0eb9b9fdac fix(llm): wrong icon size 2026-03-29 21:05:58 +03:00
Elian Doran 7817890cfe feat(llm): history button 2026-03-29 21:00:43 +03:00
Elian Doran 23dbedd139 refactor(llm): deduplicate LLM chat widgets 2026-03-29 20:28:19 +03:00
Elian Doran 2c8e2251fa feat(llm): use a better placeholder 2026-03-29 20:13:11 +03:00
Elian Doran 4c27ed9997 fix(sidebar): pressing a sidebar button would collapse the section 2026-03-29 20:11:16 +03:00
Elian Doran d2fd1362c0 feat(llm): redesign sidebar to work on a single conversation 2026-03-29 20:09:00 +03:00
Elian Doran 45e57f0d5e chore(llm): always show AI chat sidebar 2026-03-29 20:00:22 +03:00
Elian Doran 660facea96 fix(llm): hide sidebar item if already in a chat 2026-03-29 19:52:44 +03:00
Elian Doran 9fa2e940d6 fix(llm): chat note created for every note navigated to 2026-03-29 19:49:13 +03:00
Elian Doran 0ffcfb8f43 feat(llm): identify sidebar chat notes by note ID 2026-03-29 19:45:45 +03:00
Elian Doran ad1b3df74e fix(llm): sidebar not collapsing properly 2026-03-29 19:36:58 +03:00
Elian Doran 0ccf10bbbb feat(llm): basic sidebar implementation 2026-03-29 19:35:33 +03:00
Elian Doran 59c007e801 feat(llm): API to create LLM notes similar to search 2026-03-29 18:55:43 +03:00
Elian Doran 0654bc1049 fix(llm): wrong context window 2026-03-29 15:20:08 +03:00
Elian Doran 9fabefc847 feat(llm): minimize context window indicator 2026-03-29 15:17:27 +03:00
Elian Doran e70ded0be1 fix(llm): content window progress bar not shown at startup 2026-03-29 15:12:18 +03:00
Elian Doran 16806275e0 feat(llm): basic context window progress bar 2026-03-29 15:10:49 +03:00
Elian Doran e8214c3aae chore(llm): update list of models 2026-03-29 15:03:53 +03:00
Elian Doran 3a8e148301 chore(llm): correct pricing 2026-03-29 14:54:51 +03:00
Elian Doran a0b546614f chore(llm): make multiplier relative to default 2026-03-29 14:47:41 +03:00
Elian Doran 5fcea86b94 feat(llm): basic cost multiplier 2026-03-29 14:44:40 +03:00
Elian Doran d8c00ed6c0 chore(llm): use FormDropdownList 2026-03-29 14:39:53 +03:00
Elian Doran 863e68ec88 feat(llm): add model switcher 2026-03-29 14:34:31 +03:00
Elian Doran 046ee343dc feat(llm): display the model that was used 2026-03-29 14:06:23 +03:00
Elian Doran 2db9e376d5 refactor(llm): delegate pricings to provider 2026-03-29 14:02:33 +03:00
Elian Doran 9458128ad6 feat(llm): display estimated cost 2026-03-29 13:57:25 +03:00
Elian Doran 89638e3f56 feat(llm): display usage info (prompt + completion) 2026-03-29 13:53:13 +03:00
Elian Doran 8d492d7d4b feat(llm): show tool calls as references 2026-03-29 13:37:35 +03:00
Elian Doran 246c561b64 feat(llm): basic tool use 2026-03-29 13:30:04 +03:00
Elian Doran 88295f2462 refactor(llm): use vercel/AI instead 2026-03-29 13:07:21 +03:00
Elian Doran d2d4e1cbac refactor(llm): use vercel/AI instead 2026-03-29 13:03:05 +03:00
Elian Doran 261e5b59e0 refactor(llm): use shared types in commons 2026-03-29 12:44:53 +03:00
Elian Doran fa7ec01329 fix(llm): use of crypto.randomUUID 2026-03-29 12:27:18 +03:00
Elian Doran 4c4a29f9cf chore(llm): fix type issues 2026-03-29 12:24:13 +03:00
Elian Doran 9ddcaf4552 refactor(server): add triliumResponseHandled to typings 2026-03-29 12:01:06 +03:00
Elian Doran c806a99fbc feat(llm): display thinking process 2026-03-29 11:51:39 +03:00
Elian Doran ad91d360ce fix(llm): thinking budget mismatch 2026-03-29 11:41:28 +03:00
Elian Doran cf8d7cd71f feat(llm): persist errors 2026-03-29 11:37:12 +03:00
Elian Doran f370799b1d chore(llm): start working on extended thjinking 2026-03-29 11:26:10 +03:00
Elian Doran f8655b5de4 fix(llm): errors not selectable 2026-03-29 11:25:54 +03:00
renovate[bot] ed3a5778d0 fix(deps): update univer monorepo to v0.19.0 2026-03-29 00:54:35 +00:00
renovate[bot] 19d213059f fix(deps): update dependency react-i18next to v17.0.1 2026-03-29 00:53:30 +00:00
Elian Doran 276a802ab2 chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55.3.0 (#9209) 2026-03-28 23:28:14 +02:00
Elian Doran e756ded89f fix(deps): update dependency @zumer/snapdom to v2.7.0 (#9213) 2026-03-28 23:27:22 +02:00
Elian Doran b551f0fe2d feat(llm): basic Markdown rendering 2026-03-28 21:19:59 +02:00
Elian Doran f6e8bdb0fd fix(llm): text not selectable 2026-03-28 21:07:54 +02:00
Elian Doran 9029ea8085 fix(llm): last response not saved 2026-03-28 21:06:20 +02:00
Elian Doran d61ade9fe9 feat(llm): add basic web search support 2026-03-28 21:00:53 +02:00
Elian Doran aa1fe549c7 feat(llm): make source viewable 2026-03-28 20:52:40 +02:00
Elian Doran e3701bbcb4 fix(llm): streaming not working due to compression 2026-03-28 20:45:35 +02:00
Elian Doran fb7fc4bf0c feat(llm): basic chat interface 2026-03-28 20:39:09 +02:00
Lorinc936 f8c59a1730 Merge branch 'main' into main 2026-03-28 17:26:36 +00:00
Elian Doran dc50ca157d chore(deps): update dependency electron to v41.1.0 (#9211) 2026-03-28 11:11:11 +02:00
Elian Doran ff2e775b5e chore(deps): update node.js to v24.14.1 (#9184) 2026-03-28 11:10:44 +02:00
renovate[bot] 584d48c5ab chore(deps): update dependency vite-plugin-static-copy to v4 2026-03-28 09:06:29 +00:00
Elian Doran 25df43b0be chore(deps): update dependency vite to v8.0.3 (#9194) 2026-03-28 11:02:24 +02:00
Elian Doran 1af1fcd148 chore(deps): update dependency @redocly/cli to v2.25.2 (#9206) 2026-03-28 10:54:11 +02:00
Elian Doran 516f9aad45 fix(deps): update dependency @preact/signals to v2.9.0 (#9212) 2026-03-28 10:53:55 +02:00
Elian Doran 79a420de0f chore(deps): update dependency express-openid-connect to v2.20.1 (#9207) 2026-03-28 10:50:27 +02:00
Elian Doran ac213b6664 fix(deps): update dependency katex to v0.16.44 (#9208) 2026-03-28 10:50:01 +02:00
Elian Doran ff2d74029a chore(deps): update dependency axios to v1.14.0 (#9210) 2026-03-28 10:49:46 +02:00
Elian Doran 31ac1d3f2d fix(deps): update dependency react-i18next to v17 (#9214) 2026-03-28 10:49:21 +02:00
renovate[bot] 2c32382ca6 fix(deps): update dependency react-i18next to v17 2026-03-28 01:18:11 +00:00
renovate[bot] 0d94c20deb fix(deps): update dependency @zumer/snapdom to v2.7.0 2026-03-28 01:17:16 +00:00
renovate[bot] 9904df1611 fix(deps): update dependency @preact/signals to v2.9.0 2026-03-28 01:16:17 +00:00
renovate[bot] 2d945d4fb2 chore(deps): update dependency electron to v41.1.0 2026-03-28 01:15:19 +00:00
renovate[bot] c1f9a22bf3 chore(deps): update dependency axios to v1.14.0 2026-03-28 01:14:20 +00:00
renovate[bot] 22e2e2339e chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55.3.0 2026-03-28 01:13:17 +00:00
renovate[bot] b6435bbfc9 fix(deps): update dependency katex to v0.16.44 2026-03-28 01:12:21 +00:00
renovate[bot] 63387cb958 chore(deps): update dependency express-openid-connect to v2.20.1 2026-03-28 01:11:16 +00:00
renovate[bot] a8d104ec57 chore(deps): update dependency @redocly/cli to v2.25.2 2026-03-28 01:10:12 +00:00
Adorian Doran 2432bb11c7 style/about dialog: allow long directory paths to be wrapped 2026-03-27 19:13:05 +02:00
renovate[bot] 10377b527f chore(deps): update dependency vite to v8.0.3 2026-03-27 17:05:56 +00:00
Adorian Doran 87fb568995 style/about dialog: customize the style of tooltips used for brief history 2026-03-27 18:42:26 +02:00
Adorian Doran 355209769f style/tooltips: use higher contrast on the light theme 2026-03-27 18:30:24 +02:00
Adorian Doran 72cc5cc5ea style/about dialog: update the donate button link on light theme 2026-03-27 18:23:05 +02:00
Adorian Doran d4552fa075 client/about dialog: refactor 2026-03-27 18:08:36 +02:00
JYC333 4413566e14 chore(deps): update dependency happy-dom to v20.8.9 (#9192) 2026-03-27 15:46:18 +00:00
Adorian Doran 8dafd918ed Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-03-27 17:29:16 +02:00
renovate[bot] 6c295611cc chore(deps): update node.js to v24.14.1 2026-03-27 06:55:05 +00:00
renovate[bot] c1c98a6955 chore(deps): update dependency happy-dom to v20.8.9 2026-03-27 06:53:56 +00:00
Elian Doran 6e222bb901 chore(deps): update dependency user-agent-data-types to v0.4.3 (#9193) 2026-03-27 08:49:31 +02:00
Elian Doran 82b8601e0b chore(deps): update vitest monorepo to v4.1.2 (#9195) 2026-03-27 08:49:02 +02:00
Elian Doran 47e515bc77 fix(deps): update dependency i18next to v25.10.10 (#9196) 2026-03-27 08:48:25 +02:00
Elian Doran eef35c3a5f fix(deps): update dependency panzoom to v9.4.4 (#9198) 2026-03-27 08:43:36 +02:00
Elian Doran a18d0484c5 chore(deps): update dependency express-openid-connect to v2.20.0 (#9199) 2026-03-27 08:42:31 +02:00
Elian Doran 4eaa3d7ac1 chore(deps): update dependency stylelint to v17.6.0 (#9200) 2026-03-27 08:42:15 +02:00
Elian Doran ad24cf9ab9 fix(deps): update dependency katex to v0.16.43 (#9197) 2026-03-27 08:41:39 +02:00
renovate[bot] 5467d7719d chore(deps): update dependency stylelint to v17.6.0 2026-03-27 01:56:44 +00:00
renovate[bot] 875b3a3f9a chore(deps): update dependency express-openid-connect to v2.20.0 2026-03-27 01:56:02 +00:00
renovate[bot] 4ab6a66c75 fix(deps): update dependency panzoom to v9.4.4 2026-03-27 01:55:20 +00:00
renovate[bot] 53e157567d fix(deps): update dependency katex to v0.16.43 2026-03-27 01:54:38 +00:00
renovate[bot] 5725680d3a fix(deps): update dependency i18next to v25.10.10 2026-03-27 01:53:56 +00:00
renovate[bot] 07fe884fd8 chore(deps): update vitest monorepo to v4.1.2 2026-03-27 01:53:12 +00:00
renovate[bot] 8d57a593d8 chore(deps): update dependency user-agent-data-types to v0.4.3 2026-03-27 01:51:38 +00:00
Lorinc936 c833c3591f docs: documentation for downloading backups 2026-03-26 22:09:01 +01:00
Lorinc936 ccbd962e0b Backend for backup download button 2026-03-26 21:57:53 +01:00
Lorinc936 966d2afe69 Feat: backup download frontend and locales 2026-03-26 21:36:54 +01:00
Elian Doran fb9f33b9ff chore(deps): update dependency @codemirror/language to v6.12.3 (#9182) 2026-03-26 17:27:53 +02:00
Elian Doran 2c690d4dd2 chore(deps): update dependency electron to v41.0.4 (#9183) 2026-03-26 17:27:18 +02:00
renovate[bot] 7db7dc287f chore(deps): update dependency electron to v41.0.4 2026-03-26 01:15:29 +00:00
renovate[bot] dece273c2b chore(deps): update dependency @codemirror/language to v6.12.3 2026-03-26 01:14:45 +00:00
JYC333 bf7449bc90 Translations update from Hosted Weblate (#9165) 2026-03-25 15:24:42 +00:00
noobhjy 6f3c9e2883 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-03-25 16:04:33 +01:00
TS 49248a636a Translated using Weblate (Polish)
Currently translated at 100.0% (387 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2026-03-25 16:04:32 +01:00
Wojciech O f51b0eb4de Translated using Weblate (Polish)
Currently translated at 100.0% (387 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2026-03-25 16:04:31 +01:00
Luk On f0d06815ec Translated using Weblate (Polish)
Currently translated at 100.0% (387 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2026-03-25 16:04:30 +01:00
TS 070701ee9e Translated using Weblate (Polish)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/pl/
2026-03-25 16:04:30 +01:00
TS 57fefaae1d Translated using Weblate (Polish)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/pl/
2026-03-25 16:04:29 +01:00
TS 1d109f592b Translated using Weblate (Polish)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2026-03-25 16:04:28 +01:00
Mik Piet 29b01c3fe6 Translated using Weblate (Polish)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2026-03-25 16:04:27 +01:00
Giovi 6cd263a897 Translated using Weblate (Italian)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/it/
2026-03-25 16:04:27 +01:00
Giovi c9ca1de271 Translated using Weblate (Italian)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-03-25 16:04:26 +01:00
Francis C. c369ba416c Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-03-25 16:04:25 +01:00
Lluís Forns 4b3d923d29 Translated using Weblate (Catalan)
Currently translated at 6.5% (112 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ca/
2026-03-25 16:04:24 +01:00
JYC333 64c3d0b36d chore(deps): update dependency happy-dom to v20.8.8 (#9166) 2026-03-25 15:04:13 +00:00
Adorian Doran 0386e7dd4f style/about dialog: add a clue about contributor links with a tooltip 2026-03-25 11:41:50 +02:00
Adorian Doran 573ab077ac client/about dialog: add a delay for contributor link hover event 2026-03-25 11:30:50 +02:00
Adorian Doran 496405d922 client/about dialog: add custom tooltips 2026-03-25 11:19:54 +02:00
Elian Doran 0fdc3590dc fix(deps): update dependency i18next to v25.10.9 (#9168) 2026-03-25 09:52:26 +02:00
Elian Doran 26fd6a573d chore(deps): update node.js to v24.14.1 (#9167) 2026-03-25 09:52:13 +02:00
renovate[bot] 59d8961111 fix(deps): update dependency i18next to v25.10.9 2026-03-25 06:27:01 +00:00
Elian Doran 9b733849a9 fix(deps): update dependency katex to v0.16.42 (#9169) 2026-03-25 08:24:47 +02:00
Elian Doran 133b847b15 fix(deps): update dependency react-i18next to v16.6.6 (#9170) 2026-03-25 08:24:14 +02:00
Elian Doran ecdbed6bac chore(deps): update dependency @redocly/cli to v2.25.1 (#9171) 2026-03-25 08:23:49 +02:00
Elian Doran d1deccc23c Merge branch 'main' into renovate/redocly-cli-2.x 2026-03-25 08:23:39 +02:00
Elian Doran c71d8a87b9 chore(deps): update dependency image-type to v6.1.0 (#9172) 2026-03-25 08:23:19 +02:00
Elian Doran 0614d92597 chore(deps): update pnpm to v10.33.0 (#9173) 2026-03-25 08:22:55 +02:00
renovate[bot] 9ab7e8e2b7 chore(deps): update pnpm to v10.33.0 2026-03-25 01:37:38 +00:00
renovate[bot] 0a5543cc72 chore(deps): update dependency image-type to v6.1.0 2026-03-25 01:37:27 +00:00
renovate[bot] 6d000d7b7c chore(deps): update dependency @redocly/cli to v2.25.1 2026-03-25 01:36:35 +00:00
renovate[bot] ac4ca16e85 fix(deps): update dependency react-i18next to v16.6.6 2026-03-25 01:35:37 +00:00
renovate[bot] e248d93e29 fix(deps): update dependency katex to v0.16.42 2026-03-25 01:34:41 +00:00
renovate[bot] acd786da67 chore(deps): update node.js to v24.14.1 2026-03-25 01:32:38 +00:00
renovate[bot] ef19d6260c chore(deps): update dependency happy-dom to v20.8.8 2026-03-25 01:32:31 +00:00
Adorian Doran 591b3a121f style/about dialog: add icon animation 2026-03-25 01:41:00 +02:00
Adorian Doran a81dae2ad0 client/about dialog: allow toggling to the classic icon 2026-03-25 01:01:16 +02:00
Adorian Doran d370ee2d99 style/about dialog: select the icon using CSS class names 2026-03-25 00:28:38 +02:00
Adorian Doran a6b1af6a16 style/about dialog: improve appearance 2026-03-24 23:57:44 +02:00
JYC333 638e1ebd1d chore(deps): update dependency webdriverio to v9.27.0 (#9160) 2026-03-24 21:26:56 +00:00
Adorian Doran 2d21627aff client/about dialog: refactor 2026-03-24 23:20:20 +02:00
Adorian Doran 0fb3f98136 client/about dialog: add some tooltips 2026-03-24 22:55:55 +02:00
Adorian Doran 3889d7a5be client/about dialog: add a license link 2026-03-24 21:18:13 +02:00
Adorian Doran 9d3c997743 style/about dialog: improve appearance 2026-03-24 20:18:10 +02:00
Adorian Doran 8c86f9fcea client/about dialog: fix unwanted array mutation 2026-03-24 19:49:44 +02:00
Adorian Doran 1c74a019ab style/about dialog: create a card-like table style 2026-03-24 19:32:14 +02:00
Adorian Doran 11a46f0f58 client/about dialog: reduce the contributor list length to 10 2026-03-24 18:54:48 +02:00
renovate[bot] 0c5efc3dcb chore(deps): update dependency webdriverio to v9.27.0 2026-03-24 16:25:45 +00:00
JYC333 a774218429 fix(deps): update dependency @zumer/snapdom to v2.6.0 (#9161) 2026-03-24 16:20:58 +00:00
renovate[bot] e305be9e75 fix(deps): update dependency @zumer/snapdom to v2.6.0 2026-03-24 16:03:21 +00:00
JYC333 f267dd5fc1 fix(deps): update dependency diff to v8.0.4 (#9159) 2026-03-24 15:57:59 +00:00
JYC333 6ba736b83f chore(deps): update dependency vite to v8.0.2 (#9156) 2026-03-24 15:57:40 +00:00
renovate[bot] 5eb8715295 fix(deps): update dependency diff to v8.0.4 2026-03-24 12:32:24 +00:00
renovate[bot] 7654be5132 chore(deps): update dependency vite to v8.0.2 2026-03-24 12:31:24 +00:00
JYC333 3f4358a422 chore(deps): update typescript-eslint monorepo to v8.57.2 (#9157) 2026-03-24 12:23:36 +00:00
JYC333 b3ca412bbd chore(deps): update dependency happy-dom to v20.8.7 (#9154) 2026-03-24 12:23:03 +00:00
renovate[bot] d1f60840a2 chore(deps): update typescript-eslint monorepo to v8.57.2 2026-03-24 12:04:49 +00:00
renovate[bot] a337ace856 chore(deps): update dependency happy-dom to v20.8.7 2026-03-24 12:00:19 +00:00
JYC333 0b6f6dee7f chore(deps): update vitest monorepo to v4.1.1 (#9158) 2026-03-24 11:58:29 +00:00
JYC333 93f1743432 chore(deps): update dependency typedoc to v0.28.18 (#9155) 2026-03-24 11:55:50 +00:00
renovate[bot] 3fb4ab1a31 chore(deps): update vitest monorepo to v4.1.1 2026-03-24 00:42:19 +00:00
renovate[bot] 8970d02404 chore(deps): update dependency typedoc to v0.28.18 2026-03-24 00:40:07 +00:00
Elian Doran b671aa6204 fix(deps): update dependency i18next to v25.10.5 (#9144) 2026-03-23 15:59:06 +02:00
Elian Doran 7ffb8b0202 chore(deps): update dependency vite-plugin-static-copy to v3.4.0 (#9146) 2026-03-23 15:58:47 +02:00
renovate[bot] 6564ea2738 fix(deps): update dependency i18next to v25.10.5 2026-03-23 13:40:08 +00:00
Elian Doran 0a673d2f1b fix(deps): update dependency react-i18next to v16.6.2 (#9145) 2026-03-23 15:35:20 +02:00
Adorian Doran 0a0157a1ef style/about dialog: improve appearance 2026-03-23 11:41:13 +02:00
renovate[bot] 05eea0d1f1 fix(deps): update dependency react-i18next to v16.6.2 2026-03-23 09:25:16 +00:00
Adorian Doran 680fb4122c Merge branch 'feat/about-dialog-overhaul' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-03-23 10:36:36 +02:00
Adorian Doran 3502324389 client/about dialog: add keys to the contributor list 2026-03-23 10:36:32 +02:00
Adorian Doran 97e52e53bf Update scripts/update-contributor-list.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-23 10:34:03 +02:00
Adorian Doran dfd68ca8a3 scripts/update contributor list: update indentation size 2026-03-23 10:07:47 +02:00
Adorian Doran fc6bdb56df client/about dialog: refactor 2026-03-23 10:06:53 +02:00
Adorian Doran 129f1ccd8d client/about dialog: add a full list link, improve layout 2026-03-23 09:52:04 +02:00
Adorian Doran f6e92c411e client/about dialog: show the contributor list 2026-03-23 09:38:23 +02:00
Adorian Doran db98884ae4 scripts/update contributor list: refactor 2026-03-23 09:00:30 +02:00
Adorian Doran a7a1e5c480 scripts/update contributor list: optimize 2026-03-23 08:53:52 +02:00
renovate[bot] 1215fbf3e1 chore(deps): update dependency vite-plugin-static-copy to v3.4.0 2026-03-23 01:07:30 +00:00
Elian Doran ea206116cb Translations update from Hosted Weblate (#9142) 2026-03-22 23:25:09 +02:00
Adorian Doran b32dd949d7 scripts/update contributor list: add full name support for pinned contributors 2026-03-22 22:35:59 +02:00
Adorian Doran 015e50cdb8 scripts/update contributor list: refactor 2026-03-22 22:11:35 +02:00
Marcel 7d87c89668 Translated using Weblate (German)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-03-22 19:09:50 +00:00
Aindriú Mac Giolla Eoin b0431f2338 Translated using Weblate (Irish)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-03-22 19:09:48 +00:00
Adorian Doran f00e051e75 scripts/update contributor list: add completion feedback 2026-03-22 20:05:47 +02:00
Adorian Doran e7adf08854 scripts/update contributor list: add role for pinned contributors 2026-03-22 19:55:46 +02:00
Adorian Doran 7646d8be07 client: update the contributor list via a script, persist the list into the repo 2026-03-22 19:37:22 +02:00
Adorian Doran 978e02350c client: revert the Vite build script 2026-03-22 19:14:44 +02:00
Adorian Doran b4d0af6eb2 client/modals: make the title optional 2026-03-22 18:55:46 +02:00
Adorian Doran 555d997e34 client/about dialog: show the dialog only after the required information is ready 2026-03-22 18:53:23 +02:00
Adorian Doran 1b9124422a client/about dialog: switch to boxicons 2026-03-22 18:40:26 +02:00
perfectra1n 81f02209ea feat(db): update index and fix suggestion from gemini 2026-03-22 09:22:55 -07:00
Adorian Doran 8f23874628 client/about dialog: add an indication for the nightly version, use SVG icons 2026-03-22 18:17:13 +02:00
perfectra1n 124d456c60 feat(db): add missing sqlite indices to help with performance 2026-03-22 09:14:33 -07:00
Adorian Doran 75da044bbe client/about dialog: add a link for the build revision 2026-03-22 17:21:20 +02:00
Elian Doran 76fc9eaeb0 chore(deps): update dependency ws to v8.20.0 (#9136) 2026-03-22 11:40:00 +02:00
Elian Doran a4b7f54c64 fix(nix): build failing due to rolldown optional deps 2026-03-22 11:37:05 +02:00
Elian Doran 53192d202d chore(nix): add electron & python to shell 2026-03-22 11:37:05 +02:00
Elian Doran 6896ed2c70 chore(nix): update flake lock for new Electron version 2026-03-22 11:37:05 +02:00
Adorian Doran 19dfbaacce client/about dialog: improve, add GitHub and donate buttons 2026-03-22 11:14:16 +02:00
Elian Doran 5a96b9c48d fix(deps): update dependency i18next to v25.10.3 (#9135) 2026-03-22 10:56:13 +02:00
renovate[bot] 6113bfc57f fix(deps): update dependency i18next to v25.10.3 2026-03-22 08:49:05 +00:00
Elian Doran 9d7bc20f26 fix(deps): update dependency react-i18next to v16.6.0 (#9137) 2026-03-22 10:47:18 +02:00
Adorian Doran 31578521cf client/about dialog: create a new UI 2026-03-22 10:27:27 +02:00
Adorian Doran 8d5e82fa5e client/contributor list: refine filtering 2026-03-22 10:25:35 +02:00
renovate[bot] 79788937b9 fix(deps): update dependency react-i18next to v16.6.0 2026-03-22 01:08:10 +00:00
renovate[bot] 66873f16f2 chore(deps): update dependency ws to v8.20.0 2026-03-22 01:07:33 +00:00
perfectra1n bd25ae77fc docs(search): rewrite benchmark doc for clarity
Consolidated from 12 sections to 4. Leads with the e2e results a
reviewer cares about, follows with scaling data, then lists what
changed and known limitations. Removed redundant tables and
internal-only details.
2026-03-21 14:06:13 -07:00
perfectra1n 9aec8be1c0 docs(search): add full search + fuzzy benchmark sections
Adds end-to-end full search (fastSearch=false) comparison tables
for both fuzzy ON and OFF, plus long queries and realistic typo
recovery benchmarks. Full search multi-token shows 45-65% improvement.
2026-03-21 14:06:10 -07:00
perfectra1n 90ac727250 docs(search): update benchmark comparison with final optimized numbers
All numbers re-measured on the same machine/session after the scoring,
highlighting, and tree walk optimizations. Multi-token autocomplete
now shows 50-70% improvement over main.
2026-03-21 14:06:06 -07:00
perfectra1n 5bc9840825 fix(search): restore toLowerCase in fuzzyMatchWordWithResult
The function has multiple callers (not just smartMatch) so it must
normalize inputs itself. Removing toLowerCase broke fuzzy matching
for the two-phase search path.
2026-03-21 14:06:03 -07:00
Adorian Doran 0525114036 Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/about-dialog-overhaul 2026-03-21 20:29:01 +02:00
Adorian Doran fb691f6ade client/contributor list: add extra bot exclusion 2026-03-21 20:28:36 +02:00
Adorian Doran 92f1048911 client/contributor list: add support for honorific contributors 2026-03-21 20:19:17 +02:00
Adorian Doran 6481b90daf client: retrieve the contributor list 2026-03-21 19:59:19 +02:00
Elian Doran 532e001ef0 chore(deps): update dependency stylelint to v17.5.0 (#9115) 2026-03-21 19:29:30 +02:00
Elian Doran 17991bf31f chore(deps): update dependency @preact/preset-vite to v2.10.5 (#9125) 2026-03-21 19:28:47 +02:00
renovate[bot] 2b21b1f75e chore(deps): update dependency @preact/preset-vite to v2.10.5 2026-03-21 17:28:07 +00:00
Elian Doran dae1f9302c chore(deps): update dependency @redocly/cli to v2.24.1 (#9126) 2026-03-21 19:27:55 +02:00
Elian Doran 33365cdaf1 Translations update from Hosted Weblate (#9124) 2026-03-21 19:25:38 +02:00
green 3ac66ffe72 Translated using Weblate (Japanese)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-03-21 18:24:53 +01:00
Francis C. 81baf13720 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-03-21 18:24:52 +01:00
AggelosPnS e0e96350d6 Translated using Weblate (Greek)
Currently translated at 2.8% (49 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/el/
2026-03-21 18:24:52 +01:00
Elian Doran c539c21ced chore(deps): update dependency eslint to v10.1.0 (#9130) 2026-03-21 19:24:44 +02:00
Elian Doran 3f7f6cf982 fix(deps): update dependency i18next to v25.10.2 (#9113) 2026-03-21 19:23:13 +02:00
Elian Doran 271d87ae33 fix(deps): update dependency katex to v0.16.40 (#9127) 2026-03-21 19:22:03 +02:00
Elian Doran 533a77e606 fix(deps): update dependency marked to v17.0.5 (#9128) 2026-03-21 19:21:19 +02:00
Elian Doran 77cf2d4dd9 fix(deps): update dependency sanitize-filename to v1.6.4 (#9129) 2026-03-21 19:20:42 +02:00
Elian Doran 890cb247c1 fix(deps): update dependency eslint-linter-browserify to v10.1.0 (#9131) 2026-03-21 19:19:18 +02:00
renovate[bot] 8d7f4dd0fa fix(deps): update dependency i18next to v25.10.2 2026-03-21 16:55:05 +00:00
Adorian Doran 4d753398c1 refactor: normalize to double quotes 2026-03-21 18:30:33 +02:00
Adorian Doran f01bebedc9 client: create a Vite plugin to generate a contributor list JSON at the build time 2026-03-21 18:28:35 +02:00
Elian Doran 00c4933344 fix(collections/grid): full-width images are too small in preview (closes #9116) 2026-03-21 09:15:13 +02:00
Elian Doran cd9b46e1c7 fix(attributes): attribute detail not showing up for first item (closes #6948) 2026-03-21 09:06:21 +02:00
Elian Doran b356b355ca fix(layout): attribute details not visible in new layout (closes #9005) 2026-03-21 08:58:13 +02:00
renovate[bot] d1aebb7bb0 fix(deps): update dependency eslint-linter-browserify to v10.1.0 2026-03-21 02:04:29 +00:00
renovate[bot] 6cbb595ae8 chore(deps): update dependency eslint to v10.1.0 2026-03-21 02:03:50 +00:00
renovate[bot] fcf238bc35 fix(deps): update dependency sanitize-filename to v1.6.4 2026-03-21 02:03:10 +00:00
renovate[bot] 8c82468ecc fix(deps): update dependency marked to v17.0.5 2026-03-21 02:02:32 +00:00
renovate[bot] 965905ce00 fix(deps): update dependency katex to v0.16.40 2026-03-21 02:01:52 +00:00
renovate[bot] ed280775bd chore(deps): update dependency @redocly/cli to v2.24.1 2026-03-21 02:01:10 +00:00
perfectra1n 48dd93b94b revert: remove FTS5 content search (no measured end-to-end improvement)
FTS5 query was 32x faster in isolation, but the content scan is only
1-7% of total search time. The JS pipeline (scoring, snippets,
highlighting, tree walk) dominates. The in-memory optimizations in
this PR provide the real gains.

Removes: migration, fts_index service, event wiring, UI option,
integration test. Keeps all in-memory performance optimizations.
2026-03-20 12:50:40 -07:00
perfectra1n ac231374f6 perf(search): optimize scoring, highlighting, and tree walk
- Remove redundant toLowerCase() before normalizeSearchText() in
  search_result.ts (normalizeSearchText already lowercases)
- Pre-normalize tokens once in addScoreForStrings instead of per-chunk
- Skip edit distance computation entirely when fuzzy matching is
disabled
- Move removeDiacritic() outside the regex while-loop in highlighting
- Cache normalized parent titles per search execution in
note_flat_text.ts
- Use Set for token lookup in searchPathTowardsRoot (O(1) vs O(n))
- Remove redundant toLowerCase in fuzzyMatchWordWithResult (inputs
  from smartMatch are already normalized)
2026-03-20 12:12:08 -07:00
perfectra1n 87fc4e1281 docs(search): add FTS5 benchmark results to performance comparison
Adds real SQLite benchmarks showing FTS5 is 15-33x faster for the
raw content query, though end-to-end improvement is masked by JS
pipeline overhead (scoring, snippets, path walking).
2026-03-20 12:05:08 -07:00
perfectra1n 8fd2cb39c1 fix(search): fix busy connection error in FTS5 index build
Collect rows before inserting — iterateRows() holds an open cursor
that conflicts with writes on the same connection.
2026-03-20 12:05:03 -07:00
Elian Doran 8834899012 fix(math): limit size of popup and add back overflow (closes #9117) 2026-03-20 20:57:07 +02:00
perfectra1n 24a01aefe2 feat(search): add user option to enable/disable FTS5 content index 2026-03-20 11:54:42 -07:00
perfectra1n 06fb9c0a6b test(search): add FTS5 integration test 2026-03-20 11:54:39 -07:00
perfectra1n bc0942180e feat(search): use FTS5 index in NoteContentFulltextExp with sequential fallback
For operators =, !=, and *=*, the search now tries the FTS5 index first
via searchViaFts(). If FTS is unavailable or fails, it falls back to the
original sequential scan. The flat text attribute search is extracted
into its own searchFlatTextAttributes() method and runs after both
paths.
2026-03-20 11:54:36 -07:00
perfectra1n f358563c27 feat(search): wire FTS index updates to note content changes 2026-03-20 11:54:24 -07:00
perfectra1n dcaebeea83 feat(search): add FTS5 index service for content search 2026-03-20 11:54:21 -07:00
perfectra1n ac13af73c5 feat(search): add FTS5 migration for content search index 2026-03-20 11:54:18 -07:00
perfectra1n ba529d2721 feat(tests): implement search benchmark test... 2026-03-20 11:26:19 -07:00
Elian Doran 55dea474e9 chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55.2.0 (#9099) 2026-03-20 13:45:51 +02:00
Elian Doran bc74455a64 chore(deps): update dependency @smithy/middleware-retry to v4.4.44 (#9111) 2026-03-20 13:45:21 +02:00
Elian Doran 2d0b28367f chore(deps): update dependency vite to v8.0.1 (#9112) 2026-03-20 13:45:00 +02:00
Elian Doran 7d8a3e2811 fix(deps): update dependency katex to v0.16.39 (#9114) 2026-03-20 13:44:32 +02:00
renovate[bot] 79e5d9595a chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55.2.0 2026-03-20 00:11:04 +00:00
renovate[bot] 1f0fa57218 chore(deps): update dependency stylelint to v17.5.0 2026-03-20 00:09:32 +00:00
renovate[bot] 0310626025 fix(deps): update dependency katex to v0.16.39 2026-03-20 00:08:50 +00:00
renovate[bot] fefbb40c03 chore(deps): update dependency vite to v8.0.1 2026-03-20 00:07:33 +00:00
renovate[bot] 12f89078b8 chore(deps): update dependency @smithy/middleware-retry to v4.4.44 2026-03-20 00:06:57 +00:00
Elian Doran 8d873c5869 fix(share): prevent crash when accessing /share on uninitialized setup (#9088) 2026-03-19 20:13:32 +02:00
Elian Doran 27f4ac1d03 Textarea Label Support (#9077) 2026-03-19 20:02:11 +02:00
Elian Doran d533360903 chore(attributes): rename textarea to multiline text 2026-03-19 20:01:55 +02:00
Elian Doran 49f5dc1c26 fix(table): text jumping when editing multiline text 2026-03-19 20:00:43 +02:00
Elian Doran 16419ed4ac Merge remote-tracking branch 'origin/main' into textarea-labels 2026-03-19 19:54:16 +02:00
Elian Doran 1595d1b5c9 Fix setup page error (#9102) 2026-03-19 19:50:07 +02:00
Elian Doran 50eb11997c fix(setup): contrast issue in alert (closes #8915) 2026-03-19 19:49:32 +02:00
Elian Doran d974dfbc31 Translations update from Hosted Weblate (#9109) 2026-03-19 19:26:35 +02:00
Hosted Weblate e9b63e50d4 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-03-19 18:08:13 +01:00
Elian Doran b6efb7c9ab feat(relation_map): add common note opening options to context menu 2026-03-19 19:07:54 +02:00
Elian Doran f84479b1c2 fix(deps): update univer monorepo to v0.18.0 (#9101) 2026-03-19 17:48:23 +02:00
JYC333 8597fa560b Merge branch 'main' into fix/share-uninitialized-crash 2026-03-19 11:49:55 +00:00
JYC333 b29ab93fd5 fix: limit the scope of DB check only for share page 2026-03-19 11:46:35 +00:00
JYC333 225cdaff46 Update apps/client/src/setup.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-19 11:34:53 +00:00
JYC333 61dfba8c32 fix: remove knockout dependency 2026-03-19 11:24:45 +00:00
JYC333 4fee91d219 fix: change html to use DOM status 2026-03-19 11:24:09 +00:00
JYC333 12e4f76a8b fix: move setup to DOM implementation to fix knockout issue 2026-03-19 11:23:06 +00:00
JYC333 ec30598397 chore(deps): update dependency eslint-plugin-playwright to v2.10.1 (#9097) 2026-03-19 10:55:01 +00:00
JYC333 fdd2cc77e6 Merge branch 'main' into renovate/eslint-plugin-playwright-2.x 2026-03-19 10:30:16 +00:00
JYC333 6f5c618bcd chore(deps): update dependency @redocly/cli to v2.24.0 (#9100) 2026-03-19 10:29:43 +00:00
JYC333 8041112414 chore(deps): update dependency sanitize-html to v2.17.2 (#9098) 2026-03-19 10:28:18 +00:00
renovate[bot] 40ab2bc798 fix(deps): update univer monorepo to v0.18.0 2026-03-19 00:46:10 +00:00
renovate[bot] 3a3029cf3a chore(deps): update dependency @redocly/cli to v2.24.0 2026-03-19 00:45:28 +00:00
renovate[bot] e7d1c75cdb chore(deps): update dependency sanitize-html to v2.17.2 2026-03-19 00:44:03 +00:00
renovate[bot] bc907ee6ad chore(deps): update dependency eslint-plugin-playwright to v2.10.1 2026-03-19 00:43:25 +00:00
perfectra1n f23a7b4842 feat(settings): also allow for fuzzy searching to just be disabled 2026-03-18 11:43:28 -07:00
Elian Doran 0bff3f1fbc chore(deps): update dependency electron to v41.0.3 (#9090) 2026-03-18 20:18:44 +02:00
Elian Doran 377864b2c6 chore(deps): update dependency wxt to v0.20.20 (#9091) 2026-03-18 19:50:35 +02:00
Elian Doran 3db13df245 fix(deps): update dependency @zumer/snapdom to v2.5.0 (#9093) 2026-03-18 19:48:36 +02:00
Elian Doran a2e09b40fa chore(deps): update dependency sax to v1.6.0 (#9092) 2026-03-18 19:43:21 +02:00
perfectra1n 5718631889 fix(search): resolve issue with autocomplete with search performance enhancements 2026-03-18 09:46:24 -07:00
Elian Doran aa590753d5 Translations update from Hosted Weblate (#9095) 2026-03-18 13:28:23 +02:00
Hosted Weblate 1c8519d7ec Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-03-18 12:26:56 +01:00
Elian Doran 686a614bfa Translations update from Hosted Weblate (#9085) 2026-03-18 13:26:47 +02:00
Elian Doran 01261220e3 Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-18 13:26:25 +02:00
허석 1bf92ab19a Translated using Weblate (Korean)
Currently translated at 93.9% (109 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ko/
2026-03-18 12:15:30 +01:00
Yunho Park c0d0d1868d Translated using Weblate (Korean)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/
2026-03-18 12:15:30 +01:00
허석 da2dec16cc Translated using Weblate (Korean)
Currently translated at 7.3% (126 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ko/
2026-03-18 12:15:29 +01:00
Ulices 787ef7d513 Translated using Weblate (Spanish)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-03-18 12:15:28 +01:00
허석 dcb0ce79e6 Translated using Weblate (Korean)
Currently translated at 51.4% (199 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ko/
2026-03-18 12:15:27 +01:00
Elian Doran 9d8202539d chore(deps): update pnpm/action-setup action to v5 (#9094) 2026-03-18 13:15:19 +02:00
renovate[bot] c46af4bca9 chore(deps): update pnpm/action-setup action to v5 2026-03-18 01:26:54 +00:00
renovate[bot] 610f6652df fix(deps): update dependency @zumer/snapdom to v2.5.0 2026-03-18 01:26:47 +00:00
renovate[bot] b33635381b chore(deps): update dependency sax to v1.6.0 2026-03-18 01:26:06 +00:00
renovate[bot] f20af8cac9 chore(deps): update dependency wxt to v0.20.20 2026-03-18 01:25:25 +00:00
renovate[bot] 29f3b987aa chore(deps): update dependency electron to v41.0.3 2026-03-18 01:24:43 +00:00
argusagent e9987b40e6 fix(share): wire assertShareDbReady into router middleware — address code review 2026-03-17 20:27:04 -04:00
argusagent 1990a990c3 fix(share): return 503 when app is still initializing (#5677) 2026-03-17 20:22:06 -04:00
argusagent d1159d3af9 fix(share): guard against uninitialized DB connection on /share routes (#5677) 2026-03-17 20:22:05 -04:00
JYC333 723dada78a chore(deps): update typescript-eslint monorepo to v8.57.1 (#9080) 2026-03-17 21:56:25 +00:00
JYC333 0e089af677 chore(deps): update dependency @smithy/middleware-retry to v4.4.43 (#9079) 2026-03-17 20:47:42 +00:00
renovate[bot] f4aed5d012 chore(deps): update typescript-eslint monorepo to v8.57.1 2026-03-17 20:42:50 +00:00
Elian Doran 860f953962 chore(deps): update dependency @redocly/cli to v2.22.1 (#9081) 2026-03-17 22:37:46 +02:00
Elian Doran ded692ead7 chore(deps): update ckeditor5 config packages to v14 (major) (#9082) 2026-03-17 22:37:20 +02:00
renovate[bot] 4f5413ebbe chore(deps): update ckeditor5 config packages to v14 2026-03-17 01:14:47 +00:00
renovate[bot] 8f3e210740 chore(deps): update dependency @redocly/cli to v2.22.1 2026-03-17 01:14:03 +00:00
renovate[bot] 783cb8b4e9 chore(deps): update dependency @smithy/middleware-retry to v4.4.43 2026-03-17 01:12:33 +00:00
Mystler 2b94d96930 fix(labels): Code review issue 2026-03-16 18:21:08 +01:00
Elian Doran ca349e03f2 feat(editor): add catppuccin theme to highlightjs (#9075) 2026-03-16 18:39:40 +02:00
Mystler 5b5222b846 feat(labels): Add textarea label type with Table support 2026-03-16 17:07:37 +01:00
Giulia Ye 850f8ad939 feat(editor): make theme selector scoped to code tag replace regex more robust
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-16 11:55:06 +01:00
Giulia Ye 50e5f89e9a feat(editor): make theme selector scoped to code tag regex more robust
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-16 11:54:14 +01:00
giuxtaposition 603b47f9b0 feat(editor): add catppuccin theme to highlightjs 2026-03-16 10:35:49 +01:00
Elian Doran 92227c364e chore(deps): update dependency @preact/preset-vite to v2.10.4 (#9070) 2026-03-16 08:05:58 +02:00
Elian Doran 10ac18a7cc chore(deps): update dependency webdriverio to v9.26.1 (#9071) 2026-03-16 08:04:54 +02:00
Elian Doran e06123e4bd chore(deps): update softprops/action-gh-release action to v2.6.1 (#9072) 2026-03-16 08:04:23 +02:00
Elian Doran b44bd544cd chore(deps): update dependency node-abi to v4.28.0 (#9073) 2026-03-16 08:01:45 +02:00
renovate[bot] 4c3a448330 chore(deps): update softprops/action-gh-release action to v2.6.1 2026-03-16 01:31:50 +00:00
renovate[bot] 7f07c249af chore(deps): update dependency node-abi to v4.28.0 2026-03-16 01:31:44 +00:00
renovate[bot] 51958d2ac0 chore(deps): update dependency webdriverio to v9.26.1 2026-03-16 00:10:44 +00:00
renovate[bot] 67f474d794 chore(deps): update dependency @preact/preset-vite to v2.10.4 2026-03-16 00:10:12 +00:00
Adorian Doran e6e8ebd881 pdf.js: add ability to comment selected text (#9068) 2026-03-16 02:08:31 +02:00
Elian Doran b138fedd35 CSRF fixes (#9067) 2026-03-15 20:13:46 +02:00
contributor a92d846b57 pdf.js: add ability to comment selected text 2026-03-15 20:05:59 +02:00
Elian Doran 7a544482d1 chore(server): request bootstrap with no cache 2026-03-15 19:39:27 +02:00
Elian Doran 53739ee8d4 e2e(server): address flaky test 2026-03-15 19:33:21 +02:00
Elian Doran 495145e033 chore(server): use random UUID for session ID 2026-03-15 19:33:06 +02:00
Elian Doran 6701d09df5 feat(client): refresh CSRF if request fails 2026-03-15 19:02:28 +02:00
Elian Doran e36d7121f1 fix(desktop): broken due to CSRF failing 2026-03-15 18:54:37 +02:00
JYC333 9290a60b23 chore(deps): update dependency csrf-csrf to v4.0.3 (#9061) 2026-03-15 15:08:17 +00:00
Elian Doran 761de79a8c chore(deps): update dependency eslint-plugin-playwright to v2.10.0 (#9064) 2026-03-15 16:37:03 +02:00
Elian Doran b8e9beff1b chore(deps): update dependency lint-staged to v16.4.0 (#9065) 2026-03-15 16:23:52 +02:00
Elian Doran 5b13e0ba4f chore(deps): update softprops/action-gh-release action to v2.5.3 (#9063) 2026-03-15 16:23:07 +02:00
Elian Doran b0bab18d00 chore(deps): update dependency wxt to v0.20.19 (#9062) 2026-03-15 16:21:31 +02:00
Elian Doran b4fa1392de Translations update from Hosted Weblate (#9066) 2026-03-15 16:07:45 +02:00
Elian Doran 4e58002e13 Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-15 16:07:18 +02:00
Aindriú Mac Giolla Eoin adc149aac8 Translated using Weblate (Irish)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-03-15 11:09:59 +00:00
Marcel 4c02773ddc Translated using Weblate (German)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-03-15 11:09:56 +00:00
green 892abe1d70 Translated using Weblate (Japanese)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ja/
2026-03-15 11:09:54 +00:00
green 71c23d33ff Translated using Weblate (Japanese)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-03-15 11:09:52 +00:00
msnx0 9c110e896e Translated using Weblate (Polish)
Currently translated at 100.0% (1719 of 1719 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2026-03-15 11:09:50 +00:00
renovate[bot] afe7a748e1 chore(deps): update softprops/action-gh-release action to v2.5.3 2026-03-15 05:14:23 +00:00
renovate[bot] 325e582593 chore(deps): update dependency lint-staged to v16.4.0 2026-03-15 00:53:10 +00:00
renovate[bot] ccebe6a423 chore(deps): update dependency eslint-plugin-playwright to v2.10.0 2026-03-15 00:52:28 +00:00
renovate[bot] f7c92fa4b2 chore(deps): update dependency wxt to v0.20.19 2026-03-15 00:51:42 +00:00
renovate[bot] d07c2d118f chore(deps): update dependency csrf-csrf to v4.0.3 2026-03-15 00:51:00 +00:00
Elian Doran 94a09edd1d Renovate/csrf csrf 4.x (#5831) 2026-03-15 00:19:23 +02:00
Elian Doran f6f939c245 chore(server): address requested changes 2026-03-14 23:49:36 +02:00
Elian Doran 0d889426e8 refactor(server): use different approach to handling the CSRF token 2026-03-14 23:48:06 +02:00
Elian Doran c8a546ef1e fix(server): uninitialized sessions causing bad CSRF errors 2026-03-14 23:31:17 +02:00
Elian Doran 693919b21a Merge remote-tracking branch 'origin/main' into renovate/csrf-csrf-4.x 2026-03-14 22:48:43 +02:00
Elian Doran 7c1a2039b1 feat(editor): add catppuccin theme to codemirror (#9060) 2026-03-14 22:05:50 +02:00
Elian Doran c66e4e0475 pdf.js floating highlight button (#9048) 2026-03-14 22:03:55 +02:00
Elian Doran 6bdfbf0d7d chore(deps): fix package lock 2026-03-14 21:52:55 +02:00
Giulia Ye 61393bca90 fix(editor): catppuccin theme declared following alphabetical order based by id
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-14 16:03:03 +01:00
giuxtaposition c41b649bff feat(editor): add catppuccin theme to codemirror 2026-03-14 15:58:37 +01:00
Elian Doran ba87487714 Space mobile launcher container evenly (#9031) 2026-03-14 13:49:20 +02:00
Elian Doran 3e73f38ae2 chore(deps): update dependency vite to v8 (#9043) 2026-03-14 13:45:25 +02:00
Elian Doran 51dd55c3fd Merge remote-tracking branch 'origin/main' into renovate/vite-8.x
; Conflicts:
;	pnpm-lock.yaml
2026-03-14 12:54:04 +02:00
Elian Doran de49ca37b9 fix(deps): update ckeditor monorepo (#8884) 2026-03-14 12:51:11 +02:00
Elian Doran 8d8080ee09 Merge remote-tracking branch 'origin/main' into renovate/ckeditor-monorepo
; Conflicts:
;	pnpm-lock.yaml
2026-03-14 12:38:35 +02:00
Elian Doran f3613ccb25 chore(client): typecheck failing due to changes in JSX handling 2026-03-14 12:35:44 +02:00
Elian Doran ad7b5700f3 chore(client): tests not running due to change in Vite 2026-03-14 12:29:57 +02:00
Elian Doran 0d17c62d02 chore(client): remove deprecated vite manual chunks 2026-03-14 12:15:43 +02:00
Elian Doran 826690982a chore(deps): update dependency pdfjs-dist to v5.5.207 (#8874) 2026-03-14 12:10:41 +02:00
Elian Doran b438ff9c62 chore(deps): update dependency electron to v41 (#9025) 2026-03-14 12:08:15 +02:00
Elian Doran 43fb9d1a23 chore(deps): update docker/setup-buildx-action action to v4 (#8931) 2026-03-14 12:07:53 +02:00
Elian Doran fb17ce8c8a Merge remote-tracking branch 'origin/main' into renovate/ckeditor-monorepo
; Conflicts:
;	pnpm-lock.yaml
2026-03-14 12:06:40 +02:00
Elian Doran 3a8e12535e fix(ckeditor5): version misalignment 2026-03-14 12:04:32 +02:00
Elian Doran ce0caa3f6d chore(deps): update dependency @smithy/middleware-retry to v4.4.42 (#9035) 2026-03-14 12:00:14 +02:00
Elian Doran 00a0315f12 chore(pdfjs): fix type error after update 2026-03-14 11:59:57 +02:00
renovate[bot] da38d56dc7 chore(deps): update docker/setup-buildx-action action to v4 2026-03-14 09:55:13 +00:00
renovate[bot] 83e47cba2c chore(deps): update dependency electron to v41 2026-03-14 09:54:14 +00:00
Elian Doran f4d1eebed4 fix(deps): update dependency knockout to v3.5.2 (#8970) 2026-03-14 11:47:51 +02:00
Elian Doran f27b394099 Merge remote-tracking branch 'origin/main' into renovate/ckeditor-monorepo
; Conflicts:
;	pnpm-lock.yaml
2026-03-14 11:47:16 +02:00
renovate[bot] a66c9ccc1f chore(deps): update dependency @smithy/middleware-retry to v4.4.42 2026-03-14 09:45:48 +00:00
Elian Doran 0bc6a830c8 chore(pdfjs): update viewer to latest 2026-03-14 11:42:39 +02:00
Elian Doran f3008b29af chore(deps): bump yauzl from 2.10.0 to 3.2.1 (#9047) 2026-03-14 11:33:15 +02:00
Elian Doran 5b16ff8be1 chore(client): fix type error after update of knockout 2026-03-14 11:32:44 +02:00
Elian Doran 86621e3388 fix(deps): update dependency reveal.js to v6 (#9028) 2026-03-14 11:30:40 +02:00
Elian Doran 1beb0668c3 fix(deps): update codemirror (#9039) 2026-03-14 11:30:21 +02:00
Elian Doran 34b09f90fb fix(deps): wrong ckeditor version 2026-03-14 11:24:49 +02:00
Elian Doran a6f964925b chore(presentation): fix paths to themes 2026-03-14 11:17:21 +02:00
Elian Doran 196416bb9f chore(presentation): fix type issues 2026-03-14 11:15:04 +02:00
Elian Doran 1535db9f7d chore(presentation): remove now redundant type definitions 2026-03-14 11:13:50 +02:00
renovate[bot] ae38ac4de8 fix(deps): update dependency knockout to v3.5.2 2026-03-14 09:11:59 +00:00
Elian Doran e0aa8d8ecf fix(codemirror): version misalignment causing type errors 2026-03-14 11:09:48 +02:00
renovate[bot] 23c1eacf2b fix(deps): update ckeditor monorepo 2026-03-14 09:03:13 +00:00
contributor 10e28789e2 add optional chaining to access window.parent in callback 2026-03-14 11:03:10 +02:00
contributor 940f7f77f5 add automatic removal of the event 2026-03-14 11:03:10 +02:00
renovate[bot] 83f8b4fcb4 fix(deps): update codemirror 2026-03-14 09:02:35 +00:00
Elian Doran 42dc801ddf fix(deps): update univer monorepo to v0.17.0 (#9057) 2026-03-14 11:01:08 +02:00
renovate[bot] 5e6e5bfbec chore(deps): update dependency vite to v8 2026-03-14 09:00:57 +00:00
Elian Doran 28fc99dd45 fix(deps): update dependency mermaid to v11.13.0 (#8988) 2026-03-14 10:59:16 +02:00
Elian Doran 9ef501c399 Mermaid diagram switcher (#9058) 2026-03-14 10:54:47 +02:00
Elian Doran 6bba908654 feat(mermaid): add new sample diagrams for Ishikawa & Venn 2026-03-14 10:54:33 +02:00
Elian Doran d423e43312 Merge branch 'feature/mermaid_diagram_switcher' into renovate/mermaid-11.x 2026-03-14 10:50:33 +02:00
Elian Doran 91718f218b Merge remote-tracking branch 'origin/main' into renovate/mermaid-11.x 2026-03-14 10:50:18 +02:00
Elian Doran e623e91a82 docs(user): mention changes to Mermaid diagrams 2026-03-14 10:44:55 +02:00
Elian Doran dce9f50911 fix(mermaid): not recentering when using the sample switcher 2026-03-14 10:37:26 +02:00
Elian Doran 5f1486cf6a feat(mermaid): use custom placeholder 2026-03-14 10:31:28 +02:00
Elian Doran 2c6bdc79af chore(mermaid): rounded corners for editor only on desktop 2026-03-14 10:25:59 +02:00
Elian Doran a6b89cfa30 chore(mermaid): use translations for sample names 2026-03-14 10:22:35 +02:00
Elian Doran 21d1cd395b feat(mermaid): add a text for sample diagram switcher 2026-03-14 10:14:21 +02:00
Elian Doran 981466cbe8 fix(deps): update dependency better-sqlite3 to v12.8.0 (#9056) 2026-03-14 10:08:38 +02:00
Elian Doran 0209573fce chore(mermaid): remove default placeholder content 2026-03-14 10:03:15 +02:00
Elian Doran 92f8459f28 feat(mermaid): show switcher only when note is empty 2026-03-14 10:02:05 +02:00
Elian Doran da193b456b fix(mermaid): error when diagram is empty 2026-03-14 10:00:18 +02:00
Elian Doran 6c151afca3 fix(mermaid): error text not selectable 2026-03-14 09:58:45 +02:00
Elian Doran aba6750c18 chore(mermaid): add rounded corners to code editor 2026-03-14 09:44:06 +02:00
Elian Doran b9a8e4e4ba feat(mermaid): add all official samples 2026-03-14 09:42:35 +02:00
Elian Doran 4134c4ddd0 feat(mermaid): replace note content on switch 2026-03-14 09:29:28 +02:00
Elian Doran 72038fb2ec chore(mermaid): basic logic for content switcher 2026-03-14 09:26:14 +02:00
Elian Doran 069d8b1ae4 refactor(mermaid): move into own directory 2026-03-14 09:20:07 +02:00
Elian Doran ce71068f6d chore(mermaid): add a bottom section for switching between samples 2026-03-14 09:18:38 +02:00
renovate[bot] dc298a44e1 fix(deps): update univer monorepo to v0.17.0 2026-03-14 06:54:06 +00:00
renovate[bot] 306bfd7673 fix(deps): update dependency better-sqlite3 to v12.8.0 2026-03-14 06:53:12 +00:00
Elian Doran 25cf23f507 chore(deps): update dependency http-proxy-agent to v8 (#9026) 2026-03-14 08:39:04 +02:00
Elian Doran 096d5f7c65 chore: remove old references to svelte 2026-03-14 08:06:46 +02:00
Elian Doran 0e2dee1609 chore(renovate): group univerjs packages 2026-03-14 08:05:50 +02:00
Elian Doran ec927d25a9 chore(deps): update dependency @redocly/cli to v2.21.1 (#8905) 2026-03-14 07:44:45 +02:00
renovate[bot] 7c8aefb4ef chore(deps): update dependency http-proxy-agent to v8 2026-03-14 05:44:33 +00:00
Elian Doran e840769dd6 fix(deps): update dependency react-i18next to v16.5.8 (#9014) 2026-03-14 07:44:00 +02:00
Elian Doran 4a5d3f01b8 chore(deps): update dependency node-abi to v4.27.0 (#9015) 2026-03-14 07:43:26 +02:00
Elian Doran 71d975f339 fix(deps): update dependency force-graph to v1.51.2 (#9050) 2026-03-14 07:42:10 +02:00
Elian Doran a4051fc372 chore(deps): update pnpm to v10.32.1 (#9012) 2026-03-14 07:41:44 +02:00
Elian Doran 359b2a68b8 chore(deps): update dependency https-proxy-agent to v8 (#9027) 2026-03-14 07:41:11 +02:00
Elian Doran 8124e4e589 chore(deps): update dependency electron to v40.8.2 (#9049) 2026-03-14 07:40:06 +02:00
Elian Doran 5f699996f8 chore(deps): update dependency rollup-plugin-webpack-stats to v3.1.0 (#9051) 2026-03-14 07:35:09 +02:00
Elian Doran c7c0bc4185 chore(deps): update marocchino/sticky-pull-request-comment action to v3 (#9053) 2026-03-14 07:34:47 +02:00
Elian Doran d422ac7bc5 chore(deps): update dependency vite-plugin-static-copy to v3.3.0 (#9052) 2026-03-14 07:33:52 +02:00
Elian Doran 0bd912d18a Translations update from Hosted Weblate (#9054) 2026-03-14 07:33:19 +02:00
Ulices 252f2fe72c Translated using Weblate (Spanish)
Currently translated at 100.0% (1693 of 1693 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-03-14 06:09:49 +01:00
renovate[bot] 7f29c347e2 chore(deps): update marocchino/sticky-pull-request-comment action to v3 2026-03-14 00:40:57 +00:00
renovate[bot] 7a3dc824d6 chore(deps): update dependency vite-plugin-static-copy to v3.3.0 2026-03-14 00:40:47 +00:00
renovate[bot] 8550c62771 chore(deps): update dependency rollup-plugin-webpack-stats to v3.1.0 2026-03-14 00:39:43 +00:00
renovate[bot] 66cd657cd8 fix(deps): update dependency force-graph to v1.51.2 2026-03-14 00:38:45 +00:00
renovate[bot] beac80e175 chore(deps): update dependency electron to v40.8.2 2026-03-14 00:37:41 +00:00
contributor 5ae9952ba1 use pagehide event instead of unload 2026-03-14 01:30:59 +02:00
contributor d4bc1ec444 add typings 2026-03-14 01:24:50 +02:00
contributor d52f529b24 extract handler setup into a function 2026-03-14 01:24:50 +02:00
contributor 9a9cfdec2b add unload handler 2026-03-14 01:24:50 +02:00
contributor 6ab421ffa0 check target iframe 2026-03-14 01:24:50 +02:00
contributor 53b0aafb98 disable preferences warning 2026-03-14 01:24:49 +02:00
contributor 6b02ad8421 enable floating highlight button 2026-03-14 01:24:43 +02:00
renovate[bot] 242ebfccc0 chore(deps): update dependency https-proxy-agent to v8 2026-03-13 22:26:27 +00:00
renovate[bot] 545cc0782f fix(deps): update dependency react-i18next to v16.5.8 2026-03-13 22:24:39 +00:00
renovate[bot] bf6a2917cd fix(deps): update dependency reveal.js to v6 2026-03-13 22:22:26 +00:00
renovate[bot] eaba2a8395 fix(deps): update dependency mermaid to v11.13.0 2026-03-13 22:19:14 +00:00
Elian Doran c581fb17bc chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55 (#9042) 2026-03-14 00:14:41 +02:00
renovate[bot] 9b05b95d77 chore(deps): update dependency pdfjs-dist to v5.5.207 2026-03-13 22:12:07 +00:00
renovate[bot] b3ba18ddd0 chore(deps): update dependency node-abi to v4.27.0 2026-03-13 22:11:25 +00:00
renovate[bot] bb2a633ba7 chore(deps): update dependency @redocly/cli to v2.21.1 2026-03-13 22:10:44 +00:00
renovate[bot] 913efdef03 chore(deps): update pnpm to v10.32.1 2026-03-13 22:07:56 +00:00
Elian Doran bf0bea18b1 fix(deps): update dependency i18next to v25.8.18 (#9013) 2026-03-14 00:06:31 +02:00
Elian Doran cdebd1f63a chore(deps): update dependency esbuild to v0.27.4 (#9037) 2026-03-14 00:06:07 +02:00
Elian Doran a6a2635836 chore(deps): update dependency happy-dom to v20.8.4 (#9038) 2026-03-14 00:05:38 +02:00
dependabot[bot] 024b57c2b4 chore(deps): bump yauzl from 2.10.0 to 3.2.1
Bumps [yauzl](https://github.com/thejoshwolfe/yauzl) from 2.10.0 to 3.2.1.
- [Commits](https://github.com/thejoshwolfe/yauzl/compare/2.10.0...3.2.1)

---
updated-dependencies:
- dependency-name: yauzl
  dependency-version: 3.2.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 20:13:10 +00:00
renovate[bot] 6fbc85cbc7 chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v55 2026-03-13 05:51:53 +00:00
renovate[bot] 5f8a0aee13 chore(deps): update dependency happy-dom to v20.8.4 2026-03-13 05:47:50 +00:00
renovate[bot] 0c67b292ef chore(deps): update dependency esbuild to v0.27.4 2026-03-13 05:46:42 +00:00
Elian Doran ba663e6162 chore(deps): update dependency electron to v40.8.1 (#9036) 2026-03-13 07:42:35 +02:00
Elian Doran 14925266cf fix(deps): update dependency dayjs to v1.11.20 (#9040) 2026-03-13 07:41:36 +02:00
Elian Doran 702e29bd8c chore(deps): update vitest monorepo to v4.1.0 (#9041) 2026-03-13 07:41:10 +02:00
Elian Doran 27ac3e58c5 fix(deps): update dependency sqlite3 to v6 (#9044) 2026-03-13 07:40:07 +02:00
Elian Doran 86e268c06d Translations update from Hosted Weblate (#9046) 2026-03-13 07:39:12 +02:00
Ulices 6e4b231319 Translated using Weblate (Spanish)
Currently translated at 99.2% (1681 of 1693 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-03-13 05:09:49 +01:00
green 041eff6cbd Translated using Weblate (Japanese)
Currently translated at 100.0% (1693 of 1693 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-03-13 05:09:48 +01:00
renovate[bot] 1a3471a516 fix(deps): update dependency sqlite3 to v6 2026-03-13 01:10:11 +00:00
renovate[bot] 57c8727bb1 chore(deps): update vitest monorepo to v4.1.0 2026-03-13 01:06:52 +00:00
renovate[bot] bd451d0738 fix(deps): update dependency dayjs to v1.11.20 2026-03-13 01:05:48 +00:00
renovate[bot] ced062842d chore(deps): update dependency electron to v40.8.1 2026-03-13 01:01:51 +00:00
Jon Fuller da3d71d21e Merge branch 'main' into feat/search-perf-take1 2026-03-12 14:57:03 -07:00
perfectra1n b533546236 fix(search): fix flying bracket 2026-03-12 14:35:47 -07:00
perfectra1n 1c148f407c feat(search): don't toss the entire index after each note change 2026-03-12 14:35:17 -07:00
perfectra1n 9403efa9a1 feat(search): add even some more robust tests 2026-03-12 14:21:36 -07:00
perfectra1n 6a06fc7995 feat(search): get rid of candidate capping 2026-03-12 14:02:23 -07:00
Elian Doran a1bf7bfa08 Protected note tweaks (#9033) 2026-03-12 22:24:10 +02:00
Elian Doran 2a67c93c20 fix(deps): update dependency mathlive to v0.109.0 (#9024) 2026-03-12 21:30:13 +02:00
Elian Doran b51bfdfb33 chore(client): address requested change 2026-03-12 21:09:30 +02:00
Elian Doran 9aa84877ee fix(tree): not reacting to protected state changes 2026-03-12 21:03:12 +02:00
Elian Doran 9e99670b19 fix(collections): displaying note list even if session is not unlocked 2026-03-12 20:53:19 +02:00
Elian Doran 744b93dd98 fix(board): does not respect protected note of parent 2026-03-12 20:50:56 +02:00
Elian Doran 5abb77242c feat(map): create pins atomically 2026-03-12 20:49:34 +02:00
Elian Doran 4ab3b0dd2b fix(map): does not respect protected note of parent 2026-03-12 20:47:43 +02:00
Elian Doran a6a1594265 fix(table): does not respect protected note of parent 2026-03-12 20:44:25 +02:00
Elian Doran b06cdd442d fix(calendar): does not respect protected note of parent 2026-03-12 20:41:53 +02:00
Mystler f7067fb968 fix(mobile): Space mobile launcher container evenly 2026-03-12 19:24:27 +01:00
perfectra1n 77733ce205 feat(search): try to rice performance some more 2026-03-11 21:11:55 -07:00
perfectra1n 585b6ccd3e feat(search): try to improve performance 2026-03-11 19:05:44 -07:00
renovate[bot] cf0f5ba4c4 fix(deps): update dependency mathlive to v0.109.0 2026-03-12 01:25:15 +00:00
renovate[bot] 309a81a0fe fix(deps): update dependency i18next to v25.8.18 2026-03-12 01:14:10 +00:00
Elian Doran caa428c1a2 Translations update from Hosted Weblate (#8990) 2026-03-11 21:44:21 +02:00
Hosted Weblate 517c721664 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-03-11 20:39:34 +01:00
green a8cdaa69f7 Translated using Weblate (Japanese)
Currently translated at 100.0% (1693 of 1693 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-03-11 20:39:33 +01:00
Luk On 53d221ef34 Translated using Weblate (Polish)
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2026-03-11 20:39:33 +01:00
pythaac 5450fde472 Translated using Weblate (Korean)
Currently translated at 93.1% (108 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ko/
2026-03-11 20:39:33 +01:00
pythaac 808446cef5 Translated using Weblate (Korean)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/
2026-03-11 20:39:33 +01:00
ibs-allaow 921c663199 Translated using Weblate (Arabic)
Currently translated at 57.2% (959 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-03-11 20:39:33 +01:00
Микола Копитін 1b8a75b615 Translated using Weblate (Ukrainian)
Currently translated at 98.2% (114 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/uk/
2026-03-11 20:39:33 +01:00
Микола Копитін f78ced5bc3 Translated using Weblate (Ukrainian)
Currently translated at 99.3% (157 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/
2026-03-11 20:39:33 +01:00
JYC333 81bf5f4f3b Translated using Weblate (Swedish)
Currently translated at 17.6% (21 of 119 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/sv/
2026-03-11 20:39:33 +01:00
Hosted Weblate aaed368670 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-03-11 20:39:33 +01:00
Elian Doran 5e8de14721 Audio player improvements (#9008) 2026-03-11 21:38:58 +02:00
Elian Doran 634ab5b5c0 chore(media): address requested changes 2026-03-11 21:26:24 +02:00
Elian Doran 906889a035 fix(video): auto-hide no longer working 2026-03-11 21:07:48 +02:00
Elian Doran ab9d50b905 feat(video): add blur for controls 2026-03-11 21:06:08 +02:00
Elian Doran e61b7c7cfc feat(audio): add background effects 2026-03-11 20:58:49 +02:00
Elian Doran 1c628fba4c fix(video): playing button not working 2026-03-11 20:53:08 +02:00
Elian Doran f8b4c6cb15 fix(audio): styling on light theme 2026-03-11 20:41:37 +02:00
Elian Doran 3edd8f6c5a chore(media): solve linter warnings 2026-03-11 20:38:53 +02:00
Elian Doran 7777f72893 chore(media): change translations prefix 2026-03-11 20:36:51 +02:00
Elian Doran 9af85b767b feat(audio): add an icon placeholder 2026-03-11 20:35:41 +02:00
Elian Doran 73260b91eb feat(audio): add mime to unsupported format 2026-03-11 20:29:34 +02:00
Elian Doran 2858f63873 feat(audio): report unsupported format 2026-03-11 19:30:12 +02:00
Elian Doran 15ca328727 feat(audio): make player full-width 2026-03-11 19:26:17 +02:00
Elian Doran 5b3fbecc0f feat(audio): introduce keyboard shortcuts 2026-03-11 19:24:47 +02:00
Elian Doran 365d0f0aac feat(audio): introduce playback speed 2026-03-11 19:17:14 +02:00
Elian Doran e86d84c463 feat(audio): introduce loop button 2026-03-11 19:14:52 +02:00
Elian Doran 6b974c2ac7 feat(audio): introduce skip buttons 2026-03-11 19:12:09 +02:00
Elian Doran d2afcbb98d feat(audio): introduce volume slider 2026-03-11 19:10:18 +02:00
Elian Doran 68a122fcf5 chore(audio): reintroduce some styles 2026-03-11 19:06:59 +02:00
Elian Doran 92f0144b48 feat(audio): reintroduce seek bar 2026-03-11 19:03:09 +02:00
Elian Doran a5a345728c feat(audio): reintroduce play button 2026-03-11 18:56:43 +02:00
Elian Doran 23890e64e9 refactor(audio): extract to separate file 2026-03-11 18:51:20 +02:00
Elian Doran 3de712aca4 fix(server/search): invalid canvas crashing search (closes #9004) 2026-03-11 18:32:53 +02:00
Elian Doran cb5b4d870f refactor(server/search): extract fulltext preprocessing to separate file 2026-03-11 18:29:36 +02:00
Elian Doran f81aef2de5 docs(user): specify spreadsheets 2026-03-11 18:01:22 +02:00
Elian Doran 06aed16ea1 refactor(spreadsheet): simplify the checks for popups 2026-03-11 12:11:00 +02:00
Elian Doran aa2d8af15c fix(spreadsheet): popups show up and hide 2026-03-11 12:10:46 +02:00
Elian Doran dc7b91433b docs(user): mention changes to video player 2026-03-11 09:44:24 +02:00
Elian Doran 72951386b1 Video player improvements (#8992) 2026-03-11 08:33:04 +02:00
Elian Doran db8df01d82 fix(deps): update dependency eslint-linter-browserify to v10.0.3 (#8948) 2026-03-11 08:32:06 +02:00
Elian Doran 98713ed111 chore(deps): update dependency lint-staged to v16.3.3 (#8997) 2026-03-11 08:31:29 +02:00
Elian Doran 3e88fecb15 chore(deps): update dependency yauzl to v3.2.1 (#8998) 2026-03-11 08:31:12 +02:00
Elian Doran fe4255f2fc fix(deps): update dependency @codemirror/view to v6.39.17 (#8999) 2026-03-11 08:31:00 +02:00
Elian Doran c046a57654 chore(deps): update dependency webdriverio to v9.25.0 (#9000) 2026-03-11 08:30:47 +02:00
Elian Doran d8fc0d45a8 fix(deps): update dependency @zumer/snapdom to v2.1.0 (#9001) 2026-03-11 08:30:01 +02:00
Elian Doran 567b96cfb4 fix(deps): update dependency preact to v10.29.0 (#9002) 2026-03-11 08:29:34 +02:00
renovate[bot] d25849d280 fix(deps): update dependency preact to v10.29.0 2026-03-11 00:06:32 +00:00
renovate[bot] d4d73995db fix(deps): update dependency @zumer/snapdom to v2.1.0 2026-03-11 00:05:36 +00:00
renovate[bot] f4657b5da9 chore(deps): update dependency webdriverio to v9.25.0 2026-03-11 00:04:47 +00:00
renovate[bot] 614f43cb8a fix(deps): update dependency @codemirror/view to v6.39.17 2026-03-11 00:04:00 +00:00
renovate[bot] ca2fbf8dba chore(deps): update dependency yauzl to v3.2.1 2026-03-11 00:03:14 +00:00
renovate[bot] a421513442 chore(deps): update dependency lint-staged to v16.3.3 2026-03-11 00:02:25 +00:00
JYC333 a9599c471a Merge branch 'main' into renovate/eslint-linter-browserify-10.x 2026-03-10 23:56:13 +00:00
JYC333 415bcac641 chore(deps): update dependency lightningcss to v1.32.0 (#8985) 2026-03-10 23:54:00 +00:00
JYC333 9527017314 fix(deps): update dependency mind-elixir to v5.9.3 (#8984) 2026-03-10 23:53:12 +00:00
JYC333 1d3d7c77f8 fix(deps): update dependency i18next to v25.8.17 (#8983) 2026-03-10 23:52:55 +00:00
Elian Doran e868615fd5 chore(client): address requested changes 2026-03-10 22:19:50 +02:00
Elian Doran 80493a52be feat(video_player): move loop to center section 2026-03-10 20:46:28 +02:00
Elian Doran 3fed2ba42e feat(video_player): add zoom to fit button 2026-03-10 20:44:32 +02:00
Elian Doran 82592ada54 fix(video_player): unreadable controls on light theme 2026-03-10 20:36:03 +02:00
Elian Doran 5528701744 feat(video_player): indicate unsupported file formats 2026-03-10 20:33:47 +02:00
Elian Doran 0ca665fb85 chore(video_player): mention keys 2026-03-10 20:24:16 +02:00
Elian Doran 7eb452ed8b refactor(video_player): use translations 2026-03-10 20:22:03 +02:00
Elian Doran d81dec94a9 feat(video_player): add keyboard shortcuts for toggling volume 2026-03-10 20:18:16 +02:00
Elian Doran 6631a4a806 feat(video_player): add shortcuts to just to beginning/end 2026-03-10 20:16:53 +02:00
Elian Doran 12f817c896 feat(video_player): add keyboard shortcut to toggle mute 2026-03-10 20:16:04 +02:00
Elian Doran 87229600d2 feat(video_player): keyboard shortcut to toggle full-screen 2026-03-10 20:15:10 +02:00
Elian Doran 471a46a030 feat(video_player): flash controls when pressing shortcuts 2026-03-10 20:14:11 +02:00
Elian Doran 41220eebd5 feat(video_player): arrow keys to seek 2026-03-10 20:11:56 +02:00
Elian Doran 755872277b feat(video_player): space to toggle play/pause 2026-03-10 20:10:40 +02:00
Elian Doran 2cb54d7021 fix(video_player): loop can get out of sync with external control 2026-03-10 20:09:33 +02:00
Elian Doran 5a16bafbbf fix(video_player): playback speed can get out of sync with external control 2026-03-10 20:08:17 +02:00
Elian Doran fc6e9d89d9 fix(video_player): volume can get out of sync with external control 2026-03-10 20:07:45 +02:00
Elian Doran 8af35da279 feat(video_player): add loop button 2026-03-10 20:05:40 +02:00
Elian Doran 7107fec1a4 feat(video_player): add rotate button 2026-03-10 20:03:58 +02:00
Elian Doran 4bb662c5fb feat(video_player): button to toggle PIP 2026-03-10 20:00:38 +02:00
Elian Doran 89297b92f8 feat(video_player): click toggles play/pause instead of controls 2026-03-10 19:53:24 +02:00
Elian Doran e019271e74 feat(video_player): hide immediately on play 2026-03-10 19:50:31 +02:00
Elian Doran f6d61eefcc feat(video_player): don't hide controls if not playing 2026-03-10 19:48:21 +02:00
Elian Doran fabc07be42 refactor(video_player): extract hiding visibility to hook 2026-03-10 19:47:25 +02:00
Elian Doran bccfa7956c refactor(video_player): extract more buttons into separate components 2026-03-10 19:45:42 +02:00
Elian Doran 42a05f411b feat(video_player): basic toggle of the controls 2026-03-10 19:42:54 +02:00
Elian Doran 7ba7b98f5f feat(video_player): add playback speed indicator 2026-03-10 19:38:15 +02:00
Elian Doran 2132c2ab38 refactor(video_player): extract full screen to separate component 2026-03-10 19:29:00 +02:00
Elian Doran 2ce4d512e7 feat(video_player): add full screen button 2026-03-10 19:23:45 +02:00
Elian Doran 1258d32820 feat(video_player): add skip left/right buttons 2026-03-10 19:22:29 +02:00
Elian Doran db763ba229 feat(video_player): improve style of bottom bar 2026-03-10 19:20:49 +02:00
Elian Doran 951fdaec70 chore(video_player): change button alignment 2026-03-10 19:17:51 +02:00
Elian Doran 4303f3687e refactor(video_player): extract seek bar & volume control 2026-03-10 19:12:52 +02:00
Elian Doran 540b0e0b83 feat(video_player): volume changer 2026-03-10 19:11:08 +02:00
Elian Doran 08a0326cb0 feat(video_player): add elapsed/remaining time 2026-03-10 19:05:59 +02:00
Elian Doran 8b0a45e4fd feat(video_player): add a trackbar for seeking the video 2026-03-10 18:57:58 +02:00
Elian Doran 0e0ad2ed73 feat(video_player): single play/pause button 2026-03-10 18:56:20 +02:00
Elian Doran 4c73f31aca feat(video_player): start adding custom controls (play/pause) 2026-03-10 18:54:53 +02:00
Elian Doran 6b2ae8fd12 feat(video_player): black background 2026-03-10 18:49:36 +02:00
Elian Doran 88d84fae1e refactor(video_player): extract to separate file 2026-03-10 18:48:54 +02:00
Elian Doran cdc46faaad fix(board): add column not snappable on mobile 2026-03-10 18:41:53 +02:00
Elian Doran 24dbc79961 fix(board): clipped on horizontal scroll 2026-03-10 18:40:17 +02:00
Elian Doran 8cb58dcc45 fix(icon_packs): missing empty icon 2026-03-10 18:35:20 +02:00
Elian Doran fe70b8aee6 fix(note_badges): saved indicator not disappearing if reduced motion was activated 2026-03-10 18:32:31 +02:00
Elian Doran 00f66cfb49 fix(popup_editor): note content no longer rendering
The commit f44b47ec added a hasTabBeenActive guard in NoteDetail that defers rendering until the tab has been active at least once. It initializes via noteContext?.isActive() and then listens for activeNoteChanged events.

The popup editor creates its own NoteContext("_popup-editor") which is never the activeNtxId in the tab manager — isActive() always returns false, and activeNoteChanged never fires for it. So hasTabBeenActive stays false forever, and the if (!type || !hasTabBeenActive) return guard at NoteDetail.tsx:64 prevents the note type widget from ever loading.
2026-03-10 18:32:31 +02:00
Elian Doran 3a4b080765 Table of contents fixes (#8933) 2026-03-10 18:31:24 +02:00
Elian Doran 41269ef987 chore(deps): update dependency express-rate-limit to v8.3.1 (#8981) 2026-03-10 08:30:06 +02:00
Elian Doran e521c6a386 fix(deps): update dependency @mermaid-js/layout-elk to v0.2.1 (#8982) 2026-03-10 08:29:41 +02:00
Elian Doran 1c35a557c1 chore(deps): update pnpm to v10.32.0 (#8986) 2026-03-10 08:29:20 +02:00
Elian Doran 99eb8389c5 chore(deps): update typescript-eslint monorepo to v8.57.0 (#8987) 2026-03-10 08:29:03 +02:00
renovate[bot] c5e560ef5b chore(deps): update typescript-eslint monorepo to v8.57.0 2026-03-10 02:13:50 +00:00
renovate[bot] a7d7a078b1 chore(deps): update pnpm to v10.32.0 2026-03-10 02:12:47 +00:00
renovate[bot] a06fa5222f chore(deps): update dependency lightningcss to v1.32.0 2026-03-10 02:12:35 +00:00
renovate[bot] 8d3e40a28a fix(deps): update dependency mind-elixir to v5.9.3 2026-03-10 02:11:34 +00:00
renovate[bot] 8e32f99790 fix(deps): update dependency i18next to v25.8.17 2026-03-10 02:10:34 +00:00
renovate[bot] 57bce62e48 fix(deps): update dependency @mermaid-js/layout-elk to v0.2.1 2026-03-10 02:09:36 +00:00
renovate[bot] 1c873394d5 chore(deps): update dependency express-rate-limit to v8.3.1 2026-03-10 02:08:32 +00:00
JYC333 d652f67364 Translations update from Hosted Weblate (#8977) 2026-03-09 10:43:00 +00:00
JYC333 5e54d098c5 Apply suggestions from code review
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-09 10:23:14 +00:00
JYC333 ec95303c31 Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-09 10:22:31 +00:00
Hosted Weblate 07aafe7e89 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-03-09 11:17:40 +01:00
Giovi dc7acbb70e Translated using Weblate (Italian)
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-03-09 11:17:32 +01:00
JYC333 0dcb8b3ff8 Translations update from Hosted Weblate (#8975) 2026-03-09 10:17:22 +00:00
JYC333 e4ddff01ca Update docs/README-sv.md
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-09 10:13:43 +00:00
JYC333 015c1161d4 Update docs/README-sv.md
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-09 10:11:43 +00:00
Robert Magnusson ca0c6076c5 Translated using Weblate (Swedish)
Currently translated at 5.4% (21 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/sv/
2026-03-09 05:47:59 +00:00
Robert Magnusson 80a02f88be Translated using Weblate (Swedish)
Currently translated at 1.3% (22 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/sv/
2026-03-09 05:47:58 +00:00
Robert Magnusson 430833bedb Translated using Weblate (Swedish)
Currently translated at 13.2% (21 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/sv/
2026-03-09 05:47:57 +00:00
Hosted Weblate dc80d83964 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-03-09 05:47:56 +00:00
Elian Doran 5f7ade45f4 fix(deps): update dependency katex to v0.16.38 (#8969) 2026-03-09 07:47:35 +02:00
Elian Doran 8b36a7ab1e Spreadsheet experiment v0.5 (#8966) 2026-03-09 07:47:08 +02:00
Elian Doran fd18276693 fix(deps): update dependency @preact/signals to v2.8.2 (#8968) 2026-03-09 07:46:47 +02:00
Elian Doran 0becfc16ba chore(deps): update pnpm to v10.31.0 (#8971) 2026-03-09 07:46:02 +02:00
renovate[bot] d480d1f6ba chore(deps): update pnpm to v10.31.0 2026-03-09 01:36:51 +00:00
renovate[bot] f5c9a71ba0 fix(deps): update dependency katex to v0.16.38 2026-03-09 01:35:41 +00:00
renovate[bot] c177a8a464 fix(deps): update dependency @preact/signals to v2.8.2 2026-03-09 01:34:42 +00:00
Elian Doran c826564c9e chore(spreadsheet): address requested changes 2026-03-08 23:25:47 +02:00
Elian Doran ccb13fa6b9 fix(commons): typecheck 2026-03-08 23:19:23 +02:00
Elian Doran 69e374138f fix(spreadsheet): missing some CSS imports 2026-03-08 23:07:48 +02:00
Elian Doran 3156b2cb59 feat(spreadsheet): enable conditional formatting 2026-03-08 23:02:54 +02:00
Elian Doran d6217ffed4 feat(spreadsheet): enable data validation 2026-03-08 22:59:41 +02:00
Elian Doran fc90c6af9d feat(spreadsheet): enable sorting 2026-03-08 22:56:11 +02:00
Elian Doran a1118419ec feat(spreadsheet): enable filtering 2026-03-08 22:53:04 +02:00
Elian Doran 8599785ee8 refactor(spreadsheet): use multiple modules 2026-03-08 22:39:43 +02:00
Elian Doran 99ba192a44 feat(spreadsheet): allow triggering find/replace from context menu 2026-03-08 22:35:08 +02:00
Elian Doran b86d3587ac feat(spreadsheet): basic integration of find/replace 2026-03-08 22:24:03 +02:00
Elian Doran b2a0baf56a fix(spreadsheet): jumping when editing in another split 2026-03-08 22:15:29 +02:00
Elian Doran 22f37817e5 fix(spreadsheet): fix The column width is less than 0 when switching tabs 2026-03-08 22:01:45 +02:00
Elian Doran 6b4fe03625 fix(spreadsheet): mitigate The column width is less than 0, need to adjust page width to make it great than 0 when changing an inactive tab 2026-03-08 21:57:26 +02:00
Elian Doran f44b47ec23 fix(client): tabs still rendering in the background 2026-03-08 21:48:45 +02:00
Elian Doran 8d667e838a feat(spreadsheet): hide cell protection mechanism 2026-03-08 21:28:12 +02:00
Elian Doran f32385de2e feat(spreadsheet): hide toolbars while in read-only 2026-03-08 21:24:24 +02:00
Elian Doran 90796fc4fa feat(spreadsheet): basic read-only support 2026-03-08 21:09:11 +02:00
Elian Doran 4960c49cb2 feat(spreadsheet): add note plugin 2026-03-08 20:39:07 +02:00
Elian Doran b112e8b56b feat(spreadsheet): basic support for note revision using image 2026-03-08 20:30:24 +02:00
Elian Doran 83095130f6 feat(spreadsheet): basic rendering as HTML for share 2026-03-08 20:04:14 +02:00
Elian Doran d005c0ef2d feat(spreadsheet): basic note list preview using SVG 2026-03-08 19:49:53 +02:00
Elian Doran c135578626 fix(spreadsheet): not focusing on tab switch 2026-03-08 13:05:47 +02:00
Elian Doran 9a6e20029e fix(client): all tabs loaded in the background 2026-03-08 12:59:57 +02:00
Elian Doran 39bd4ccea1 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-03-08 12:59:44 +02:00
Elian Doran aac4774326 Merge remote-tracking branch 'origin/main' into feature/toc_improvements 2026-03-08 12:20:53 +02:00
Elian Doran ea7aac2030 v0.102.1 (#8961) 2026-03-08 12:13:12 +02:00
Elian Doran e7f98f08d0 Merge remote-tracking branch 'origin/main' into stable 2026-03-08 12:12:52 +02:00
Elian Doran 8ac9daa5d3 chore(release): prepare for v0.102.1
Checks / main (push) Successful in 2s
/ Check Docker build (Dockerfile) (push) Failing after 38s
/ Check Docker build (Dockerfile.alpine) (push) Failing after 45s
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Has been skipped
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Has been skipped
/ Merge manifest lists (push) Has been skipped
Release / Sanity Check (push) Failing after 35s
Release / Make Electron (arm64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-24.04-arm name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been skipped
Release / Build Linux Server (arm64, ubuntu-24.04-arm) (push) Has been skipped
Release / Build Linux Server (x64, ubuntu-22.04) (push) Has been skipped
Release / Publish release (push) Has been skipped
2026-03-08 10:43:59 +02:00
Elian Doran 0b506c6327 chore(pdfjs): bump pdfjs viewer version 2026-03-08 10:41:21 +02:00
Elian Doran d2b62540ec fix(ci): migrate all the jank docker ci to use crane instead (#8869) 2026-03-08 10:37:49 +02:00
Elian Doran 64418c7fec docs(release): prepare for v0.102.1 2026-03-08 10:36:06 +02:00
Elian Doran 8c1a58e64f fix(pdf): cache buster not working in all circumstances 2026-03-08 10:29:57 +02:00
Adorian Doran b27fd31c1f style/pdf viewer: fix some layout issues in toolbar 2026-03-08 10:25:05 +02:00
Elian Doran f18a531924 fix(mindmap): crashing on auto-switch to dark theme (closes #8879) 2026-03-08 10:22:21 +02:00
Elian Doran 3cabb4b661 fix(pdf): not accessible on Nginx Proxy Manager with block common exploits (closes #8877) 2026-03-08 09:30:27 +02:00
Elian Doran 5c88b1c6b8 chore(server): add infrastructure for running Nginx Proxy Manager 2026-03-08 09:01:47 +02:00
Elian Doran c2adc43780 chore(deps): update dependency @types/multer to v2.1.0 (#8921) 2026-03-07 23:17:45 +02:00
Elian Doran 7eaa5352ba Translations update from Hosted Weblate (#8956) 2026-03-07 23:17:15 +02:00
Patric Siesing 17e3e3187b Translated using Weblate (Swedish)
Currently translated at 4.6% (18 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/sv/
2026-03-07 22:15:57 +01:00
Robert Magnusson 2ad7cd3a49 Translated using Weblate (Swedish)
Currently translated at 4.6% (18 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/sv/
2026-03-07 22:15:56 +01:00
Patric Siesing 39aa8d61c2 Translated using Weblate (Swedish)
Currently translated at 11.3% (18 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/sv/
2026-03-07 22:15:55 +01:00
Robert Magnusson 1a3ea977b7 Translated using Weblate (Swedish)
Currently translated at 11.3% (18 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/sv/
2026-03-07 22:15:54 +01:00
Robert Magnusson 4cd8f9a1e6 Translated using Weblate (Swedish)
Currently translated at 1.0% (18 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/sv/
2026-03-07 22:15:53 +01:00
Hosted Weblate 87ce6d1231 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-03-07 22:15:52 +01:00
Elian Doran 8fdbeacf77 fix(deps): update dependency katex to v0.16.37 (#8935) 2026-03-07 23:15:44 +02:00
Elian Doran f4f775a1c9 chore(deps): update dependency @smithy/middleware-retry to v4.4.40 (#8945) 2026-03-07 23:13:13 +02:00
Elian Doran fe1154cb2d chore(deps): update dependency @types/sanitize-html to v2.16.1 (#8946) 2026-03-07 23:12:53 +02:00
Elian Doran 638f479ff3 chore(deps): update dependency eslint to v10.0.3 (#8947) 2026-03-07 23:12:27 +02:00
Elian Doran 70436bdb04 fix(deps): update dependency react-i18next to v16.5.6 (#8949) 2026-03-07 23:12:05 +02:00
Elian Doran 575ecaae07 fix(deps): update dependency tabulator-tables to v6.4.0 (#8950) 2026-03-07 23:11:37 +02:00
Elian Doran d277e6db94 chore(deps): update actions/upload-artifact action to v7 (#8951) 2026-03-07 08:29:42 +02:00
renovate[bot] 25efcd12d0 chore(deps): update actions/upload-artifact action to v7 2026-03-07 02:18:00 +00:00
renovate[bot] 10129321be fix(deps): update dependency tabulator-tables to v6.4.0 2026-03-07 02:17:54 +00:00
renovate[bot] 72710a8f6b chore(deps): update dependency @types/multer to v2.1.0 2026-03-07 02:17:10 +00:00
renovate[bot] 6a7c5c04d8 fix(deps): update dependency react-i18next to v16.5.6 2026-03-07 02:16:21 +00:00
renovate[bot] 7f32fe5ef7 fix(deps): update dependency eslint-linter-browserify to v10.0.3 2026-03-07 02:15:20 +00:00
renovate[bot] 5d89591dea chore(deps): update dependency eslint to v10.0.3 2026-03-07 02:14:21 +00:00
renovate[bot] a88bf5a87b chore(deps): update dependency @types/sanitize-html to v2.16.1 2026-03-07 02:13:18 +00:00
renovate[bot] bbe5d3506e chore(deps): update dependency @smithy/middleware-retry to v4.4.40 2026-03-07 02:12:12 +00:00
renovate[bot] c2993d4e7d fix(deps): update dependency katex to v0.16.37 2026-03-06 21:42:06 +00:00
Elian Doran 17ba479182 chore(deps): update dependency @smithy/middleware-retry to v4.4.39 (#8906) 2026-03-06 19:01:41 +02:00
Elian Doran a465014bbe fix(deps): update codemirror (#8885) 2026-03-06 19:01:13 +02:00
Elian Doran 5dfe253ef6 chore(deps): update imjasonh/setup-crane action to v0.5 (#8910) 2026-03-06 19:00:14 +02:00
Elian Doran ae7ca6021f Translations update from Hosted Weblate (#8919) 2026-03-06 18:57:49 +02:00
noobhjy c389697acd Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-03-06 16:50:15 +00:00
Aleksandr Reid c13c3e0f4a Translated using Weblate (Russian)
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2026-03-06 16:50:14 +00:00
Ulices 82c042d045 Translated using Weblate (Spanish)
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-03-06 16:50:14 +00:00
Aleksandr Reid 9145ba1690 Translated using Weblate (Russian)
Currently translated at 100.0% (387 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ru/
2026-03-06 16:50:13 +00:00
Marcel d60653ee17 Translated using Weblate (German)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/
2026-03-06 16:50:12 +00:00
Marcel dae8613b4e Translated using Weblate (German)
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-03-06 16:50:12 +00:00
Aindriú Mac Giolla Eoin 2f8e2c40be Translated using Weblate (Irish)
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-03-06 16:50:11 +00:00
Francis C. d85225a0dc Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-03-06 16:50:11 +00:00
green 0cb66df2b2 Translated using Weblate (Japanese)
Currently translated at 100.0% (1676 of 1676 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-03-06 16:50:10 +00:00
Aleksandr Reid 92e0578cb6 Translated using Weblate (Russian)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ru/
2026-03-06 16:50:09 +00:00
Elian Doran 2eee06786e chore(deps): update dependency lint-staged to v16.3.2 (#8908) 2026-03-06 18:50:00 +02:00
Elian Doran 19053dcb3b fix(deps): update dependency mind-elixir to v5.9.2 (#8909) 2026-03-06 18:49:24 +02:00
JYC333 e10c30c59f fix(deps): update dependency i18next to v25.8.14 (#8922) 2026-03-06 14:12:55 +00:00
Elian Doran c356159664 fix(deps): update dependency marked to v17.0.4 (#8923) 2026-03-06 15:45:12 +02:00
Elian Doran 579be68ca1 chore(deps): update dependency electron to v40.8.0 (#8924) 2026-03-06 15:28:24 +02:00
Elian Doran a6326a682e chore(deps): update dependency @types/node to v24.12.0 (#8934) 2026-03-06 15:27:19 +02:00
renovate[bot] 4595a3a5dd fix(deps): update dependency i18next to v25.8.14 2026-03-06 12:42:27 +00:00
renovate[bot] ee21185e64 chore(deps): update dependency electron to v40.8.0 2026-03-06 12:39:17 +00:00
Elian Doran 6d0676c37d chore(deps): update docker/login-action action to v4 (#8925) 2026-03-06 14:38:39 +02:00
Elian Doran 1d4768a581 chore(deps): update docker/setup-qemu-action action to v4 (#8926) 2026-03-06 14:38:14 +02:00
Elian Doran d086bb7fcb chore(deps): update dependency multer to v2.1.1 [security] (#8929) 2026-03-06 14:37:33 +02:00
Elian Doran 2607c4a32e fix(deps): update dependency react-i18next to v16.5.5 (#8936) 2026-03-06 14:37:12 +02:00
Elian Doran 624333a2ef chore(deps): update dependency express-rate-limit to v8.3.0 (#8937) 2026-03-06 14:36:43 +02:00
Elian Doran d4acb37f21 chore(deps): update dependency ejs to v5 (#8938) 2026-03-06 14:36:24 +02:00
Elian Doran 6c1a1e9812 chore(deps): update docker/build-push-action action to v7 (#8939) 2026-03-06 13:19:16 +02:00
Elian Doran 9a13641f9b chore(deps): update docker/metadata-action action to v6 (#8940) 2026-03-06 13:18:33 +02:00
renovate[bot] 699e0624c9 chore(deps): update docker/setup-qemu-action action to v4 2026-03-06 06:58:29 +00:00
renovate[bot] 47ceb0d4d2 chore(deps): update docker/metadata-action action to v6 2026-03-06 06:58:27 +00:00
renovate[bot] 15c42f4a09 chore(deps): update docker/login-action action to v4 2026-03-06 06:58:24 +00:00
renovate[bot] bf8401bb26 chore(deps): update docker/build-push-action action to v7 2026-03-06 06:58:21 +00:00
renovate[bot] f234433c63 chore(deps): update dependency ejs to v5 2026-03-06 06:58:18 +00:00
renovate[bot] 1b70101123 chore(deps): update imjasonh/setup-crane action to v0.5 2026-03-06 06:57:50 +00:00
renovate[bot] d610c63c28 chore(deps): update dependency express-rate-limit to v8.3.0 2026-03-06 06:57:17 +00:00
renovate[bot] 5e820a407f chore(deps): update dependency @types/node to v24.12.0 2026-03-06 06:56:18 +00:00
renovate[bot] 62610979b7 fix(deps): update dependency react-i18next to v16.5.5 2026-03-06 06:55:50 +00:00
renovate[bot] 700e99e854 fix(deps): update dependency mind-elixir to v5.9.2 2026-03-06 06:55:19 +00:00
renovate[bot] 7767116b3d fix(deps): update dependency marked to v17.0.4 2026-03-06 06:54:40 +00:00
renovate[bot] 0206e8247b fix(deps): update codemirror 2026-03-06 06:52:48 +00:00
renovate[bot] 5476fe3df9 chore(deps): update dependency lint-staged to v16.3.2 2026-03-06 06:50:46 +00:00
renovate[bot] d9a4581d37 chore(deps): update dependency @smithy/middleware-retry to v4.4.39 2026-03-06 06:49:46 +00:00
renovate[bot] 8d9c888481 chore(deps): update dependency multer to v2.1.1 [security] 2026-03-06 06:46:38 +00:00
Elian Doran 11e4b672d1 Fix CI test issues (#8932) 2026-03-06 08:43:51 +02:00
Elian Doran bace3daadc Update apps/server/src/routes/session_parser.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-06 08:43:31 +02:00
Elian Doran dee5380e60 fix(ci): sequential tests ended up run in parallel 2026-03-06 08:20:17 +02:00
Elian Doran bc6a6fd860 Revert "test(server): reset ws module"
This reverts commit 0212398815.
2026-03-05 23:44:24 +02:00
Elian Doran e928337fe9 test(server): adjust timeout 2026-03-05 23:40:43 +02:00
Elian Doran 432f86ea4b Revert "test(server): switch to forks with 2 max workers"
This reverts commit 4ac22678df.
2026-03-05 23:37:28 +02:00
Elian Doran 5d2daecee0 test(server): switch to forks with 6 max workers 2026-03-05 23:35:15 +02:00
Elian Doran 7c8eb311af test(server): switch to forks with 3 max workers 2026-03-05 23:31:54 +02:00
Elian Doran 4ac22678df test(server): switch to forks with 2 max workers 2026-03-05 23:25:45 +02:00
Elian Doran 5057c02176 test(server): fix errors due to database already existing 2026-03-05 22:52:26 +02:00
Elian Doran d301e56216 refactor(server): don't set up other timers on module init 2026-03-05 22:19:04 +02:00
Elian Doran 3c22ab8c9c refactor(server): don't set up session timer on module init 2026-03-05 22:17:19 +02:00
Elian Doran 0212398815 test(server): reset ws module 2026-03-05 22:14:34 +02:00
Elian Doran db0c515bad test(server): fake timers not restored 2026-03-05 22:11:51 +02:00
Elian Doran 9b4f8c5003 feat(ci/client): HTML output 2026-03-05 22:07:11 +02:00
Elian Doran 85d8c4c8fa feat(ci/server): HTML output 2026-03-05 22:06:46 +02:00
Elian Doran 5afab6938a test(server): reduce max workers to 1 2026-03-05 21:54:30 +02:00
Elian Doran a437169ad5 test(server): increase hook timeout 2026-03-05 21:20:12 +02:00
Elian Doran f632d3aeb6 Merge remote-tracking branch 'origin/main' into fix/ci 2026-03-05 21:14:57 +02:00
Elian Doran 513fffcb1a ci(dev): escape test filter 2026-03-05 21:14:21 +02:00
Elian Doran d3337eab9c Merge branch 'main' into feature/toc_improvements 2026-03-05 21:05:17 +02:00
Elian Doran 8128a8192a refactor(ckeditor): address requested changes 2026-03-05 19:28:52 +02:00
Elian Doran c80bb9657c fix(mindmap): crashing on auto-switch to dark theme 2026-03-05 19:25:07 +02:00
Elian Doran 65514a6fd7 fix(toc): title is extracted before changes are made 2026-03-05 19:08:56 +02:00
Elian Doran 93a7f8c711 fix(toc): not reacting to attribute changes in CKEditor 2026-03-05 19:03:32 +02:00
Elian Doran 0ca179f990 ci(test): quote command 2026-03-05 18:40:24 +02:00
Elian Doran 9d104015f3 ci(test): quote command 2026-03-05 18:30:08 +02:00
Elian Doran 2c4cf2dcf1 ci(test): separate running of heavy tests to avoid OOM issues 2026-03-05 18:28:27 +02:00
Elian Doran d2e0124962 chore(deps): update dependency fs-extra to v11.3.4 (#8907) 2026-03-05 16:51:11 +02:00
renovate[bot] cd59c75c04 chore(deps): update dependency fs-extra to v11.3.4 2026-03-04 01:13:39 +00:00
Elian Doran caa9143591 chore(deps): update dependency happy-dom to v20.8.3 (#8887) 2026-03-03 22:15:58 +02:00
renovate[bot] 7e53810c02 chore(deps): update dependency happy-dom to v20.8.3 2026-03-03 19:42:03 +00:00
Elian Doran 12efa8dc0b chore(deps): update dependency eslint-plugin-playwright to v2.9.0 (#8886) 2026-03-03 21:21:22 +02:00
Elian Doran 4d0ccac7b5 fix(deps): update dependency node-html-parser to v7.1.0 (#8888) 2026-03-03 21:20:21 +02:00
Elian Doran 8b023a55d0 chore(deps): update dependency copy-webpack-plugin to v14 (#8889) 2026-03-03 21:10:22 +02:00
Elian Doran b4df5fcbd9 chore(deps): update dependency rollup-plugin-webpack-stats to v3 (#8890) 2026-03-03 20:58:24 +02:00
renovate[bot] 6fbe5718e9 chore(deps): update dependency rollup-plugin-webpack-stats to v3 2026-03-03 18:54:56 +00:00
Elian Doran 908bafca63 Translations update from Hosted Weblate (#8901) 2026-03-03 20:54:00 +02:00
Elian Doran d7313efd67 fix(ci): migrate all the jank docker ci to use crane instead (#8869) 2026-03-03 20:48:42 +02:00
Микола Копитін a51e15c9b8 Translated using Weblate (Ukrainian)
Currently translated at 90.0% (1508 of 1675 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/
2026-03-03 18:44:20 +00:00
Hosted Weblate 37e9c7d639 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-03-03 18:44:20 +00:00
Elian Doran 2d00ac4dfb Univer Sheets v0 (#8902) 2026-03-03 20:44:06 +02:00
Elian Doran 6aec7eae00 chore(server): increase sync version to avoid data loss due to unsupported note type 2026-03-03 20:25:33 +02:00
Elian Doran 6bfbc2d35e chore(spreadsheet): use better clean up mechanism 2026-03-03 20:12:54 +02:00
Elian Doran 2ffc854ce6 chore(spreadsheet): mark note type as beta 2026-03-03 19:59:12 +02:00
Elian Doran ddd4a374e4 chore(client): fix some whitespace issues 2026-03-03 19:52:15 +02:00
Elian Doran 0d6e2fc00f chore(client): fix typecheck 2026-03-03 19:41:51 +02:00
Elian Doran 366a8e8726 fix(spreadsheet): persistence hook on every render 2026-03-03 19:24:04 +02:00
Elian Doran 7f0aa0697a fix(spreadsheet): error due to duplicate unit IDs 2026-03-03 19:20:25 +02:00
Elian Doran d123ce33b8 feat(spreadsheet): restore from JSON 2026-03-03 19:09:33 +02:00
Elian Doran 55588f5962 feat(spreadsheet): restore from JSON 2026-03-03 19:05:01 +02:00
Elian Doran f32130d5c2 feat(spreadsheet): allow source to be viewed 2026-03-03 19:00:23 +02:00
Elian Doran 03f4ff9e7c feat(spreadsheet): save spreadsheet to JSON 2026-03-03 19:00:14 +02:00
Elian Doran 6de78c7154 refactor(spreadsheet): make use of hooks 2026-03-03 18:48:45 +02:00
Elian Doran d331e418d4 feat(spreadsheet): support dark mode 2026-03-03 18:42:26 +02:00
Elian Doran 4ace74bcb8 feat(spreadsheet): make full-width 2026-03-03 18:36:17 +02:00
Elian Doran 1d4a336256 feat(spreadsheet): integrate spreadsheet with full-height 2026-03-03 18:34:46 +02:00
Elian Doran ee6c192ab9 chore(spreadsheet): create new note type 2026-03-03 18:24:55 +02:00
Elian Doran b220bdce9c fix(note_list): affected by floating images (closes #8899) 2026-03-03 18:14:43 +02:00
Elian Doran 4d86c6c4f1 feat(import/single): trim extension for audio files + default icon 2026-03-03 16:19:44 +02:00
Elian Doran 4fd68bf12d feat(import/single): trim extension for video files 2026-03-03 14:29:18 +02:00
Elian Doran 3ffe34964f feat(notes): add default icon for videos 2026-03-03 14:26:45 +02:00
Elian Doran faaf26c174 fix(quick_edit): save indicator not shown 2026-03-03 14:19:24 +02:00
Elian Doran f9c7518db2 fix(spaced_update): triggering events too often while typing 2026-03-03 14:19:24 +02:00
Elian Doran 8357c2a39c chore(pdfjs): version not updated for releases 2026-03-03 14:19:24 +02:00
renovate[bot] 793dcee562 chore(deps): update dependency copy-webpack-plugin to v14 2026-03-03 02:02:49 +00:00
renovate[bot] 00368fc131 fix(deps): update dependency node-html-parser to v7.1.0 2026-03-03 02:01:49 +00:00
renovate[bot] f81b686f41 chore(deps): update dependency eslint-plugin-playwright to v2.9.0 2026-03-03 02:00:00 +00:00
contributor ac24c69858 fix(webview): refresh content for SPAs with "query string" in hash 2026-03-02 23:35:53 +02:00
Elian Doran 4c5aada5d3 chore(deps): update dependency @types/express-serve-static-core to v5.1.1 (#8346) 2026-03-02 22:42:10 +02:00
Elian Doran 05551cec9e chore(deps): update dependency sax to v1.5.0 (#8875) 2026-03-02 22:41:20 +02:00
Elian Doran 6300a8c8d1 chore(deps): update dependency @redocly/cli to v2.20.2 (#8853) 2026-03-02 22:34:22 +02:00
Elian Doran ca4d15727d Merge branch 'main' into renovate/express-serve-static-core-5.x 2026-03-02 22:30:43 +02:00
renovate[bot] 2fe076086e chore(deps): update dependency sax to v1.5.0 2026-03-02 20:25:56 +00:00
Elian Doran 56b65ddfae Translations update from Hosted Weblate (#8870) 2026-03-02 22:22:37 +02:00
Hasan Kara fcf6673825 Translated using Weblate (Turkish)
Currently translated at 16.3% (19 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/tr/
2026-03-02 20:54:15 +01:00
Hasan Kara 9eda264f52 Translated using Weblate (Turkish)
Currently translated at 5.1% (20 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/tr/
2026-03-02 20:54:14 +01:00
Hasan Kara fe1270c679 Translated using Weblate (Turkish)
Currently translated at 4.2% (71 of 1675 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/tr/
2026-03-02 20:54:13 +01:00
Hasan Kara 679e1ac678 Translated using Weblate (Turkish)
Currently translated at 12.0% (19 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/tr/
2026-03-02 20:54:12 +01:00
ibs-allaow e309ff2d17 Translated using Weblate (Arabic)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ar/
2026-03-02 20:54:12 +01:00
Francis C. c910335155 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1675 of 1675 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-03-02 20:54:11 +01:00
Yatrik Patel 5606cde506 Translated using Weblate (Hindi)
Currently translated at 100.0% (1675 of 1675 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-03-02 20:54:10 +01:00
Yatrik Patel 0e2f4f4e13 Translated using Weblate (Hindi)
Currently translated at 38.6% (61 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-03-02 20:54:09 +01:00
renovate[bot] 1f6c6f2acd chore(deps): update dependency @redocly/cli to v2.20.2 2026-03-02 18:09:58 +00:00
Elian Doran 37d2e9f14b fix(deps): update dependency globals to v17.4.0 (#8876) 2026-03-02 16:44:44 +02:00
Adorian Doran 0fcf30a3b8 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-03-02 11:22:08 +02:00
Adorian Doran 8712e7dd16 style/pdf viewer: fix some layout issues in toolbar 2026-03-02 11:21:47 +02:00
renovate[bot] 2ee4e9cc14 fix(deps): update dependency globals to v17.4.0 2026-03-02 01:18:53 +00:00
perfectra1n b257b75be2 fix(ci): remove fragile jq where possible 2026-03-01 13:49:45 -08:00
perfectra1n 2de2709420 fix(ci): migrate all the jank docker ci to use crane instead 2026-03-01 13:47:18 -08:00
Elian Doran 3e0ddd90a1 chore(docker): image not properly pushed to DockerHub
Checks / main (push) Successful in 2s
/ Check Docker build (Dockerfile) (push) Failing after 43s
/ Check Docker build (Dockerfile.alpine) (push) Failing after 38s
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Has been skipped
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Has been skipped
/ Merge manifest lists (push) Has been skipped
Release / Sanity Check (push) Failing after 35s
Release / Make Electron (arm64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-24.04-arm name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Has been skipped
Release / Make Electron (x64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been skipped
Release / Build Linux Server (arm64, ubuntu-24.04-arm) (push) Has been skipped
Release / Build Linux Server (x64, ubuntu-22.04) (push) Has been skipped
Release / Publish release (push) Has been skipped
2026-03-01 22:20:00 +02:00
Elian Doran b96b004262 fix(electron-forge): wrong import 2026-03-01 20:15:04 +02:00
Elian Doran e1ad48b42a feat(electron-forge): clear signing logs on failure 2026-03-01 20:02:08 +02:00
Elian Doran 420f0917be chore: formatting for CJS files 2026-03-01 20:00:23 +02:00
Elian Doran 31d8287e1b feat(electron-forge): introduce basic expotential back-off for signing 2026-03-01 20:00:23 +02:00
Elian Doran 4433d034db fix(ci): unblock signing not working due to bad shell & missing variable 2026-03-01 17:57:06 +02:00
Elian Doran c96114992e fix(ci): sanity check does not account for version prefix 2026-03-01 17:43:41 +02:00
Elian Doran b35e0b906f fix(ci): missing dependencies 2026-03-01 17:38:27 +02:00
Elian Doran 104c9ec64a fix(ci): prevent release if sanity checks fail 2026-03-01 17:34:45 +02:00
Elian Doran 6e4b18b57b fix(ci): missing pnpm 2026-03-01 17:34:05 +02:00
Elian Doran f9460c8f41 feat(ci): unblock signing for Electron 2026-03-01 17:25:06 +02:00
Elian Doran 02601f37d8 fix(ci): version consistency missing pnpm 2026-03-01 17:21:43 +02:00
Elian Doran 0feab6d4ed chore(release): prepare for v0.102.0 2026-03-01 16:54:05 +02:00
Elian Doran 5a9d3499d8 docs(release): add v0.102.0 release notes 2026-03-01 16:49:06 +02:00
Elian Doran dce0988409 chore(deps): update dependency lint-staged to v16.3.1 (#8860) 2026-03-01 16:37:50 +02:00
renovate[bot] b2d378db6b chore(deps): update dependency lint-staged to v16.3.1 2026-03-01 10:43:11 +00:00
Elian Doran 7ecff88da7 chore(deps): update github artifact actions (major) (#8847) 2026-03-01 12:41:40 +02:00
Adorian Doran b434bf8804 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-03-01 09:01:14 +02:00
Adorian Doran 441484629a style/quick edit: fix the layout of collections 2026-03-01 09:01:04 +02:00
renovate[bot] 37a1bd6b25 chore(deps): update github artifact actions 2026-02-28 21:15:12 +00:00
Elian Doran fe3dfc418f test(client): broken test due to circular dependency 2026-02-28 21:47:02 +02:00
Elian Doran 34ca7912fc Merge remote-tracking branch 'origin/main' into renovate/express-serve-static-core-5.x 2026-02-28 19:11:57 +02:00
Adorian Doran 1d698106da Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-02-28 19:03:35 +02:00
Adorian Doran b9ce83165f client/content renderer/pdf: make the container element full height 2026-02-28 19:03:25 +02:00
Elian Doran 34670dd69c Add Support for Recurrence In Calendar Collection (#8799) 2026-02-28 19:01:30 +02:00
Elian Doran 54be58ba1f feat(client/menus): add Copy as Markdown (#8808) 2026-02-28 18:59:40 +02:00
Elian Doran b9abdcb189 chore(electron_context_menu): use upper case for Markdown 2026-02-28 18:58:25 +02:00
Adorian Doran 9f0f9b8315 style/list view: tweak the size of the PDF preview 2026-02-28 18:57:53 +02:00
Adorian Doran 63ee60ffc7 client/pdf viewer: add a rudimentary support for a read-only view 2026-02-28 18:51:36 +02:00
Adorian Doran 3b2cd5dca1 style/note paths: fix the border radius for a single item listing 2026-02-28 18:47:17 +02:00
Adorian Doran 388a6943e9 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-02-28 18:43:59 +02:00
Adorian Doran 50301be093 client/pdf viewer: add a rudimentary support for a read-only view 2026-02-28 18:43:51 +02:00
Elian Doran 123e1ada90 Merge branch 'main' into main 2026-02-28 18:41:48 +02:00
Elian Doran 5c42dbba12 chore(deps): update dependency @types/node to v24.11.0 (#8844) 2026-02-28 18:36:43 +02:00
Elian Doran a549fd228e chore(deps): update pnpm to v10.30.3 (#8845) 2026-02-28 18:36:33 +02:00
Elian Doran 6e352e5b22 chore(deps): update dependency axios to v1.13.6 (#8851) 2026-02-28 18:36:16 +02:00
Elian Doran 1d3df69bb7 fix(deps): update dependency codemirror-lang-elixir to v4.0.1 (#8852) 2026-02-28 18:35:53 +02:00
Elian Doran c6394698fa chore(deps): update dependency eslint-plugin-playwright to v2.8.0 (#8854) 2026-02-28 18:35:45 +02:00
Elian Doran d94f2ac093 chore(deps): update dependency multer to v2.1.0 (#8855) 2026-02-28 18:35:32 +02:00
Elian Doran 740974fbfd fix(next): tab bar offset on horizontal layout 2026-02-28 18:35:15 +02:00
Elian Doran f0b9e0e48b Translations update from Hosted Weblate (#8849) 2026-02-28 18:35:04 +02:00
Elian Doran deee50f2b4 Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-28 18:34:54 +02:00
BeatLink 2c9d5368a1 Merge branch 'main' into main 2026-02-28 09:45:53 -05:00
Luk On 819432b4ab Translated using Weblate (Polish)
Currently translated at 100.0% (1674 of 1674 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2026-02-28 15:42:25 +01:00
Giovi 7efbb4d945 Translated using Weblate (Italian)
Currently translated at 100.0% (1674 of 1674 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-02-28 15:42:24 +01:00
Adorian Doran 64d1b33a4c UI: restyle PDF viewer (#8857) 2026-02-28 16:42:10 +02:00
Adorian Doran 326adc0196 style/pdf viewer: fixes 2026-02-28 16:35:51 +02:00
Adorian Doran b1b9a4461e style/pdf viewer: several tweaks 2026-02-28 14:45:35 +02:00
Adorian Doran d70f5d3ed6 style/pdf viewer: several tweaks 2026-02-28 13:33:48 +02:00
Adorian Doran d1fac8f0e2 client/pdf viewer: remove the CSS variable whitelist 2026-02-28 10:18:25 +02:00
Adorian Doran 5f7c26eed3 style/pdf viewer: tweak document properties dialog button 2026-02-28 08:56:42 +02:00
Adorian Doran bf748cee24 style/pdf viewer: tweak toolbar 2026-02-28 08:44:50 +02:00
Adorian Doran 79439f6435 style/pdf viewer: tweak the find bar 2026-02-28 08:28:37 +02:00
Adorian Doran 2a875f8386 style/pdf viewer: restyle text boxes 2026-02-28 08:03:27 +02:00
Adorian Doran 08e69d405c style/pdf viewer: tweak the find bar 2026-02-28 07:38:49 +02:00
renovate[bot] 471f380756 chore(deps): update dependency @types/node to v24.11.0 2026-02-28 04:53:58 +00:00
renovate[bot] 700edbe2c8 chore(deps): update dependency multer to v2.1.0 2026-02-28 01:31:50 +00:00
renovate[bot] d60c117c62 chore(deps): update dependency eslint-plugin-playwright to v2.8.0 2026-02-28 01:30:58 +00:00
renovate[bot] 4ae395ded5 fix(deps): update dependency codemirror-lang-elixir to v4.0.1 2026-02-28 01:29:07 +00:00
renovate[bot] f311db1cb4 chore(deps): update dependency axios to v1.13.6 2026-02-28 01:28:18 +00:00
BeatLink 40be94804c Merge branch 'main' into main 2026-02-27 18:09:22 -05:00
BeatLink 5719819947 Update Recurrence Docs 2026-02-27 18:08:13 -05:00
BeatLink c938bcc657 Remove unnecessary error checks 2026-02-27 18:01:23 -05:00
BeatLink e029379194 Add recurrence testing, use dayjs for calendar 2026-02-27 17:39:12 -05:00
Adorian Doran d56f106964 UI: general improvements (#8837) 2026-02-27 22:47:22 +02:00
Adorian Doran 676dea33e1 client: fix different issues 2026-02-27 22:45:52 +02:00
Adorian Doran 945b00030b style/pdf viewer: restyle UI 2026-02-27 22:37:07 +02:00
Adorian Doran a47de6c65c Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/ui/general-improvements 2026-02-27 19:34:41 +02:00
Adorian Doran 7c89c66526 style/pdf viewer: restyle UI 2026-02-27 19:34:26 +02:00
BeatLink 8554dc249c Fix recurrence error management 2026-02-27 11:43:23 -05:00
BeatLink bfcbfac5bb Add recurrence error handling 2026-02-27 10:47:56 -05:00
Zexin Yuan 59d8a98eea feat(client/menus): add Copy as Markdown to electron context menu 2026-02-27 14:22:04 +08:00
renovate[bot] c7d74e8b00 chore(deps): update pnpm to v10.30.3 2026-02-27 01:08:42 +00:00
Elian Doran dc3de5bf36 chore(server): address requested changes 2026-02-27 00:05:54 +02:00
Elian Doran 680cd8118f fix(desktop+server): use exec in launcher scripts (#8809) 2026-02-26 23:38:14 +02:00
Elian Doran 1041bf70e1 test(express-partial-content): fix type errors 2026-02-26 21:11:22 +02:00
Elian Doran 0c6326b678 refactor(server): use strong typing for routes 2026-02-26 21:08:54 +02:00
Adorian Doran f4d91e48ba style/pdf viewer: fix color scheme 2026-02-26 20:46:55 +02:00
renovate[bot] fd805a5279 chore(deps): update dependency @types/express-serve-static-core to v5.1.1 2026-02-26 18:18:55 +00:00
Elian Doran 9374694a0c Merge branch 'main' into exec-in-launcher-scripts 2026-02-26 20:17:53 +02:00
Elian Doran 61460daaea chore(deps): update dependency stylelint to v17.4.0 (#8835) 2026-02-26 20:17:04 +02:00
Elian Doran d64c1f6b0e chore(deps): update dependency @types/node to v24.10.14 (#8833) 2026-02-26 20:16:47 +02:00
Elian Doran 0334166029 feat(turndown-plugin-gfm): adopt MD060 compact style for table cells (#8840) 2026-02-26 20:15:27 +02:00
Adorian Doran 7fac172ce2 style: remove redundant style 2026-02-26 19:54:42 +02:00
Adorian Doran 3b9f765c24 style/tree items: display a fallback icon when the specified icon pack is missing 2026-02-26 19:52:20 +02:00
Adorian Doran 655b016efa Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/ui/general-improvements 2026-02-26 19:18:09 +02:00
Adorian Doran aa247ef06c Theming: include the current theme ID as an attribute for the body element (#8842) 2026-02-26 19:14:37 +02:00
Zexin Yuan 9e653a87b8 feat(turndown-plugin-gfm): adopt MD060 compact style for table cells
Style compact avoids extra padding with a single space around cell
content:

| Character | Meaning |
| --- | --- |
| Y | Yes |
| N | No |

Closes #8795
2026-02-27 00:23:04 +08:00
Adorian Doran dfb44def2b client/theming: include the current theme ID as an attribute on the body element 2026-02-26 17:50:23 +02:00
Elian Doran f0e8c0f79d chore(deps): update dependency @types/supertest to v7 (#8836) 2026-02-26 16:18:12 +02:00
Adorian Doran 28fe73911f Theming: color scheme selectors (#8839) 2026-02-26 16:16:52 +02:00
Adorian Doran a971640ffc client: add some documentation 2026-02-26 16:14:39 +02:00
Adorian Doran 44dc8cf00d Close #7932 2026-02-26 15:52:27 +02:00
Adorian Doran 59ca270880 Merge branch 'main' into feat/ui/general-improvements 2026-02-26 10:43:34 +02:00
Adorian Doran abb5fe5b0f style/tree items: restyle the bulk actions button 2026-02-26 10:27:13 +02:00
Adorian Doran af0e4088a6 style/tree items: fix hover color for the active item 2026-02-26 09:35:29 +02:00
Adorian Doran 6b82943871 style/tree items: restyle selection 2026-02-26 09:31:39 +02:00
renovate[bot] d7aa744bad chore(deps): update dependency @types/supertest to v7 2026-02-26 01:54:26 +00:00
renovate[bot] f417a2e126 chore(deps): update dependency stylelint to v17.4.0 2026-02-26 01:53:38 +00:00
renovate[bot] b937f474e4 chore(deps): update dependency @types/node to v24.10.14 2026-02-26 01:52:41 +00:00
Elian Doran 6a3c4fec98 Mobile fixes (#8832) 2026-02-25 23:17:50 +02:00
Elian Doran 6bda7837d6 chore(deps): update dependency @redocly/cli to v2.19.2 (#8826) 2026-02-25 23:07:13 +02:00
Elian Doran ab9144972b Merge branch 'main' into feature/mobile_fixes 2026-02-25 23:06:23 +02:00
Elian Doran bcb646f42b chore(deps): update dependency @smithy/middleware-retry to v4.4.37 (#8827) 2026-02-25 23:02:37 +02:00
Elian Doran 0db75a6cdb chore(deps): update dependency electron to v40.6.1 (#8828) 2026-02-25 23:01:37 +02:00
Elian Doran 76c7b8692d fix(deps): update dependency mind-elixir to v5.9.1 (#8829) 2026-02-25 23:00:36 +02:00
Elian Doran 1061aba212 chore(deps): update node.js to v24.14.0 (#8830) 2026-02-25 22:55:03 +02:00
Elian Doran d4eb6f07bd chore(deps): update dependency @wxt-dev/auto-icons to v1.1.1 (#8800) 2026-02-25 22:54:42 +02:00
Elian Doran f1a83124a8 Merge branch 'main' into feature/mobile_fixes 2026-02-25 22:42:41 +02:00
Elian Doran 2ad30c6a3d Other bugfixes (#8824) 2026-02-25 22:35:29 +02:00
Elian Doran 0f1533d0a0 chore(mobile): remove redundant style 2026-02-25 20:57:20 +02:00
Elian Doran bf5caaebb5 fix(mobile/text): formatting toolbar doesn't go back to the right position on iOS 2026-02-25 20:36:37 +02:00
Adorian Doran b24d2c65a1 style: tweak layout 2026-02-25 20:33:33 +02:00
Elian Doran 2d989dcfe3 fix(mobile/text): formatting toolbar wrongly positioned if dragging on it 2026-02-25 20:18:04 +02:00
Elian Doran 8e8e6f9ed1 fix(mobile/text): floating toolbar mispositioned on iOS 2026-02-25 20:15:07 +02:00
Elian Doran e1de98c4ae fix(mobile/text): formatting toolbar missing background on iOS 2026-02-25 20:02:15 +02:00
Adorian Doran aba7f35d9f style/text: tweak dividers 2026-02-25 19:34:31 +02:00
Adorian Doran 8c9ad575ef style: tweak layout 2026-02-25 19:26:06 +02:00
Elian Doran fc59ee6e93 chore(mobile): fix warnings in mobile_editor_toolbar 2026-02-25 19:14:32 +02:00
Elian Doran 5ec9770b07 fix(mobile): confusing shift when opening keyboard in split on iOS 2026-02-25 19:08:20 +02:00
Elian Doran 1c1895b2eb fix(mobile): confusing shift when opening keyboard in split on iOS 2026-02-25 19:05:01 +02:00
Adorian Doran 7861bc41f9 style/calendar: tweak layout 2026-02-25 18:56:24 +02:00
Adorian Doran 843e4d45e6 style: tweak layout 2026-02-25 18:55:57 +02:00
Elian Doran 416825c9c2 fix(mobile): toast not respecting safe area 2026-02-25 18:54:42 +02:00
Elian Doran 6762539b4d fix(client): note context active indicator disappears after typing 2026-02-25 18:47:00 +02:00
Elian Doran ae9827c436 fix(mobile): virtual keyboard detection not working on Android 2026-02-25 18:35:01 +02:00
Adorian Doran 4b4b427d2b style: tweak layout 2026-02-25 18:33:53 +02:00
Elian Doran 33622cd3fe fix(hooks): unnecessary recreation of media listener 2026-02-25 18:21:53 +02:00
Adorian Doran 807b054a95 UI: grid view extra improvements (#8831) 2026-02-25 18:21:35 +02:00
Adorian Doran b223b931ab ui/grid view/tables: fix scroll direction 2026-02-25 11:35:39 +02:00
Adorian Doran 6759fef827 ui/grid view/tables: tweak 2026-02-25 11:04:26 +02:00
Adorian Doran 896d50b1f8 ui/grid view: hide the scrollbar of tables 2026-02-25 11:01:45 +02:00
Adorian Doran 2049c49fdb ui/grid view: horizontally scroll tables 2026-02-25 10:58:38 +02:00
Adorian Doran b3c397e847 ui/grid view: fade out overflowing content 2026-02-25 09:40:05 +02:00
renovate[bot] e69b85a988 chore(deps): update node.js to v24.14.0 2026-02-25 00:56:05 +00:00
renovate[bot] aabc9ec4df fix(deps): update dependency mind-elixir to v5.9.1 2026-02-25 00:55:58 +00:00
renovate[bot] 598501e3f6 chore(deps): update dependency electron to v40.6.1 2026-02-25 00:55:05 +00:00
renovate[bot] bfa344a839 chore(deps): update dependency @smithy/middleware-retry to v4.4.37 2026-02-25 00:54:08 +00:00
renovate[bot] c466d7ee9f chore(deps): update dependency @redocly/cli to v2.19.2 2026-02-25 00:53:13 +00:00
renovate[bot] 2e9c07d3d6 chore(deps): update dependency @wxt-dev/auto-icons to v1.1.1 2026-02-24 20:24:58 +00:00
Elian Doran 9651ca99f3 chore(deps): update dependency @smithy/middleware-retry to v4.4.36 (#8813) 2026-02-24 22:22:53 +02:00
Elian Doran a6e87f5724 chore(deps): update dependency eslint to v10.0.2 (#8815) 2026-02-24 22:22:25 +02:00
renovate[bot] cf994dac5a chore(deps): update dependency eslint to v10.0.2 2026-02-24 17:49:42 +00:00
Elian Doran 95c9c375c9 chore(deps): update dependency wxt to v0.20.18 (#8801) 2026-02-24 19:45:35 +02:00
renovate[bot] f9804eda8e chore(deps): update dependency @smithy/middleware-retry to v4.4.36 2026-02-24 17:44:47 +00:00
Elian Doran 88c2bedbd7 chore(deps): update dependency eslint-plugin-playwright to v2.7.1 (#8816) 2026-02-24 19:44:34 +02:00
Elian Doran 49bf49c967 chore(deps): update pnpm to v10.30.2 (#8817) 2026-02-24 19:44:13 +02:00
Elian Doran 506b5c44af chore(deps): update typescript-eslint monorepo to v8.56.1 (#8818) 2026-02-24 19:43:38 +02:00
Elian Doran 22ea59a63b fix(deps): update dependency eslint-linter-browserify to v10.0.2 (#8819) 2026-02-24 19:43:17 +02:00
Elian Doran 934aaaf045 chore(deps): update dependency @types/jquery to v4 (#8820) 2026-02-24 19:42:37 +02:00
Elian Doran c6bfcea79f Translations update from Hosted Weblate (#8823) 2026-02-24 19:42:19 +02:00
Aindriú Mac Giolla Eoin 6e39fb12e2 Translated using Weblate (Irish)
Currently translated at 100.0% (1674 of 1674 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-24 17:14:11 +00:00
Elian Doran dbe534d8f8 Translations update from Hosted Weblate (#8811) 2026-02-24 19:14:01 +02:00
Elian Doran 04e5197d00 Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-24 19:13:42 +02:00
Elian Doran 3a15878629 fix(mindmap): not reacting to switch between light/dark mode 2026-02-24 18:46:46 +02:00
Elian Doran 021a908c9c fix(canvas): not reacting to switch between light/dark mode 2026-02-24 18:35:36 +02:00
Elian Doran c09ef3af80 fix(note_title): help pages have editable title 2026-02-24 18:14:13 +02:00
Elian Doran 3151e6dafc fix(client/layout): scroll padding enabled when note is protected 2026-02-24 18:10:51 +02:00
noobhjy e9dc97daf8 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1674 of 1674 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-24 09:16:45 +01:00
green 3a3cc565ea Translated using Weblate (Japanese)
Currently translated at 100.0% (1674 of 1674 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-24 09:16:45 +01:00
Toto Yullian fcf4ffb445 Translated using Weblate (Indonesian)
Currently translated at 4.6% (78 of 1674 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-02-24 09:16:44 +01:00
Giovi b34c27af1f Translated using Weblate (Italian)
Currently translated at 100.0% (1674 of 1674 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-02-24 09:16:44 +01:00
Adorian Doran 64371a6b9c UI: tweak grid & list collections (#8804) 2026-02-24 10:16:39 +02:00
Adorian Doran 182afab12c Merge branch 'main' into feat/ui/tweak-list-and-grid-collections 2026-02-24 10:16:17 +02:00
Adorian Doran 57e888911d ui/list & grid view: refactor 2026-02-24 10:15:51 +02:00
Adorian Doran 535054b2d2 style/card: fix hover color on nested items 2026-02-24 10:07:26 +02:00
Adorian Doran d40191257c ui/grid view: tweak the height of video previews 2026-02-24 09:53:35 +02:00
Adorian Doran 87ee1185f2 ui/list & grid view: add bottom margin if the pager is not visible 2026-02-24 09:33:28 +02:00
Adorian Doran f4b0f810bd ui/list & grid view: increase content entrance transition duration 2026-02-24 09:24:55 +02:00
renovate[bot] 0934e33af7 chore(deps): update dependency @types/jquery to v4 2026-02-24 01:55:37 +00:00
renovate[bot] b3e88f5a44 fix(deps): update dependency eslint-linter-browserify to v10.0.2 2026-02-24 01:54:41 +00:00
renovate[bot] 2f23db0c64 chore(deps): update typescript-eslint monorepo to v8.56.1 2026-02-24 01:53:41 +00:00
renovate[bot] ca2f39bacd chore(deps): update pnpm to v10.30.2 2026-02-24 01:52:45 +00:00
renovate[bot] e38b89996a chore(deps): update dependency eslint-plugin-playwright to v2.7.1 2026-02-24 01:52:34 +00:00
Christian Barcenas 8efbb8819b fix(server): use exec in launcher script 2026-02-24 00:22:49 +01:00
Christian Barcenas e03bd3d716 fix(desktop): use exec in launcher scripts 2026-02-24 00:22:49 +01:00
Elian Doran cfb56cb143 fix(deps): update dependency katex to v0.16.33 (#8802) 2026-02-23 21:38:38 +02:00
renovate[bot] 477e516473 fix(deps): update dependency katex to v0.16.33 2026-02-23 18:59:39 +00:00
Elian Doran fd601eac5b add generic debugging/dap launch.json for client, server and vitest (#8668) 2026-02-23 20:56:34 +02:00
Elian Doran df4fa42acd fix(desktop): protected session not refreshing while app is in background (closes #7761) 2026-02-23 19:56:03 +02:00
Elian Doran b06d390df5 chore(server): use purple icon in dev mode 2026-02-23 18:59:07 +02:00
Elian Doran 7f013a58f5 fix(backend_log): not scrollable 2026-02-23 18:55:19 +02:00
Elian Doran 1fd0fb03fa chore(ckeditor): remove unnecessary priority
See https://github.com/ckeditor/ckeditor5/pull/19115#issuecomment-3944720307
2026-02-23 18:46:09 +02:00
Elian Doran 7ec718218e fix(hidden_subtree): attribute of wrong type (relation vs label) causing issues 2026-02-23 18:45:20 +02:00
misch334 b5300e5b86 make browser reference platform-agnostic and reliant on defaults 2026-02-23 12:29:29 +01:00
Adorian Doran 19d2f02694 ui/list & grid view: fix some issues 2026-02-23 12:29:28 +02:00
Adorian Doran fec929dfee ui/list & grid view: refactor 2026-02-23 12:21:07 +02:00
Adorian Doran d7339ff14d ui/collection properties: apply the correct inline padding 2026-02-23 11:40:02 +02:00
Adorian Doran 422bc00ade ui/list & grid view: add block margin for the bottom pager 2026-02-23 11:36:04 +02:00
Adorian Doran 8edf5483a6 ui/pager: add support for custom CSS class 2026-02-23 11:28:35 +02:00
Adorian Doran 00046d4145 ui/grid view: do not show the item menu for the options root 2026-02-23 11:15:35 +02:00
Adorian Doran 25e67f62d5 ui/list & grid view: use background effects 2026-02-23 11:10:39 +02:00
Adorian Doran 8d233e66e1 Grid collections: enhance the grid view (#8770) 2026-02-23 10:39:08 +02:00
Adorian Doran 39e0d5b629 ui/grid view: fix some issues 2026-02-23 10:16:04 +02:00
Adorian Doran 90844d5bc2 ui/grid view card: tweak style 2026-02-23 10:11:52 +02:00
Adorian Doran 29df06626b ui/grid view card: tweak CSS 2026-02-23 10:06:11 +02:00
Adorian Doran d28661fee3 ui/grid view card: use tinted background 2026-02-23 09:55:47 +02:00
Adorian Doran dc8c10e531 ui/grid view card: refactor CSS 2026-02-23 09:34:08 +02:00
Adorian Doran 538e1f0fdd ui/grid view card: tweak layout 2026-02-23 09:21:52 +02:00
Adorian Doran eaf0c690e1 ui/grid view card: tweak layout 2026-02-23 09:19:01 +02:00
Adorian Doran a4a3d6a82c ui/grid view card: restyle the button bar 2026-02-23 09:08:54 +02:00
renovate[bot] e5eab3952b chore(deps): update dependency wxt to v0.20.18 2026-02-23 00:55:07 +00:00
BeatLink 9b45639148 Update apps/client/src/widgets/collections/calendar/event_builder.ts
Replace end with duration if recurrence set. Make duration calculation clearer

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-22 18:43:18 -05:00
BeatLink e53cd7443a Add Docs for Recurrence 2026-02-22 18:22:21 -05:00
BeatLink 60b74f5959 Add Recurrence Support for Calendar 2026-02-22 18:13:08 -05:00
Elian Doran a3e4044fec Translations update from Hosted Weblate (#8796) 2026-02-22 21:46:05 +02:00
Elian Doran f380df9c01 feat(i18n): add support for Hindi 2026-02-22 21:35:14 +02:00
Hosted Weblate 83fc82a615 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/
2026-02-22 18:13:20 +00:00
Hosted Weblate eaf3632fc9 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-02-22 18:13:06 +00:00
Vedansh Bodkhe 1d947f26ff Translated using Weblate (Hindi)
Currently translated at 100.0% (1809 of 1809 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-02-22 18:13:02 +00:00
Elian Doran 34a08be4cd feat(dev): remove ai/llm features (#8678) 2026-02-22 20:12:49 +02:00
Adorian Doran f84a4c4856 ui/grid view: do not animate the card when pressing the item menu button 2026-02-22 19:48:58 +02:00
Adorian Doran 47aa24d0f4 ui/list view: use card frame component instead of a custom styled element 2026-02-22 19:43:25 +02:00
Adorian Doran e6e132e905 ui/card frame: add support for arbitrary HTML attributes and event handlers 2026-02-22 19:42:08 +02:00
Adorian Doran ad2df957c7 ui/cards: create a card frame component 2026-02-22 19:25:30 +02:00
Elian Doran 818ca2c2ab e2e(server): fix flaky test 2026-02-22 18:54:51 +02:00
Elian Doran 72c34eb491 docs(user): mention changes to LLM 2026-02-22 16:03:27 +02:00
Elian Doran 22341bf0b1 fix(server): LLM launcher & option still not removed 2026-02-22 15:46:56 +02:00
Elian Doran c735870b95 test(server): reduce num workers temporarily 2026-02-22 14:33:14 +02:00
Elian Doran 56f796bf80 Fix searching with orderby and parentheses / increased expression level (#8717) 2026-02-22 12:34:59 +02:00
Elian Doran 225693fa79 chore(server): update integration DB to latest migration 2026-02-22 12:01:20 +02:00
Elian Doran 7f760bff17 Merge remote-tracking branch 'origin/main' into feat/remove-ai-llm 2026-02-22 11:51:57 +02:00
Elian Doran 6b4da33729 chore(launch_bar): log warnings instead of crashing on a bad launcher 2026-02-22 11:35:46 +02:00
Elian Doran 82cae8ffbf fix(hidden_subtree): clean up LLM launch item 2026-02-22 11:13:37 +02:00
Elian Doran 31dbbb1881 Translations update from Hosted Weblate (#8793) 2026-02-22 10:49:33 +02:00
green 31de1e007a Translated using Weblate (Japanese)
Currently translated at 100.0% (1809 of 1809 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-22 09:49:13 +01:00
Elian Doran a2d0655a75 fix(deps): update dependency eslint-linter-browserify to v10.0.1 (#8788) 2026-02-22 10:49:01 +02:00
Elian Doran 269209dd31 fix(deps): update dependency mind-elixir to v5.9.0 (#8789) 2026-02-22 10:48:22 +02:00
Elian Doran 32082927b2 Translations update from Hosted Weblate (#8792) 2026-02-22 10:47:32 +02:00
Elian Doran c10d0b6349 Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-22 10:46:31 +02:00
Vedansh Bodkhe 11ff1266e5 Translated using Weblate (Hindi)
Currently translated at 4.9% (89 of 1809 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-02-22 04:49:25 +01:00
Marcel 8b5717ff7f Translated using Weblate (German)
Currently translated at 100.0% (1809 of 1809 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-22 04:49:25 +01:00
Marcel e69f6bef2c Translated using Weblate (German)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-02-22 04:49:24 +01:00
renovate[bot] 2a17a322c2 fix(deps): update dependency mind-elixir to v5.9.0 2026-02-22 00:59:30 +00:00
renovate[bot] 26ddb76338 fix(deps): update dependency eslint-linter-browserify to v10.0.1 2026-02-22 00:58:07 +00:00
Elian Doran f62f156c93 fix(editor): resolve strange stuck indent when a Note has images (#8520) 2026-02-22 00:01:07 +02:00
Elian Doran f4b6c65bad fix(ckeditor5): cursor jumping on Tab for other widgets such as separators or footnote 2026-02-21 21:30:57 +02:00
Elian Doran 0a08399d9e feat(share-theme): align mobile/desktop UI with unified header (#8484) 2026-02-21 20:36:26 +02:00
Elian Doran df1adaad3a Merge branch 'main' into share-theme-improvements 2026-02-21 20:12:37 +02:00
Elian Doran 33b1490de0 Fix week note title error when cross year (#8431) 2026-02-21 20:09:14 +02:00
Elian Doran 286720bdbf Improve no results for search (#8786) 2026-02-21 19:55:40 +02:00
Elian Doran 1441ac67ab chore(search): use translation for button 2026-02-21 19:21:09 +02:00
Elian Doran d245fdd1b8 chore(search): reuse search command 2026-02-21 19:20:06 +02:00
Elian Doran e9c9b456e0 feat(search): add button to search now 2026-02-21 19:15:42 +02:00
Elian Doran d9eafff7df style(client): improve no items size and alignment 2026-02-21 19:02:29 +02:00
Elian Doran 94eb19d879 feat(search): center no results vertically 2026-02-21 18:59:13 +02:00
Elian Doran d7b585230a fix(search): double scrollbars 2026-02-21 18:56:07 +02:00
Elian Doran 16ed14f85a feat(search): use NoItems for not executed & no results 2026-02-21 18:51:25 +02:00
Elian Doran 93e59cc3b6 fix(search): "no results" item not shown 2026-02-21 18:49:55 +02:00
Elian Doran c38220892b Merge branch 'main' into fix_parens_orderby 2026-02-21 17:31:33 +02:00
Elian Doran 4ef72fb35b fix(breadcrumb): note title update (#8784) 2026-02-21 17:23:32 +02:00
Elian Doran 3f23ce095c Various bugfixes for the release (#8785) 2026-02-21 16:41:19 +02:00
JYC333 0ead246ce7 Merge branch 'main' into week-note 2026-02-21 14:10:19 +00:00
Elian Doran 0f8259fdf7 docs(user): align collection creation, hiding subtree & collection properties 2026-02-21 13:11:05 +02:00
Elian Doran ebb180b0ab chore(hidden_subtree): disable hiding subtree by default for now 2026-02-21 12:45:24 +02:00
Elian Doran c03f50583e chore(server): address requested changes 2026-02-21 12:33:30 +02:00
Elian Doran b8a6cf0099 fix(calendar): wrong parent when creating day note from unhoisted workspace calendar root 2026-02-21 12:16:55 +02:00
Elian Doran ad3cdc3364 chore(status_bar): fix inherited attribute key and useEffect deps 2026-02-21 12:00:02 +02:00
Elian Doran d924d3fa4f fix(promoted_attributes): auto-complete interfering with value 2026-02-21 11:41:59 +02:00
Elian Doran dd4a8c08c8 fix(promoted_attributes): multiple autocomplete instances 2026-02-21 11:34:04 +02:00
Vedansh Bodkhe 52f2e800e7 Update apps/client/src/widgets/react/hooks.tsx
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-21 15:01:29 +05:30
Vedansh Bodkhe 8d94b62db0 fix(breadcrumb): note title update 2026-02-21 14:53:06 +05:30
Elian Doran c3eb483224 chore(promoted_attributes): unnecessary use of .entries() 2026-02-21 11:02:42 +02:00
Elian Doran e7b1e0a81f fix(promoted_attributes): typing sometimes affects the value 2026-02-21 11:01:57 +02:00
Elian Doran ca672c68a3 fix(export/zip): hidden note appears in tree (closes #8714) 2026-02-21 10:02:42 +02:00
Elian Doran 416e11a32b chore(share): write meta file for analysis 2026-02-21 09:57:05 +02:00
Elian Doran bbaa2db377 docs: update SECURITY.MD (closes #8767) 2026-02-21 09:43:55 +02:00
Elian Doran cf4e412ab8 fix(geomap): read-only map pin click broken (closes #8755) 2026-02-21 09:37:35 +02:00
Elian Doran 48ac88dbfe fix(geomap): collection properties overlapping with mobile backdrop 2026-02-21 09:16:29 +02:00
Elian Doran 4980e9a15b fix(desktop): window not draggable on legacy theme in vertical layout (closes #8402) 2026-02-21 09:10:00 +02:00
Elian Doran 290a2ab902 fix(deps): update dependency i18next to v25.8.13 (#8781) 2026-02-21 09:02:02 +02:00
Elian Doran 6a04d8fce1 chore(deps): update pnpm to v10.30.1 (#8779) 2026-02-21 09:01:47 +02:00
Elian Doran 7286ac743f chore(deps): update dependency eslint to v10.0.1 (#8778) 2026-02-21 08:57:32 +02:00
Elian Doran 41b6b5f615 fix(deps): update dependency @codemirror/view to v6.39.15 (#8780) 2026-02-21 08:57:17 +02:00
Elian Doran d0572f7691 fix(deps): update dependency preact-render-to-string to v6.6.6 (#8782) 2026-02-21 08:57:01 +02:00
Elian Doran a8210844cb chore(deps): update dependency happy-dom to v20.7.0 (#8783) 2026-02-21 08:56:43 +02:00
renovate[bot] c5c39cedc4 chore(deps): update dependency happy-dom to v20.7.0 2026-02-21 01:40:07 +00:00
renovate[bot] 8d6ae2da82 fix(deps): update dependency preact-render-to-string to v6.6.6 2026-02-21 01:39:11 +00:00
renovate[bot] 9eea6b3645 fix(deps): update dependency i18next to v25.8.13 2026-02-21 01:38:19 +00:00
renovate[bot] 6d9638970d fix(deps): update dependency @codemirror/view to v6.39.15 2026-02-21 01:37:27 +00:00
renovate[bot] ecd3638298 chore(deps): update pnpm to v10.30.1 2026-02-21 01:36:12 +00:00
renovate[bot] bbde0e4d24 chore(deps): update dependency eslint to v10.0.1 2026-02-21 01:35:51 +00:00
Elian Doran 299f694aa9 chore: disable support notice for i18next
Signed-off-by: Elian Doran <contact@eliandoran.me>
2026-02-20 23:39:55 +02:00
Elian Doran 2675698d3a feat: enhance build-docs utility with pnpm and Nix support (#8574) 2026-02-20 23:13:05 +02:00
Elian Doran 3056f3cfcf fix(deps): update dependency preact to v10.28.4 (#8772) 2026-02-20 18:32:24 +02:00
Elian Doran 7310d8af30 Merge remote-tracking branch 'origin/main' into feat/remove-ai-llm 2026-02-20 15:31:34 +02:00
Elian Doran b62f40f8c9 chore(server): format translations to avoid merge issues 2026-02-20 15:28:57 +02:00
Elian Doran ae1aac02ae chore(client): format translations to avoid merge issues 2026-02-20 15:26:13 +02:00
Elian Doran e19f344dc1 Translations update from Hosted Weblate (#8777) 2026-02-20 15:17:24 +02:00
손상모 1525ecdb05 Translated using Weblate (Korean)
Currently translated at 5.8% (105 of 1808 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ko/
2026-02-20 13:12:07 +00:00
손상모 4f6a13b2c4 Translated using Weblate (Korean)
Currently translated at 31.8% (124 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ko/
2026-02-20 13:12:06 +00:00
Ulices 4747297adc Translated using Weblate (Spanish)
Currently translated at 100.0% (1808 of 1808 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-20 13:12:05 +00:00
Hosted Weblate f753974800 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-20 13:12:05 +00:00
Elian Doran bd4002529c chore(deps): update dependency @anthropic-ai/sdk to v0.78.0 (#8773) 2026-02-20 15:11:38 +02:00
Elian Doran 00588eb099 chore(deps): update dependency electron to v40.6.0 (#8774) 2026-02-20 15:11:28 +02:00
Elian Doran 81420b6168 chore(deps): update dependency jsonc-eslint-parser to v3 (#8775) 2026-02-20 15:09:08 +02:00
renovate[bot] fe74d2aec9 chore(deps): update dependency jsonc-eslint-parser to v3 2026-02-20 09:52:34 +00:00
renovate[bot] 6514701c6a chore(deps): update dependency electron to v40.6.0 2026-02-20 00:02:14 +00:00
renovate[bot] 9e206ce7ea chore(deps): update dependency @anthropic-ai/sdk to v0.78.0 2026-02-20 00:01:39 +00:00
renovate[bot] b32ad68e4f fix(deps): update dependency preact to v10.28.4 2026-02-20 00:01:06 +00:00
Adorian Doran dfb5322b1a ui/list view: fix a regression 2026-02-19 23:49:59 +02:00
Adorian Doran 47859d401e ui/grid view: refactor CSS 2026-02-19 22:46:01 +02:00
Elian Doran 5da90f9e16 chore(deps): update dependency pdfjs-dist to v5.4.624 (#8582) 2026-02-19 22:20:38 +02:00
Adorian Doran 4b098e2008 ui/list & grid view: correct attribute name 2026-02-19 22:20:18 +02:00
Adorian Doran b4cd66db50 ui/grid view: fix some issues 2026-02-19 22:18:55 +02:00
Elian Doran 4847f4094a doc: enhanced icon pack creation (#8659) 2026-02-19 22:14:10 +02:00
Elian Doran 3fb34e6ae1 Merge branch 'main' into main 2026-02-19 22:13:57 +02:00
Elian Doran 135ed32374 feat(pdfjs): add WASM 2026-02-19 21:40:41 +02:00
Elian Doran 9b1fc77d56 fix(pdfjs): sidebar hiding no longer working 2026-02-19 21:30:48 +02:00
Elian Doran 5b751fd6e2 fix(pdfjs): custom scripts no longer embedded 2026-02-19 21:24:08 +02:00
Elian Doran 39ece711d9 chore(pdfjs): update to v5.4.624 2026-02-19 21:23:52 +02:00
Elian Doran a77b5601be feat(pdfjs): add script to update viewer 2026-02-19 21:09:13 +02:00
Adorian Doran 8b5d88bf2b ui/grid view: fix CSS selector 2026-02-19 20:05:42 +02:00
Elian Doran 1f602f9cad always show Note Paths in Status Bar (#8623) 2026-02-19 20:03:22 +02:00
Adorian Doran 5588042ab6 ui/grid view: refactor CSS 2026-02-19 19:52:40 +02:00
Elian Doran bc89bc8270 Further mobile improvements (#8769) 2026-02-19 19:42:24 +02:00
Adorian Doran 60ae094d3b ui/grid view: reveal the content using a fade in transition 2026-02-19 19:26:51 +02:00
Elian Doran a9facc7ce2 chore(deps): update pnpm to v10.30.0 (#8754) 2026-02-19 19:14:51 +02:00
Adorian Doran f200ac898a ui/grid view: add support for search view 2026-02-19 19:14:01 +02:00
Elian Doran 56ce25b8e8 fix(mobile): missing note icon for full-height notes 2026-02-19 19:13:31 +02:00
Elian Doran 4d5d9b4b70 fix(mobile): some buttons display a + from keyboard shortcut 2026-02-19 18:42:28 +02:00
Elian Doran b97ab913bf fix(mobile/jump_to_note): full text search button clipped 2026-02-19 18:40:15 +02:00
Elian Doran 9fe7bdf79b fix(mobile/global_menu): tooltips not visible due to position 2026-02-19 18:35:32 +02:00
Elian Doran 4ebc4ece34 fix(mobile/tree): "toggle sidebar" tooltip shown after opening sidebar 2026-02-19 18:31:38 +02:00
Elian Doran 0110b3c4a2 fix(mobile/tree): too easy to accidentally close via drag gesture 2026-02-19 18:22:47 +02:00
Elian Doran fb20d4998a fix(mobile/tree): partly hidden due to mobile viewport (closes #8740) 2026-02-19 18:19:41 +02:00
Elian Doran bd06c530e4 feat(mobile/global_menu): add quick entry to recent changes 2026-02-19 18:14:21 +02:00
Elian Doran cd4505bcf0 Translations update from Hosted Weblate (#8768) 2026-02-19 18:08:26 +02:00
renovate[bot] 173f4a23a5 chore(deps): update pnpm to v10.30.0 2026-02-19 16:08:03 +00:00
손상모 b33d4e64b9 Translated using Weblate (Korean)
Currently translated at 4.5% (83 of 1808 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ko/
2026-02-19 16:04:47 +00:00
Aindriú Mac Giolla Eoin a4c95132bb Translated using Weblate (Irish)
Currently translated at 100.0% (1808 of 1808 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-19 16:04:47 +00:00
손상모 095e797a02 Translated using Weblate (Korean)
Currently translated at 26.7% (104 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ko/
2026-02-19 16:04:46 +00:00
손상모 aaec171d94 Translated using Weblate (Korean)
Currently translated at 96.8% (153 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/
2026-02-19 16:04:45 +00:00
Hosted Weblate 42b28993b2 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-19 16:04:44 +00:00
Elian Doran 09a39379ef fix(deps): update dependency marked to v17.0.3 (#8751) 2026-02-19 18:03:58 +02:00
Elian Doran 29f7370c72 chore(deps): update dependency @prefresh/vite to v2.4.12 (#8758) 2026-02-19 18:03:48 +02:00
Elian Doran a07dcef2c4 chore(deps): update dependency happy-dom to v20.6.3 (#8759) 2026-02-19 18:03:38 +02:00
Elian Doran 6e696e1123 chore(deps): update dependency sanitize-html to v2.17.1 (#8760) 2026-02-19 18:03:27 +02:00
Elian Doran f0b1aa914d fix(deps): update dependency i18next to v25.8.11 (#8761) 2026-02-19 18:03:11 +02:00
Elian Doran ce1ae2c9bd fix(deps): update dependency mind-elixir to v5.8.3 (#8762) 2026-02-19 18:02:59 +02:00
Elian Doran 29597ddb48 chore(deps): update dependency @anthropic-ai/sdk to v0.77.0 (#8763) 2026-02-19 18:02:49 +02:00
Elian Doran 1c1421fe3a chore(deps): update dependency @redocly/cli to v2.19.1 (#8764) 2026-02-19 18:02:37 +02:00
Elian Doran 918a52005e chore(deps): update dependency eslint-plugin-playwright to v2.7.0 (#8765) 2026-02-19 18:02:23 +02:00
renovate[bot] a3564b879f chore(deps): update dependency @redocly/cli to v2.19.1 2026-02-19 13:47:07 +00:00
renovate[bot] b78f3bbaa7 chore(deps): update dependency eslint-plugin-playwright to v2.7.0 2026-02-19 01:14:05 +00:00
renovate[bot] 4cbdb5a073 chore(deps): update dependency @anthropic-ai/sdk to v0.77.0 2026-02-19 01:12:04 +00:00
renovate[bot] 758021e10c fix(deps): update dependency mind-elixir to v5.8.3 2026-02-19 01:11:03 +00:00
renovate[bot] 374e3560c3 fix(deps): update dependency i18next to v25.8.11 2026-02-19 01:10:07 +00:00
renovate[bot] 57a3524cc3 chore(deps): update dependency sanitize-html to v2.17.1 2026-02-19 01:09:10 +00:00
renovate[bot] 9af4773b45 chore(deps): update dependency happy-dom to v20.6.3 2026-02-19 01:08:16 +00:00
renovate[bot] 6942773965 chore(deps): update dependency @prefresh/vite to v2.4.12 2026-02-19 01:07:27 +00:00
Elian Doran 734b3ee519 Translations update from Hosted Weblate (#8757) 2026-02-18 22:37:17 +02:00
green 1b80fa8df2 Translated using Weblate (Japanese)
Currently translated at 100.0% (1808 of 1808 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-18 15:09:46 +01:00
renovate[bot] afd6a05e0f fix(deps): update dependency marked to v17.0.3 2026-02-18 10:55:09 +00:00
Elian Doran 5a4bd1933d chore(deps): update dependency @smithy/middleware-retry to v4.4.33 (#8749) 2026-02-18 12:54:32 +02:00
Elian Doran a25dfce410 chore(deps): update dependency happy-dom to v20.6.2 (#8750) 2026-02-18 12:54:03 +02:00
Elian Doran fc0490bc6a chore(deps): update dependency @anthropic-ai/sdk to v0.76.0 (#8753) 2026-02-18 12:53:23 +02:00
Elian Doran 29cdd1d028 fix(deps): update dependency mermaid to v11.12.3 (#8752) 2026-02-18 12:52:33 +02:00
Adorian Doran 419e87b0de ui/grid view: add support for colored notes 2026-02-18 10:29:41 +02:00
Adorian Doran 75c7d55e01 ui/grid view: tweak style 2026-02-18 10:08:50 +02:00
Adorian Doran e006550b9f ui/grid view: add a menu button for grid items 2026-02-18 09:51:18 +02:00
Adorian Doran 2a424f8dc4 ui/grid view: refactor 2026-02-18 09:31:03 +02:00
Adorian Doran 5036518458 ui/grid view: hide attributes 2026-02-18 09:20:00 +02:00
Adorian Doran 297cbbd8b3 ui/grid view: reuse some styles from list view 2026-02-18 09:15:38 +02:00
renovate[bot] 87a89f709a chore(deps): update dependency @anthropic-ai/sdk to v0.76.0 2026-02-18 05:27:47 +00:00
renovate[bot] 6f1991e20e fix(deps): update dependency mermaid to v11.12.3 2026-02-18 02:48:10 +00:00
renovate[bot] 700de58686 chore(deps): update dependency happy-dom to v20.6.2 2026-02-18 02:46:41 +00:00
renovate[bot] 57e1208c27 chore(deps): update dependency @smithy/middleware-retry to v4.4.33 2026-02-18 02:45:47 +00:00
contributor b33fe2ca3a always show Note paths in Status Bar
useful for a opened from search tree (no other way to find out a note path)
2026-02-17 23:41:33 +02:00
Elian Doran 3c3e73edae Various bugfixes for v0.102.0 (#8748) 2026-02-17 23:40:02 +02:00
Elian Doran ec4fd371b5 fix(webview): doesn't activate note context on click in desktop 2026-02-17 23:01:35 +02:00
Elian Doran 555b138a90 fix(webview): doesn't activate note context on click in browser 2026-02-17 22:53:48 +02:00
Elian Doran c139ff776c chore(render): address requested changes 2026-02-17 22:24:42 +02:00
Elian Doran 0c6b5e3b8e chore(deps): update typescript-eslint monorepo to v8.56.0 (#8744) 2026-02-17 21:18:31 +02:00
renovate[bot] 1138f9a0e9 chore(deps): update typescript-eslint monorepo to v8.56.0 2026-02-17 18:55:01 +00:00
renovate[bot] 4955bd782b chore(deps): update dependency pdfjs-dist to v5.4.624 2026-02-17 18:52:59 +00:00
Adorian Doran 516f0052ef ui/grid view: use flex gap instead of margins for cards 2026-02-17 20:36:01 +02:00
Elian Doran f4e82acc67 feat(render): add error boundary 2026-02-17 19:46:46 +02:00
Elian Doran a5806c0d1d feat(render): intercept bundle errors 2026-02-17 19:22:12 +02:00
Elian Doran bf302a84a9 feat(content_renderer): display render errors 2026-02-17 19:15:43 +02:00
Elian Doran fcc740d592 fix(render): toast when execution fails 2026-02-17 19:11:33 +02:00
Elian Doran cee16dc3dc feat(render): display syntax errors inside render note 2026-02-17 19:04:14 +02:00
Elian Doran 47601cd1da fix(active_content_badges): not refreshing on type or mime update 2026-02-17 18:55:28 +02:00
Elian Doran 092a60fdd9 fix(codemirror): missing Node globals from linter 2026-02-17 18:50:52 +02:00
Elian Doran e8e7568bdc fix(breadcrumb): text overflow when width is constrained 2026-02-17 18:48:49 +02:00
Elian Doran 4caca56e3b fix(code): scrolling to end changes the viewport 2026-02-17 18:33:10 +02:00
Elian Doran e4432e6feb fix(code): scrolling to end triggers on all splits 2026-02-17 18:32:00 +02:00
Elian Doran d8275e7ea8 fix(server): in-app help not working in dev mode 2026-02-17 18:24:25 +02:00
Elian Doran 952dc634b4 fix(launch_bar): wrong tooltip in sync status (closes #8266) 2026-02-17 18:24:10 +02:00
Elian Doran 7dceca475d Translations update from Hosted Weblate (#8746) 2026-02-17 15:57:15 +02:00
Hosted Weblate 62a78bc272 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-02-17 14:02:25 +01:00
Adorian Doran 6aaf277b45 UI: improved pager (#8730) 2026-02-17 15:02:11 +02:00
Adorian Doran a1c61768c4 Merge branch 'main' into feat/ui/improved-pager 2026-02-17 15:01:52 +02:00
Adorian Doran 8e4c88c10c ui/pager: add support for custom alignment 2026-02-17 14:59:21 +02:00
Adorian Doran b57780519c ui/pager: fix attribute names 2026-02-17 14:55:43 +02:00
Adorian Doran c07c4013be ui/pager: update colors 2026-02-17 14:55:27 +02:00
Elian Doran 768211cc26 fix(desktop): web view note in second window does not load content (#8739) 2026-02-17 13:22:33 +02:00
Elian Doran b4a31503ee chore(deps): update dependency @redocly/cli to v2.18.2 (#8741) 2026-02-17 13:20:41 +02:00
Elian Doran 6c2b3e238c fix(deps): update dependency @preact/signals to v2.8.1 (#8742) 2026-02-17 13:20:16 +02:00
Elian Doran f2ff834b9c fix(deps): update dependency mind-elixir to v5.8.2 (#8743) 2026-02-17 13:19:55 +02:00
Elian Doran 86e1688358 Translations update from Hosted Weblate (#8745) 2026-02-17 13:19:10 +02:00
Adorian Doran d259eb1f9d ui/icon buttons: decrease opacity for disabled buttons 2026-02-17 12:46:57 +02:00
Adorian Doran 568a668e9f ui/pager: improve layout 2026-02-17 12:42:55 +02:00
Adorian Doran 0621dfbac7 ui/pager: extract colors as CSS variables 2026-02-17 12:12:34 +02:00
Adorian Doran 827bb9a32f ui/pager: tweak appearance 2026-02-17 12:07:51 +02:00
Stas Kies fd08654dd5 Translated using Weblate (German)
Currently translated at 100.0% (1807 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-17 10:28:43 +01:00
Stas Kies e5d750722e Translated using Weblate (German)
Currently translated at 99.5% (1798 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-17 10:28:43 +01:00
renovate[bot] b43c4ad666 fix(deps): update dependency mind-elixir to v5.8.2 2026-02-17 01:43:23 +00:00
renovate[bot] c9f93a4706 fix(deps): update dependency @preact/signals to v2.8.1 2026-02-17 01:42:30 +00:00
renovate[bot] a38834f7e2 chore(deps): update dependency @redocly/cli to v2.18.2 2026-02-17 01:41:41 +00:00
Adorian Doran fcfc6f6476 ui/pager: improve code 2026-02-17 01:14:14 +02:00
contributor b23a5348b5 fix(desktop): web view note in second window does not load content 2026-02-17 00:47:33 +02:00
Adorian Doran 782cd59407 ui/pager: improve layout 2026-02-16 21:46:16 +02:00
Adorian Doran 7964bd3be4 ui/pager: make responsive 2026-02-16 21:31:03 +02:00
Adorian Doran 3d41ce13b1 ui/pager: restyle the note counter 2026-02-16 20:48:51 +02:00
Adorian Doran 6f0881ab8a ui/pager: improve layout 2026-02-16 20:39:33 +02:00
Adorian Doran a6309715f3 ui/pager: refactor 2026-02-16 20:24:17 +02:00
Adorian Doran 5a06193e65 ui/pager: restyle 2026-02-16 20:11:11 +02:00
Adorian Doran 4912834537 ui/buttons: refactor 2026-02-16 18:23:28 +02:00
Adorian Doran d64f2c72b7 ui/buttons: add support for low profile style 2026-02-16 18:15:29 +02:00
Elian Doran 358d06a402 Translations update from Hosted Weblate (#8731) 2026-02-16 18:06:57 +02:00
Elian Doran 5deabe4260 fix(deps): update dependency mind-elixir to v5.8.1 (#8733) 2026-02-16 18:06:16 +02:00
Giovi 1b1162e26e Translated using Weblate (Italian)
Currently translated at 100.0% (1807 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-02-16 17:04:44 +01:00
Francis C. 30ad5d531c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1807 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-16 17:04:43 +01:00
Toto Yullian 99efc73e93 Translated using Weblate (Indonesian)
Currently translated at 3.9% (72 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-02-16 17:04:42 +01:00
Toto Yullian 17c0071dd1 Translated using Weblate (Indonesian)
Currently translated at 44.9% (71 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/
2026-02-16 17:04:42 +01:00
Francis C. a26bec047f Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1807 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-02-16 17:04:41 +01:00
Stas Kies 748e7cc1df Translated using Weblate (German)
Currently translated at 99.1% (1792 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-16 17:04:40 +01:00
green f653c86965 Translated using Weblate (Japanese)
Currently translated at 100.0% (1807 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-16 17:04:39 +01:00
Toto Yullian 58a41e58ee Translated using Weblate (Indonesian)
Currently translated at 71.5% (83 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-02-16 17:04:38 +01:00
Aindriú Mac Giolla Eoin 309a55f276 Translated using Weblate (Irish)
Currently translated at 100.0% (1807 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-16 17:04:38 +01:00
green df96c6b9fa Translated using Weblate (Japanese)
Currently translated at 99.3% (1796 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-16 17:04:37 +01:00
Elian Doran d779e078c7 fix(deps): update dependency i18next to v25.8.10 (#8732) 2026-02-16 18:04:12 +02:00
renovate[bot] ae224151a0 fix(deps): update dependency i18next to v25.8.10 2026-02-16 12:47:46 +00:00
renovate[bot] 9f11717b69 fix(deps): update dependency mind-elixir to v5.8.1 2026-02-16 02:36:40 +00:00
Adorian Doran ea25477e3d ui/pager: fix some issues 2026-02-16 02:06:39 +02:00
Adorian Doran 82576c9703 ui/pager: rewrite the pagination button distribution algorithm to better control the length 2026-02-16 01:51:32 +02:00
Elian Doran 80f1fc4c7c Translations update from Hosted Weblate (#8726) 2026-02-15 22:10:14 +02:00
Aindriú Mac Giolla Eoin 41cd4bcef6 Translated using Weblate (Irish)
Currently translated at 100.0% (1807 of 1807 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-15 20:49:02 +01:00
Ulices 46a414e155 Translated using Weblate (Spanish)
Currently translated at 100.0% (1806 of 1806 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-15 20:49:01 +01:00
Hosted Weblate 70a903f811 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-02-15 20:49:00 +01:00
Elian Doran 52db410c82 fix(collections/map): shifting into collection properties when switching styles 2026-02-15 21:48:46 +02:00
Elian Doran 08da8d73e0 fix(collections): collection properties still clipped in list/grid view 2026-02-15 21:48:39 +02:00
Elian Doran 81a572af25 feat(collections): improve display of no children 2026-02-15 21:48:33 +02:00
Elian Doran 23c50f34fe fix(collections): list/grid collection properties clipped when little results 2026-02-15 21:48:29 +02:00
Elian Doran 70aa115933 fix(collections): collection properties not shown if there are no children 2026-02-15 21:48:21 +02:00
Adorian Doran 0b8cba78d5 ui/pager: remove unused styles 2026-02-15 21:36:53 +02:00
Adorian Doran d8806eaa04 ui/pager: replace the page number links with buttons 2026-02-15 21:31:58 +02:00
Adorian Doran b8bc85856b ui/pager: add prev/next page navigation buttons 2026-02-15 21:12:42 +02:00
Adorian Doran cc097c5414 UI: improved cards (#8728) 2026-02-15 20:32:29 +02:00
Adorian Doran 7551d0e044 ui/cards: fix attribute name 2026-02-15 20:32:01 +02:00
Adorian Doran 489a88b8da ui/cards: refactor 2026-02-15 20:23:19 +02:00
Adorian Doran 48013dc264 ui/cards: use a better HTML structure 2026-02-15 20:14:14 +02:00
Adorian Doran 4ee9d45dfc ui/cards: implement card titles (heading) 2026-02-15 20:06:01 +02:00
Adorian Doran e00150a876 ui/cards: do not include nesting level CSS variables if not necessary 2026-02-15 19:46:08 +02:00
Adorian Doran 71668f8f8d List collections & search results: overhaul the list UI (#8705) 2026-02-15 19:32:21 +02:00
Adorian Doran b71424d239 Merge branch 'main' into feat/list-view-overhaul 2026-02-15 19:20:41 +02:00
Adorian Doran d1a3bceaa6 client/list view: refactor 2026-02-15 19:15:58 +02:00
Adorian Doran 483c57029a client/list view: extract event handler 2026-02-15 19:10:31 +02:00
Adorian Doran 7e6daf5b36 style/list view: refactor 2026-02-15 18:55:23 +02:00
Adorian Doran b658253687 style/card: refactor 2026-02-15 18:55:04 +02:00
Adorian Doran 80b488deec style/list view: tweak indentation size 2026-02-15 18:34:54 +02:00
Adorian Doran 10cf1a371e style/card: improve 2026-02-15 18:34:00 +02:00
Elian Doran 81445901fa Support for custom geomap tiles (#8703) 2026-02-15 18:21:49 +02:00
Adorian Doran f645d9d721 style/list view: tweak 2026-02-15 18:20:45 +02:00
Adorian Doran 900bfdff9d style/list view: refactor 2026-02-15 18:18:50 +02:00
Adorian Doran 108ca5afb5 client/list view: add support for archived items 2026-02-15 18:16:46 +02:00
Adorian Doran 3df03a551c client/list view: add support for archived items 2026-02-15 18:15:07 +02:00
Adorian Doran 6ffbe19667 client/list view: add support for tinted notes 2026-02-15 18:07:35 +02:00
Elian Doran e3172ebf1c fix(client): unreadable disabled item 2026-02-15 17:51:06 +02:00
Elian Doran 9b2876a8ff docs(user): mention custom tiles & hiding labels for geomap 2026-02-15 17:47:28 +02:00
Elian Doran 3db2c910e0 fix(client/active_badges): wrong enable + missing toggle for icon pack & custom CSS 2026-02-15 17:32:34 +02:00
Elian Doran 2799e4392f Merge remote-tracking branch 'origin/main' into feature/custom_map_improvements
; Conflicts:
;	apps/client/src/widgets/note_bars/CollectionProperties.tsx
;	apps/client/src/widgets/ribbon/collection-properties-config.tsx
2026-02-15 17:30:39 +02:00
Elian Doran 61963fcfda UX improvements for web view & render note (#8725) 2026-02-15 17:23:28 +02:00
Elian Doran b0a3d54276 chore(client): address requested changes 2026-02-15 17:15:51 +02:00
Elian Doran 2135412c84 Translations update from Hosted Weblate (#8723) 2026-02-15 17:08:54 +02:00
Elian Doran 7a534c3ea7 chore(client/active_badges): disable toggle for web view & render note 2026-02-15 17:06:23 +02:00
Elian Doran a6e596a5e3 feat(client/render_note): display rendering errors 2026-02-15 17:04:31 +02:00
Elian Doran 8b3e3c2c3a chore(react): not reacting properly to deleted relations 2026-02-15 16:56:37 +02:00
Elian Doran ec8b0a3801 feat(client/render_note): warning for disabled render note 2026-02-15 16:54:34 +02:00
Elian Doran 197b769838 feat(client/render_note): create sample note with HTML 2026-02-15 16:46:19 +02:00
Elian Doran 1ba498c0e3 feat(client/render_note): create sample note with preact 2026-02-15 16:38:09 +02:00
Elian Doran 5550cb7b95 feat(client/render_note): basic setup for with note picker 2026-02-15 16:30:10 +02:00
Elian Doran 06a005acec refactor(client/render_note): separate content from setup 2026-02-15 16:17:41 +02:00
Elian Doran 2103be9d28 refactor(client): extract learn more into component 2026-02-15 16:11:52 +02:00
Elian Doran a02f3c4440 refactor(client): extract setup form to dedicated component 2026-02-15 16:08:58 +02:00
Elian Doran 4b8d341e00 feat(web_view): add a screen if web view is disabled 2026-02-15 16:02:51 +02:00
Elian Doran 964633f426 refactor(client/web_view): fix lint & formatting 2026-02-15 15:36:58 +02:00
Marcel d11fb38280 Translated using Weblate (German)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-02-15 13:34:30 +00:00
Elian Doran 04f4530990 Mobile improvements (#8724) 2026-02-15 15:34:20 +02:00
Elian Doran 5a77318a9e chore(mobile): address requested changes 2026-02-15 15:33:03 +02:00
Elian Doran 9ed2894a0c fix(mobile): badges not collapsing in quick edit 2026-02-15 15:29:27 +02:00
Elian Doran e0766ad439 feat(mobile): display grid view on two columns 2026-02-15 15:25:28 +02:00
Elian Doran 67acfaab62 fix(mobile): missing scroll padding 2026-02-15 15:17:08 +02:00
Elian Doran 10b5d29107 fix(mobile): promoted attributes having a max-height 2026-02-15 15:16:23 +02:00
Elian Doran 297dd41170 fix(mobile): incorrect tab hue on light theme 2026-02-15 15:12:12 +02:00
Elian Doran 1364223599 fix(mobile): horizontall scroll in empty tab due to long attributes 2026-02-15 15:00:34 +02:00
Elian Doran a6b7761dfa fix(mobile): double-scroll bar for empty tab 2026-02-15 14:58:28 +02:00
Elian Doran 2e6290c514 feat(mobile): improve empty tab workspace switcher 2026-02-15 14:55:01 +02:00
Elian Doran 78f4928611 feat(mobile): reduce margins for empty tab 2026-02-15 14:53:01 +02:00
Elian Doran d044fce9c1 fix(mobile): remove redundant file properties footer 2026-02-15 14:44:21 +02:00
Elian Doran 11fa815e13 Active content badges (#8716) 2026-02-15 14:34:04 +02:00
Elian Doran 8d917eb970 Merge branch 'main' into feature/active_content_badges 2026-02-15 14:20:21 +02:00
Elian Doran e411e5f2cf chore(client): fix typecheck 2026-02-15 14:20:09 +02:00
Adorian Doran fea8de89c6 style/list view: handle the title and attributes when overflowing the container 2026-02-15 14:08:50 +02:00
Elian Doran 48773636ca feat(collections): improve properties dropdown on mobile 2026-02-15 13:54:01 +02:00
Elian Doran 5a3c7355c1 chore(badges/content): improve dropdown on mobile 2026-02-15 13:51:48 +02:00
Adorian Doran 4afbabb977 style/list view: tweak 2026-02-15 13:51:13 +02:00
Elian Doran afa9fe3063 refactor(badges/content): integrate title into definition 2026-02-15 13:46:47 +02:00
Elian Doran 178ac088b4 refactor(badges/content): integrate widget switcher using additional options 2026-02-15 13:44:16 +02:00
Adorian Doran b2ebaf111f style/card: add legacy theme fallback 2026-02-15 13:43:06 +02:00
Elian Doran ffd5ebbe79 refactor(badges/content): integrate execute using additional options 2026-02-15 13:38:02 +02:00
Elian Doran 6b78bfecb4 refactor(badges/content): integrate run options using additional options 2026-02-15 13:34:48 +02:00
Adorian Doran 9c2b01e3c9 style/list view: tweak 2026-02-15 13:34:45 +02:00
Adorian Doran dca201ce42 style/list view: tweak 2026-02-15 13:31:45 +02:00
Elian Doran d3c0a44c00 chore(badges/content): remove the base attribute for legacy 2026-02-15 13:26:23 +02:00
Elian Doran 33ea2de231 chore(badges/content): use translations 2026-02-15 13:23:36 +02:00
Elian Doran 43ebbfc321 chore(badges/content): add separator 2026-02-15 13:21:29 +02:00
Elian Doran 1e5b294eb3 feat(badges/content): adjustable base for app theme 2026-02-15 13:19:12 +02:00
Elian Doran 29855112c8 refactor(client): move note properties mapping outside collection properties 2026-02-15 13:13:18 +02:00
Elian Doran 8af7b3c81a feat(badges/content): make app theme toggleable 2026-02-15 12:42:46 +02:00
Elian Doran b72b82ff1a feat(badges/content): add badge for app themes 2026-02-15 12:37:37 +02:00
Elian Doran 1588c8103c docs(user): improve documentation on scripts & active content 2026-02-15 12:32:41 +02:00
Elian Doran 15e569dcea chore(client): address requested changes 2026-02-15 12:32:30 +02:00
Adorian Doran 3774ea3768 style/list view: tweak 2026-02-15 02:28:52 +02:00
Adorian Doran 0a9c6a3119 client/list view: add a menu button for list items 2026-02-15 02:26:23 +02:00
Adorian Doran a6cbde88bb client/list view: add an alternate style for search results 2026-02-15 01:57:10 +02:00
Elian Doran 4bdb407404 Translations update from Hosted Weblate (#8718) 2026-02-14 22:16:09 +02:00
Elian Doran 4568cedcd3 chore(deps): update dependency @redocly/cli to v2.18.1 (#8706) 2026-02-14 22:05:15 +02:00
AggelosPnS f290317acc Translated using Weblate (Greek)
Currently translated at 12.3% (48 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/el/
2026-02-14 20:03:29 +00:00
AggelosPnS 645279c8fa Translated using Weblate (Greek)
Currently translated at 2.7% (49 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/el/
2026-02-14 20:03:28 +00:00
Hosted Weblate 09436f8d65 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-14 20:03:27 +00:00
Elian Doran b616e0e5f9 chore(deps): update dependency electron to v40.4.1 (#8707) 2026-02-14 22:03:19 +02:00
Elian Doran f06a0852a1 chore(deps): update dependency typedoc to v0.28.17 (#8708) 2026-02-14 22:02:02 +02:00
Elian Doran 9e688138be fix(deps): update dependency i18next to v25.8.7 (#8709) 2026-02-14 21:56:00 +02:00
Elian Doran 5d46970a38 fix(deps): update dependency react-window to v2.2.7 (#8710) 2026-02-14 21:54:40 +02:00
Elian Doran ecc441c074 chore(deps): update dependency openai to v6.22.0 (#8711) 2026-02-14 21:53:59 +02:00
Elian Doran f2ce3678c4 chore(deps): update dependency stylelint to v17.3.0 (#8712) 2026-02-14 21:53:41 +02:00
Elian Doran c9ad390647 fix(deps): update dependency @preact/signals to v2.8.0 (#8713) 2026-02-14 21:52:55 +02:00
Elian Doran 92acc7accd Translations update from Hosted Weblate (#8715) 2026-02-14 21:52:11 +02:00
Adorian Doran 9c13f36ca0 client/list view: show the contents of a note only after its rendering completes 2026-02-14 16:39:20 +02:00
Adorian Doran fe4a11c5ad client/list view: improve appearance 2026-02-14 16:22:13 +02:00
misch334 e29b238161 fix orderby in combination with parentheses / increased expression level 2026-02-14 14:50:10 +01:00
Elian Doran 2ef4eb7eae chore(client): fix type errors 2026-02-14 12:43:40 +02:00
Elian Doran 7b230706cb feat(badges/content): improve color support 2026-02-14 12:41:41 +02:00
Elian Doran 5a2b04adba feat(badges/content): add support for web view 2026-02-14 12:35:06 +02:00
Elian Doran 50dcd3ba44 feat(badges/content): add support for render note 2026-02-14 12:30:43 +02:00
Elian Doran 740b02952f feat(badges/content): disable toggle when not necessary 2026-02-14 12:22:27 +02:00
Aindriú Mac Giolla Eoin 5d3d42ffdd Translated using Weblate (Irish)
Currently translated at 100.0% (1777 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-14 10:09:46 +00:00
Elian Doran 866d3110da feat(badges/content): add badge for custom CSS 2026-02-14 12:05:24 +02:00
Elian Doran 7a3e7fccec feat(badges/content): handle widgets as separate content type 2026-02-14 11:56:40 +02:00
Elian Doran 3107bc8840 feat(badges/content): add toggle for widget 2026-02-14 11:47:42 +02:00
Elian Doran 2d34cdef5e feat(badges/content): integrate options for frontend script 2026-02-14 11:37:20 +02:00
Elian Doran bd1f0909a2 feat(badges/content): configurable backend run options 2026-02-14 11:30:05 +02:00
Elian Doran ef75de63fe feat(badges/content): option to execute now 2026-02-14 11:15:08 +02:00
Elian Doran a739d28563 feat(badges/content): option to open API docs 2026-02-14 11:12:55 +02:00
Elian Doran 66ff009b72 feat(badges/content): option to open documentation 2026-02-14 11:08:30 +02:00
Elian Doran a68e82c1c8 feat(badges/content): basic support for backend scripts 2026-02-14 10:57:32 +02:00
Elian Doran 46556c1c14 chore(badges/content): make toggle more compact 2026-02-14 10:40:19 +02:00
Elian Doran 7be637798f feat(badges/content): functional enable/disable toggle 2026-02-14 10:30:34 +02:00
Elian Doran 9b3396349e refactor(commons): add builtin_attributes to commons 2026-02-14 10:30:24 +02:00
Elian Doran ccff210b4c feat(badges/content): indicate enabled/disabled state 2026-02-14 09:57:40 +02:00
Elian Doran a2264847b6 refactor(badges/content): use shared mechanism for extracting info 2026-02-14 09:53:37 +02:00
Elian Doran 7d103f8c50 refactor(badges/content): extract to separate file 2026-02-14 09:37:48 +02:00
Elian Doran f3dccc0aec feat(badges/content): detect icon pack 2026-02-14 09:19:46 +02:00
renovate[bot] 311b1d8a64 fix(deps): update dependency @preact/signals to v2.8.0 2026-02-14 02:08:43 +00:00
renovate[bot] f3094e3079 chore(deps): update dependency stylelint to v17.3.0 2026-02-14 02:08:04 +00:00
renovate[bot] f3b37b16d5 chore(deps): update dependency openai to v6.22.0 2026-02-14 02:07:20 +00:00
renovate[bot] 5f16ecf02d fix(deps): update dependency react-window to v2.2.7 2026-02-14 02:06:40 +00:00
renovate[bot] 8b75287827 fix(deps): update dependency i18next to v25.8.7 2026-02-14 02:05:55 +00:00
renovate[bot] bb38e806cd chore(deps): update dependency typedoc to v0.28.17 2026-02-14 02:05:04 +00:00
renovate[bot] 8cbc15f1b0 chore(deps): update dependency electron to v40.4.1 2026-02-14 02:04:20 +00:00
renovate[bot] 870524f9cf chore(deps): update dependency @redocly/cli to v2.18.1 2026-02-14 02:03:29 +00:00
Adorian Doran 218343ca14 client/list view: use a sectioned card to display the list items 2026-02-14 01:14:54 +02:00
Adorian Doran 61953fd713 client/ui/cards: make a property optional 2026-02-14 00:10:54 +02:00
Adorian Doran 62ddf3a11b client/ui/cards: automatically determine the opacity of the background color of nested card sections 2026-02-14 00:08:59 +02:00
Adorian Doran be12658864 client/ui/cards: add support for custom class names and action callbacks 2026-02-14 00:08:00 +02:00
Adorian Doran b618e5a00f client: define the foundation of sectioned cards with multi-level nesting 2026-02-13 22:50:03 +02:00
Elian Doran 5da9963f31 fix(website): web clipper URL incorrect 2026-02-13 19:43:07 +02:00
Elian Doran 34e885812f fix(global_menu): advanced menu not accessible in other languages (closes #8694) 2026-02-13 19:40:51 +02:00
Elian Doran a9ac11452d fix(relation_map): crash when valid JSON, but missing data (closes #8702) 2026-02-13 19:32:29 +02:00
Elian Doran 04b91308b1 chore(search): remove redundant border on mobile 2026-02-13 19:26:08 +02:00
Elian Doran b09ef222f5 fix(search): errors not displayed (closes #8704) 2026-02-13 19:22:21 +02:00
Elian Doran 2d0ed06d50 Update Node.js to v24.13.1 (#8629) 2026-02-13 13:23:22 +02:00
renovate[bot] 8dd7cf6085 Update Node.js to v24.13.1 2026-02-13 05:50:03 +00:00
Elian Doran 4999bd4f1e Translations update from Hosted Weblate (#8701) 2026-02-13 07:48:43 +02:00
green 22f408addb Translated using Weblate (Japanese)
Currently translated at 100.0% (1777 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-13 06:48:06 +01:00
AggelosPnS 9ca1dbe638 Translated using Weblate (Greek)
Currently translated at 8.9% (35 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/el/
2026-02-13 06:48:06 +01:00
AggelosPnS 26662952e3 Translated using Weblate (Greek)
Currently translated at 2.0% (36 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/el/
2026-02-13 06:48:06 +01:00
Hosted Weblate f0c9fa4ca3 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-13 06:48:06 +01:00
Elian Doran b51aa1dd71 Update pnpm to v10.29.3 (#8683) 2026-02-13 07:48:00 +02:00
Elian Doran 846253c9e3 Update dependency @codemirror/view to v6.39.14 (#8695) 2026-02-13 07:47:46 +02:00
Elian Doran 6ab6ea97ac Update dependency i18next to v25.8.6 (#8696) 2026-02-13 07:47:31 +02:00
Elian Doran bf41f70b98 Update dependency wxt to v0.20.17 (#8697) 2026-02-13 07:46:48 +02:00
Elian Doran 67ddbedd08 Update dependency dotenv to v17.3.1 (#8698) 2026-02-13 07:45:17 +02:00
renovate[bot] 2573e219dc Update dependency dotenv to v17.3.1 2026-02-13 01:02:52 +00:00
renovate[bot] 7e368678ab Update dependency wxt to v0.20.17 2026-02-13 01:02:01 +00:00
renovate[bot] 4a9fcf7ab6 Update dependency i18next to v25.8.6 2026-02-13 01:01:10 +00:00
renovate[bot] 65856c61c5 Update dependency @codemirror/view to v6.39.14 2026-02-13 01:00:19 +00:00
renovate[bot] b5a97bffab Update pnpm to v10.29.3 2026-02-12 17:58:49 +00:00
Elian Doran e6d728715f feat(geomap): support hiding labels 2026-02-12 19:47:24 +02:00
Elian Doran 54a52f0589 feat(geomap): support for custom tile URLs 2026-02-12 19:32:22 +02:00
Elian Doran badfa23f86 refactor(geomap): delegate layer data handling to index 2026-02-12 19:12:56 +02:00
misch334 4c36a9cca9 add client and compound launch entry 2026-02-12 16:11:21 +01:00
Elian Doran 30ccd3487a Translations update from Hosted Weblate (#8666) 2026-02-12 07:50:46 +02:00
Toto Yullian 75e012f2c9 Translated using Weblate (Indonesian)
Currently translated at 3.5% (63 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-02-12 06:48:36 +01:00
Ulices 5ecb1d1e2d Translated using Weblate (Spanish)
Currently translated at 100.0% (1777 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-12 06:48:36 +01:00
Toto Yullian f8c24c838a Translated using Weblate (Indonesian)
Currently translated at 41.1% (65 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/
2026-02-12 06:48:35 +01:00
noobhjy 4ad9cfcdf4 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1777 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-12 06:48:34 +01:00
Toto Yullian a57253dd35 Translated using Weblate (Indonesian)
Currently translated at 65.5% (76 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-02-12 06:48:33 +01:00
Marcel 222e65bd45 Translated using Weblate (German)
Currently translated at 100.0% (1777 of 1777 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-12 06:48:32 +01:00
Jason Kuanca 3192ea3383 Translated using Weblate (Indonesian)
Currently translated at 60.3% (70 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-02-12 06:48:32 +01:00
green 3a27f873cd Translated using Weblate (Japanese)
Currently translated at 100.0% (1776 of 1776 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-12 06:48:31 +01:00
noobhjy e8fb279036 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1776 of 1776 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-12 06:48:30 +01:00
Ulices 21ec7078d2 Translated using Weblate (Spanish)
Currently translated at 100.0% (1776 of 1776 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-12 06:48:29 +01:00
Aindriú Mac Giolla Eoin 94937e9fa4 Translated using Weblate (Irish)
Currently translated at 100.0% (1774 of 1774 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-12 06:48:28 +01:00
Giovi 36401a20b8 Translated using Weblate (Italian)
Currently translated at 99.7% (1769 of 1774 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-02-12 06:48:27 +01:00
noobhjy 8d1c4e4661 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1774 of 1774 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-12 06:48:27 +01:00
Kuzma Simonov 14362060c8 Translated using Weblate (Russian)
Currently translated at 99.3% (1763 of 1774 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2026-02-12 06:48:26 +01:00
Kuzma Simonov de47e94f62 Translated using Weblate (Russian)
Currently translated at 99.3% (157 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ru/
2026-02-12 06:48:25 +01:00
Giovi c78ed78bf6 Translated using Weblate (Italian)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2026-02-12 06:48:24 +01:00
Ulices 7674c95124 Translated using Weblate (Spanish)
Currently translated at 100.0% (1774 of 1774 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-12 06:48:24 +01:00
Giovi ec522c20b2 Translated using Weblate (Italian)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/it/
2026-02-12 06:48:23 +01:00
green 81f9578526 Translated using Weblate (Japanese)
Currently translated at 100.0% (1774 of 1774 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-12 06:48:22 +01:00
Hosted Weblate 20bca751d4 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-02-12 06:48:22 +01:00
Francis C. 49b5c49776 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/zh_Hant/
2026-02-12 06:48:20 +01:00
Francis C. 5d514fae61 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1772 of 1772 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-02-12 06:48:20 +01:00
Hosted Weblate 9e17e93dd7 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-12 06:48:19 +01:00
Elian Doran 7f70c641dc chore(deps): update dependency dotenv to v17.2.4 (#8630) 2026-02-12 07:47:59 +02:00
Elian Doran 7e3af4b7bc chore(deps): update dependency happy-dom to v20.6.1 (#8662) 2026-02-12 07:47:18 +02:00
Elian Doran 59ff4c0aef chore(deps): update dependency wxt to v0.20.15 (#8682) 2026-02-12 07:46:46 +02:00
Elian Doran 875e6b8e53 fix(deps): update dependency i18next to v25.8.5 (#8685) 2026-02-12 07:45:10 +02:00
Elian Doran fafc44de7c fix(deps): update dependency marked to v17.0.2 (#8686) 2026-02-12 07:44:53 +02:00
Elian Doran e0d7eb10d5 fix(deps): update dependency mathlive to v0.108.3 (#8687) 2026-02-12 07:44:40 +02:00
Elian Doran ae01eb28a3 chore(deps): update dependency @redocly/cli to v2.18.0 (#8688) 2026-02-12 07:44:20 +02:00
Elian Doran 637c66c04f chore(deps): update dependency electron to v40.4.0 (#8689) 2026-02-12 07:44:01 +02:00
renovate[bot] 1c061e4428 chore(deps): update dependency electron to v40.4.0 2026-02-12 02:18:16 +00:00
renovate[bot] cbe0626572 chore(deps): update dependency @redocly/cli to v2.18.0 2026-02-12 02:17:42 +00:00
renovate[bot] 86dc98174a fix(deps): update dependency mathlive to v0.108.3 2026-02-12 02:17:07 +00:00
renovate[bot] f0ac8ea977 fix(deps): update dependency marked to v17.0.2 2026-02-12 02:16:29 +00:00
renovate[bot] 35d4c2cdfc fix(deps): update dependency i18next to v25.8.5 2026-02-12 02:15:53 +00:00
renovate[bot] 394f7c0d09 chore(deps): update dependency wxt to v0.20.15 2026-02-12 02:13:10 +00:00
Elian Doran b83eee9bdc Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-02-11 20:21:55 +02:00
Elian Doran e41b2e8d31 fix(options/shortcuts): filter text box forces lower case 2026-02-11 20:21:52 +02:00
Elian Doran d93cec2bfd feat(options/shortcuts): add no results 2026-02-11 20:19:53 +02:00
Elian Doran 9eb87a39cd chore(options/shortcuts): refactor filtering 2026-02-11 20:15:39 +02:00
Elian Doran 07818ec1df fix(options): unnecessary full-height 2026-02-11 20:11:46 +02:00
Elian Doran d4052dbe37 feat(options/shortcuts): equal height 2026-02-11 20:04:09 +02:00
Elian Doran 656f5e0a7f feat(options/shortcuts): make header and footer sticky (closes #8675) 2026-02-11 20:02:37 +02:00
perfectra1n f3d415a3a7 merge main into branch 2026-02-11 10:01:49 -08:00
misch334 fd8ab990bd add autoAttachChildProcesses to launch server config 2026-02-11 07:25:58 +01:00
Elian Doran 0cc5e4dac3 chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.3 (#8609) 2026-02-11 07:51:46 +02:00
Elian Doran 8bbfff3cb2 fix(deps): update dependency i18next to v25.8.4 (#8611) 2026-02-11 07:51:31 +02:00
renovate[bot] 93059798b0 chore(deps): update dependency dotenv to v17.2.4 2026-02-11 05:51:15 +00:00
Elian Doran 33fae88cad chore(deps): update dependency stylelint to v17.2.0 (#8612) 2026-02-11 07:51:15 +02:00
Elian Doran 4feb23e9ca fix(deps): update dependency @preact/signals to v2.7.1 (#8619) 2026-02-11 07:50:04 +02:00
Elian Doran c2b6b7ba72 chore(deps): update dependency esbuild to v0.27.3 (#8631) 2026-02-11 07:48:22 +02:00
Elian Doran fb76aee258 chore(deps): update dependency @anthropic-ai/sdk to v0.74.0 (#8633) 2026-02-11 07:47:46 +02:00
Elian Doran 320b1829cc chore(deps): update dependency openai to v6.21.0 (#8634) 2026-02-11 07:47:16 +02:00
Elian Doran 601f0255a4 chore(deps): update dependency @playwright/test to v1.58.2 (#8642) 2026-02-11 07:46:46 +02:00
Elian Doran b6cc2b227a chore(deps): update dependency wxt to v0.20.14 (#8643) 2026-02-11 07:46:36 +02:00
renovate[bot] cc7da4b948 chore(deps): update dependency happy-dom to v20.6.1 2026-02-11 05:46:19 +00:00
Elian Doran 1ae3be2fda fix(deps): update codemirror (#8644) 2026-02-11 07:44:55 +02:00
Elian Doran 5b4d35ea86 chore(deps): update dependency @redocly/cli to v2.17.0 (#8645) 2026-02-11 07:44:38 +02:00
Elian Doran 00735e6c8e chore(deps): update dependency axios to v1.13.5 (#8661) 2026-02-11 07:44:27 +02:00
Elian Doran 66a42a38c9 chore(deps): update dependency @smithy/middleware-retry to v4.4.31 (#8669) 2026-02-11 07:43:54 +02:00
Elian Doran 05af1fba80 chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.11 (#8670) 2026-02-11 07:43:45 +02:00
Elian Doran 3b2dd0f5e9 chore(deps): update pnpm to v10.29.2 (#8671) 2026-02-11 07:43:33 +02:00
Elian Doran 1493a66a36 chore(deps): update dependency webdriverio to v9.24.0 (#8672) 2026-02-11 07:43:15 +02:00
Elian Doran b4bf103fd8 chore(deps): update typescript-eslint monorepo to v8.55.0 (#8673) 2026-02-11 07:43:00 +02:00
renovate[bot] 94286becfd chore(deps): update typescript-eslint monorepo to v8.55.0 2026-02-11 01:04:05 +00:00
renovate[bot] a68aade58c chore(deps): update dependency webdriverio to v9.24.0 2026-02-11 01:03:25 +00:00
renovate[bot] 014201edf4 chore(deps): update pnpm to v10.29.2 2026-02-11 01:02:09 +00:00
renovate[bot] 8ae6297148 chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.11 2026-02-11 01:01:56 +00:00
renovate[bot] 5e0300aa8e chore(deps): update dependency @smithy/middleware-retry to v4.4.31 2026-02-11 01:01:18 +00:00
renovate[bot] 80a7e18413 chore(deps): update dependency openai to v6.21.0 2026-02-10 21:08:56 +00:00
misch334 5c007cdebc adjust vi launch.json to be based on vitest.dev/guide/debugging 2026-02-10 18:45:56 +01:00
misch334 ef6c733f93 add options recommended by tsx.is docs 2026-02-10 18:15:51 +01:00
misch334 e7d6658c7a add generic launch.json for debugging/dap 2026-02-10 17:34:00 +01:00
Elian Doran 43be0a1a3f chore(desktop): disable dev tools for the print window 2026-02-10 17:29:00 +02:00
Elian Doran 5eb32744c3 feat(desktop): display print errors 2026-02-10 17:26:58 +02:00
Elian Doran 89d39f5f2b feat(desktop): add logs when printing 2026-02-10 17:12:28 +02:00
Elian Doran 1f4900dd1e fix(desktop): print failing on upgrade due to cache issues 2026-02-10 16:30:16 +02:00
renovate[bot] 1c561c1483 chore(deps): update dependency stylelint to v17.2.0 2026-02-10 11:44:18 +00:00
Adorian Doran 6baaf60b67 style/web view setup: update icon 2026-02-10 02:53:46 +02:00
Adorian Doran dde73f6c2b style/attachments: tweak 2026-02-10 02:46:10 +02:00
Adorian Doran f445a49b34 client/notes/web view: create a web view setup form 2026-02-10 02:45:43 +02:00
Adorian Doran 29016d1cf5 style/refactor: promote centered form as global style 2026-02-10 01:26:07 +02:00
Adorian Doran c06435046b style/alert bars: use a global style, tweak spacing 2026-02-09 23:39:22 +02:00
Adorian Doran 134422802f style/protected session password request: improve layout and appearance 2026-02-09 23:14:32 +02:00
Adorian Doran 5e00d6a305 style/collapsible: use low profile style for the expand/collapse button 2026-02-09 20:34:58 +02:00
Adorian Doran b5f0137d8e Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-02-09 20:33:32 +02:00
Adorian Doran 081d041cbc style/buttons: define a style for low profile buttons 2026-02-09 20:33:24 +02:00
Elian Doran 95e733a67c Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-02-09 20:22:43 +02:00
Elian Doran a664057312 fix(website): missing RPM GPG key (closes #8618) 2026-02-09 20:22:41 +02:00
Elian Doran 5b1a2d93bf fix(tree): child note badge overlapping text (closes #8567) 2026-02-09 20:20:20 +02:00
Adorian Doran 0323f95828 style/status bar: do not wrap the action buttons text 2026-02-09 19:57:13 +02:00
Elian Doran 375838449f fix(geomap): z-index issues with toolbar and buttons (closes #8649) 2026-02-09 19:55:57 +02:00
Adorian Doran 4562de8c2c close #2137 2026-02-09 19:19:41 +02:00
Adorian Doran 68d21669e7 style/similar notes: fix font size variation according to similarity 2026-02-09 19:12:47 +02:00
renovate[bot] 625e0cf159 chore(deps): update dependency @redocly/cli to v2.17.0 2026-02-09 13:58:05 +00:00
renovate[bot] 551ef00c61 fix(deps): update dependency @preact/signals to v2.7.1 2026-02-09 10:46:41 +00:00
renovate[bot] 10518f6364 chore(deps): update dependency axios to v1.13.5 2026-02-09 00:39:09 +00:00
Elian Doran 1eafda36a9 Translations update from Hosted Weblate (#8652) 2026-02-08 21:02:38 +02:00
TS 871ecf0158 Translated using Weblate (Polish)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2026-02-08 18:57:05 +00:00
TS 429000bdcb Translated using Weblate (Polish)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/pl/
2026-02-08 18:57:04 +00:00
TS 607940ed60 Translated using Weblate (Polish)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/pl/
2026-02-08 18:57:03 +00:00
noobhjy 46f61a4311 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/zh_Hans/
2026-02-08 18:57:02 +00:00
Marcel 3721df0502 Translated using Weblate (German)
Currently translated at 100.0% (1772 of 1772 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-08 18:57:02 +00:00
Marcel 11add681ec Translated using Weblate (German)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/
2026-02-08 18:57:01 +00:00
TS 6e36eea6c8 Translated using Weblate (Polish)
Currently translated at 100.0% (1772 of 1772 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2026-02-08 18:57:00 +00:00
Aindriú Mac Giolla Eoin 6a82e7a24c Translated using Weblate (Irish)
Currently translated at 100.0% (1772 of 1772 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-08 18:56:59 +00:00
Ulices 5f625fa9f3 Translated using Weblate (Spanish)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/es/
2026-02-08 18:56:58 +00:00
Aindriú Mac Giolla Eoin a95527674f Translated using Weblate (Irish)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ga/
2026-02-08 18:56:58 +00:00
green f6149c67dc Translated using Weblate (Japanese)
Currently translated at 100.0% (158 of 158 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ja/
2026-02-08 18:56:57 +00:00
Ulices 00c2a07e33 Translated using Weblate (Spanish)
Currently translated at 100.0% (1772 of 1772 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-08 18:56:56 +00:00
Elian Doran bc49b22c32 docs(user): add note about icon packs 2026-02-08 20:55:48 +02:00
Elian Doran fe1b1c8bc3 feat(website/resources): add note about icon packs 2026-02-08 20:52:13 +02:00
Elian Doran a2825a06d6 fix(website): top level subpages not rendered 2026-02-08 20:43:48 +02:00
renovate[bot] 3c33b5b169 fix(deps): update codemirror 2026-02-08 13:39:10 +00:00
hulmgulm 639b81b228 Update docs/User Guide/User Guide/Theme development/Creating an icon pack.md
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-08 10:46:02 +01:00
hulmgulm 0c552eb0c0 Update apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Creating an icon pack.html
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-08 10:45:48 +01:00
hulmgulm ae723f9557 Merge branch 'main' of https://github.com/hulmgulm/Trilium 2026-02-08 10:42:00 +01:00
hulmgulm 34d691341b Fixed export 2026-02-08 10:41:57 +01:00
hulmgulm 8574a11cf7 Merge branch 'TriliumNext:main' into main 2026-02-08 10:29:59 +01:00
hulmgulm 3742cd4a51 doc: enhanced icon pack creation 2026-02-08 10:29:43 +01:00
Elian Doran 934a867c83 chore(deps): update dependency electron to v40.2.1 (#8646) 2026-02-08 10:42:50 +02:00
Elian Doran a36337fba8 chore(deps): update pnpm to v10.29.1 (#8655) 2026-02-08 10:42:17 +02:00
Elian Doran b3bd53bdd0 fix(deps): update dependency mind-elixir to v5.8.0 (#8656) 2026-02-08 10:41:23 +02:00
Elian Doran 55518d4a8e fix(deps): update dependency eslint-linter-browserify to v10 (#8657) 2026-02-08 10:39:34 +02:00
renovate[bot] 2949c330d7 fix(deps): update dependency eslint-linter-browserify to v10 2026-02-08 00:28:40 +00:00
renovate[bot] 7ec056dbe0 fix(deps): update dependency mind-elixir to v5.8.0 2026-02-08 00:28:02 +00:00
renovate[bot] 983b60a8b9 chore(deps): update pnpm to v10.29.1 2026-02-08 00:27:27 +00:00
perfectra1n d7d411caf9 feat(dev): remove ai/llm features 2026-02-07 13:04:37 -08:00
renovate[bot] 000c31b66c chore(deps): update dependency @anthropic-ai/sdk to v0.74.0 2026-02-07 20:46:58 +00:00
Elian Doran 2cd3d4bfb7 Simple content library for icon packs (#8650) 2026-02-07 16:52:08 +02:00
Elian Doran 9d9065c801 feat(website): add GitHub link on mid-size 2026-02-07 16:42:40 +02:00
Elian Doran 10e7fe56ab feat(website): add GitHub link on mobile 2026-02-07 16:36:53 +02:00
Elian Doran c832e62389 fix(website): page not rendering properly on cold refresh 2026-02-07 16:29:34 +02:00
Elian Doran 328e488322 chore(website): address requested changes 2026-02-07 16:18:51 +02:00
Elian Doran fd5a43cdb4 Translations update from Hosted Weblate (#8648) 2026-02-07 13:54:22 +02:00
renovate[bot] fd7780abb0 chore(deps): update dependency esbuild to v0.27.3 2026-02-07 11:53:22 +00:00
Elian Doran 11c23e0b5e chore(deps): update dependency eslint to v10 (#8647) 2026-02-07 13:51:39 +02:00
Elian Doran 1170cfd4a7 fix(website): stargrazers count still not updating due to hydration 2026-02-07 13:47:25 +02:00
Elian Doran 2eddaa954e chore: address requested changes 2026-02-07 12:38:41 +02:00
Elian Doran 2c472fd03f docs(user): improve docuemntation slightly on icon packs 2026-02-07 12:37:10 +02:00
Elian Doran 16019a787e fix(website): stargazers count not updating 2026-02-07 12:27:16 +02:00
Elian Doran 717d0a75f4 chore(website): improve fit for full-height section 2026-02-07 12:20:24 +02:00
Elian Doran cc9487bae8 chore(website): fix warnings & type issue 2026-02-07 12:17:14 +02:00
Elian Doran 5ed9ec8f46 fix(website): unnecessary horizontal scroll on md screen 2026-02-07 12:11:41 +02:00
Elian Doran 6ca37ca7f4 feat(header): improve header fit on smaller screens 2026-02-07 11:56:51 +02:00
Elian Doran 1007b8b15d fix(website): subpixel scaling causing issues at 719px 2026-02-07 11:47:30 +02:00
Elian Doran be3a95fd54 chore(website): add resources to header 2026-02-07 11:19:46 +02:00
Elian Doran 109cb6cc3f chore(website/resources): add descriptions to fonts 2026-02-07 11:18:05 +02:00
Elian Doran fe1509dcfc chore(website/resources): display version slightly smaller 2026-02-07 11:09:09 +02:00
Elian Doran 1797e33989 feat(website/resources): add intro blurb for icon packs 2026-02-07 11:08:03 +02:00
Elian Doran 6c504eeb3e feat(website/resources): make downloadable 2026-02-07 10:52:23 +02:00
Elian Doran d4b16fcdd1 feat(website/resources): display icon packs 2026-02-07 10:36:00 +02:00
Elian Doran 9a08c079b5 chore(icon-pack-builder): build directly in website resource path 2026-02-07 10:24:32 +02:00
Elian Doran 98e75a7d6c chore(icon-pack-builder): generate meta alongside files 2026-02-07 10:17:58 +02:00
Elian Doran 675fd13391 chore(icon-pack-builder): add website and version meta 2026-02-07 10:15:55 +02:00
Elian Doran e4f042aba4 fix(content_renderer): prevent iconPacks from rendering in preview 2026-02-07 09:59:53 +02:00
Elian Doran 19527845d1 fix(tree): wrong icon on multi selection with custom icons 2026-02-07 09:54:50 +02:00
Elian Doran 3aa981649c fix(icon-pack-builder): wrong icon for boxicons3-brands 2026-02-07 09:51:21 +02:00
Elian Doran 330d48f70d chore(website): create empty resources page 2026-02-07 09:42:42 +02:00
noobhjy 90e14aae99 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1772 of 1772 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-07 02:01:52 +01:00
green 77e2ed7e01 Translated using Weblate (Japanese)
Currently translated at 100.0% (1772 of 1772 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-07 02:01:50 +01:00
renovate[bot] f720f921c3 chore(deps): update dependency eslint to v10 2026-02-07 00:36:40 +00:00
renovate[bot] 328740909b chore(deps): update dependency electron to v40.2.1 2026-02-07 00:35:41 +00:00
renovate[bot] c8a981e8d6 chore(deps): update dependency wxt to v0.20.14 2026-02-07 00:33:00 +00:00
renovate[bot] faac45784c chore(deps): update dependency @playwright/test to v1.58.2 2026-02-07 00:32:04 +00:00
Elian Doran 25667e84b7 fix(deps): update dependency force-graph to v1.51.1 (#8632) 2026-02-06 22:40:03 +02:00
Elian Doran 72e0d77be5 chore(i18n): fix more issues related to Irish 2026-02-06 21:44:39 +02:00
Elian Doran 9ac4b9ed4f docs(dev): refresh adding new locale 2026-02-06 21:18:29 +02:00
Elian Doran b3b89ba05c chore(i18n): fix calendar mapping for Irish 2026-02-06 21:16:07 +02:00
Elian Doran 00dc04df25 chire(pdfjs): fix handling of Irish 2026-02-06 20:46:26 +02:00
Elian Doran 21d47c3fef chore(i18n): fix issues with ga 2026-02-06 20:24:16 +02:00
Elian Doran 66de94f050 feat(i18n): enable Irish language 2026-02-06 19:56:37 +02:00
Elian Doran 1917adb322 chore(scripts): improve messages for translation check script 2026-02-06 19:38:24 +02:00
Elian Doran 3360b29354 Translations update from Hosted Weblate (#8599) 2026-02-06 10:32:09 +02:00
aloeaqua 646d281759 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-02-05 21:44:58 +00:00
aloeaqua e268d92d52 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2026-02-05 21:44:57 +00:00
Aindriú Mac Giolla Eoin fa81db2f03 Translated using Weblate (Irish)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-05 21:44:56 +00:00
Marcel 830199ba3a Translated using Weblate (German)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-05 21:44:56 +00:00
Ulices ea8dc506d3 Translated using Weblate (Spanish)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-05 21:44:55 +00:00
ibs-allaow c95483ed94 Translated using Weblate (Arabic)
Currently translated at 49.1% (57 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ar/
2026-02-05 21:44:54 +00:00
ibs-allaow d9cb4480b2 Translated using Weblate (Arabic)
Currently translated at 59.8% (1058 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-05 21:44:53 +00:00
ibs-allaow c69afd6074 Translated using Weblate (Arabic)
Currently translated at 64.4% (98 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/
2026-02-05 21:44:53 +00:00
ibs-allaow f541790ab4 Translated using Weblate (Arabic)
Currently translated at 48.2% (56 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ar/
2026-02-05 21:44:52 +00:00
green 707ac4ec36 Translated using Weblate (Japanese)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-05 21:44:51 +00:00
noobhjy cd55133e96 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-05 21:44:50 +00:00
ibs-allaow 37a91f8529 Translated using Weblate (Arabic)
Currently translated at 59.7% (1057 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-05 21:44:49 +00:00
Aindriú Mac Giolla Eoin 0ed0fa37a1 Translated using Weblate (Irish)
Currently translated at 55.4% (981 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-05 21:44:48 +00:00
ibs-allaow 26728b79b2 Translated using Weblate (Arabic)
Currently translated at 59.7% (1056 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-05 21:44:47 +00:00
ibs-allaow f7c8723539 Translated using Weblate (Arabic)
Currently translated at 63.1% (96 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/
2026-02-05 21:44:47 +00:00
Hosted Weblate c313916771 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-05 21:44:46 +00:00
Elian Doran f0b30c5e91 Mobile improvements v2 (#8615) 2026-02-05 23:44:31 +02:00
Elian Doran 73e3196124 docs(user): improve documentation on mobile support 2026-02-05 23:31:12 +02:00
Elian Doran 8a7bcc316e chore(mobile): address requested changes 2026-02-05 22:25:01 +02:00
Elian Doran a2921cb982 fix(mobile): missing snap in board view 2026-02-05 22:15:41 +02:00
Elian Doran 29ce004974 chore(mobile): add possible work-around for note switcher sometimes disappearing 2026-02-05 22:13:09 +02:00
Elian Doran 026ba5ddce chore(mobile/attachments): improve layout 2026-02-05 22:02:11 +02:00
Elian Doran ab0585609a chore(mobile/attachments): use bottom-style menu for actions 2026-02-05 21:57:49 +02:00
Elian Doran 14a8bdb0c0 chore(launch_bar): add backdrop on mobile for dropdown menus 2026-02-05 21:53:54 +02:00
Elian Doran 397d04dd88 style(client): fix rounded corners in launcher bar dropdown 2026-02-05 21:48:38 +02:00
Elian Doran fbb0bb7491 Revert "feat(mobile): make the sidebar gesture easier to press"
This reverts commit f8b386e42d.
2026-02-05 21:47:40 +02:00
Elian Doran ee987dae99 refactor(client): fix typo in container 2026-02-05 21:44:48 +02:00
Elian Doran 720281a8db feat(bookmarks): support bookmark folders on mobile 2026-02-05 21:43:58 +02:00
Elian Doran ff0c89e5a3 feat(bookmarks): collapse on mobile into single icon (closes #5464) 2026-02-05 21:28:50 +02:00
Elian Doran 442937f540 feat(bookmarks): add launcher on mobile 2026-02-05 21:20:22 +02:00
Elian Doran dc01b787c1 fix(launch_bar): cannot create new items in mobile launch bar (fixes #8054) 2026-02-05 21:10:05 +02:00
Elian Doran c709b5d34c chore(mobile): relocate some note actions 2026-02-05 18:42:51 +02:00
Elian Doran f8b386e42d feat(mobile): make the sidebar gesture easier to press 2026-02-05 16:43:06 +02:00
renovate[bot] f6b454cb9a fix(deps): update dependency i18next to v25.8.4 2026-02-05 13:44:21 +00:00
Elian Doran a82f8ce3ad Merge remote-tracking branch 'origin/main' into feature/mobile_improvements_v2 2026-02-05 10:28:02 +02:00
Elian Doran 529d45b762 chore(deps): update dependency @types/node to v24.10.10 (#8610) 2026-02-05 09:45:49 +02:00
Elian Doran d31135bf21 fix(mobile): status bar color for Samsung Internet 2026-02-05 09:09:47 +02:00
Elian Doran 75a77acefe Merge remote-tracking branch 'origin/main' into feature/mobile_improvements_v2 2026-02-05 09:09:41 +02:00
renovate[bot] 715f42b6c3 fix(deps): update dependency force-graph to v1.51.1 2026-02-05 01:13:22 +00:00
Elian Doran 199bfc8a37 Adjust next theme development docu (#8616) 2026-02-04 21:50:36 +02:00
hulmgulm e82ae762f0 More fixes 2026-02-04 20:48:36 +01:00
hulmgulm f90cc9aff7 Adjust theme development docu 2026-02-04 20:39:58 +01:00
Elian Doran ec915177ad feat(mobile): add search to launch bar 2026-02-04 21:36:00 +02:00
Elian Doran 5adee3e217 fix(mobile/search): missing rounded corners for bulk actions 2026-02-04 21:31:23 +02:00
Elian Doran 278d82645e feat(mobile): use safe area for bottom-aligned menus 2026-02-04 21:15:08 +02:00
Elian Doran e66f13b471 feat(mobile/search): use bottom menus for large dropdowns 2026-02-04 21:11:43 +02:00
Elian Doran 0e2955b57e feat(mobile/search): group search buttons into split 2026-02-04 21:06:20 +02:00
Elian Doran 2a4d5ec1ec feat(mobile/search): group search options in dropdown 2026-02-04 20:55:55 +02:00
Elian Doran 07ce63de69 chore(mobile/search): remove redundant margin 2026-02-04 20:44:15 +02:00
Elian Doran b539862eef fix(mobile/search): duplicate search parameters 2026-02-04 20:41:36 +02:00
Elian Doran ac4be3f8a8 feat(mobile/global_menu): add option to search notes 2026-02-04 20:40:31 +02:00
Elian Doran 0dc2d07b58 fix(mobile): virtual keyboard detection not working on iOS 2026-02-04 19:09:18 +02:00
Elian Doran b097f9dc21 fix(mobile): fixed tree overflowing container 2026-02-04 18:53:32 +02:00
Elian Doran 8aa4a97480 fix(mobile): fixed tree for launcher duplicated in split 2026-02-04 18:52:46 +02:00
Elian Doran 3e54d0ceae chore(hidden_tree): add icon to mobile tab switcher launcher 2026-02-04 18:48:37 +02:00
Elian Doran e1cec3404a Merge remote-tracking branch 'origin/main' into feature/mobile_improvements_v2
; Conflicts:
;	apps/client/src/widgets/mobile_widgets/mobile_detail_menu.tsx
2026-02-04 18:46:38 +02:00
Elian Doran 9a2b7fbda1 Feature/mobile improvement bugs (#8614) 2026-02-04 18:45:35 +02:00
Elian Doran e0b4ebed93 chore(mobile): address requested changes 2026-02-04 18:40:30 +02:00
Elian Doran e00e3999c5 feat(mobile/note_actions): indicate current content language 2026-02-04 18:05:37 +02:00
Elian Doran 2cbe96d815 feat(mobile/note_actions): integrate text content language switcher 2026-02-04 18:03:17 +02:00
Elian Doran ac3b289c9e feat(mobile): more stable fixed tree for launch bar config 2026-02-04 16:46:22 +02:00
Elian Doran 62534e0e93 chore(mobile/tab_switcher): launcher preview not looking good 2026-02-04 16:43:46 +02:00
Elian Doran b802c3174c style(mobile): add top border to bottom bar 2026-02-04 16:29:51 +02:00
Elian Doran aee1a6e1f0 fix(note_list): regression in the display of no previews 2026-02-04 16:28:07 +02:00
Elian Doran 46f1cd38e0 feat(mobile): enforce backdrop effects off 2026-02-04 16:24:14 +02:00
Elian Doran 7f891ef523 feat(mobile/tab_switcher): improve display for some text elements 2026-02-04 15:44:17 +02:00
Elian Doran 06af5e15cd feat(mobile/tab_switcher): consider view scope for preview 2026-02-04 15:41:15 +02:00
Elian Doran af89a0a883 fix(new_layout): note title actions shown in non-standard view modes 2026-02-04 15:17:39 +02:00
Elian Doran fa72eb2edb fix(mobile/tab_switcher): view mode not displayed in title 2026-02-04 14:53:00 +02:00
Elian Doran c1ea94423b refactor(client): use CSS file for content renderer 2026-02-04 14:46:52 +02:00
Elian Doran 1e70d066bd fix(mobile/tab_switcher): wrong preview for relation map 2026-02-04 14:39:58 +02:00
Elian Doran ab89f16e7c fix(mobile): unnecessary separator for custom note actions 2026-02-04 14:29:47 +02:00
Elian Doran 8c848a4cb5 fix(mobile): wrong context activation logic when creating new split 2026-02-04 14:04:47 +02:00
Elian Doran e021a54d2d fix(mobile): formatting toolbar not appearing after read-only (closes #5368) 2026-02-04 13:42:30 +02:00
Elian Doran 70523574b0 refactor(client): extract mobile layout CSS to dedicated file 2026-02-04 13:37:04 +02:00
Elian Doran 66e0f1ab19 chore(mobile/tree): slightly bigger expanders 2026-02-04 13:29:45 +02:00
Elian Doran 671a05470e fix(mobile): missing badge style in tree 2026-02-04 13:24:08 +02:00
Elian Doran 99eec0c41e fix(mobile): duplicate promoted attributes 2026-02-04 13:18:26 +02:00
Elian Doran 48d06dcb06 fix(mobile): note context menu too tall in browser 2026-02-04 13:17:28 +02:00
Elian Doran e38df0c731 fix(mobile): note paths dialog doesn't trigger clone note to location 2026-02-04 13:06:49 +02:00
Elian Doran 0f3f49915e fix(mobile): note actions should be at the bottom, not above launch bar 2026-02-04 12:24:56 +02:00
Elian Doran 416144265b fix(client): wrong positioning of modals due to mobile changes 2026-02-04 12:06:29 +02:00
renovate[bot] 2e7ced8e60 Update dependency @types/node to v24.10.10 2026-02-04 01:52:42 +00:00
renovate[bot] 563463782c Update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.3 2026-02-04 01:51:41 +00:00
Adorian Doran fe02871e91 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-02-04 00:45:03 +02:00
Adorian Doran bb05aeeaf7 style/split: tweak transition for the current split indicator 2026-02-04 00:44:54 +02:00
Elian Doran 846358ccb0 Update dependency @redocly/cli to v2.15.1 (#8601) 2026-02-03 23:45:18 +02:00
Elian Doran dabc779727 Update dependency @smithy/middleware-retry to v4.4.30 (#8602) 2026-02-03 23:45:02 +02:00
Elian Doran 08fd2ec64b Update dependency happy-dom to v20.5.0 (#8603) 2026-02-03 23:44:32 +02:00
Adorian Doran c42c06d048 style/global menu: use proper heading for the development options section 2026-02-03 21:01:08 +02:00
Adorian Doran e951d60800 style/options: hide collection properties 2026-02-03 20:54:56 +02:00
Elian Doran 0d8453f6a7 feat(mobile/note_actions): integrate code language switcher 2026-02-03 18:58:04 +02:00
Elian Doran 52b41b1bb0 feat(mobile/note_actions): integrate similar notes 2026-02-03 18:18:57 +02:00
Elian Doran c7265017b3 feat(mobile/note_actions): integrate styling for note info 2026-02-03 18:09:02 +02:00
Elian Doran 634e0b6d30 feat(mobile/note_actions): integrate note info 2026-02-03 18:04:08 +02:00
renovate[bot] 1c260f5890 Update dependency happy-dom to v20.5.0 2026-02-03 01:34:19 +00:00
renovate[bot] 177aedeaae Update dependency @smithy/middleware-retry to v4.4.30 2026-02-03 01:33:28 +00:00
renovate[bot] 3f6f3d2565 Update dependency @redocly/cli to v2.15.1 2026-02-03 01:32:42 +00:00
Adorian Doran 38489dbfeb style/collapsible widget: fade content when expanding or collapsing 2026-02-03 03:03:50 +02:00
Adorian Doran ff2a3d6a28 client/search: fix menu dropdowns getting clipped 2026-02-03 02:56:46 +02:00
Adorian Doran 2c74697fb1 style/text editor: tweak the content placeholder 2026-02-03 02:22:04 +02:00
Adorian Doran 110e9200b9 style/scrolling container: improve alignment when content centering is turned on, refactor 2026-02-03 02:11:57 +02:00
Adorian Doran 6e792f9735 style/tree/tree item icons: fix color for tinted tree items 2026-02-03 01:25:28 +02:00
Adorian Doran 51d8b13a81 style/tree: tweak the color of tree item icons for the dark color scheme 2026-02-03 01:19:47 +02:00
Adorian Doran a05691fd07 style/tree: add a CSS variable to customize the color of tree item icons 2026-02-03 00:52:36 +02:00
Adorian Doran d25e7915d9 style/tree/context menu: use the proper color for menu item icons 2026-02-03 00:41:41 +02:00
Elian Doran 1a025dfef3 Translations update from Hosted Weblate (#8581) 2026-02-02 22:09:13 +02:00
ibs-allaow 84cc4194aa Translated using Weblate (Arabic)
Currently translated at 61.1% (93 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/
2026-02-02 21:07:55 +01:00
ibs-allaow 331a56277c Translated using Weblate (Arabic)
Currently translated at 59.7% (1055 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-02 21:07:54 +01:00
ibs-allaow bc2915adb9 Translated using Weblate (Arabic)
Currently translated at 42.2% (49 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ar/
2026-02-02 21:07:53 +01:00
Elian Doran 703fe9a71b Translated using Weblate (Romanian)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ro/
2026-02-02 21:07:52 +01:00
Elian Doran 6c50664046 Translated using Weblate (Romanian)
Currently translated at 99.9% (1766 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/
2026-02-02 21:07:51 +01:00
Aindriú Mac Giolla Eoin 673cbc97e1 Translated using Weblate (Irish)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ga/
2026-02-02 21:07:49 +01:00
Aindriú Mac Giolla Eoin 3e83766099 Translated using Weblate (Irish)
Currently translated at 0.1% (1 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-02 21:07:48 +01:00
Aindriú Mac Giolla Eoin b453589077 Translated using Weblate (Irish)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ga/
2026-02-02 21:07:47 +01:00
Hosted Weblate 654fa18ab1 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-02 21:07:45 +01:00
Elian Doran 7b0d91534c Add subtreeHidden and map:* attributes to labels documentation (#8594) 2026-02-02 22:07:34 +02:00
Elian Doran 8d4801bb6f Mobile: integrate new layout v1 (#8595) 2026-02-02 21:47:34 +02:00
Elian Doran 9e36f4f625 Merge branch 'main' into feature/mobile_improvements 2026-02-02 21:44:22 +02:00
Elian Doran d83a824812 chore(client): address requested changes 2026-02-02 21:43:27 +02:00
Elian Doran ca128f2fa9 chore(client): address requested changes 2026-02-02 21:19:35 +02:00
Elian Doran c02642d0f9 feat(mobile/note_actions): display backlinks & note paths on same row 2026-02-02 21:16:02 +02:00
Adorian Doran 7340709111 style/quick edit: refactor 2026-02-02 21:13:16 +02:00
hulmgulm 56d0383372 Merge branch 'main' into main 2026-02-02 20:10:42 +01:00
Adorian Doran 49d33ea19a style/quick edit: allow object selection rectangle to go outside of the editor area 2026-02-02 21:10:00 +02:00
hulmgulm 979fa0359a updated texts 2026-02-02 20:08:55 +01:00
Elian Doran c7381d058a feat(mobile/note_actions): proper styling of note paths 2026-02-02 21:05:25 +02:00
Adorian Doran 5db298f031 style/quick edit: increase the horizontal padding of the text to make space for the block toolbar button 2026-02-02 21:03:02 +02:00
Elian Doran 171d948a00 feat(mobile/note_actions): basic integration of note paths 2026-02-02 21:00:05 +02:00
Adorian Doran facd56cdf4 style/text editor/block toolbar button: tweak 2026-02-02 20:57:38 +02:00
Elian Doran ba17ec4be4 chore(backlinks): show multiple excerpts properly 2026-02-02 20:44:48 +02:00
Elian Doran 6c163b5479 chore(mobile/note_actions): flickerless backlinks item 2026-02-02 20:39:37 +02:00
Elian Doran 79649805b8 chore(mobile/note_actions): missing translation for backlinks 2026-02-02 20:34:52 +02:00
Elian Doran 220ca8a570 chore(mobile/note_actions): use new layout styling for backlinks 2026-02-02 20:32:06 +02:00
Adorian Doran 348c00f86d style/text editor: fix layout issues 2026-02-02 20:13:00 +02:00
Elian Doran 12b641b522 feat(mobile/note_actions): basic integration of backlinks 2026-02-02 20:10:20 +02:00
hulmgulm 6855bc1de6 Merge branch 'TriliumNext:main' into main 2026-02-02 19:09:08 +01:00
Adorian Doran a9c5b99ae8 style/text editor/block toolbar button: fix position and z-index 2026-02-02 20:06:05 +02:00
Elian Doran 76f36e2fd3 fix(mobile/custom_note_actions): unable to close empty pane 2026-02-02 18:39:40 +02:00
Adorian Doran afe710321c style/text editor: fix layout issues 2026-02-02 18:34:22 +02:00
Elian Doran 0d444daaca fix(mobile/custom_note_actions): note icon shown in empty note 2026-02-02 18:29:21 +02:00
Elian Doran c8a0c9fd23 chore(mobile/custom_note_actions): text not fitting 2026-02-02 18:26:40 +02:00
Elian Doran 79f07ae923 chore(mobile/custom_note_actions): disable split orientation button 2026-02-02 18:23:54 +02:00
Elian Doran c77e7a568b chore(mobile/custom_note_actions): duplicate open help 2026-02-02 18:11:58 +02:00
Elian Doran ff9ec2057b chore(mobile/custom_note_actions): hide open note externally 2026-02-02 18:10:26 +02:00
Elian Doran 6a313b99e4 fix(mobile/custom_note_actions): missing file upload 2026-02-02 18:02:47 +02:00
Elian Doran 8a92370042 fix(mobile/custom_note_actions): missing separator 2026-02-02 17:57:30 +02:00
Elian Doran 411a59ec54 feat(mobile): display custom note actions in note actions 2026-02-02 17:46:18 +02:00
Elian Doran 2d4022044d chore(mobile): get rid of floating buttons 2026-02-02 17:30:35 +02:00
Elian Doran bbc5ebd76b chore(mobile/header): improve button sizes 2026-02-02 17:06:27 +02:00
Elian Doran e9c90fcde8 chore(mobile/header): prevent badges from shrinking 2026-02-02 17:02:32 +02:00
Elian Doran 911f78867f chore(mobile/header): make icons easier to press 2026-02-02 16:58:06 +02:00
Elian Doran 5507cc5abc chore(mobile): slightly smaller note title icon 2026-02-02 16:51:57 +02:00
Elian Doran 0e5aa401ef chore(mobile/note_icon): redundant separator 2026-02-02 16:44:08 +02:00
Elian Doran d48473ab87 feat(mobile/note_icon): single menu for filtering & resetting 2026-02-02 16:38:12 +02:00
hulmgulm 734efaf40c Update apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-02 14:41:38 +01:00
hulmgulm f89718d88a Add subtreeHidden and map:* attributes to Labels.html 2026-02-02 14:38:11 +01:00
Elian Doran aa4942a0da fix(mobile/note_icon): wrong icons displayed 2026-02-02 13:45:13 +02:00
Elian Doran 90bb162a88 feat(mobile/note_icon): bigger touch area 2026-02-02 13:31:29 +02:00
Elian Doran 0382a4b30e fix(mobile/note_icon): consistent height and proper margins 2026-02-02 13:27:34 +02:00
Elian Doran 490d940cd1 feat(mobile/note_icon): improve height and fit 2026-02-02 13:23:55 +02:00
Elian Doran b090eb9359 feat(mobile/note_icon): calculate number of columns dynamically 2026-02-02 13:22:37 +02:00
Elian Doran cb9e67ce84 fix(mobile/note_icon): small horizontal scroll 2026-02-02 13:14:42 +02:00
Elian Doran c4d131dd23 feat(mobile): improve note icon selector fit 2026-02-02 13:13:13 +02:00
Elian Doran 2667f266bf feat(mobile): use modal for icon selector 2026-02-02 13:05:20 +02:00
Elian Doran 8258936d6c feat(mobile): integrate icon display in header 2026-02-02 12:53:54 +02:00
Elian Doran e4e7449078 feat(mobile): integrate inline title with title actions 2026-02-02 12:51:29 +02:00
Elian Doran 11b020e859 feat(mobile): integrate part of the new layout title row 2026-02-02 12:47:43 +02:00
Elian Doran 72d6b83ec5 docs(user): add nightly release script for Windows 2026-02-02 12:20:38 +02:00
Elian Doran fbe5152cb3 chore(deps): update dependency webdriverio to v9.23.3 (#8583) 2026-02-02 07:48:30 +02:00
Elian Doran 6bef01f755 fix(deps): update dependency globals to v17.3.0 (#8584) 2026-02-02 07:48:17 +02:00
Elian Doran f0d4b4a6d9 fix(deps): update dependency mind-elixir to v5.7.1 (#8585) 2026-02-02 07:48:05 +02:00
renovate[bot] a54fe62643 fix(deps): update dependency mind-elixir to v5.7.1 2026-02-02 04:31:50 +00:00
renovate[bot] eb4bbd49fb fix(deps): update dependency globals to v17.3.0 2026-02-02 01:52:08 +00:00
renovate[bot] ab4f1bd4f4 chore(deps): update dependency webdriverio to v9.23.3 2026-02-02 01:51:29 +00:00
Elian Doran f8b414c354 feat(etapi): add attachments etapi endpoint (#8578) 2026-02-01 22:34:37 +02:00
Elian Doran 82a21624c3 Translations update from Hosted Weblate (#8579) 2026-02-01 22:32:35 +02:00
Elian Doran 1b212ac720 Improved mobile note actions (#8580) 2026-02-01 22:30:45 +02:00
Elian Doran c36ce3ea14 fix(mobile/note_actions): insert child note not working 2026-02-01 22:29:43 +02:00
Elian Doran 841fab77a8 chore(client): address requested changes 2026-02-01 22:22:25 +02:00
Elian Doran fd6f910824 fix(mobile/note_actions): backdrop remains when closing split 2026-02-01 22:02:54 +02:00
Elian Doran ce9ca1917d fix(mobile/note_actions): reintroduce split buttons 2026-02-01 22:01:26 +02:00
perfectra1n c702fb273c feat(tests): add tests for new attachments endpoint 2026-02-01 11:46:03 -08:00
Elian Doran 4c72d8691b fix(mobile/note_actions): reintroduce help button 2026-02-01 21:45:43 +02:00
Elian Doran 35ac5fc514 fix(mobile/note_actions): reintroduce insert child note 2026-02-01 21:42:48 +02:00
Elian Doran 92991cc03c fix(promoted_attributes): displayed in non-default view modes 2026-02-01 21:37:20 +02:00
Elian Doran 76492475e3 fix(mobile/note_actions): find not working 2026-02-01 21:27:24 +02:00
Elian Doran e2363d860c fix(mobile/note_actions): font too big 2026-02-01 21:25:40 +02:00
Elian Doran c06a90913a fix(mobile/note_actions): submenus not working 2026-02-01 21:12:50 +02:00
Elian Doran e88c0f7326 fix(mobile/note_actions): toggles on two rows 2026-02-01 21:02:46 +02:00
Elian Doran 2a4280b5bf feat(mobile/note_actions): remove bottom rounded corners 2026-02-01 20:59:50 +02:00
Elian Doran d3c733c57f feat(mobile/note_actions): add backdrop 2026-02-01 20:57:01 +02:00
Elian Doran f91add3cd4 chore(mobile/note_actions): position like global menu 2026-02-01 20:53:33 +02:00
Elian Doran 90e3f7508a chore(mobile): enforce new layout 2026-02-01 20:50:00 +02:00
Elian Doran 5e981da4df feat(mobile): use the desktop version of note actions 2026-02-01 20:48:55 +02:00
Aindriú Mac Giolla Eoin 2ddd5d75fc Added translation using Weblate (Irish) 2026-02-01 19:33:10 +01:00
Aindriú Mac Giolla Eoin 88f509cbb6 Added translation using Weblate (Irish) 2026-02-01 19:33:08 +01:00
Aindriú Mac Giolla Eoin ca161bc881 Added translation using Weblate (Irish) 2026-02-01 19:33:05 +01:00
Aindriú Mac Giolla Eoin 676ca44cdf Added translation using Weblate (Irish) 2026-02-01 19:33:01 +01:00
green 5d0c91202f Translated using Weblate (Japanese)
Currently translated at 100.0% (1767 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-01 19:32:59 +01:00
Ulices a166f049d5 Translated using Weblate (Spanish)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/es/
2026-02-01 19:32:59 +01:00
noobhjy 0dc4692dfc Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1767 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-01 19:32:59 +01:00
ibs-allaow 996607d096 Translated using Weblate (Arabic)
Currently translated at 59.5% (1053 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-01 19:32:58 +01:00
Ulices bd907ea008 Translated using Weblate (Spanish)
Currently translated at 100.0% (1767 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-01 19:32:58 +01:00
noobhjy b1573b1f3b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2026-02-01 19:32:57 +01:00
Marcel 246849ce94 Translated using Weblate (German)
Currently translated at 100.0% (1767 of 1767 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-01 19:32:57 +01:00
Marcel 2c2c68261a Translated using Weblate (German)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-02-01 19:32:56 +01:00
green e38a0361bf Translated using Weblate (Japanese)
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2026-02-01 19:32:56 +01:00
ibs-allaow cbf879bd32 Translated using Weblate (Arabic)
Currently translated at 59.2% (90 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/
2026-02-01 19:32:56 +01:00
perfectra1n 808625e564 feat(etapi): add attachments etapi endpoint 2026-02-01 09:19:37 -08:00
Jin 19781bb14c Merge branch 'main' into week-note 2026-02-01 14:29:45 +00:00
Jin 7fd2bc30cc test: add test for week number with different first day of week setting 2026-02-01 14:26:11 +00:00
Elian Doran c3b4c2f7d4 fix(desktop): background effects interferes with native title bar 2026-02-01 15:47:07 +02:00
Elian Doran 14f521fdd7 Revert "chore(ci): try to fix flaky "Merge manifest lists""
This reverts commit eea4cbbd6c.
2026-02-01 11:53:57 +02:00
Elian Doran 087831df5a feat(etapi): add revisions route and "undelete" route to etapi (#8455) 2026-02-01 11:45:20 +02:00
Wael Nasreddine 07f273fda4 feat: enhance build-docs utility with pnpm and Nix support
This enhances the `build-docs` utility to allow running it via pnpm and
packaging it as a Nix application. Changes include:

- Added `build` and `cli` scripts to `apps/build-docs/package.json`.
- Implemented a standalone CLI wrapper for documentation generation.
- Added a `trilium-build-docs` package to the Nix flake for use in other projects.
- Integrated `apps/build-docs` into the Nix workspace and build pipeline.

These changes make the documentation build process more portable and easier
to integrate into CI/CD pipelines outside of the main repository.
2026-02-01 00:32:51 -08:00
Elian Doran 6b0542a5bf fix(deps): update dependency preact to v10.28.3 (#8570) 2026-02-01 10:11:48 +02:00
Elian Doran ac57856f00 fix(deps): update dependency react-window to v2.2.6 (#8571) 2026-02-01 10:10:46 +02:00
renovate[bot] 2ab1587df0 fix(deps): update dependency react-window to v2.2.6 2026-02-01 00:33:14 +00:00
renovate[bot] 632aa6e003 fix(deps): update dependency preact to v10.28.3 2026-02-01 00:32:20 +00:00
Elian Doran 9142f2df4b Translations update from Hosted Weblate (#8569) 2026-01-31 22:46:57 +02:00
Elian Doran eea4cbbd6c chore(ci): try to fix flaky "Merge manifest lists" 2026-01-31 22:34:14 +02:00
Ulices bb31c20282 Translated using Weblate (Spanish)
Currently translated at 100.0% (1765 of 1765 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-31 21:14:06 +01:00
Elian Doran f8ab206744 Mobile tabs v1 (#8568) 2026-01-31 22:13:58 +02:00
Elian Doran 4129b3a96e e2e(server): fix regressions after mobile tab switcher 2026-01-31 22:05:28 +02:00
Elian Doran 0de704bd3e fix(desktop): context menus no longer working 2026-01-31 21:42:39 +02:00
Elian Doran 5f20ce87a7 chore(mobile/tab_switcher): bypass weird regression in typecheck regarding React types 2026-01-31 21:17:08 +02:00
Elian Doran ff80154fda chore(mobile/tab_switcher): address requested changes 2026-01-31 20:47:07 +02:00
Elian Doran 0d99cf9fb9 chore(mobile/tab_switcher): improve layout on tablet view 2026-01-31 20:41:53 +02:00
Elian Doran a5306b2067 fix(mobile): modals on tablet view 2026-01-31 20:41:07 +02:00
Elian Doran e9b826e498 chore(mobile/tab_switcher): stop auto-showing 2026-01-31 20:22:28 +02:00
Elian Doran e7f356b87c feat(mobile/tab_switcher): display note splits 2026-01-31 20:21:11 +02:00
Elian Doran d2abde714f chore(mobile/tab_switcher): enforce same height 2026-01-31 20:06:16 +02:00
Elian Doran 20eaa79079 fix(mobile): cover not working properly in modals 2026-01-31 20:04:00 +02:00
Elian Doran 3cb74bb844 fix(mobile): context menu won't dismiss due to missing cover 2026-01-31 20:00:56 +02:00
Elian Doran a72d4f425a feat(mobile/tab_switcher): add context menu item for closing all tabs 2026-01-31 19:54:42 +02:00
Elian Doran 8f3545624e feat(mobile/tab_switcher): improve display of empty tabs 2026-01-31 19:46:15 +02:00
Elian Doran 8f6cfe8a04 feat(mobile/tab_switcher): improve display of collections 2026-01-31 19:43:53 +02:00
Elian Doran bec7943e05 feat(mobile/tab_switcher): hide icon for new tab 2026-01-31 19:36:31 +02:00
Elian Doran a486f5951e feat(mobile/tab_switcher): new tab button 2026-01-31 19:29:06 +02:00
Elian Doran e8158aadec feat(mobile/tab_switcher): display number of tabs in launch bar 2026-01-31 19:19:39 +02:00
Elian Doran b6f107b85b feat(mobile/tab_switcher): display number of tabs in modal title 2026-01-31 19:08:29 +02:00
Elian Doran 5abd27f252 chore(mobile/tab_switcher): improve modal fit when in browser 2026-01-31 19:04:47 +02:00
Elian Doran 39648b6df8 chore(mobile/tab_switcher): remove old tab bar 2026-01-31 19:03:15 +02:00
Elian Doran 0a7b2e3304 feat(mobile/tab_switcher): integrate into launch bar 2026-01-31 18:50:17 +02:00
Elian Doran 48db6e1756 feat(mobile/tab_switcher): button to close tab 2026-01-31 18:40:01 +02:00
Elian Doran 2a38af5db6 feat(mobile/tab_switcher): scroll to active tab 2026-01-31 18:25:01 +02:00
Elian Doran 740b1093d7 feat(mobile/tab_switcher): respect workspace background color 2026-01-31 18:09:04 +02:00
Elian Doran 6b70412f6e feat(mobile/tab_switcher): respect note color class 2026-01-31 17:50:52 +02:00
Elian Doran 43f147ec60 feat(mobile/tab_switcher): improve display of content widget & search 2026-01-31 17:31:30 +02:00
Elian Doran bf0fc57493 feat(mobile/tab_switcher): display note icon 2026-01-31 17:29:24 +02:00
Elian Doran 325b8b886c fix(mobile/tab_switcher): clipped borders 2026-01-31 17:25:33 +02:00
Elian Doran a02bbdc550 feat(mobile/tab_switcher): indicate active tab 2026-01-31 17:25:05 +02:00
Elian Doran 4285fd7708 feat(mobile/tab_switcher): click to activate 2026-01-31 17:14:54 +02:00
Elian Doran 96fa6eac44 fix(mobile/tab_switcher): no title if empty tab 2026-01-31 17:07:32 +02:00
Elian Doran 05fa1ef2fb feat(mobile/tab_switcher): clip note title 2026-01-31 17:04:19 +02:00
Elian Doran 13aebc060e feat(mobile/tab_switcher): display margins only for text 2026-01-31 17:01:22 +02:00
Elian Doran 1aae4098d6 feat(mobile/tab_switcher): 2026-01-31 16:54:39 +02:00
Elian Doran 3367bb2e5b feat(mobile/tab_switcher): basic rendering of tab content 2026-01-31 16:25:05 +02:00
Elian Doran 49fc5e1559 feat(mobile/tab_switcher): basic listing of tabs 2026-01-31 16:12:27 +02:00
Elian Doran 3a9b448a83 chore(mobile/tab_switcher): create empty modal 2026-01-31 15:59:38 +02:00
Elian Doran a45fb975c0 chore(mobile/tab_switcher): add button in launch bar 2026-01-31 15:53:19 +02:00
Elian Doran e070fc2f52 Translations update from Hosted Weblate (#8563) 2026-01-31 15:14:21 +02:00
Ulices 5f8aac31e1 Translated using Weblate (Spanish)
Currently translated at 100.0% (1764 of 1764 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-31 13:00:02 +00:00
green 07f2e2eafc Translated using Weblate (Japanese)
Currently translated at 100.0% (1764 of 1764 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-01-31 13:00:01 +00:00
Marcel 2b41fb7108 Translated using Weblate (German)
Currently translated at 100.0% (1764 of 1764 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-31 13:00:00 +00:00
Elian Doran 81c18f1869 Streamlining the collection properties (#8562) 2026-01-31 14:59:40 +02:00
Elian Doran 61fd2fe87d chore(collections): address requested changes 2026-01-31 14:13:41 +02:00
Elian Doran 054cb974f1 fix(collections): old layout floating toolbar interfering 2026-01-31 13:49:02 +02:00
Elian Doran 50a19ecd74 fix(board): clipped due to collection properties 2026-01-31 13:31:46 +02:00
Elian Doran 1232909a3b feat(geomap): integrate add button to collection properties 2026-01-31 13:26:54 +02:00
Elian Doran 9ba0e076a6 fix(calendar): buttons cut off on smaller mobile phones 2026-01-31 13:09:20 +02:00
Elian Doran ede91c645d fix(presentation): cut off due to collection properties 2026-01-31 13:05:05 +02:00
Elian Doran b6a91723e7 feat(presentation): integrate buttons into collection properties 2026-01-31 13:01:51 +02:00
Elian Doran fddd73fdb1 feat(table): display action buttons on mobile 2026-01-31 12:59:09 +02:00
Elian Doran ffbe8f9dc4 fix(table): wrong alignment of buttons 2026-01-31 12:54:11 +02:00
Elian Doran f80763ffb4 fix(geomap): zoom buttons interfering with collection properties 2026-01-31 12:53:56 +02:00
Elian Doran f65aa1b875 fix(collections): height affected due to collection properties 2026-01-31 12:41:52 +02:00
Elian Doran 0c4de9a5e0 feat(table): integrate footer buttons into collection properties 2026-01-31 12:41:31 +02:00
Elian Doran 1822970e23 feat(collections): integrate list/grid pagination into collection properties 2026-01-31 12:29:48 +02:00
Elian Doran 80615d0382 feat(search): integrate collection properties into search 2026-01-31 12:22:34 +02:00
Elian Doran c1002ed52a chore(calendar): improve layout on mobile 2026-01-31 12:13:05 +02:00
Elian Doran 83e585ed35 fix(calendar): layout broken on desktop 2026-01-31 11:54:23 +02:00
Elian Doran 0e164b9daa chore(collections): fix alignment of collection properties in relation to content 2026-01-31 11:50:14 +02:00
Elian Doran 1c9f8a2540 chore(collections): add collection toolbar to all collections 2026-01-31 11:39:48 +02:00
Elian Doran 88ba4451eb chore(calendar): improve layout on mobile slightly 2026-01-31 11:33:00 +02:00
Elian Doran 305f195539 feat(calendar): dropdown-based view switcher for mobile 2026-01-31 11:27:11 +02:00
Elian Doran fbc6b853ed chore(calendar): improve column fit on mobile 2026-01-31 11:17:26 +02:00
Elian Doran f3bcab813a chore(calendar): minor improvements on mobile 2026-01-31 11:11:01 +02:00
Elian Doran 2fa9b2e4dd feat(mobile): add help button in note context menu 2026-01-31 11:08:41 +02:00
Elian Doran fc756ba46e feat(collections): move help button to the title area 2026-01-31 11:00:55 +02:00
Elian Doran 85a82124b1 feat(calendar): basic header support on mobile 2026-01-31 10:53:37 +02:00
Elian Doran b5cfbc92af chore(calendar): use text instead of icons 2026-01-31 10:34:37 +02:00
Elian Doran e4f260e242 chore(calendar): relocate prev/next buttons 2026-01-31 10:23:24 +02:00
Elian Doran 7c6c0c1fbd feat(calendar): integrate calendar header into collection properites 2026-01-31 10:14:35 +02:00
Elian Doran 2f5f4dbebd chore(deps): update dependency @playwright/test to v1.58.1 (#8554) 2026-01-31 08:38:59 +02:00
Elian Doran 94adc6af95 fix(deps): update dependency @codemirror/view to v6.39.12 (#8555) 2026-01-31 08:36:49 +02:00
Elian Doran e3ea703f3d fix(deps): update dependency @preact/signals to v2.6.2 (#8556) 2026-01-31 08:35:38 +02:00
Elian Doran a14753e5f3 chore(deps): update dependency stylelint to v17.1.0 (#8558) 2026-01-31 08:34:17 +02:00
Elian Doran 2ffd55c2d8 chore(deps): update dependency dpdm to v4 (#8559) 2026-01-31 08:33:44 +02:00
renovate[bot] ad0ee8da32 chore(deps): update dependency dpdm to v4 2026-01-31 01:16:04 +00:00
renovate[bot] e5cfe37b17 chore(deps): update dependency stylelint to v17.1.0 2026-01-31 01:15:23 +00:00
renovate[bot] 9247dd8b17 fix(deps): update dependency @preact/signals to v2.6.2 2026-01-31 01:13:37 +00:00
renovate[bot] 2f69b1d6e1 fix(deps): update dependency @codemirror/view to v6.39.12 2026-01-31 01:12:39 +00:00
renovate[bot] 9c43930e7b chore(deps): update dependency @playwright/test to v1.58.1 2026-01-31 01:11:44 +00:00
Elian Doran f18ecfa524 test(server): reduce number of workers even further 2026-01-30 21:47:01 +02:00
Elian Doran b6f7453ed9 fix(web-clipper): cropped screenshot not working in some versions of Chrome (closes #8528) 2026-01-30 21:32:34 +02:00
Elian Doran 4a0b77dabb test(server): reduce server workers even further 2026-01-30 19:35:35 +02:00
Elian Doran de7687b3ab chore(deps): audit 2026-01-30 19:27:23 +02:00
Elian Doran 85f2ec9d92 test(server): reduce parallel number of workers to avoid OOM in CI 2026-01-30 19:16:43 +02:00
Elian Doran ed6b8dfc9b Translations update from Hosted Weblate (#8552) 2026-01-30 18:58:10 +02:00
Kim Nøglegaard 1539a6eabc Translated using Weblate (Norwegian Bokmål)
Currently translated at 43.9% (51 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/nb_NO/
2026-01-30 16:53:55 +00:00
Kim Nøglegaard 6424d96703 Translated using Weblate (Norwegian Bokmål)
Currently translated at 6.9% (27 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/
2026-01-30 16:53:55 +00:00
Elian Doran 15f6ac8e89 macOS Vibrancy Support (#8519) 2026-01-30 18:53:41 +02:00
Elian Doran f9803a4694 Merge remote-tracking branch 'origin/main' into feature/vibrancy 2026-01-30 18:45:30 +02:00
Wael Nasreddine b08126ec2b feat(share-theme): add borders to tables matching the dark/light theme 2026-01-30 02:13:38 -08:00
Wael Nasreddine e0824a5426 feat(share-theme): Increase the max-body to 1600px 2026-01-30 02:13:12 -08:00
Wael Nasreddine c4f5471e13 feat(share-theme): align mobile/desktop UI with unified header 2026-01-30 02:13:02 -08:00
Elian Doran 13de9975e3 chore(deps): update dependency @braintree/sanitize-url to v7.1.2 (#8548) 2026-01-30 11:35:27 +02:00
Wael Nasreddine 99215c272c feat(share-theme): set minimum width for table cells to improve readability 2026-01-30 01:15:14 -08:00
Elian Doran a64c4ef66f chore(deps): update typescript-eslint monorepo to v8.54.0 (#8436) 2026-01-30 09:19:28 +02:00
Elian Doran 36e85eb3a7 chore(deps): update dependency @playwright/test to v1.58.0 (#8487) 2026-01-30 09:19:03 +02:00
Elian Doran 20ffe7e082 fix(deps): update dependency globals to v17.2.0 (#8489) 2026-01-30 09:18:52 +02:00
Elian Doran ea1dc58b9a chore(deps): update dependency @preact/preset-vite to v2.10.3 (#8539) 2026-01-30 09:18:42 +02:00
Elian Doran cd292ad605 chore(deps): update dependency @smithy/middleware-retry to v4.4.29 (#8540) 2026-01-30 09:17:59 +02:00
renovate[bot] 03d9a6c0e5 chore(deps): update dependency @braintree/sanitize-url to v7.1.2 2026-01-30 07:17:41 +00:00
Elian Doran fa54a2e67c chore(deps): update dependency @redocly/cli to v2.15.0 (#8543) 2026-01-30 09:15:57 +02:00
Elian Doran 7f2530470d chore(deps): update dependency @anthropic-ai/sdk to v0.72.1 (#8549) 2026-01-30 09:15:47 +02:00
Elian Doran a284934136 chore(deps): update dependency electron to v40.1.0 (#8550) 2026-01-30 09:15:36 +02:00
renovate[bot] 2ca6606508 fix(deps): update dependency globals to v17.2.0 2026-01-30 06:52:02 +00:00
renovate[bot] bb1c691b34 chore(deps): update typescript-eslint monorepo to v8.54.0 2026-01-30 06:50:39 +00:00
renovate[bot] 19d3e1b11c chore(deps): update dependency electron to v40.1.0 2026-01-30 06:49:33 +00:00
renovate[bot] e35e64caaa chore(deps): update dependency @redocly/cli to v2.15.0 2026-01-30 06:48:34 +00:00
renovate[bot] a3cf72c76c chore(deps): update dependency @playwright/test to v1.58.0 2026-01-30 06:47:40 +00:00
renovate[bot] 710e95bdee chore(deps): update dependency @anthropic-ai/sdk to v0.72.1 2026-01-30 06:46:47 +00:00
renovate[bot] d281fb7065 chore(deps): update dependency @smithy/middleware-retry to v4.4.29 2026-01-30 06:45:09 +00:00
renovate[bot] e669d5041b chore(deps): update dependency @preact/preset-vite to v2.10.3 2026-01-30 06:44:20 +00:00
Elian Doran d8d91451c8 e2e(server): fix some flakiness in support app 2026-01-30 08:11:32 +02:00
Elian Doran b0910baaf0 chore(ci): fix warnings related to if 2026-01-30 07:46:30 +02:00
Elian Doran ce3f70adc3 chore(deps): update dependency axios to v1.13.4 (#8541) 2026-01-29 18:55:00 +02:00
Elian Doran c0d5c26f0c chore(deps): update dependency @electron/rebuild to v4.0.3 (#8538) 2026-01-29 09:51:11 +02:00
Elian Doran 1bf8a76cc3 Translations update from Hosted Weblate (#8546) 2026-01-29 09:50:48 +02:00
Ulices 7b1f74a413 Translated using Weblate (Spanish)
Currently translated at 100.0% (388 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/es/
2026-01-29 08:27:08 +01:00
Sergii Nechuiviter 3d2fde77a5 Translated using Weblate (Ukrainian)
Currently translated at 86.8% (132 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/
2026-01-29 08:27:07 +01:00
Ulices e4cc3bef73 Translated using Weblate (Spanish)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-29 08:27:07 +01:00
Hosted Weblate f384c422c4 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-29 08:27:06 +01:00
Elian Doran a373d2e7e0 Vite fixes (#8537) 2026-01-29 09:26:57 +02:00
Elian Doran 1aaf630979 Merge branch 'main' into feature/vite_fixes 2026-01-29 09:05:04 +02:00
Elian Doran b7ac3aba72 fix(deps): update dependency react-i18next to v16.5.4 (#8542) 2026-01-29 08:58:39 +02:00
Elian Doran ed89250624 chore(deps): update dependency happy-dom to v20.4.0 (#8544) 2026-01-29 08:58:28 +02:00
Elian Doran d9a7f0c7fe chore(deps): update dependency openai to v6.17.0 (#8545) 2026-01-29 08:58:09 +02:00
Elian Doran a07405bec3 fix(desktop): nightly failing due to missing flatpak icon 2026-01-29 08:57:29 +02:00
renovate[bot] 4c6efeb0d8 chore(deps): update dependency openai to v6.17.0 2026-01-29 01:00:59 +00:00
renovate[bot] 501b380d5e chore(deps): update dependency happy-dom to v20.4.0 2026-01-29 01:00:12 +00:00
renovate[bot] ddc4e34dcd fix(deps): update dependency react-i18next to v16.5.4 2026-01-29 00:58:31 +00:00
renovate[bot] d668d9f24d chore(deps): update dependency axios to v1.13.4 2026-01-29 00:57:40 +00:00
renovate[bot] 0ec4423ad4 chore(deps): update dependency @electron/rebuild to v4.0.3 2026-01-29 00:55:00 +00:00
Elian Doran 51313ff0d5 fix(client): subdir broken due to bootstrap 2026-01-28 22:27:02 +02:00
Elian Doran 37381b7c36 chore(client): use different root mechanism with fewer issues 2026-01-28 22:23:00 +02:00
Elian Doran 6de632d117 fix(client): relative import to src 2026-01-28 22:06:19 +02:00
Elian Doran 4a8fa7293b fix(calendar): unnecessary right margin for header on new layout 2026-01-28 15:37:41 +02:00
Elian Doran b75a2e9592 fix(calendar): lower case in header (closes #8507) 2026-01-28 14:47:06 +02:00
Elian Doran c45c1b0f93 fix(calendar): not respecting auto formatting locale (closes #8507) 2026-01-28 14:46:24 +02:00
Elian Doran af7057f062 fix(scripts): correctly extract current version for nightly updates 2026-01-28 10:05:04 +02:00
Elian Doran 85bf1eb4ec fix(desktop): nightly icon not respected 2026-01-28 10:03:45 +02:00
Elian Doran bd45043a36 chore(desktop): integrate icon change for dev nightlies 2026-01-28 09:44:15 +02:00
Elian Doran fbb41168a2 chore(scripts): build dev icon for Windows installer 2026-01-28 09:05:23 +02:00
Elian Doran 674fe4fa20 chore(scripts): build dev icon for Mac 2026-01-28 08:54:36 +02:00
Elian Doran 4db86f9322 chore(scripts): fix path for building Mac icon 2026-01-28 08:48:48 +02:00
Elian Doran 5c814155d2 chore(scripts): build dev icon for Windows 2026-01-28 08:44:35 +02:00
Elian Doran c08fb9af16 chore(scripts): update paths in create icons 2026-01-28 08:41:55 +02:00
Elian Doran 1dac4fea9c Translations update from Hosted Weblate (#8532) 2026-01-28 07:34:25 +02:00
Marcel ac19000ad0 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-28 05:06:09 +01:00
Giovi 221182389a Translated using Weblate (Italian)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-01-28 05:06:09 +01:00
Elian Doran 5d5947f676 feat(call_to_action): enable background effects CTA on macOS 2026-01-27 23:31:05 +02:00
Elian Doran 8fc889ae08 chore(options): change description 2026-01-27 23:22:31 +02:00
Elian Doran ff46493775 feat(options): add platform indicator 2026-01-27 23:17:38 +02:00
Elian Doran a1cb3b8371 style(desktop): change material for horizontal layout 2026-01-27 16:42:52 +02:00
Elian Doran 51131433d3 chore(client): address requested changes 2026-01-27 15:56:57 +02:00
Elian Doran eaccd641ed Translations update from Hosted Weblate (#8527) 2026-01-27 08:45:06 +02:00
Unknown 3e2b647f06 Translated using Weblate (Spanish)
Currently translated at 94.2% (1662 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-27 07:43:49 +01:00
Toto Yullian 0fbf9bafbc Translated using Weblate (Indonesian)
Currently translated at 3.2% (57 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-27 07:43:48 +01:00
Jason Kuanca 924a5e3110 Translated using Weblate (Indonesian)
Currently translated at 3.2% (57 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-27 07:43:47 +01:00
Marcel be71a4b5c4 Translated using Weblate (German)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/
2026-01-27 07:43:47 +01:00
Marcel 1cb5a13ea4 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-27 07:43:46 +01:00
Marcel e145cd80a9 Translated using Weblate (German)
Currently translated at 100.0% (388 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-01-27 07:43:45 +01:00
Toto Yullian 58ea661d4b Translated using Weblate (Indonesian)
Currently translated at 38.8% (59 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/
2026-01-27 07:43:44 +01:00
Elian Doran ba317eff3f chore(deps): update dependency vite-plugin-static-copy to v3.2.0 (#8486) 2026-01-27 08:43:25 +02:00
Elian Doran ead0e14118 chore(deps): update react monorepo to v19.2.4 (#8524) 2026-01-27 08:42:58 +02:00
Elian Doran d3dd20b50f chore(deps): update dependency eslint-plugin-playwright to v2.5.1 (#8521) 2026-01-27 08:42:31 +02:00
Elian Doran d621fb4105 chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.10 (#8522) 2026-01-27 08:42:01 +02:00
Elian Doran a239604dad chore(deps): update pnpm to v10.28.2 (#8523) 2026-01-27 08:41:41 +02:00
renovate[bot] f7986b9049 chore(deps): update dependency vite-plugin-static-copy to v3.2.0 2026-01-27 05:54:58 +00:00
renovate[bot] 0a34ca031a chore(deps): update react monorepo to v19.2.4 2026-01-27 01:39:04 +00:00
renovate[bot] ce63fec413 chore(deps): update pnpm to v10.28.2 2026-01-27 01:38:17 +00:00
renovate[bot] 719451bf23 chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.10 2026-01-27 01:38:02 +00:00
renovate[bot] 10a27cbe86 chore(deps): update dependency eslint-plugin-playwright to v2.5.1 2026-01-27 01:37:18 +00:00
perfectra1n 51325e2f4a fix(editor): resolve strange stuck indent when a Note has images 2026-01-26 17:03:42 -08:00
Elian Doran 3c8a066f76 feat(desktop): handle both vertical and horizontal layouts 2026-01-26 23:28:29 +02:00
Elian Doran 6856a98d50 feat(desktop): integrate vibrancy 2026-01-26 23:21:40 +02:00
Elian Doran 120b767a68 fix(desktop): background effects not applied correctly 2026-01-26 23:10:19 +02:00
Elian Doran 8c0d4cde86 feat(desktop): basic vibrancy support 2026-01-26 23:02:14 +02:00
Elian Doran bbf090edf0 Merge branch 'main' of github.com:TriliumNext/Trilium
Checks / main (push) Failing after 1s
Deploy web clipper extension / Build web clipper extension (push) Failing after 40s
2026-01-26 21:11:02 +02:00
Elian Doran fc925a5db5 chore(web-clipper): prepare for 1.1.1 2026-01-26 21:10:30 +02:00
Elian Doran fb76ca09bd Web Clipper Fixes (#8518) 2026-01-26 21:09:29 +02:00
Elian Doran af6c54bac7 fix(web-clipper): context menu got broken on Firefox 2026-01-26 21:00:56 +02:00
Elian Doran a854b04300 chore(web-clipper): rename ZIP artifacts 2026-01-26 20:47:20 +02:00
Elian Doran 5d73556127 docs(dev): mention NixOS for web clipper dev 2026-01-26 20:44:19 +02:00
Elian Doran 82ea4c1a04 docs(guide): add instructions on installing from .zip 2026-01-26 20:41:22 +02:00
Elian Doran 537d92421c chore(web-clipper): fix warning related to permissions 2026-01-26 20:20:46 +02:00
Elian Doran c97c69900b chore(web-clipper): minor typo in "screenshot" 2026-01-26 20:10:18 +02:00
Elian Doran ab519a4caa chore(web-clipper): rephrase "already visited" & fix spacing 2026-01-26 20:06:57 +02:00
Elian Doran bbbdab42ca fix(web-clipper): cash not working in Chrome 2026-01-26 19:38:11 +02:00
Elian Doran 810563b3f9 fix(web-clipper): duplicate context menu error 2026-01-26 19:21:19 +02:00
Elian Doran 63cf055a0d Translations update from Hosted Weblate (#8517) 2026-01-26 18:14:29 +02:00
Hosted Weblate 442aac0466 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-26 17:10:32 +01:00
Elian Doran 7c9499ad7e Translations update from Hosted Weblate (#8510) 2026-01-26 18:10:06 +02:00
Jason Kuanca a6e8e2a127 Translated using Weblate (Indonesian)
Currently translated at 21.6% (84 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/id/
2026-01-26 08:12:29 +01:00
Jason Kuanca 671e05421a Translated using Weblate (Indonesian)
Currently translated at 34.8% (53 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/
2026-01-26 08:12:28 +01:00
Jason Kuanca d8c7c919d1 Translated using Weblate (Indonesian)
Currently translated at 44.8% (52 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-01-26 08:12:28 +01:00
Toto Yullian 5629b9a161 Translated using Weblate (Indonesian)
Currently translated at 2.8% (51 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-26 08:12:27 +01:00
Jason Kuanca 3ba853dbad Translated using Weblate (Indonesian)
Currently translated at 2.8% (51 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-26 08:12:27 +01:00
Jason Kuanca be8dda8523 Translated using Weblate (Indonesian)
Currently translated at 2.6% (47 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-26 07:39:12 +01:00
Jason Kuanca 2e86166400 Translated using Weblate (Indonesian)
Currently translated at 21.3% (83 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/id/
2026-01-26 07:39:11 +01:00
Jason Kuanca 784ea240ca Translated using Weblate (Indonesian)
Currently translated at 42.2% (49 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-01-26 07:39:10 +01:00
Jason Kuanca 5b10e33e72 Translated using Weblate (Indonesian)
Currently translated at 32.2% (49 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/
2026-01-26 07:39:09 +01:00
Jason Kuanca fbcf974c73 Translated using Weblate (Indonesian)
Currently translated at 1.8% (33 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-26 07:39:08 +01:00
Jason Kuanca d844111187 Translated using Weblate (Indonesian)
Currently translated at 22.3% (34 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/
2026-01-26 07:39:08 +01:00
Jason Kuanca 4cac419a26 Translated using Weblate (Indonesian)
Currently translated at 31.0% (36 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-01-26 07:39:07 +01:00
Francis C. 1c21519960 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-01-26 07:39:06 +01:00
Jason Kuanca 6a70c52bd1 Translated using Weblate (Indonesian)
Currently translated at 1.3% (24 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-26 07:39:05 +01:00
Jason Kuanca a0e6023810 Translated using Weblate (Indonesian)
Currently translated at 23.2% (27 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-01-26 07:39:05 +01:00
Jason Kuanca a24ab7ca06 Translated using Weblate (Indonesian)
Currently translated at 16.4% (25 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/
2026-01-26 07:39:04 +01:00
MarcelWie 4979a1b224 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-26 07:39:03 +01:00
Antonio Sanchez Castellón 4cdf6d8292 Translated using Weblate (Spanish)
Currently translated at 94.2% (1662 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-26 07:39:02 +01:00
MarcelWie 4c51c8e8f8 Translated using Weblate (German)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/de/
2026-01-26 07:39:01 +01:00
MarcelWie 1ab7b91f2e Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-26 07:39:01 +01:00
Antonio Sanchez Castellón 7af4fbfcce Translated using Weblate (Spanish)
Currently translated at 93.5% (1650 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-26 07:39:00 +01:00
Antonio Sanchez Castellón 494e23b69f Translated using Weblate (Spanish)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/es/
2026-01-26 07:38:59 +01:00
MarcelWie a487a502f5 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-26 07:38:59 +01:00
MarcelWie 2b7a7a8767 Translated using Weblate (German)
Currently translated at 100.0% (388 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-01-26 07:38:58 +01:00
MarcelWie 0c72bd1539 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-26 07:38:57 +01:00
MarcelWie 9462ccc650 Translated using Weblate (German)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/
2026-01-26 07:38:56 +01:00
MarcelWie 81d964d3e8 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-26 07:38:55 +01:00
MarcelWie 27bf41e0ce Translated using Weblate (German)
Currently translated at 100.0% (388 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2026-01-26 07:38:55 +01:00
MarcelWie 78b0773a28 Translated using Weblate (German)
Currently translated at 100.0% (116 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/de/
2026-01-26 07:38:54 +01:00
MarcelWie 3b76239f65 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-26 07:38:53 +01:00
Elian Doran edd11d847a chore(deps): update dependency axios to v1.13.3 (#8511) 2026-01-26 08:38:35 +02:00
Elian Doran 0df0f8a4c9 chore(deps): update dependency happy-dom to v20.3.9 (#8512) 2026-01-26 08:37:25 +02:00
Elian Doran 0f5ee0888a fix(deps): update dependency katex to v0.16.28 (#8513) 2026-01-26 08:37:03 +02:00
renovate[bot] 30ead4080a fix(deps): update dependency katex to v0.16.28 2026-01-26 01:16:42 +00:00
renovate[bot] 9224029a16 chore(deps): update dependency happy-dom to v20.3.9 2026-01-26 01:16:05 +00:00
renovate[bot] 4ce841dc8a chore(deps): update dependency axios to v1.13.3 2026-01-26 01:15:19 +00:00
Elian Doran d639de03c3 Translations update from Hosted Weblate (#8509) 2026-01-25 23:18:47 +02:00
MarcelWie 0cf34fb874 Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-25 22:11:45 +01:00
Elian Doran 241147c762 fix(ci): token for web-clipper release
Checks / main (push) Failing after 2s
Deploy web clipper extension / Build web clipper extension (push) Failing after 37s
2026-01-25 21:40:19 +02:00
Elian Doran 99eb481ed4 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-01-25 21:38:27 +02:00
Elian Doran 2d126c9cec feat(ci): create release for web-clipper 2026-01-25 21:38:01 +02:00
Elian Doran 7aec858ade chore(web-clipper): missing offscreen.html in sources 2026-01-25 21:37:49 +02:00
Elian Doran ac7a107a9a Translations update from Hosted Weblate (#8506) 2026-01-25 21:30:28 +02:00
MarcelWie c2c9b6819c Translated using Weblate (German)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-25 20:27:39 +01:00
Vitalii Hlas 7159ea5927 Translated using Weblate (Ukrainian)
Currently translated at 91.4% (1613 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/
2026-01-25 20:27:38 +01:00
Vitalii Hlas 44bf837310 Translated using Weblate (Ukrainian)
Currently translated at 76.3% (116 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/
2026-01-25 20:27:37 +01:00
Hosted Weblate 28368a3e0d Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-25 20:27:36 +01:00
Hosted Weblate 1a92eeac69 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-25 20:27:35 +01:00
Elian Doran 411c062463 chore(web-clipper): rewire TS config for sources ZIP 2026-01-25 21:20:07 +02:00
Elian Doran 18d1b8cbfe chore(web-clipper): add README for Firefox submission 2026-01-25 21:19:43 +02:00
Elian Doran 8322e4278a Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-01-25 20:53:30 +02:00
Elian Doran 4b70bb6778 chore(web-clipper): bump version to v1.1.0 2026-01-25 20:45:06 +02:00
Elian Doran c9c9daf30c Translations update from Hosted Weblate (#8505) 2026-01-25 20:40:44 +02:00
Hosted Weblate b26d9c0303 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-25 19:34:13 +01:00
Elian Doran 376e6dc6d7 Translations update from Hosted Weblate (#8504) 2026-01-25 20:30:44 +02:00
Hosted Weblate 34d3c318d6 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-25 19:27:25 +01:00
Elian Doran 6cbed20d5c Translations update from Hosted Weblate (#8501) 2026-01-25 20:27:08 +02:00
Vitalii Hlas 96acd7f921 Translated using Weblate (Ukrainian)
Currently translated at 38.8% (59 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/
2026-01-25 19:25:45 +01:00
Vitalii Hlas 7439b9ca65 Translated using Weblate (Ukrainian)
Currently translated at 50.0% (58 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/uk/
2026-01-25 19:25:44 +01:00
Elian Doran 9eb24c6fc2 Translated using Weblate (Romanian)
Currently translated at 99.9% (1762 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/
2026-01-25 17:53:29 +01:00
Vitalii Hlas 595d30feb7 Translated using Weblate (Ukrainian)
Currently translated at 97.9% (380 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/uk/
2026-01-25 17:53:25 +01:00
Vitalii Hlas 836b5feaae Translated using Weblate (Ukrainian)
Currently translated at 91.3% (1611 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/
2026-01-25 17:53:24 +01:00
Vitalii Hlas 5ca0830b88 Translated using Weblate (Ukrainian)
Currently translated at 29.6% (45 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/
2026-01-25 17:53:23 +01:00
Vitalii Hlas 46057fa03b Translated using Weblate (Ukrainian)
Currently translated at 40.5% (47 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/uk/
2026-01-25 17:53:21 +01:00
Toto Yullian ba46ba77b4 Translated using Weblate (Indonesian)
Currently translated at 1.1% (20 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-25 14:37:36 +01:00
noobhjy e348a9b907 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-01-25 14:37:35 +01:00
green aaaf8c1e2b Translated using Weblate (Japanese)
Currently translated at 100.0% (1763 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-01-25 11:52:12 +01:00
Toto Yullian 41a85a78db Translated using Weblate (Indonesian)
Currently translated at 1.0% (19 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/
2026-01-25 11:52:12 +01:00
Elian Doran 554aa1cd64 Translated using Weblate (Romanian)
Currently translated at 94.6% (1669 of 1763 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/
2026-01-25 11:52:11 +01:00
Elian Doran 853822ec8a chore(deps): update dependency @redocly/cli to v2.14.9 (#8485) 2026-01-25 12:03:52 +02:00
Elian Doran 087dfa179e Web Clipper (#8494) 2026-01-25 12:02:28 +02:00
Elian Doran 65a769c5bd Merge branch 'main' into webclipper/tooling 2026-01-25 11:14:23 +02:00
Elian Doran 0bbb4ddb21 Translations update from Hosted Weblate (#8499) 2026-01-25 09:44:57 +02:00
pythaac cb0eeee8cc Translated using Weblate (Korean)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/
2026-01-25 08:43:55 +01:00
Elian Doran 75d35e3ade fix(deps): update codemirror themes to v6.2.4 (#8496) 2026-01-25 09:43:48 +02:00
renovate[bot] 99e22a5636 fix(deps): update codemirror themes to v6.2.4 2026-01-25 01:58:44 +00:00
Elian Doran b7b367b5a3 chore(webclipper): address requested changes 2026-01-24 23:54:26 +02:00
Elian Doran 4927b01d96 chore(webclipper): fix typecheck 2026-01-24 23:13:27 +02:00
Elian Doran e2e5d485d7 docs(dev): add some information on web clipper 2026-01-24 21:35:54 +02:00
Elian Doran ada22e4966 docs(user): update web clipper 2026-01-24 21:24:14 +02:00
Elian Doran 1cf93ff0de chore(web-clipper): add data_collection_permissions for Firefox 2026-01-24 19:25:16 +02:00
Elian Doran 199962233b chore(web-clipper): use friendly ID for Firefox 2026-01-24 19:04:38 +02:00
Elian Doran 743a6f3466 ci(web-clipper): disable compression level for artifact 2026-01-24 18:12:02 +02:00
Elian Doran 625062a268 ci(web-clipper): no files uploaded 2026-01-24 17:57:30 +02:00
Elian Doran cb0fabf273 ci(web-clipper): fail if no files found 2026-01-24 17:43:11 +02:00
Elian Doran 4c978d8622 ci(web-clipper): fail if no files found 2026-01-24 17:41:51 +02:00
Elian Doran d0f441ec74 ci(web-clipper): generate .zip files on change 2026-01-24 17:40:18 +02:00
Elian Doran 9d347ff3d9 chore(web-clipper): update help URL 2026-01-24 17:25:09 +02:00
Elian Doran c2a758dd4a chore(web-clipper): address requested changes 2026-01-24 17:23:06 +02:00
Elian Doran bba69e98ae fix(web-clipper): warning about offscreen permission in MV2 2026-01-24 17:07:53 +02:00
Elian Doran 53e3d65c52 fix(web-clipper): handling of dev port 2026-01-24 17:01:03 +02:00
Elian Doran a2a37a0b54 chore(web-clipper): integrate old manifest 2026-01-24 16:46:04 +02:00
Elian Doran 1fb360e34f chore(web-clipper): remove polyfill 2026-01-24 16:40:00 +02:00
Elian Doran 680817d81c fix(web-clipper): duplicate context menu entry 2026-01-24 16:39:00 +02:00
Elian Doran bf736977ab chore(web-clipper): don't render offscreen for MV2 2026-01-24 16:26:16 +02:00
Elian Doran 28ed93dcdc refactor(web-clipper): use @-imports 2026-01-24 16:22:43 +02:00
Elian Doran 785ace64ad feat(web-clipper): use new Trilium icon for now 2026-01-24 16:20:36 +02:00
Elian Doran ac109c2ece feat(web-clipper): support manifest V2 for Firefox 2026-01-24 16:07:15 +02:00
Elian Doran 1e82043999 fix(web-clipper): saving links not working under MV3 2026-01-24 15:42:04 +02:00
Elian Doran e37487a1cf feat(web-clipper): handle manifest V3 2026-01-24 15:28:47 +02:00
Elian Doran a9b8ffd94c chore(web-clipper): fix package lock 2026-01-24 14:26:05 +02:00
Elian Doran 4011771b64 chore(web-clipper): port the remaining files to TypeScript 2026-01-24 14:01:58 +02:00
Elian Doran 266494ba8c chore(web-clipper): port most files to TypeScript 2026-01-24 13:20:27 +02:00
Elian Doran 2e144fac5e chore(web-clipper): set up for TypeScript 2026-01-24 12:35:31 +02:00
Elian Doran 423038100e fix(web-clipper): undefined variable in popup 2026-01-24 12:12:51 +02:00
Elian Doran 75e88c69bd fix(web-clipper): createLink not defined in popup 2026-01-24 12:12:07 +02:00
Elian Doran f0b1319f95 refactor(web-clipper): remove unnecessary libraries 2026-01-24 11:54:00 +02:00
Elian Doran 59f2fc8d03 fix(web-clipper): clipping whole page not working 2026-01-24 11:53:26 +02:00
Elian Doran 5d07a079ef feat(web-clipper): improve error handling for content entrypoint 2026-01-24 11:46:07 +02:00
Elian Doran b5ff71b1a0 fix(web-clipper): missing utils import 2026-01-24 11:25:32 +02:00
Elian Doran c0a2ae99cf fix(web-clipper): toast not working 2026-01-24 11:13:17 +02:00
Elian Doran 5600a707d3 chore(web-clipper): reintegrate name and description 2026-01-24 11:00:54 +02:00
Elian Doran 17f906fb65 chore(web-clipper): reintegrate icon 2026-01-24 10:58:20 +02:00
Elian Doran 276b3f834b fix(web-clipper): triliumServerFacade is not defined 2026-01-24 10:47:41 +02:00
Elian Doran a9218960e9 fix(web-clipper): the storage API will not work with a temporary addon ID 2026-01-24 10:40:16 +02:00
Elian Doran 957590523c fix(web-clipper): integrate trilium server facade 2026-01-24 10:29:53 +02:00
Elian Doran 22308a101e fix(web-clipper): missing permissions 2026-01-24 10:18:59 +02:00
Elian Doran ab95f6dcc2 fix(web-clipper): script imports 2026-01-24 10:08:29 +02:00
Elian Doran cb8b968637 chore(web-clipper): make entrypoints actually run 2026-01-24 09:59:46 +02:00
Elian Doran e4d319c7a1 chore(web-clipper): define entrypoints 2026-01-24 09:50:25 +02:00
Elian Doran f8e5f31970 chore(web-clipper): install WXT 2026-01-24 09:45:05 +02:00
Elian Doran 5113e2ab97 chore(web-clipper): create package JSON 2026-01-24 09:42:02 +02:00
Elian Doran 6ae1cc18e2 chore(web-clipper): remove IDEA file 2026-01-24 09:37:03 +02:00
Elian Doran 256ad05d2d Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-01-24 09:36:18 +02:00
Elian Doran 1b0a53a441 feat(notes): add default icon for doc files 2026-01-24 09:29:11 +02:00
Elian Doran 430ef62a2d feat(notes): add default icon for GIF 2026-01-24 09:24:35 +02:00
renovate[bot] cd7daee771 chore(deps): update dependency @redocly/cli to v2.14.9 2026-01-24 06:31:00 +00:00
Elian Doran 50aeda8ee8 chore(deps): update dependency cheerio to v1.2.0 (#8488) 2026-01-24 08:28:34 +02:00
renovate[bot] 1520c696a3 chore(deps): update dependency cheerio to v1.2.0 2026-01-24 01:39:45 +00:00
Elian Doran f63f6244a1 fix: update nixpkgs to grab elector v40 (#8483) 2026-01-23 22:20:43 +02:00
Wael Nasreddine 8611d4a67a fix: update nixpkgs to grab elector v40 2026-01-23 08:31:30 -08:00
Elian Doran c48bd9a5c3 fix(canvas): saving on start due to library change 2026-01-23 18:12:11 +02:00
Elian Doran dba985b308 fix(canvas): saving on start due to mismatch in version number 2026-01-23 18:07:11 +02:00
Elian Doran a51a831fe8 fix(canvas): background color not saved (closes #8325) 2026-01-23 17:56:04 +02:00
Elian Doran 44142e980d fix(quick_edit): not working when content is centered (closes #8371) 2026-01-23 17:17:41 +02:00
Elian Doran 7f83226f84 Calendar improvements (#8478) 2026-01-23 16:25:18 +02:00
Elian Doran e3fdae8932 chore: address requested changes 2026-01-23 15:02:33 +02:00
Elian Doran 78c62be823 test(client): fix broken tests after change in attributes 2026-01-23 14:57:33 +02:00
Elian Doran e51cea88bf feat(calendar): don't trigger refresh on delete 2026-01-23 12:47:02 +02:00
Elian Doran d7409bec49 feat(calendar): don't trigger refresh on rename 2026-01-23 12:35:08 +02:00
Elian Doran 17b1f599ff feat(calendar): don't trigger refresh on event change 2026-01-23 12:24:35 +02:00
Elian Doran 81c85d712e chore(calendar): create note with attributes atomically 2026-01-23 12:11:06 +02:00
Elian Doran 2eae8bbb64 Revert "chore(calendar): remove automatic fetching on note creation"
This reverts commit 2a61f51e06.
2026-01-23 12:05:12 +02:00
Elian Doran 2a61f51e06 chore(calendar): remove automatic fetching on note creation 2026-01-23 11:58:57 +02:00
Elian Doran 3e3c3e3bb4 fix(calendar): redundant refresh when adding new item 2026-01-23 11:38:18 +02:00
Elian Doran 7b41a89b8e chore(deps): update dependency happy-dom to v20.3.7 (#8470) 2026-01-23 09:39:54 +02:00
renovate[bot] 36429da6da chore(deps): update dependency happy-dom to v20.3.7 2026-01-23 07:09:50 +00:00
Elian Doran 30f6ab5976 chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.2 (#8441) 2026-01-23 09:09:16 +02:00
Elian Doran 99a46f2a85 fix(deps): update dependency lodash-es to v4.17.23 [security] (#8454) 2026-01-23 09:08:39 +02:00
Elian Doran 6754b1f2e1 fix(deps): update dependency @preact/signals to v2.6.1 (#8457) 2026-01-23 09:08:25 +02:00
Elian Doran 122ad2b771 chore(deps): update dependency @redocly/cli to v2.14.7 (#8468) 2026-01-23 09:08:01 +02:00
Elian Doran 714e8ade1a chore(deps): update vitest monorepo to v4.0.18 (#8471) 2026-01-23 09:07:30 +02:00
Elian Doran 4a6ea38be0 chore(deps): update dependency express-session to v1.19.0 (#8472) 2026-01-23 09:06:31 +02:00
Elian Doran 8bc7f0b71f Translations update from Hosted Weblate (#8476) 2026-01-23 09:05:39 +02:00
Hosted Weblate 9a912c16ad Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-23 07:51:59 +01:00
Elian Doran 10a84a1356 chore(deps): update dependency @smithy/middleware-retry to v4.4.27 (#8469) 2026-01-23 08:51:48 +02:00
Wael Nasreddine 901201a7af chore: pnpm2nix to use our copy of flake-utils 2026-01-22 18:59:03 -08:00
renovate[bot] a57a1dfc47 chore(deps): update dependency express-session to v1.19.0 2026-01-23 00:42:22 +00:00
renovate[bot] 577780cb90 chore(deps): update vitest monorepo to v4.0.18 2026-01-23 00:41:33 +00:00
renovate[bot] b45eef9140 chore(deps): update dependency @smithy/middleware-retry to v4.4.27 2026-01-23 00:40:10 +00:00
renovate[bot] 907853bbba chore(deps): update dependency @redocly/cli to v2.14.7 2026-01-23 00:39:32 +00:00
Elian Doran 17f3ffd00c fix(mermaid): preview not rendering when read-only (closes #8419) 2026-01-22 20:56:58 +02:00
Elian Doran 8b86e17ac8 fix(client): race condition in syntax highlight (closes #8464) 2026-01-22 20:03:46 +02:00
Elian Doran d6b6832a1d fix(promoted_attributes): checkbox not displaying initial value properly (closes #8062) 2026-01-22 08:15:40 +02:00
Elian Doran 9dfc1cdc4c fix(render): not refreshing on attribute change (closes #8321) 2026-01-22 08:10:29 +02:00
Elian Doran 673c39d798 Revert "feat(options/advanced): add description for experimental"
This reverts commit fc2ab91280.
2026-01-22 08:05:49 +02:00
renovate[bot] 8ca84d183c fix(deps): update dependency lodash-es to v4.17.23 [security] 2026-01-22 02:03:34 +00:00
renovate[bot] 9577aa2abe fix(deps): update dependency @preact/signals to v2.6.1 2026-01-22 01:45:37 +00:00
perfectra1n 280697f2f7 Revert "feat(etapi): resolve suggestions for norms from gemini"
This reverts commit 0650be664d.
2026-01-21 16:37:02 -08:00
perfectra1n 0650be664d feat(etapi): resolve suggestions for norms from gemini 2026-01-21 16:33:42 -08:00
perfectra1n 60c61f553a feat(etapi): put filtering for revisions mainly in the db layer 2026-01-21 16:30:37 -08:00
perfectra1n 022c967781 feat(etapi): add revisions route and "undelete" route to etapi 2026-01-21 16:25:17 -08:00
Elian Doran 227be184ac fix(shortcuts): overlap on azerty due to key matches 2026-01-21 22:34:36 +02:00
Elian Doran d677f65eeb chore(deps): update dependency happy-dom to v20.3.4 (#8433) 2026-01-21 19:32:41 +02:00
Elian Doran 92f86bcca2 chore(deps): update dependency @smithy/middleware-retry to v4.4.26 (#8442) 2026-01-21 19:31:35 +02:00
Elian Doran 2015068d9e fix(deps): update dependency @zumer/snapdom to v2.0.2 (#8443) 2026-01-21 19:30:35 +02:00
renovate[bot] 8a280c2f9d chore(deps): update dependency happy-dom to v20.3.4 2026-01-21 17:07:19 +00:00
Elian Doran 34fd6f9502 chore(deps): update dependency lightningcss to v1.31.1 (#8444) 2026-01-21 19:05:45 +02:00
Elian Doran 02acb36e47 chore(deps): update dependency node-abi to v4.26.0 (#8445) 2026-01-21 19:03:13 +02:00
Elian Doran 280c0e0348 fix(deps): update dependency @preact/signals to v2.6.0 (#8446) 2026-01-21 18:27:23 +02:00
Elian Doran 8528f0d848 fix(deps): update dependency i18next to v25.8.0 (#8447) 2026-01-21 18:26:53 +02:00
renovate[bot] 917e881faa chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.2 2026-01-21 10:43:23 +00:00
renovate[bot] 96b1efcfdc chore(deps): update dependency lightningcss to v1.31.1 2026-01-21 06:17:33 +00:00
renovate[bot] 794e03b2cb fix(deps): update dependency i18next to v25.8.0 2026-01-21 01:37:06 +00:00
renovate[bot] a285c46b97 fix(deps): update dependency @preact/signals to v2.6.0 2026-01-21 01:36:23 +00:00
renovate[bot] 4da6294ef2 chore(deps): update dependency node-abi to v4.26.0 2026-01-21 01:35:35 +00:00
renovate[bot] 16ed9a7e8e fix(deps): update dependency @zumer/snapdom to v2.0.2 2026-01-21 01:34:07 +00:00
renovate[bot] 798efbc22f chore(deps): update dependency @smithy/middleware-retry to v4.4.26 2026-01-21 01:33:18 +00:00
Elian Doran 60c789b6c7 fix(client): production affected by cache of index JS 2026-01-20 16:33:46 +02:00
Elian Doran f83d95136d fix(codemirror): ctrl+enter generates newline 2026-01-20 16:11:40 +02:00
Elian Doran f96ed0af26 Revert "fix(shortcuts): triggering in bubbling phase, not capturing"
This reverts commit 711828d6b4.
2026-01-20 15:16:51 +02:00
Elian Doran 1539664026 Revert "test(client): fix broken tests after change in shortcut behaviour"
This reverts commit e33950e000.
2026-01-20 15:16:32 +02:00
Elian Doran 8aff775d0e chore(deps): update pnpm to v10.28.1 (#8435) 2026-01-20 12:12:26 +02:00
Elian Doran 94248eafe9 chore(deps): update dependency vite-plugin-static-copy to v3.1.5 (#8434) 2026-01-20 12:12:06 +02:00
Elian Doran 02335bba3f chore(deps): update dependency turnish to v1.8.0 (#8437) 2026-01-20 12:11:38 +02:00
renovate[bot] dad9578b83 chore(deps): update dependency turnish to v1.8.0 2026-01-20 01:16:12 +00:00
renovate[bot] c043788b09 chore(deps): update pnpm to v10.28.1 2026-01-20 01:15:00 +00:00
renovate[bot] e5bc416b46 chore(deps): update dependency vite-plugin-static-copy to v3.1.5 2026-01-20 01:14:50 +00:00
Jin bd7e47d8f0 refactor: clear calendar code 2026-01-19 21:15:18 +00:00
Jin 457a7a03fb test: add test for week notes utils 2026-01-19 21:01:07 +00:00
Jin 6e486c64f1 fix: move calendar to use common week note utils 2026-01-19 20:59:15 +00:00
Jin 4f3575d765 fix: move date_notes to use common week note utils 2026-01-19 20:56:52 +00:00
Jin f5f1b27754 fix: add common week note utils 2026-01-19 20:56:12 +00:00
Elian Doran c97f52da36 docs(user): mention breaking change update for scripts 2026-01-19 19:02:54 +02:00
Elian Doran 1661c3292a fix(deps): update dependency jquery to v4 (#8424) 2026-01-19 18:53:11 +02:00
Elian Doran 4e80c07630 Translations update from Hosted Weblate (#8427) 2026-01-19 18:42:06 +02:00
Elian Doran d43309947e fix(client): polyfill removed jQuery methods 2026-01-19 18:39:22 +02:00
Baris Konag c7cc702c4a Translated using Weblate (Turkish)
Currently translated at 10.5% (16 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/tr/
2026-01-19 17:22:17 +01:00
Baris Konag c304753ffc Translated using Weblate (Turkish)
Currently translated at 4.3% (17 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/tr/
2026-01-19 17:22:17 +01:00
Toto Yullian da59c14231 Translated using Weblate (Indonesian)
Currently translated at 18.1% (21 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/
2026-01-19 17:22:16 +01:00
Hosted Weblate e0b3e41c9e Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-19 17:22:15 +01:00
Elian Doran 5d1a63bce0 fix(print): crash when printing presentation 2026-01-19 14:55:33 +02:00
Elian Doran 84cf4ef4a3 fix(print): only first page is shown 2026-01-19 13:51:27 +02:00
Elian Doran ec4b6f0a90 chore(deps): update dependency happy-dom to v20.3.3 (#8426) 2026-01-19 08:48:02 +02:00
renovate[bot] 60dbdbeb71 chore(deps): update dependency happy-dom to v20.3.3 2026-01-19 02:05:32 +00:00
Elian Doran 418a546583 fix(print): clicking inside print preview hides it 2026-01-18 22:39:09 +02:00
Elian Doran e6380b87b6 fix(print): some collections not rendered at all 2026-01-18 22:26:13 +02:00
Elian Doran 1d3d214101 fix(print): not printing at all 2026-01-18 22:05:16 +02:00
Elian Doran a38067560b SQL console improvements (#8418) 2026-01-18 18:52:14 +02:00
Elian Doran eac7235199 chore(sql_console): address requested changes 2026-01-18 18:38:14 +02:00
Elian Doran 4c55e857b8 fix(server): build failing due to import 2026-01-18 18:33:48 +02:00
Elian Doran e33950e000 test(client): fix broken tests after change in shortcut behaviour 2026-01-18 18:22:21 +02:00
Elian Doran fc0ccbfcf5 chore(sql_console): address requested changes 2026-01-18 18:19:35 +02:00
Elian Doran 4a82bbb035 docs(user): update SQL console based on new interaction 2026-01-18 18:06:30 +02:00
Elian Doran 57d894e765 feat(sql_console): enable read-only for saved notes 2026-01-18 17:47:09 +02:00
Elian Doran 97dfad419c docs(user): refresh photo for SQL console 2026-01-18 17:35:01 +02:00
Elian Doran bfc521fdc0 fix(sql_console): enforce vertical layout 2026-01-18 17:11:03 +02:00
Elian Doran 197fa90176 style(sql_console): improve style for frozen cell 2026-01-18 13:09:46 +02:00
Elian Doran 0844914e11 style(sql_console): improve style for highlighted range 2026-01-18 13:05:18 +02:00
Elian Doran c376b0bbe2 style(sql_console): improve filter spacing 2026-01-18 12:35:42 +02:00
Elian Doran 4491086c55 style(sql_console): improve header & footer inputs 2026-01-18 12:34:00 +02:00
Elian Doran 791697369d style(sql_console): remove background for footer 2026-01-18 12:22:53 +02:00
Elian Doran 28d0bfd229 chore(sql_console): reducing padding in footer 2026-01-18 12:12:05 +02:00
Elian Doran 8182a04eae fix(sql_console): not refreshing when switching between notes 2026-01-18 12:09:01 +02:00
Elian Doran 711828d6b4 fix(shortcuts): triggering in bubbling phase, not capturing 2026-01-18 12:07:23 +02:00
Elian Doran 69e88c1d9f chore(sql_console): set gutter color 2026-01-18 11:48:34 +02:00
Elian Doran 748b87da9a feat(sql_console): improve display for statements 2026-01-18 11:34:31 +02:00
Elian Doran 94dca4cd87 feat(sql_console): report errors inline 2026-01-18 11:13:31 +02:00
Elian Doran 7179701e0f feat(sql_console): improve no results 2026-01-18 10:58:32 +02:00
Elian Doran af5061646c feat(sql_console): add not yet executed message 2026-01-18 10:36:44 +02:00
Elian Doran 9c4163ad3a feat(sql_console): page size selector 2026-01-18 10:24:55 +02:00
Elian Doran 46c3f5296a chore(sql_console): full-height table 2026-01-18 10:20:15 +02:00
Elian Doran ebadcfd844 feat(sql_console): enable pagination 2026-01-18 10:14:55 +02:00
Elian Doran b7d4947462 Merge remote-tracking branch 'origin/main' into feature/sql_console_improvements 2026-01-18 10:08:48 +02:00
Elian Doran a599526dea chore(deps): update dependency @smithy/middleware-retry to v4.4.24 (#8420) 2026-01-18 08:34:59 +02:00
Elian Doran c4f166fe12 chore(deps): update dependency webdriverio to v9.23.2 (#8421) 2026-01-18 08:34:19 +02:00
Elian Doran a8ae91aa3b Translations update from Hosted Weblate (#8425) 2026-01-18 08:33:02 +02:00
Elian Doran 82b3692acb fix(deps): update dependency better-sqlite3 to v12.6.2 (#8422) 2026-01-18 08:32:12 +02:00
Hosted Weblate 432c054b68 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-18 06:25:42 +00:00
Elian Doran dcd8bfa255 fix(deps): update dependency mind-elixir to v5.6.1 (#8423) 2026-01-18 08:25:28 +02:00
renovate[bot] c287a2ae97 fix(deps): update dependency mind-elixir to v5.6.1 2026-01-18 05:39:59 +00:00
renovate[bot] 8fdadb3798 fix(deps): update dependency jquery to v4 2026-01-18 01:40:46 +00:00
renovate[bot] 3fce4fc66c fix(deps): update dependency better-sqlite3 to v12.6.2 2026-01-18 01:39:14 +00:00
renovate[bot] d83d7ed106 chore(deps): update dependency webdriverio to v9.23.2 2026-01-18 01:38:26 +00:00
renovate[bot] 1b812f1886 chore(deps): update dependency @smithy/middleware-retry to v4.4.24 2026-01-18 01:37:35 +00:00
Elian Doran 56fcc7adcc chore(sql_console): fix lint warnings 2026-01-17 22:41:55 +02:00
Elian Doran fb0c7359f1 chore(sql_console): fix typecheck issue 2026-01-17 22:39:32 +02:00
Elian Doran 4c4e5b85e9 chore(sql_console): integrate table reference 2026-01-17 22:38:18 +02:00
Elian Doran 476247beb5 feat(sql_console): increase size for results 2026-01-17 22:29:20 +02:00
Elian Doran 2c87f609f3 feat(sql_console): add filter 2026-01-17 22:13:13 +02:00
Elian Doran bc79ff6845 feat(sql_console): row numbers 2026-01-17 22:09:24 +02:00
Elian Doran f10373d54f feat(sql_console): add clipboard 2026-01-17 22:02:47 +02:00
Elian Doran 630d16b722 feat(sql_console): enable sorting 2026-01-17 21:47:02 +02:00
Elian Doran 769f3db21c feat(sql_console): make columns resizable 2026-01-17 21:45:10 +02:00
Elian Doran c6896a4b33 feat(sql_console): reduce column width 2026-01-17 21:43:21 +02:00
Elian Doran 7c18025098 feat(sql_console): reduce spacing to fit more content 2026-01-17 21:41:06 +02:00
Elian Doran 6ae74b3181 feat(sql_console): make scrolls and headers always visible 2026-01-17 21:35:58 +02:00
Elian Doran 2ecfbbf284 feat(sql_console): improve fit & solve build error 2026-01-17 21:26:44 +02:00
Elian Doran 781de9a1fb feat(sql_console): basic integration of Tabulator 2026-01-17 21:22:22 +02:00
Elian Doran 6972a4b901 fix(note_detail): preview leaks between mermaid & SQL console 2026-01-17 20:58:26 +02:00
Elian Doran 52ed1750ac fix(sql_console): runtime error for inline title 2026-01-17 20:52:53 +02:00
Elian Doran 9010e0b1ce chore(sql_console): reverse preview and code sections 2026-01-17 20:44:03 +02:00
Elian Doran 5053e74447 fix(sql_console): note type switcher showing up 2026-01-17 20:41:45 +02:00
Elian Doran f294276849 fix(sql_console): full-height not respected 2026-01-17 20:38:44 +02:00
Elian Doran 0740788cc8 chore(sql_console): link stylesheet 2026-01-17 20:32:28 +02:00
Elian Doran 9bac07ce62 chore(sql_console): integrate results into preview of split 2026-01-17 20:29:15 +02:00
Elian Doran 3d8289d394 chore(note_detail): get code editor to show 2026-01-17 20:12:16 +02:00
Elian Doran 5a60fdad8a chore(note_detail): map SQL console to own type widget 2026-01-17 20:09:25 +02:00
Elian Doran 62cca5a96b Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-01-17 18:57:03 +02:00
Elian Doran 74548d638e docs(user): sync 2026-01-17 18:13:40 +02:00
Elian Doran e0ccf30f4f docs(user): add missing links from Evernote documentation 2026-01-17 17:59:30 +02:00
Elian Doran d2c6081537 feat(edit-docs): remove data-list-item-id 2026-01-17 17:54:10 +02:00
Elian Doran bd933f2c4c Translations update from Hosted Weblate (#8416) 2026-01-17 17:43:15 +02:00
Yatrik Patel 1d898d618e Translated using Weblate (Hindi)
Currently translated at 7.7% (30 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-17 15:40:43 +00:00
Yatrik Patel 11c8e5b3b2 Translated using Weblate (Hindi)
Currently translated at 35.5% (54 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-17 15:40:43 +00:00
Hosted Weblate fe4c3ffecb Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-17 15:40:42 +00:00
Elian Doran 334a96186e chore(deps): update dependency electron to v40 (#8415) 2026-01-17 17:40:34 +02:00
Elian Doran 34b2df705b Fixes to Markdown export (#8417) 2026-01-17 14:19:36 +02:00
Elian Doran 5a7fc1c8b6 chore(markdown): address requested changes 2026-01-17 13:22:24 +02:00
Elian Doran fabab6abb1 refactor(export/markdown): spacing issues 2026-01-17 13:16:21 +02:00
Elian Doran 0c9c20c0c5 docs(user): fix escapes 2026-01-17 13:11:53 +02:00
Elian Doran 67cc1113b1 chore(export/markdown): render emphasis with underscore 2026-01-17 13:05:29 +02:00
Elian Doran 3aacd255f4 chore(export/markdown): add test for jQuery-like text inside table 2026-01-17 12:58:24 +02:00
renovate[bot] ccfda21413 chore(deps): update dependency electron to v40 2026-01-17 10:53:59 +00:00
Elian Doran 46c88506cc chore(deps): update dependency ejs to v4 (#8396) 2026-01-17 12:52:06 +02:00
Elian Doran 51157e1979 fix(export/markdown): error due to namespace usage 2026-01-17 12:47:34 +02:00
Elian Doran bfb6d975ff fix(export/markdown): type error due to blankReplacement signature change 2026-01-17 12:46:55 +02:00
Elian Doran aa01bc1457 feat(markdown): switch to turnish instead of turndown 2026-01-17 12:44:30 +02:00
Elian Doran 5600f1b7b1 chore(deps): update dependency node-abi to v4.25.0 (#8414) 2026-01-17 12:17:38 +02:00
Elian Doran a169db807c fix(server): crashing due to EJS handling 2026-01-17 12:17:15 +02:00
Elian Doran f40348daff chore(deps): update dependency happy-dom to v20.3.1 (#8405) 2026-01-17 12:09:57 +02:00
renovate[bot] f63042ef87 chore(deps): update dependency ejs to v4 2026-01-17 10:01:09 +00:00
renovate[bot] d148c9d1c6 chore(deps): update dependency node-abi to v4.25.0 2026-01-17 10:00:12 +00:00
renovate[bot] f72929ca13 chore(deps): update dependency happy-dom to v20.3.1 2026-01-17 09:59:13 +00:00
Elian Doran cc3e3ca4d4 fix(deps): update ckeditor monorepo to v47.4.0 (#8395) 2026-01-17 11:55:54 +02:00
Elian Doran 8fad664a6d Translations update from Hosted Weblate (#8413) 2026-01-16 23:16:08 +02:00
Kf637 f1946c1386 Translated using Weblate (Norwegian Bokmål)
Currently translated at 6.7% (26 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/
2026-01-16 22:08:01 +01:00
Kf637 ea8bd0136f Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-16 22:08:00 +01:00
Elian Doran 4a3f72ae50 Translations update from Hosted Weblate (#8411) 2026-01-16 19:14:11 +02:00
Hosted Weblate c944762ef6 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-16 14:25:37 +00:00
Elian Doran f6924d7fda feat(import/zip): remove extension from title for PDF imports 2026-01-16 16:25:15 +02:00
Elian Doran 3a0880fcd6 feat(import/single): remove extension from title for PDF imports 2026-01-16 12:01:11 +02:00
Elian Doran df62dc87b2 feat(notes): add default icon for PDFs 2026-01-16 11:47:42 +02:00
Elian Doran d42679315e refactor(server): use common logic for icons 2026-01-16 11:42:37 +02:00
Elian Doran 2a19be5ab6 refactor(client): extract fnote icon logic in commons 2026-01-16 09:35:51 +02:00
renovate[bot] 33bbe994d7 fix(deps): update ckeditor monorepo to v47.4.0 2026-01-16 06:55:00 +00:00
Elian Doran 04c598caea build(deps): bump diff from 4.0.2 to 8.0.3 (#8390) 2026-01-16 08:50:51 +02:00
Elian Doran 3577688bf9 fix(deps): update dependency @codemirror/view to v6.39.11 (#8392) 2026-01-16 08:50:34 +02:00
Elian Doran e0439655df chore(deps): update dependency @smithy/middleware-retry to v4.4.23 (#8403) 2026-01-16 08:47:12 +02:00
Elian Doran 84f944f78a chore(deps): update dependency @types/node to v24.10.9 (#8404) 2026-01-16 08:46:51 +02:00
Elian Doran 022b6df959 chore(deps): update dependency stylelint to v17 (#8406) 2026-01-16 08:46:18 +02:00
renovate[bot] 9e3e92669f chore(deps): update dependency stylelint to v17 2026-01-16 00:58:48 +00:00
renovate[bot] 35b96a71fc chore(deps): update dependency @types/node to v24.10.9 2026-01-16 00:51:41 +00:00
renovate[bot] 4b78de6726 chore(deps): update dependency @smithy/middleware-retry to v4.4.23 2026-01-16 00:51:08 +00:00
Elian Doran 4771e02909 chore(deps): update dependency happy-dom to v20.3.0 (#8393) 2026-01-15 08:49:43 +02:00
Elian Doran 03dffdb65f chore(deps): update node.js to v24.13.0 (#8394) 2026-01-15 08:49:01 +02:00
Elian Doran 859a3948cd Translations update from Hosted Weblate (#8398) 2026-01-15 08:09:44 +02:00
Hasan Kara 161aa625e6 Translated using Weblate (Turkish)
Currently translated at 9.2% (14 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/tr/
2026-01-15 04:09:54 +01:00
Hasan Kara 28fd945e80 Translated using Weblate (Turkish)
Currently translated at 3.6% (14 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/tr/
2026-01-15 04:09:53 +01:00
renovate[bot] 748fb0bf05 chore(deps): update node.js to v24.13.0 2026-01-15 02:00:34 +00:00
renovate[bot] 98e1d0afd9 chore(deps): update dependency happy-dom to v20.3.0 2026-01-15 02:00:27 +00:00
renovate[bot] 9c61ce1835 fix(deps): update dependency @codemirror/view to v6.39.11 2026-01-15 01:59:39 +00:00
dependabot[bot] c3a5705be0 build(deps): bump diff from 4.0.2 to 8.0.3
Bumps [diff](https://github.com/kpdecker/jsdiff) from 4.0.2 to 8.0.3.
- [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md)
- [Commits](https://github.com/kpdecker/jsdiff/compare/v4.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: diff
  dependency-version: 8.0.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-14 22:53:04 +00:00
Elian Doran 9d0fa9f7ca Fix sorting (#7878) 2026-01-14 17:18:41 +02:00
Elian Doran cc4ceb975e fix(tree): not reacting to note reordering (e.g. sort) 2026-01-14 17:15:29 +02:00
Elian Doran 8a6495a0bd Translations update from Hosted Weblate (#8386) 2026-01-14 16:48:46 +02:00
Elian Doran 1d95392d22 docs(user): improve Evernote documentation 2026-01-14 16:06:58 +02:00
Hosted Weblate 93dd08d629 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-14 14:06:53 +00:00
Elian Doran f466367c4d Translations update from Hosted Weblate (#8384) 2026-01-14 07:48:07 +02:00
Yatrik Patel 924d495d2e Translated using Weblate (Hindi)
Currently translated at 7.2% (28 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-14 05:42:20 +00:00
Hosted Weblate 0b5c1b648b Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-14 05:42:19 +00:00
Elian Doran 03ec39f52a chore(deps): update dependency @smithy/middleware-retry to v4.4.22 (#8377) 2026-01-14 07:42:05 +02:00
Elian Doran f3ae1bf12c fix(deps): update dependency react-i18next to v16.5.3 (#8378) 2026-01-14 07:41:51 +02:00
Elian Doran 6d61cf41d9 chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.0 (#8379) 2026-01-14 07:41:35 +02:00
Elian Doran 333679523b fix(deps): update codemirror (#8381) 2026-01-14 07:41:17 +02:00
Elian Doran 1cd3a361f6 chore(deps): update node.js to v24.13.0 (#8380) 2026-01-14 07:41:03 +02:00
renovate[bot] 7405627663 fix(deps): update codemirror 2026-01-14 01:03:37 +00:00
renovate[bot] 2c4fb6c0d0 chore(deps): update node.js to v24.13.0 2026-01-14 01:02:53 +00:00
renovate[bot] 3e284208ef chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.0 2026-01-14 01:01:57 +00:00
renovate[bot] 42b7f4c795 fix(deps): update dependency react-i18next to v16.5.3 2026-01-14 01:01:06 +00:00
renovate[bot] d445209eeb chore(deps): update dependency @smithy/middleware-retry to v4.4.22 2026-01-14 01:00:18 +00:00
Elian Doran ed1bf17add feat(i18n): add workflow to check translation coverage (#8376) 2026-01-13 23:06:10 +02:00
Elian Doran 4800f2a172 chore(ci/i18n): add permissions 2026-01-13 22:56:27 +02:00
Elian Doran e7ff364c01 chore(i18n): trigger on workflow change 2026-01-13 22:52:51 +02:00
Elian Doran 79ca299726 feat(i18n): add workflow to check translation coverage 2026-01-13 22:49:46 +02:00
Elian Doran 9d7ba48a6a Translations update from Hosted Weblate (#8375) 2026-01-13 22:28:17 +02:00
Gishky 9329665919 Translated using Weblate (English (United Kingdom))
Currently translated at 1.9% (34 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/en_GB/
2026-01-13 21:23:46 +01:00
Gishky f6821bce03 Translated using Weblate (German)
Currently translated at 100.0% (1759 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-13 21:23:45 +01:00
Gishky a7aedf93ab Translated using Weblate (German)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/
2026-01-13 21:23:45 +01:00
Elian Doran 4ffcf01452 fix: mac alt shortcuts (#8369) 2026-01-13 22:23:38 +02:00
Elian Doran 618459d353 feat(flake): provide .#edit-docs as a standalone docs editor (#8350) 2026-01-13 22:22:58 +02:00
Elian Doran 6436c16449 Fix race condition in edit-docs Electron ready event (#8344) 2026-01-13 22:20:22 +02:00
Elian Doran 1bec457004 Translations update from Hosted Weblate (#8374) 2026-01-13 21:58:13 +02:00
Hosted Weblate 3e541e37fe Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-13 20:44:40 +01:00
Elian Doran a41b78d36f feat(ux): show more helpful output when users encounter permissions issues within the data directory (#8273) 2026-01-13 21:44:30 +02:00
Elian Doran 79c50f3b4c fix(deps): update dependency react-i18next to v16.5.2 (#8348) 2026-01-13 13:38:55 +02:00
Elian Doran 0f54b01cdd chore(deps): update dependency @smithy/middleware-retry to v4.4.20 (#8362) 2026-01-13 10:45:41 +02:00
Elian Doran 41f2b03711 chore(deps): update dependency @redocly/cli to v2.14.5 (#8361) 2026-01-13 10:33:06 +02:00
Elian Doran 0be76f982c Merge branch 'main' into renovate/smithy-middleware-retry-4.x 2026-01-13 10:33:02 +02:00
Elian Doran 5deb277672 chore(deps): update vitest monorepo to v4.0.17 (#8363) 2026-01-13 10:32:25 +02:00
Elian Doran 3d15c9e94c Translations update from Hosted Weblate (#8370) 2026-01-13 10:22:31 +02:00
noobhjy 1363f94621 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1759 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-01-13 08:14:58 +00:00
Kim Nøglegaard abdcd6cc0c Translated using Weblate (Norwegian Bokmål)
Currently translated at 6.4% (25 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/
2026-01-13 08:14:58 +00:00
nvno dc8abed2f3 Translated using Weblate (Portuguese)
Currently translated at 99.6% (1753 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pt/
2026-01-13 08:14:57 +00:00
Kim Nøglegaard 892c2cd838 Translated using Weblate (Norwegian Bokmål)
Currently translated at 2.3% (41 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nb_NO/
2026-01-13 08:14:56 +00:00
Hosted Weblate 2796b29138 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-13 08:14:55 +00:00
Elian Doran 05620a129f chore(deps): update electron-forge monorepo to v7.11.1 (#8366) 2026-01-13 10:14:48 +02:00
renovate[bot] cb11955a44 chore(deps): update vitest monorepo to v4.0.17 2026-01-13 08:12:19 +00:00
Elian Doran c3623a15fb fix(ci): website workflow failing due to postinstall scripts 2026-01-13 10:09:51 +02:00
Wael Nasreddine 0273c64bbf Build edit-docs as standalone package using makeApp
Changed edit-docs from a simple wrapper script to a properly built Nix
package using makeApp, similar to how desktop and server are built.

Changes:
- Added build script to apps/edit-docs/package.json
- Created apps/edit-docs/scripts/build.ts based on desktop's build script
- Added edit-docs:build task to root package.json
- Changed flake.nix to use makeApp which:
  - Builds edit-docs with all dependencies bundled
  - Creates a standalone trilium-edit-docs executable
  - Can be installed with 'nix profile install' and run from any directory

This makes edit-docs truly reusable - it can now be installed and run
from any project without requiring the Trilium source tree.
2026-01-12 22:08:27 -08:00
Wael Nasreddine 5b37140ffa Fix race condition in edit-docs Electron ready event
The edit-docs tool would hang on startup when the Electron 'ready' event
fired before the event listener was registered. This race condition occurred
because:

1. startElectron() creates a deferred promise and registers a 'ready' listener
2. The 'ready' event fires asynchronously at some point during app initialization
3. If async work (like config loading) delays the listener registration,
   Electron may already be ready when app.on('ready', ...) is called
4. Once fired, the 'ready' event doesn't fire again, leaving the listener
   waiting forever

The fix checks electron.app.isReady() before registering the listener:
- If already ready: execute the handler immediately
- If not ready: register the listener as before

This ensures the initialization sequence completes regardless of timing.

The issue became apparent while working on making edit-docs reusable from
other projects (see #8343), where config loading added enough async delay
to consistently trigger the race condition.

Related: https://github.com/TriliumNext/Trilium/issues/8343
2026-01-12 22:08:27 -08:00
Wael Nasreddine fb4d63b049 Add --config, --help, and --version flags to edit-docs
- Implement --config (-c) flag to allow custom configuration file paths.
- Add --help (-h) flag to display tool usage and available options.
- Add --version (-v) flag to display the current Trilium version.
- Update electron-start.mts to correctly pass command-line arguments to Electron.
- Synchronize edit-docs version with the root package.json via update-version.ts.
- Resolve config paths relative to the configuration file's directory.

This makes edit-docs more robust and easier to use from external projects
and immutable environments like Nix.
2026-01-12 22:08:27 -08:00
Wael Nasreddine 015e41e792 fix(edit-docs): Minify meta for format==share 2026-01-12 22:08:27 -08:00
Wael Nasreddine 8e47f33329 Refactor edit-docs to use edit-docs-config.yaml
This removes hardcoded configuration from edit-docs.ts and replaces
it with dynamic loading from edit-docs-config.yaml.

Changes:
- Removed BASE_URL and NOTE_MAPPINGS constants
- Removed DOCS_ROOT and USER_GUIDE_ROOT environment variable dependencies
- Added js-yaml for YAML parsing
- Config paths are resolved relative to repository root

The tool now reads configuration from edit-docs-config.yaml, making it
easier to customize without code changes. The pnpm script is simplified
since it no longer needs to pass complex environment variables.
2026-01-12 22:08:27 -08:00
Elian Doran ad4a8ec5f4 chore(deps): use pinned versions 2026-01-13 07:40:20 +02:00
renovate[bot] 56356f9c61 fix(deps): update dependency react-i18next to v16.5.2 2026-01-13 05:38:17 +00:00
Elian Doran abda0f9111 chore(deps): update dependency happy-dom to v20.1.0 (#8307) 2026-01-13 07:35:35 +02:00
Elian Doran c2a9d21198 fix(deps): update dependency i18next to v25.7.4 (#8305) 2026-01-13 07:34:54 +02:00
Elian Doran 59ffa1fa93 fix(deps): update dependency diff to v8.0.3 (#8364) 2026-01-13 07:33:16 +02:00
Elian Doran d056185368 chore(deps): update dependency eslint-plugin-playwright to v2.5.0 (#8365) 2026-01-13 07:32:37 +02:00
Elian Doran 251c1f6471 chore(deps): update typescript-eslint monorepo to v8.53.0 (#8367) 2026-01-13 07:32:15 +02:00
Chloe Lee 9efca9827e Merge branch 'main' into fix/mac-alt-shortcuts 2026-01-13 10:54:30 +08:00
renovate[bot] f5e2129ad4 chore(deps): update typescript-eslint monorepo to v8.53.0 2026-01-13 01:17:33 +00:00
renovate[bot] 6c8e6f2429 chore(deps): update electron-forge monorepo to v7.11.1 2026-01-13 01:16:59 +00:00
renovate[bot] 9b4b1a393e chore(deps): update dependency eslint-plugin-playwright to v2.5.0 2026-01-13 01:16:28 +00:00
renovate[bot] 028334407c fix(deps): update dependency diff to v8.0.3 2026-01-13 01:15:54 +00:00
renovate[bot] b93540b40d chore(deps): update dependency @smithy/middleware-retry to v4.4.20 2026-01-13 01:14:27 +00:00
renovate[bot] 9e7eba5eab chore(deps): update dependency @redocly/cli to v2.14.5 2026-01-13 01:13:45 +00:00
Elian Doran fcfa64ae52 Translations update from Hosted Weblate (#8358) 2026-01-12 19:29:13 +02:00
Hosted Weblate 62f5b800b6 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-12 17:28:06 +00:00
Elian Doran 5b910cce56 fix: add "latex" alias for math command (#8357) 2026-01-12 19:27:50 +02:00
chloelee767 a5e8c8f573 add tests 2026-01-13 00:05:07 +08:00
Atmois 2c8edb413e fix: add "latex" alias for math command 2026-01-12 16:02:45 +00:00
chloelee767 644cc27fa7 fix alt shortcuts on mac not triggering 2026-01-12 23:05:42 +08:00
Elian Doran 71d3eb4fde Translations update from Hosted Weblate (#8340) 2026-01-12 07:58:21 +02:00
Elian Doran 7c2340d60e Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-12 07:55:25 +02:00
Elian Doran 24013ef020 Apply suggestion from @gemini-code-assist[bot]
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-12 07:55:16 +02:00
renovate[bot] 72d9e846b7 fix(deps): update dependency i18next to v25.7.4 2026-01-12 05:55:15 +00:00
Yatrik Patel b572ea0954 Translated using Weblate (Hindi)
Currently translated at 12.0% (14 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/hi/
2026-01-12 06:51:45 +01:00
Francis C. 060257fa06 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1759 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-01-12 06:51:44 +01:00
Yatrik Patel 1c6bb0a20e Translated using Weblate (Hindi)
Currently translated at 6.9% (27 of 388 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-12 06:51:43 +01:00
Hosted Weblate 1479109582 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/
2026-01-12 06:51:42 +01:00
Yatrik Patel 13f4e38f48 Translated using Weblate (Hindi)
Currently translated at 6.6% (26 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-12 06:51:41 +01:00
Yatrik Patel 5cbde8d32a Translated using Weblate (Hindi)
Currently translated at 1.1% (20 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-01-12 06:51:40 +01:00
Yatrik Patel f3e3ef2f7d Translated using Weblate (Hindi)
Currently translated at 37.5% (57 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-12 06:51:39 +01:00
Yatrik Patel 0a58f8108a Translated using Weblate (Hindi)
Currently translated at 10.3% (12 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/hi/
2026-01-12 06:51:38 +01:00
green 768213438a Translated using Weblate (Japanese)
Currently translated at 100.0% (1759 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-01-12 06:51:38 +01:00
Kim Nøglegaard 00e0eb6f8a Translated using Weblate (Norwegian Bokmål)
Currently translated at 2.8% (11 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/
2026-01-12 06:51:37 +01:00
Kim Nøglegaard 3abea13d79 Translated using Weblate (Norwegian Bokmål)
Currently translated at 1.8% (33 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nb_NO/
2026-01-12 06:51:36 +01:00
noobhjy 67ab7f0c1e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1757 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-01-12 06:51:35 +01:00
Kim Nøglegaard b38e8e27b2 Translated using Weblate (Norwegian Bokmål)
Currently translated at 2.5% (10 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/
2026-01-12 06:51:34 +01:00
Kim Nøglegaard a70c103b93 Translated using Weblate (Norwegian Bokmål)
Currently translated at 1.4% (26 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nb_NO/
2026-01-12 06:51:34 +01:00
Yatrik Patel b83c3090f7 Translated using Weblate (Hindi)
Currently translated at 1.0% (19 of 1759 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-01-12 06:51:33 +01:00
Bart Louwers 59ee38e7a6 Translated using Weblate (Dutch)
Currently translated at 23.0% (35 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nl/
2026-01-12 06:51:32 +01:00
Bart Louwers 890fe5929b Translated using Weblate (Dutch)
Currently translated at 4.2% (75 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nl/
2026-01-12 06:51:31 +01:00
nvno 56cc312565 Translated using Weblate (Portuguese)
Currently translated at 91.5% (1603 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pt/
2026-01-12 06:51:30 +01:00
Elian Doran 9dfd015a27 fix(deps): update dependency preact to v10.28.2 [security] (#8301) 2026-01-12 07:51:22 +02:00
Elian Doran 04618dcdab fix(deps): update dependency react-window to v2.2.5 (#8353) 2026-01-12 07:50:09 +02:00
Elian Doran f408e15c32 chore(deps): update dependency typedoc to v0.28.16 (#8352) 2026-01-12 07:49:20 +02:00
renovate[bot] 00e60c147c fix(deps): update dependency react-window to v2.2.5 2026-01-12 00:58:16 +00:00
renovate[bot] ad6fd64226 chore(deps): update dependency typedoc to v0.28.16 2026-01-12 00:57:28 +00:00
renovate[bot] 6595fd9c10 chore(deps): update dependency happy-dom to v20.1.0 2026-01-11 14:43:06 +00:00
Elian Doran a268507b80 chore(deps): update dependency ws to v8.19.0 (#8276) 2026-01-11 16:41:38 +02:00
renovate[bot] 9e847f67f2 chore(deps): update dependency ws to v8.19.0 2026-01-11 14:27:35 +00:00
renovate[bot] df4992122b fix(deps): update dependency preact to v10.28.2 [security] 2026-01-11 14:26:08 +00:00
Elian Doran a325ba7b8f chore(deps): update dependency @types/node to v24.10.7 (#8347) 2026-01-11 16:23:31 +02:00
Elian Doran 26e64ae7d0 Lightweight: Bootstrap index EJS (#8283) 2026-01-11 15:45:25 +02:00
renovate[bot] d793774f51 chore(deps): update dependency @types/node to v24.10.7 2026-01-11 13:32:09 +00:00
Elian Doran c5f2b5c177 fix(deps): update dependency react-window to v2.2.4 (#8275) 2026-01-11 15:31:53 +02:00
Elian Doran b2f782f2a3 fix(deps): update dependency node-html-parser to v7.0.2 (#8306) 2026-01-11 15:31:24 +02:00
Elian Doran b65b31ca4d chore(deps): update dependency vite to v7.3.1 (#8304) 2026-01-11 15:29:23 +02:00
Elian Doran 64827dcdcf fix(deps): update dependency mind-elixir to v5.5.0 (#8278) 2026-01-11 15:28:42 +02:00
Elian Doran 96d5d07087 chore(deps): update dependency @redocly/cli to v2.14.4 (#8316) 2026-01-11 15:27:44 +02:00
Elian Doran ffd0f4727a chore(deps): update typescript-eslint monorepo to v8.52.0 (#8277) 2026-01-11 15:26:38 +02:00
Elian Doran e33cd86d30 chore(deps): update dependency supertest to v7.2.2 (#8291) 2026-01-11 15:25:53 +02:00
Elian Doran fc85c23a67 fix(deps): update dependency @codemirror/view to v6.39.9 (#8289) 2026-01-11 15:25:17 +02:00
Elian Doran a55c8fb210 chore(deps): update dependency sax to v1.4.4 (#8317) 2026-01-11 15:24:44 +02:00
Elian Doran 19b865a5b4 chore(deps): update dependency express-openid-connect to v2.19.4 (#8327) 2026-01-11 15:24:10 +02:00
Elian Doran 61d90dda36 chore(deps): update dependency @smithy/middleware-retry to v4.4.19 (#8303) 2026-01-11 14:15:07 +02:00
Elian Doran a4b1f06475 chore(deps): update dependency eslint-plugin-playwright to v2.4.1 (#8326) 2026-01-11 14:14:10 +02:00
Elian Doran 49704ea928 chore(deps): update dependency openai to v6.16.0 (#8328) 2026-01-11 14:13:32 +02:00
Elian Doran a73df362d5 fix(deps): update dependency better-sqlite3 to v12.6.0 (#8349) 2026-01-11 14:13:06 +02:00
renovate[bot] f42010e22a fix(deps): update dependency mind-elixir to v5.5.0 2026-01-11 10:28:35 +00:00
renovate[bot] 0b85e0fe2d fix(deps): update dependency better-sqlite3 to v12.6.0 2026-01-11 10:27:40 +00:00
renovate[bot] c7f0720237 chore(deps): update typescript-eslint monorepo to v8.52.0 2026-01-11 10:26:45 +00:00
renovate[bot] cc3031eaad chore(deps): update dependency supertest to v7.2.2 2026-01-11 10:25:13 +00:00
renovate[bot] 2850c7808c chore(deps): update dependency openai to v6.16.0 2026-01-11 10:24:24 +00:00
renovate[bot] 30bbcd866f fix(deps): update dependency react-window to v2.2.4 2026-01-11 10:22:53 +00:00
renovate[bot] 55b6f322ac fix(deps): update dependency node-html-parser to v7.0.2 2026-01-11 10:21:22 +00:00
Elian Doran 4518c9bb99 Merge remote-tracking branch 'origin/main' into lightweight/bootstrap_ejs 2026-01-11 12:20:17 +02:00
renovate[bot] c551c863f4 fix(deps): update dependency @codemirror/view to v6.39.9 2026-01-11 10:19:51 +00:00
renovate[bot] 3c25f8b4f3 chore(deps): update dependency vite to v7.3.1 2026-01-11 10:19:14 +00:00
renovate[bot] d3c37556c3 chore(deps): update dependency sax to v1.4.4 2026-01-11 10:18:42 +00:00
renovate[bot] cf60fcd6c1 chore(deps): update dependency express-openid-connect to v2.19.4 2026-01-11 10:18:10 +00:00
renovate[bot] 97075ff91b chore(deps): update dependency eslint-plugin-playwright to v2.4.1 2026-01-11 10:17:37 +00:00
renovate[bot] ce57a43d90 chore(deps): update dependency @smithy/middleware-retry to v4.4.19 2026-01-11 10:15:52 +00:00
renovate[bot] 33485369c3 chore(deps): update dependency @redocly/cli to v2.14.4 2026-01-11 10:15:00 +00:00
Elian Doran 7fcd93a61b e2e(server): fix broken e2e test after MathTex integration 2026-01-11 11:55:49 +02:00
Elian Doran 3d4b84c7c4 e2e(server): format file 2026-01-11 11:49:49 +02:00
Elian Doran 61eb4017dd Vite performance improvement (#8345) 2026-01-11 11:28:36 +02:00
Elian Doran b4df4aaf0d chore(client): address requested changes 2026-01-11 11:06:59 +02:00
Elian Doran 244294f699 Revert "chore(scripts): remove analyze-perf"
This reverts commit 94d4a307cf.
2026-01-11 10:55:47 +02:00
Elian Doran d609ee028e chore(client): get rid of workspace projects from optimizeDeps 2026-01-11 10:55:13 +02:00
Elian Doran 8dc8b046fb chore(client): reintroduce live refresh 2026-01-11 00:55:42 +02:00
Elian Doran 349203e300 chore(client): remove dependency to @preact/preset-vite 2026-01-11 00:35:11 +02:00
Elian Doran 83a8f07998 chore(client): change vite config 2026-01-11 00:33:40 +02:00
Elian Doran 94d4a307cf chore(scripts): remove analyze-perf 2026-01-11 00:21:38 +02:00
Elian Doran 2e35e0a830 chore(client): re-enable source maps 2026-01-11 00:21:32 +02:00
Elian Doran ecdb819067 chore(scripts): address requested changes 2026-01-11 00:11:13 +02:00
Elian Doran e2cf0c6e3e chore(client): disable preact preset-vite 2026-01-10 23:27:14 +02:00
Elian Doran 5dd600a291 chore(client): shared config 2026-01-10 23:09:51 +02:00
Elian Doran df1beb1ffb chore(client): set up LightningCSS 2026-01-10 23:04:04 +02:00
Elian Doran 7773059ac0 chore(client): optimize babel 2026-01-10 22:40:20 +02:00
Elian Doran a238fc16b2 chore(client): add more optimize deps 2026-01-10 22:26:01 +02:00
Elian Doran e298f5ea6f chore(client): optimize dependencies more aggressively 2026-01-10 22:12:41 +02:00
Elian Doran a5512267c1 feat(ckeditor5): lazy-load premium features 2026-01-10 21:54:35 +02:00
Elian Doran f503c4ca6c feat(ckeditor5-math): use dynamic import to reduce loading time 2026-01-10 21:49:16 +02:00
Elian Doran c834c01c8e chore(scripts): improve performance analysis script by timing out earlier 2026-01-10 21:48:27 +02:00
Elian Doran 1f72ab9593 chore(scripts): spawn process automatically 2026-01-10 21:20:13 +02:00
Elian Doran c7d446f4aa chore(scripts): display time in seconds 2026-01-10 21:13:34 +02:00
Elian Doran fb1530423d chore(scripts): add more categories to analyze performance 2026-01-10 21:12:35 +02:00
Elian Doran 545464efee chore(scripts): add a script to anlayze performance logs 2026-01-10 21:10:56 +02:00
Elian Doran 29d0223fd1 chore(server): address requested changes 2026-01-10 20:45:03 +02:00
Elian Doran 00852277f2 fix(server): some routes not working on prod 2026-01-10 20:43:43 +02:00
Elian Doran edfe23d88c fix(server): server-side images not served in dev mode 2026-01-10 19:58:05 +02:00
Elian Doran 2b8a7a28d9 Merge remote-tracking branch 'origin/main' into lightweight/bootstrap_ejs 2026-01-10 19:51:05 +02:00
Elian Doran 7f29480237 Revert "refactor(client): get rid of runtime in favor of bootstrap script"
This reverts commit 2e845a9faa.
2026-01-10 19:51:03 +02:00
Elian Doran 61ac482946 Revert "chore(server): remove runtime from login"
This reverts commit 455edbfb5d.
2026-01-10 19:48:14 +02:00
Elian Doran de6a6cbb07 feat(tree): open notes in new window from tree (#8269) 2026-01-10 19:37:12 +02:00
Elian Doran 2dcb003909 chore(deps): update pnpm to v10.28.0 (#8329) 2026-01-10 19:36:34 +02:00
Elian Doran d5c934a518 add logseq to supported protocols (#8320) 2026-01-10 19:36:03 +02:00
Elian Doran 779909837c Allow hiding children from tree (especially for collections) (#8335) 2026-01-10 18:32:41 +02:00
Elian Doran a4cb375a0f test(client): fix broken tests 2026-01-10 18:21:38 +02:00
Elian Doran e2da8c28ca fix(tree): spotlighted note has + button & insert child context menu 2026-01-10 18:21:16 +02:00
Elian Doran 7808848f05 Translations update from Hosted Weblate (#8339) 2026-01-10 18:02:07 +02:00
Elian Doran 7c05109645 Merge remote-tracking branch 'origin/main' into feature/hide_from_tree 2026-01-10 18:01:05 +02:00
Hosted Weblate 8f9e89b73b Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-10 15:59:25 +00:00
Elian Doran 861a61a4d8 Tree performance improvement (#8274) 2026-01-10 17:59:08 +02:00
Elian Doran 52d4083814 chore(tree): address requested changes 2026-01-10 17:46:45 +02:00
Elian Doran 0272189b22 fix(tree): performance issue due to batch update 2026-01-10 17:32:06 +02:00
Elian Doran ddba0e823c fix(tree): tree is updated on note content updates 2026-01-10 17:32:02 +02:00
Elian Doran be81acb9e7 feat(tree): respect motion settings instead of always disabling animation 2026-01-10 16:11:15 +02:00
Elian Doran 3bb97385c9 fix(client): a case where inheritance boolean is not correct 2026-01-10 13:17:44 +02:00
Elian Doran a72cec0494 chore(client): address a few requested changes 2026-01-10 13:06:13 +02:00
Elian Doran cb02198c6f docs(user): document hiding the subtree 2026-01-10 12:57:11 +02:00
Elian Doran 298d438230 Merge branch 'feature/tree_performance_improvement' into feature/hide_from_tree 2026-01-10 12:34:44 +02:00
Elian Doran cb2f7932dd Merge remote-tracking branch 'origin/main' into feature/tree_performance_improvement 2026-01-10 12:34:26 +02:00
Elian Doran 3354bd669f fix(client/tree): toast displayed when doing operations outside of tree 2026-01-10 12:32:55 +02:00
Elian Doran 8ad779be66 fix(client/load_results): component ID not preserved for attributes & branches 2026-01-10 12:26:08 +02:00
Elian Doran f462034868 fix(client/tree): toast not appearing when inserted via paste 2026-01-10 11:55:49 +02:00
Elian Doran 26c25cd4cd fix(client): edge case not handled when parent note overrides to false 2026-01-10 11:25:00 +02:00
Elian Doran 6398830c2d test(client): attribute toggling 2026-01-10 11:15:21 +02:00
Elian Doran 0b065063f2 refactor(client): use same logic for setting boolean with inheritance 2026-01-10 10:37:19 +02:00
Elian Doran a3a9de6fdd feat(collections): add setting to hide subtree 2026-01-10 10:34:06 +02:00
Elian Doran d77d30f29e fix(note_tree): subtree hidden cannot be overridden through inheritance 2026-01-10 10:17:09 +02:00
Elian Doran 5cabc6379d fix(note_tree): not reacting to changes in subtreeHidden 2026-01-10 10:14:15 +02:00
Elian Doran af537e6a48 feat(tree): add option to hide or show subtree 2026-01-10 10:08:50 +02:00
Elian Doran faf3797663 feat(tree): disable insert child note if subnotes are hidden 2026-01-10 09:57:09 +02:00
Elian Doran db57f3ff62 feat(tree): add tooltip when moving into hidden subtree 2026-01-10 09:53:23 +02:00
Elian Doran 0f77caad69 feat(tree): hide items dragged into a subtreeHidden 2026-01-10 09:40:19 +02:00
renovate[bot] 751b91e1b8 chore(deps): update pnpm to v10.28.0 2026-01-10 00:41:10 +00:00
Elian Doran 968a17fbfb fix(tree): alignment of note count badge 2026-01-10 00:55:33 +02:00
Elian Doran 712e87b39f feat(tree): distinguish spotlighted node 2026-01-10 00:52:11 +02:00
Elian Doran 0b40b42315 fix(tree): random exceptions when switching between two spotlighted notes 2026-01-10 00:42:24 +02:00
Elian Doran 62996b1162 feat(tree): remove spotlighted note after switching to another one 2026-01-10 00:38:28 +02:00
Elian Doran b67ccc6091 feat(tree): basic spotlight support for hidden child 2026-01-10 00:15:59 +02:00
Elian Doran 211d2dcf99 feat(collections): hide children by default for some collection types 2026-01-09 20:06:49 +02:00
Elian Doran ee52e16a75 feat(tree): add title for subnote count badge 2026-01-09 19:15:57 +02:00
Elian Doran 0c27bd25fa chore(tree): align child count to the right 2026-01-09 17:03:56 +02:00
Elian Doran b6a6e78d01 feat(tree): hide add button if subtree is hidden 2026-01-09 16:59:55 +02:00
Elian Doran 92e6a29e70 feat(tree): display number of children if subtree is hidden 2026-01-09 16:54:04 +02:00
Elian Doran acc8cee7cd Merge remote-tracking branch 'origin/feature/tree_performance_improvement' into feature/hide_from_tree 2026-01-09 16:38:56 +02:00
Elian Doran afefbe154b feat(tree): hide arrow if children are hidden 2026-01-09 16:37:11 +02:00
SngAbc 83fa55b7d9 Merge branch 'main' into feat/tree/new_window 2026-01-09 22:35:30 +08:00
Elian Doran 4f6c10d995 feat(tree): allow hiding child notes via attribute 2026-01-09 16:32:55 +02:00
Elian Doran ed972d2601 e2e(server): math popup fails on CI 2026-01-09 12:13:39 +02:00
Elian Doran 6b57ee5654 e2e(server): flakiness in tab_bar 2026-01-09 11:54:16 +02:00
contributor e469af1ca5 add logseq to supported protocols 2026-01-09 11:51:49 +02:00
Elian Doran 6d41f076c2 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-01-09 11:25:26 +02:00
Elian Doran 8cff591746 fix(toc): unnecessary <ol> when no children 2026-01-09 11:25:24 +02:00
Elian Doran b3ccf89094 Translations update from Hosted Weblate (#8315) 2026-01-09 00:06:09 +02:00
Ulices d31c6b1627 Translated using Weblate (Spanish)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/es/
2026-01-08 23:01:53 +01:00
Yatrik Patel 1481356d1f Translated using Weblate (Hindi)
Currently translated at 36.8% (56 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-08 23:01:52 +01:00
Ulices a54661fd0a Translated using Weblate (Spanish)
Currently translated at 93.8% (1643 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-08 23:01:49 +01:00
Elian Doran ae4a3f10ae fix(toc): equations not rendered in new layout 2026-01-08 21:26:04 +02:00
Elian Doran fe3160e7a1 e2e(server): adapt tests to new layout directly 2026-01-08 20:32:54 +02:00
Elian Doran 66659d4786 e2e(server): flaky test in PDF 2026-01-08 20:11:21 +02:00
Elian Doran 0b25b09040 feat(ci): check version consistency before releasing 2026-01-08 19:49:29 +02:00
Elian Doran 0d41cc2660 Merge remote-tracking branch 'origin/stable' 2026-01-08 19:42:10 +02:00
Elian Doran f5e8822718 chore(release): prepare for v0.101.3
Checks / main (push) Failing after 2s
/ Check Docker build (Dockerfile) (push) Failing after 44s
/ Check Docker build (Dockerfile.alpine) (push) Failing after 38s
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Has been skipped
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Has been skipped
/ Merge manifest lists (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Failing after 35s
Release / Make Electron (x64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Failing after 35s
Release / Build Linux Server (x64, ubuntu-22.04) (push) Failing after 35s
Release / Make Electron (arm64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been cancelled
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-24.04-arm name:linux shell:bash]) (push) Has been cancelled
Release / Make Electron (arm64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been cancelled
Release / Make Electron (x64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been cancelled
Release / Make Electron (x64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been cancelled
Release / Build Linux Server (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Release / Publish release (push) Has been cancelled
2026-01-08 19:38:21 +02:00
Elian Doran bdc220ec12 Merge remote-tracking branch 'origin/stable' 2026-01-08 18:19:16 +02:00
Elian Doran 3eb68e5271 Stable fixes (#8310) 2026-01-08 18:16:55 +02:00
Elian Doran 521952ebcc test(client): remove debug statements
Checks / main (push) Failing after 2s
/ Check Docker build (Dockerfile) (push) Failing after 44s
/ Check Docker build (Dockerfile.alpine) (push) Failing after 46s
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Has been skipped
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Has been skipped
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Has been skipped
/ Merge manifest lists (push) Has been skipped
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Failing after 41s
Release / Make Electron (x64, map[forge_platform:linux image:ubuntu-22.04 name:linux shell:bash]) (push) Failing after 36s
Release / Build Linux Server (x64, ubuntu-22.04) (push) Failing after 29s
Release / Make Electron (arm64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been cancelled
Release / Make Electron (arm64, map[forge_platform:linux image:ubuntu-24.04-arm name:linux shell:bash]) (push) Has been cancelled
Release / Make Electron (arm64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been cancelled
Release / Make Electron (x64, map[forge_platform:darwin image:macos-latest name:macos shell:bash]) (push) Has been cancelled
Release / Make Electron (x64, map[forge_platform:win32 image:win-signing name:windows shell:cmd]) (push) Has been cancelled
Release / Build Linux Server (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Release / Publish release (push) Has been cancelled
2026-01-08 18:10:00 +02:00
Elian Doran 034091a696 docs(release): prepare for v0.101.2 2026-01-08 18:08:34 +02:00
Elian Doran ae881101d8 fix(note_list): archived notes displayed in empty grid card (closes #8184) 2026-01-08 17:23:40 +02:00
Elian Doran b11a30c49c fix(launcher_bar): crashing if there is a non-launcher note (closes #8218) 2026-01-08 16:55:51 +02:00
Elian Doran 4625efda7f fix(note_list): skip rendering of included notes for performance (closes #8017) 2026-01-08 16:50:27 +02:00
Elian Doran 3c168d750d fix(client): cycle in include causing infinite loop (closes #8294) 2026-01-08 16:44:35 +02:00
Elian Doran 5cc7b259ce fix(client): max content width not preserved (closes #8065) 2026-01-08 15:59:57 +02:00
Elian Doran f7ae046b20 fix(mermaid): error container not scrollable (closes #8299) 2026-01-08 15:52:19 +02:00
Elian Doran 02f43d6239 fix(mermaid): code not scrollable (closes #8299) 2026-01-08 15:33:16 +02:00
Elian Doran 53e1fa1047 fix(mermaid) diagrams not saving content and SVG attachment (#8220) 2026-01-08 15:22:07 +02:00
Elian Doran b1dc0e234f fix(popupEditor): fix closing of popupEditor when inserting note link (#8224) 2026-01-08 15:21:23 +02:00
Elian Doran 9d380dd828 fix(sql_console): cannot copy table data (#8268) 2026-01-08 15:20:36 +02:00
Elian Doran 1f77540dbb fix(text): Title is not selected when creating a note via the launcher (#8292) 2026-01-08 15:20:14 +02:00
Elian Doran 455edbfb5d chore(server): remove runtime from login 2026-01-07 23:31:28 +02:00
Elian Doran 7288b66d27 chore(client): address requested changes 2026-01-07 23:04:34 +02:00
Elian Doran 3d72ec80bb refactor(client): get rid of any 2026-01-07 22:01:35 +02:00
Elian Doran f2a74df511 feat(client): use hashes for assets 2026-01-07 21:49:05 +02:00
Elian Doran 68c6052d10 chore(client): remove useless manual chunk 2026-01-07 21:39:35 +02:00
Elian Doran c4edb56bd4 fix(server): not starting due to serving of assets 2026-01-07 21:38:44 +02:00
Elian Doran b6a3fe7cfb chore(client): get rid of translation issue 2026-01-07 21:18:09 +02:00
Elian Doran 7a088c5b7d refactor(client): handle everything in bootstrap 2026-01-07 21:11:38 +02:00
Elian Doran 2e845a9faa refactor(client): get rid of runtime in favor of bootstrap script 2026-01-07 21:08:19 +02:00
Elian Doran ac3ae0dbbe chore(client): fix type issues 2026-01-07 21:02:27 +02:00
Elian Doran a3fc13de3a refactor(client): extract bootstrap script into separate file 2026-01-07 21:00:40 +02:00
Elian Doran ee6cbc710c chore(server): remove font size globs 2026-01-07 20:52:27 +02:00
Elian Doran 18d701525e fix(client): print broken due to lack of query forwarding
; Conflicts:
;	apps/client/src/index.html
2026-01-07 20:52:04 +02:00
Elian Doran e47c848ec8 chore(server): reintegrate mobile layout 2026-01-07 20:51:33 +02:00
Elian Doran cd64548299 fix(client): load custom fonts 2026-01-07 20:51:29 +02:00
Elian Doran 8645d053de fix(client): ckeditor theme not loaded properly 2026-01-07 20:51:24 +02:00
Elian Doran 91f2dabed7 Merge remote-tracking branch 'origin/main' into lightweight/bootstrap_ejs
; Conflicts:
;	apps/client/src/widgets/layout/StatusBar.tsx
2026-01-07 20:51:17 +02:00
Elian Doran 716612680d Translations update from Hosted Weblate (#8293) 2026-01-07 19:35:42 +02:00
Michael 3800fb85eb Translated using Weblate (German)
Currently translated at 95.4% (1672 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-07 18:32:56 +01:00
Rafa Osuna d807984be4 Translated using Weblate (Spanish)
Currently translated at 92.7% (1624 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-01-07 18:32:56 +01:00
Giovi 2c92ae8898 Translated using Weblate (Italian)
Currently translated at 100.0% (1751 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2026-01-07 18:32:55 +01:00
Argann Bonneau 3d8cbc81c4 Translated using Weblate (French)
Currently translated at 94.5% (1656 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2026-01-07 18:32:54 +01:00
Yatrik Patel d747c94450 Translated using Weblate (Hindi)
Currently translated at 3.4% (4 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/hi/
2026-01-07 18:32:53 +01:00
pythaac a627d1f96e Translated using Weblate (Korean)
Currently translated at 76.3% (116 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/
2026-01-07 18:32:53 +01:00
Yatrik Patel 869db5e478 Translated using Weblate (Hindi)
Currently translated at 0.9% (17 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-01-07 18:32:52 +01:00
Yatrik Patel 73e94d385e Translated using Weblate (Hindi)
Currently translated at 5.9% (23 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-07 18:32:51 +01:00
Kim Nøglegaard 8f4ebeb335 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-07 18:32:51 +01:00
Yatrik Patel 263ee864be Translated using Weblate (Hindi)
Currently translated at 9.2% (14 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-07 18:32:50 +01:00
Elian Doran f078732624 fix(text): Title is not selected when creating a note via the launcher (#8292) 2026-01-07 19:32:37 +02:00
SngAbc fac1f6b16c fix(text): Title is not focused when creating a note via the launcher
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-07 10:33:17 +08:00
SiriusXT a5841c1423 fix(text): Title is not focused when creating a note via the launcher 2026-01-07 10:11:24 +08:00
Elian Doran aaca18003d Translations update from Hosted Weblate (#8279) 2026-01-06 13:54:24 +02:00
Kim Nøglegaard 5ec521b024 Translated using Weblate (Norwegian Bokmål)
Currently translated at 68.4% (104 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-06 04:01:53 +01:00
Yatrik Patel b3c0be7559 Translated using Weblate (Hindi)
Currently translated at 3.0% (12 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-06 04:01:51 +01:00
Máté Zsólya d52b735b99 Translated using Weblate (Hungarian)
Currently translated at 1.9% (34 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hu/
2026-01-06 04:01:49 +01:00
Yatrik Patel 639b1f2863 Translated using Weblate (Hindi)
Currently translated at 5.9% (9 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-06 04:01:47 +01:00
Elian Doran aff4f7e010 feat(tree): disable animation for performance 2026-01-06 01:34:02 +02:00
Elian Doran dec4dafba6 feat(tree): avoid async 2026-01-06 01:26:56 +02:00
Elian Doran d0cdcfc32c refactor(tree): use loop for mini optimisation 2026-01-06 01:21:43 +02:00
Elian Doran 0867b81c7a feat(tree): use template for create child to improve performance 2026-01-06 01:13:31 +02:00
Elian Doran bde6068f2d refactor(tree): extract enchance title into separate method 2026-01-06 01:07:37 +02:00
Elian Doran 47fd2affa4 feat(tree): use direct DOM manipulation instead of jQuery 2026-01-06 00:59:32 +02:00
perfectra1n 2dd541e1d0 fix(tests): update data_dir tests for new EEXIST graceful handling 2026-01-05 14:34:52 -08:00
Elian Doran 7f2cc885fe Feat(math): Improve legacy math input with MathLive (#7842) 2026-01-06 00:12:38 +02:00
Elian Doran 19a365a370 fix(sql_console): cannot copy table data (#8268) 2026-01-06 00:10:11 +02:00
Elian Doran 9a50da328e chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.9 (#8265) 2026-01-05 23:53:05 +02:00
Elian Doran 181e36a7c1 Merge remote-tracking branch 'origin/main' into Meinzzzz/main
; Conflicts:
;	.gitignore
2026-01-05 23:46:12 +02:00
Elian Doran 178508d245 Merge branch 'main' into fix/sql_select_text 2026-01-05 23:43:29 +02:00
Elian Doran 8157ef5e74 Merge branch 'main' into feat/show-helpful-permission-error-output 2026-01-05 23:43:20 +02:00
Elian Doran d132d084cf Merge branch 'main' into renovate/rollup-plugin-webpack-stats-2.x 2026-01-05 23:43:06 +02:00
Elian Doran 494b55d685 fix(ckeditor): missing pl locale 2026-01-05 23:39:36 +02:00
perfectra1n 0185dd0d18 feat(ux): implement suggestions from gemini just to make sure 2026-01-05 11:55:14 -08:00
perfectra1n 142ed42d90 feat(ux): show more helpful output when users encounter permissions issues within the data directory 2026-01-05 11:38:18 -08:00
Elian Doran 51513d3779 fix(status_bar): count not refreshing properly after change 2026-01-05 21:03:32 +02:00
SiriusXT 5b95b9875b feat(tree): open notes in new window from tree 2026-01-05 19:27:44 +08:00
Elian Doran 688d197472 chore(client): set up body classes 2026-01-05 11:55:51 +02:00
Elian Doran b745fb476e chore(client): get icons to load 2026-01-05 11:50:21 +02:00
Elian Doran 047b5a85d2 chore(client): load stylesheets 2026-01-05 11:48:19 +02:00
Elian Doran 370a0c6a05 feat(client): get desktop to start 2026-01-05 11:40:53 +02:00
Elian Doran 0d4558fee1 feat(client): get glob to be populated 2026-01-05 11:37:03 +02:00
Elian Doran 76526e0a96 feat(server): bootstrap route 2026-01-05 11:22:10 +02:00
Elian Doran 70093e0a7d feat(server): render static Vite HTML 2026-01-05 11:07:40 +02:00
SngAbc 458398f2ca Merge branch 'main' into fix/sql_select_text 2026-01-05 13:51:45 +08:00
SngAbc 7a6cc4f51e fix(sql_console): cannot copy table data
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-05 12:16:16 +08:00
SiriusXT f4ccce7de5 fix(sql_console): cannot copy table data 2026-01-05 11:23:50 +08:00
renovate[bot] f8b5417d6c chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.9 2026-01-05 01:03:52 +00:00
Elian Doran 13ce8cf498 fix(note_list): the note list cannot open the context menu. (#8254) 2026-01-04 23:49:25 +02:00
Elian Doran 6c2afc086c feat(i18n): add Polish 2026-01-04 23:38:51 +02:00
Elian Doran 93d50712a9 chore(scripts): fix typecheck issue 2026-01-04 23:38:51 +02:00
Elian Doran ed91a44928 feat(scripts): check translation coverage 2026-01-04 23:38:50 +02:00
Elian Doran cd10e66fbb chore(scripts): build scripts not working properly on Windows 2026-01-04 23:38:50 +02:00
Elian Doran d6aa126fcc Translations update from Hosted Weblate (#8264) 2026-01-04 22:34:38 +02:00
noobhjy 3308c7bdf4 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1751 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-01-04 20:01:53 +00:00
Francis C. 56341a1a73 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1751 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-01-04 20:01:52 +00:00
green 0857e1a536 Translated using Weblate (Japanese)
Currently translated at 100.0% (1751 of 1751 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-01-04 20:01:50 +00:00
Kim Nøglegaard 5d6b25a29e Translated using Weblate (Norwegian Bokmål)
Currently translated at 57.2% (87 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-04 20:01:49 +00:00
Elian Doran 5bc15a5448 PDFjs v1 final tweaks (#8256) 2026-01-04 21:21:51 +02:00
Elian Doran 51a19d0544 docs(user): add missing slug 2026-01-04 21:11:13 +02:00
Elian Doran fb4e912ed0 chore(pdfjs): address requested changes 2026-01-04 21:08:39 +02:00
Elian Doran 20c2652013 chore(server): set up environment for starting Nginx proxy with subdir 2026-01-04 20:33:54 +02:00
Elian Doran 971d6ad9e3 chore(pdfjs): use version-based system for cache busting 2026-01-04 20:06:11 +02:00
Elian Doran 757fc7a7fe chore(pdfjs): embed sandbox file 2026-01-04 18:50:40 +02:00
Elian Doran e4d0a4554a feat(client/note_list): use built-in PDF viewer 2026-01-04 18:40:17 +02:00
Elian Doran dfab7dbc4b fix(note_list): missing margin in button 2026-01-04 18:39:23 +02:00
Elian Doran 0039f4c155 feat(pdfjs): replace blob instead of creating a new revision every time 2026-01-04 17:25:56 +02:00
Elian Doran 23f7dc63b8 feat(pdfjs): enable editing features only if in main editor 2026-01-04 17:11:16 +02:00
Elian Doran e485b75a44 fix(pdfjs): saves as soon as document is opened 2026-01-04 17:06:41 +02:00
Elian Doran dbef57d329 chore(deps): update dependency webdriverio to v9.23.0 (#8258) 2026-01-04 10:36:47 +02:00
SiriusXT c650441655 Merge branch 'main' into fix/note_list 2026-01-04 10:49:46 +08:00
SiriusXT e573a8af77 chore(note_grid): remove unused tree import 2026-01-04 10:48:45 +08:00
SiriusXT b23252d046 fix(note_grid): the note grid cannot open the context menu 2026-01-04 10:25:43 +08:00
renovate[bot] 2f7448dbd4 chore(deps): update dependency webdriverio to v9.23.0 2026-01-04 02:13:34 +00:00
Adorian Doran 9bf4aa2968 readme: update screenshot 2026-01-04 00:28:00 +02:00
Elian Doran d78a7bad3b feat(import/markdown): handle bash as sh 2026-01-03 23:30:38 +02:00
Elian Doran b812177e78 docs(user): add spellcheck=false to inline code 2026-01-03 23:28:28 +02:00
Elian Doran 4710a6af41 feat(export/markdown): add spellcheck=false to inline code 2026-01-03 23:19:58 +02:00
Elian Doran a613980ea4 docs(user): add missing jsx / HTML code blocks 2026-01-03 22:56:23 +02:00
Elian Doran 20ae1f844b feat(markdown): support html, jsx in code blocks 2026-01-03 22:44:48 +02:00
Elian Doran 69511134e5 refactor(client/pdf): handle blob request on client side 2026-01-03 20:54:28 +02:00
Elian Doran 75952563e4 Translations update from Hosted Weblate (#8255) 2026-01-03 20:31:35 +02:00
Elian Doran 21cf5e1df7 chore(client/pdf): use custom spaced update hook 2026-01-03 20:29:54 +02:00
Hosted Weblate 9df5505989 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2026-01-03 18:03:22 +00:00
Kim Nøglegaard 1809d59193 Translated using Weblate (Norwegian Bokmål)
Currently translated at 43.4% (66 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-03 18:03:20 +00:00
Francis C. feaa54d660 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1745 of 1745 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-01-03 18:03:20 +00:00
noobhjy c94bd41162 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1743 of 1745 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-01-03 18:03:19 +00:00
Elian Doran f1f3e66537 Save indicator (#8249) 2026-01-03 20:03:12 +02:00
Elian Doran 80363cdc73 chore(client/save_indicator): fix some spacing issues 2026-01-03 19:53:46 +02:00
Elian Doran 02e08fdf12 chore(client/save_indicator): address requested changes 2026-01-03 19:47:33 +02:00
Elian Doran 42283b2469 doc(user): mention the save status indicator 2026-01-03 19:40:39 +02:00
Elian Doran d3b598a5b2 fix(client/save_indicator): not visible on light theme 2026-01-03 19:39:16 +02:00
Elian Doran 0dd3a03c6b chore(client): fix type issue 2026-01-03 19:30:52 +02:00
Elian Doran 2144888447 Merge remote-tracking branch 'origin/main' into feature/save_indicator 2026-01-03 19:24:51 +02:00
Elian Doran b2549066dc PDF.js refinement (#8247) 2026-01-03 19:24:28 +02:00
Elian Doran cd1f3aa9a7 chore(client): address self-review 2026-01-03 10:05:44 +02:00
Elian Doran 1674401342 Merge remote-tracking branch 'origin/main' into feature/pdfjs_refinement 2026-01-03 09:57:42 +02:00
Elian Doran 7ba8dbbf6e fix(deps): update dependency mind-elixir to v5.4.0 (#8253) 2026-01-03 09:53:36 +02:00
Elian Doran ad27d9ed0e chore(deps): update dependency @redocly/cli to v2.14.3 (#8252) 2026-01-03 09:53:03 +02:00
renovate[bot] 482d2f9624 fix(deps): update dependency mind-elixir to v5.4.0 2026-01-03 01:46:19 +00:00
renovate[bot] 824ef704d4 chore(deps): update dependency @redocly/cli to v2.14.3 2026-01-03 01:45:28 +00:00
Adorian Doran 58b73cfc7d Merge branch 'main' of https://github.com/TriliumNext/Trilium 2026-01-03 02:25:07 +02:00
Adorian Doran 0465fea2db style/pdf viewer: improve appearance 2026-01-03 02:24:59 +02:00
Elian Doran 39b75e3561 Translations update from Hosted Weblate (#8248) 2026-01-03 00:10:42 +02:00
Elian Doran 2933db9b16 feat(save_indicator): fade out after a few seconds 2026-01-02 23:53:14 +02:00
Kim Nøglegaard d94914046b Translated using Weblate (Norwegian Bokmål)
Currently translated at 23.0% (35 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-02 21:51:24 +00:00
Kim Nøglegaard 9cf384b14b Translated using Weblate (Norwegian Bokmål)
Currently translated at 20.3% (31 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-02 21:51:23 +00:00
Kim Nøglegaard 614a2f0ccb Translated using Weblate (Norwegian Bokmål)
Currently translated at 3.2% (5 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/
2026-01-02 21:51:23 +00:00
Yatrik Patel 5cecc72384 Translated using Weblate (Hindi)
Currently translated at 2.8% (11 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-02 21:51:22 +00:00
Yatrik Patel 3ad37fb602 Translated using Weblate (Hindi)
Currently translated at 5.2% (8 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-02 21:51:21 +00:00
noobhjy 42b048c2bf Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.8% (1742 of 1745 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-01-02 21:51:21 +00:00
Kim Nøglegaard a01bf3dfa1 Translated using Weblate (Norwegian Bokmål)
Currently translated at 2.0% (8 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/
2026-01-02 21:51:20 +00:00
Yatrik Patel ad60988553 Translated using Weblate (Hindi)
Currently translated at 0.7% (13 of 1745 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-01-02 21:51:19 +00:00
green c9ae4e4cc6 Translated using Weblate (Japanese)
Currently translated at 100.0% (1745 of 1745 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-01-02 21:51:18 +00:00
Kim Nøglegaard d2639851d5 Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.6% (11 of 1745 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nb_NO/
2026-01-02 21:51:18 +00:00
Hosted Weblate 8dc5f9cfa4 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-02 21:51:17 +00:00
Adorian Doran d99a408e04 style/pdf viewer: add support for background effects 2026-01-02 23:51:07 +02:00
Elian Doran 5f14861682 feat(save_indicator): indicate errors 2026-01-02 23:22:33 +02:00
Adorian Doran 8f8493f3ec client/note split: allow enabling background effects according to the MIME type 2026-01-02 23:06:08 +02:00
Elian Doran 62af66b5ae feat(save_indicator): report saving and saved states 2026-01-02 22:53:18 +02:00
Elian Doran e8d1fa7447 chore(save_indicator): basic infrastructure to display state 2026-01-02 22:44:29 +02:00
Adorian Doran ee03871405 style/pdf viewer: remove irrelevant elements 2026-01-02 22:28:33 +02:00
Elian Doran 345378d97f feat(save_indicator): add tooltip for each of the states 2026-01-02 22:14:58 +02:00
Elian Doran 07a463ee52 feat(save_indicator): improve display of some states 2026-01-02 22:10:41 +02:00
Elian Doran 3157047160 chore(save_indicator): add opacity 2026-01-02 22:00:25 +02:00
Elian Doran a1dda3b578 chore(save_indicator): prepare icon and title 2026-01-02 21:58:13 +02:00
Elian Doran e161ffce57 fix(client/pdf): not always focusing on click 2026-01-02 21:20:29 +02:00
Adorian Doran 0c1859dc43 style/note splits: highlight the active split only in a multi-split view 2026-01-02 20:59:51 +02:00
Elian Doran e4dcc0f768 chore(client): fix typecheck issues 2026-01-02 20:45:28 +02:00
Elian Doran 74ab591214 chore(package): automatically build share theme & PDF viewer 2026-01-02 20:38:18 +02:00
Elian Doran 7bd7996893 feat(revisions): use customized PDF viewer 2026-01-02 20:17:27 +02:00
Elian Doran 505ae4eeb5 chore(revisions): remove "Preview" heading 2026-01-02 20:02:39 +02:00
Elian Doran 951d6d3ce3 feat(revisions): display PDF preview for revisions 2026-01-02 20:02:13 +02:00
Elian Doran 5ff7764699 style(revisions): prevent revision list from overflowing 2026-01-02 19:49:20 +02:00
Elian Doran 0d74998625 style(revisions): prevent buttons from overflowing 2026-01-02 19:47:07 +02:00
Elian Doran 29b70a12bd feat(revisions): display video preview for revisions 2026-01-02 19:44:23 +02:00
Elian Doran d84150e97b feat(revisions): display audio preview for revisions 2026-01-02 19:21:51 +02:00
Elian Doran 2b2ef4251f style(revisions): minor spacing adjustments to file table 2026-01-02 18:44:06 +02:00
Elian Doran 2840ea0f38 chore(revisions): display a message when a preview is not available 2026-01-02 18:42:05 +02:00
Elian Doran 542d485267 fix(revisions): missing meta information about revisions 2026-01-02 18:34:45 +02:00
Elian Doran cdd4fbc81d refactor(client): fix lint warnings in revisions modal 2026-01-02 18:23:04 +02:00
Elian Doran bfdddab0a0 refactor(client): format revisions dialog 2026-01-02 18:20:55 +02:00
Elian Doran 44d1d01105 fix(pdfjs): preferences don't account for ntxId or noteId 2026-01-02 18:08:25 +02:00
Elian Doran 120bb09171 fix(pdfjs): saving doesn't account for ntxId or noteId 2026-01-02 17:57:43 +02:00
Elian Doran b7af99c671 refactor(pdfjs): add type safety for messages 2026-01-02 17:57:28 +02:00
Elian Doran 869e0b3973 docs(user): mention updates to the new PDF functions 2026-01-02 12:49:30 +02:00
Elian Doran b68613dee4 feat(share): integrate custom pdf.js viewer 2026-01-02 12:13:31 +02:00
Elian Doran ce0f32e7d5 chore(client/pdfjs): remove open file 2026-01-02 11:44:33 +02:00
Elian Doran 78bc9b59c2 chore(client/pdfjs): remove download button from toolbar 2026-01-02 11:41:58 +02:00
Elian Doran 23cf3d2923 feat(client/pdfjs): rewrite download button 2026-01-02 11:40:32 +02:00
Elian Doran 335136f3a3 fix(deps): update dependency preact-render-to-string to v6.6.5 (#8240) 2026-01-02 11:13:42 +02:00
renovate[bot] 11dd7aef09 fix(deps): update dependency preact-render-to-string to v6.6.5 2026-01-02 09:09:55 +00:00
Elian Doran 2d1769e2f9 fix: toggling right pane visibility incorrectly affects all windows (#8226) 2026-01-02 11:08:27 +02:00
Elian Doran 21e26147b0 fix(deps): update dependency react-i18next to v16.5.1 (#8241) 2026-01-02 11:06:38 +02:00
Elian Doran ba301f8c12 fix(deps): update dependency globals to v17 (#8242) 2026-01-02 11:06:13 +02:00
SiriusXT 3420374649 fix: toggling right pane visibility incorrectly affects all windows 2026-01-02 11:31:59 +08:00
SiriusXT 644d3a181f fix: toggling right pane visibility incorrectly affects all windows 2026-01-02 11:08:49 +08:00
SiriusXT 4be3011a8a fix: toggling right pane visibility incorrectly affects all windows 2026-01-02 10:30:15 +08:00
SiriusXT 5aa0a956dd fix: toggling right pane visibility incorrectly affects all windows 2026-01-02 10:25:34 +08:00
renovate[bot] 7fdb1bdce8 fix(deps): update dependency globals to v17 2026-01-02 01:53:43 +00:00
renovate[bot] 57c6cef2bd fix(deps): update dependency react-i18next to v16.5.1 2026-01-02 01:52:49 +00:00
Elian Doran e5599adca1 feat(share): Add support for shareJs in static website export (#8173) 2026-01-02 00:39:36 +02:00
Elian Doran ab392ffb7f Translations update from Hosted Weblate (#8239) 2026-01-02 00:38:23 +02:00
Hosted Weblate 7585d4b258 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-01-01 22:37:01 +00:00
Elian Doran ff82d9c38c Clean up Vite (#8238) 2026-01-02 00:36:46 +02:00
Elian Doran 920fde69bb chore: add missing space from imports 2026-01-02 00:21:50 +02:00
Elian Doran 053812e5f0 e2e(server): wrong import 2026-01-02 00:14:07 +02:00
Elian Doran c2f59c4b6c test(server): type error 2026-01-02 00:07:04 +02:00
Elian Doran 06980fe9b5 chore(tsconfig): fix empty type 2026-01-02 00:04:52 +02:00
Elian Doran 3f5616f1fc chore(vitest): fix node:test import 2026-01-02 00:03:45 +02:00
Elian Doran b6af3b70b0 test(client): increase a timeout for local run 2026-01-01 23:57:43 +02:00
Elian Doran d8e4547988 chore(vitest): get rid of warning about number of projects 2026-01-01 23:56:26 +02:00
Elian Doran 34f649155e chore(vite): remove vite/global for other projects 2026-01-01 23:44:17 +02:00
Elian Doran 11779fe3e3 chore(vite): remove vite/global for commons 2026-01-01 23:43:59 +02:00
Elian Doran 032cde67b0 chore(vite): remove vite/global for express-partial-content 2026-01-01 23:42:02 +02:00
Elian Doran 229636a796 chore(vite): remove vite/global for server 2026-01-01 23:39:53 +02:00
Elian Doran da9c9ac346 chore(vite): remove vite/importMeta from spec types 2026-01-01 23:34:39 +02:00
Elian Doran 3fecc4c648 chore(vite): remove vite/client from spec types 2026-01-01 23:33:21 +02:00
Elian Doran 98cefcf77b fix(desktop/pdfjs): not working due to build script 2026-01-01 23:13:21 +02:00
Elian Doran 413ee81ffa Translations update from Hosted Weblate (#8234) 2026-01-01 22:51:03 +02:00
Yatrik Patel 578ca8785e Translated using Weblate (Hindi)
Currently translated at 0.5% (10 of 1740 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-01-01 20:49:31 +00:00
Yatrik Patel da4112c078 Translated using Weblate (Hindi)
Currently translated at 2.0% (8 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-01 20:49:30 +00:00
Yatrik Patel 704c7c881d Translated using Weblate (Hindi)
Currently translated at 4.6% (7 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-01 20:49:29 +00:00
Elian Doran 63b6abdb9d PDF.js sidebar experiments for new layout (#8212) 2026-01-01 22:49:15 +02:00
Elian Doran 2e936a3d5c test(pdfjs): disable for now as there are no tests 2026-01-01 22:31:49 +02:00
Elian Doran 606574e18e chore(pdjs): address self-review 2026-01-01 22:15:40 +02:00
Elian Doran 1021879167 chore(client/pdfjs): add some missing translations 2026-01-01 22:15:31 +02:00
Elian Doran dc4aa9c607 feat(ui): implement tooltips for share icons and clone icons (#8211) 2026-01-01 21:13:01 +02:00
Elian Doran b2c3d78773 Fix excessive noteContext calls (#8233) 2026-01-01 21:09:39 +02:00
Elian Doran 8d3a0b5295 test(pdfjs): replace beforeAll with beforeEach 2026-01-01 21:06:03 +02:00
lzinga 9879d07bec fix(widget): remove redundant note context update in useLegacyWidget 2026-01-01 11:05:30 -08:00
Elian Doran 7bfce851e7 fix(mermaid) diagrams not saving content and SVG attachment (#8220) 2026-01-01 20:58:56 +02:00
Elian Doran 34e81881ec fix(popupEditor): fix closing of popupEditor when inserting note link (#8224) 2026-01-01 20:56:04 +02:00
Lucas 0143d6c60d Merge branch 'TriliumNext:main' into fix/layout-calls 2026-01-01 10:55:25 -08:00
Elian Doran 267c2bc907 Translations update from Hosted Weblate (#8231) 2026-01-01 19:25:36 +02:00
Yatrik Patel 316f27d88c Translated using Weblate (Hindi)
Currently translated at 0.1% (2 of 1736 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/hi/
2026-01-01 17:39:40 +01:00
Yatrik Patel 452b56f470 Translated using Weblate (Hindi)
Currently translated at 2.6% (4 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/
2026-01-01 17:39:40 +01:00
Jan Klass 43aeaa4455 Translated using Weblate (German)
Currently translated at 96.1% (1669 of 1736 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-01-01 17:39:40 +01:00
Yatrik Patel 08b7a6985e Translated using Weblate (Hindi)
Currently translated at 1.0% (4 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/
2026-01-01 17:39:40 +01:00
dirlligafu 4bbd8e28c1 Translated using Weblate (French)
Currently translated at 95.3% (1656 of 1736 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2026-01-01 17:39:40 +01:00
Yatrik Patel fcf4c09389 Translated using Weblate (Hindi)
Currently translated at 1.7% (2 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/hi/
2026-01-01 17:39:40 +01:00
Elian Doran 2c323cbe80 fix(client): color with uppercase causing exception (closes #8232) 2026-01-01 18:39:31 +02:00
Elian Doran 7ec7b6bd7b chore(pdfjs): manage requested changes 2026-01-01 12:36:33 +02:00
Elian Doran b2378f2a53 test(server/pdf): move beforeAll 2026-01-01 12:19:51 +02:00
Elian Doran 8bf8d85bb7 test(server/pdf): switching to another note 2026-01-01 11:23:24 +02:00
Elian Doran 676173e895 test(server/pdf): layer listing works 2026-01-01 11:06:29 +02:00
Elian Doran d8649c87e0 test(server/pdf): attachment listing works 2026-01-01 01:06:26 +02:00
Elian Doran b9456ca466 test(server/pdf): basic page navigation test 2026-01-01 00:35:39 +02:00
Elian Doran cfccbb8927 test(server/pdf): basic table of contents test 2025-12-31 23:40:32 +02:00
Elian Doran a18578362a Merge remote-tracking branch 'origin/main' into feature/pdfjs_sidebar_experiments 2025-12-31 22:55:37 +02:00
Elian Doran 2f9f94dee0 fix(server): pdfjs not available in dist 2025-12-31 22:46:55 +02:00
Elian Doran c84e45ddee test(pdfjs): set up basic vitest 2025-12-31 21:18:27 +02:00
Lucas ea558d8c9d Merge branch 'TriliumNext:main' into fix/layout-calls 2025-12-31 07:33:11 -08:00
lzinga b936a35b63 fix(widget): prevent unnecessary refresh by checking note context change 2025-12-31 07:31:22 -08:00
Elian Doran b4ef4c2143 chore(pdfjs): fix code scanning issues 2025-12-31 17:27:58 +02:00
Elian Doran 0ff4756ef4 chore(pdfjs): fix typecheck issues 2025-12-31 17:00:56 +02:00
Elian Doran 94204b4739 style(pdf_pages): slight improvement to page layout 2025-12-31 16:45:11 +02:00
Elian Doran bf3a2b768e chore(pdfjs): set proper target origin when posting messages 2025-12-31 16:37:51 +02:00
SiriusXT 5fb7badfb4 fix(rightPane): toggling right pane visibility incorrectly affects all windows 2025-12-31 19:54:31 +08:00
Elian Doran 239d56f9a3 fix(deps): update dependency @codemirror/view to v6.39.8 (#8222) 2025-12-31 10:38:22 +02:00
Elian Doran 9163fc23f4 chore(deps): update dependency @redocly/cli to v2.14.2 (#8221) 2025-12-31 10:37:30 +02:00
Elian Doran d225c28fde chore(deps): update pnpm to v10.27.0 (#8223) 2025-12-31 10:29:28 +02:00
SiriusXT 8a3f02e845 fix(popupEditor): fix closing of popupEditor when inserting note link 2025-12-31 14:12:38 +08:00
renovate[bot] d0dc92c891 chore(deps): update pnpm to v10.27.0 2025-12-31 02:34:03 +00:00
renovate[bot] 8d660f5a2f fix(deps): update dependency @codemirror/view to v6.39.8 2025-12-31 02:33:52 +00:00
renovate[bot] b41b4e77b2 chore(deps): update dependency @redocly/cli to v2.14.2 2025-12-31 02:33:14 +00:00
lzinga 267a37d3bd feat(component): add removeChild method for cleanup of child components
feat(hooks): improve useLegacyWidget cleanup and memoization logic
2025-12-30 13:59:46 -08:00
Lucas 0cf23c7d7c Update apps/client/src/widgets/type_widgets/helpers/SvgSplitEditor.tsx
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-30 11:56:34 -08:00
lzinga a632486229 fix(mermaid) diagrams not saving content and SVG attachment 2025-12-30 11:35:48 -08:00
Elian Doran 64a518a00b chore(deps): update typescript-eslint monorepo to v8.51.0 (#8214) 2025-12-30 12:07:14 +02:00
Elian Doran 2f3a914027 Translations update from Hosted Weblate (#8213) 2025-12-30 12:06:27 +02:00
Elian Doran 7182d32d9c Merge remote-tracking branch 'origin/main' into feature/pdfjs_sidebar_experiments 2025-12-30 11:47:00 +02:00
green 18381c5d32 Translated using Weblate (Japanese)
Currently translated at 100.0% (1736 of 1736 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-12-30 09:00:07 +01:00
Kuzma Simonov 79327073b4 Translated using Weblate (Russian)
Currently translated at 100.0% (1736 of 1736 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-12-30 09:00:06 +01:00
Giovi 018f2fd789 Translated using Weblate (Italian)
Currently translated at 100.0% (1736 of 1736 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2025-12-30 09:00:06 +01:00
noobhjy 3889392aed Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1736 of 1736 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2025-12-30 09:00:05 +01:00
Elian Doran bd976a25f1 style(next): use border for focus instead 2025-12-30 09:59:46 +02:00
Elian Doran 01f05ac6fd fix(pdf): active context not changed when clicking preview 2025-12-30 09:47:02 +02:00
Elian Doran 52292cb5a5 style(next): indicate active note context 2025-12-30 09:31:03 +02:00
perfectra1n c6dd1ba0ca fix(types): resolve typecheck issue with note_tree 2025-12-29 18:25:55 -08:00
renovate[bot] 84f069087c chore(deps): update typescript-eslint monorepo to v8.51.0 2025-12-30 01:05:53 +00:00
Elian Doran 76cfced60f chore(pdfjs): fix partially removed method 2025-12-30 01:43:07 +02:00
Elian Doran 5c2aea0a6b chore: remove LLM generated doc 2025-12-30 01:40:34 +02:00
Elian Doran 7a883c62df Merge remote-tracking branch 'origin/main' into feature/pdfjs_sidebar_experiments 2025-12-30 01:40:03 +02:00
Elian Doran ff97461ff8 PDF.js integration (part I) (#8206) 2025-12-30 01:39:09 +02:00
Elian Doran 51b0eb74a5 chore(pdfjs): address requested changes 2025-12-30 01:37:44 +02:00
Elian Doran 2304407986 chore(pdfjs): address origin concerns 2025-12-30 01:27:05 +02:00
Elian Doran a1ebdc3004 chore(pdfjs): integrate into typecheck 2025-12-30 01:23:19 +02:00
Elian Doran fef30f4bea chore(client): fix typecheck 2025-12-30 01:20:29 +02:00
Elian Doran eee8d9ab7c feat(pdfjs): optionally hide left sidebar 2025-12-30 01:09:45 +02:00
perfectra1n 4f2678d321 feat(ui): implement tooltips for share icons and clone icons
asdf
2025-12-29 14:42:34 -08:00
Elian Doran c473fba628 refactor(right_pane): move PDF-specific components in own dir 2025-12-30 00:17:29 +02:00
Elian Doran 9a9cd8e6a5 feat(right_pane): add count in title for PDF items 2025-12-30 00:16:45 +02:00
Elian Doran f5a89aa81a feat(right_pane): hide PDF attachments/layers when not needed 2025-12-30 00:10:23 +02:00
Elian Doran 3c1beab725 fix(pdf_pages): fix a few type errors 2025-12-30 00:00:03 +02:00
Elian Doran 79f03ad3ac fix(pdf_layers): toggling layers and updating state not working 2025-12-29 23:57:52 +02:00
Elian Doran 574138a1fb refactor(pdf_layers): get layers to show 2025-12-29 23:08:35 +02:00
Elian Doran 6513e2cfca refactor(pdf_attachments): deduplicate font size 2025-12-29 23:04:02 +02:00
Elian Doran 43a749b6a7 feat(right_pane): display attachments 2025-12-29 22:56:06 +02:00
Elian Doran c1d6b3121a fix(pdf_pages): pages not updating between notes 2025-12-29 22:50:48 +02:00
Elian Doran 0d9c8ae4df style(pdf_pages): page numbers within pages 2025-12-29 22:46:20 +02:00
Elian Doran 62d8c089ed chore(pdf_pages): remove logs 2025-12-29 22:43:17 +02:00
Elian Doran 971a76ce11 style(pdf_pages): render in multiple columns 2025-12-29 22:39:38 +02:00
Elian Doran cb33404122 feat(client/right_pane): use intersection observer for performance 2025-12-29 22:36:03 +02:00
Elian Doran bcf72f4624 feat(client/right_pane): display pages 2025-12-29 22:34:36 +02:00
Elian Doran 77ad6950e8 feat(client/right_pane): highlight current heading 2025-12-29 22:11:25 +02:00
Elian Doran e2d29aadca refactor(pdfjs): extract toc logic to separate file 2025-12-29 21:58:11 +02:00
Elian Doran 64ca04ad07 feat(client/right_pane): jump to heading 2025-12-29 21:55:47 +02:00
Elian Doran b6506a9331 chore(client/right_pane): get table of contents to show 2025-12-29 21:49:02 +02:00
Elian Doran fd7222242a chore(pdf): process PDF outline 2025-12-29 21:44:49 +02:00
Elian Doran e36049cd43 chore(client/right_pane): get raw ToC data to show up 2025-12-29 21:44:15 +02:00
Elian Doran 257f6c5994 chore(client/right_pane): inject title into PDF toc sidebar 2025-12-29 21:28:17 +02:00
Elian Doran 9098bfb63a chore(client): prototype implementation to communicate data through note context 2025-12-29 21:26:52 +02:00
Wael Nasreddine 118d22c4ec Merge branch 'main' into static-implement-sharejs 2025-12-29 11:02:07 -08:00
Elian Doran 758df0d85a fix(share): Prevent crashing if candidate note is null (#8164) 2025-12-29 20:43:12 +02:00
Elian Doran 59bbd902fc feat(share): Render JS Frontend files as-is with extension .js (#8172) 2025-12-29 20:41:46 +02:00
Elian Doran d96528dae4 chore(server): fix type error 2025-12-29 20:38:48 +02:00
Elian Doran f3cfa84d1d Merge remote-tracking branch 'origin/main' into static-correct-type 2025-12-29 20:37:05 +02:00
Elian Doran dc2ffa516b Fix: Change /calendar/weeks/{date} to use ISO week format (YYYY-Www) … (#8204) 2025-12-29 20:18:46 +02:00
Elian Doran fffab73061 feat(pdfjs): auto-watch dev 2025-12-29 19:23:56 +02:00
Elian Doran 0a9ce84cf2 feat(client/pdf): respect locale 2025-12-29 19:10:14 +02:00
Elian Doran 07a1734d4b chore(pdfjs): copy locales during build 2025-12-29 19:09:03 +02:00
Elian Doran 6e41d3591d chore(pdfjs): add locales 2025-12-29 19:06:08 +02:00
Elian Doran 4134e5054a fix(client/pdf): not refreshing when uploading new revision 2025-12-29 17:02:22 +02:00
Elian Doran bb374a5ce2 fix(client/pdf): blob reloaded when saving 2025-12-29 16:46:30 +02:00
Elian Doran 359f398afa feat(pdfjs): debounce saving view config 2025-12-29 16:19:21 +02:00
Elian Doran 84425e86e9 feat(client/pdf): filter out view config by fingerprint 2025-12-29 16:15:38 +02:00
Elian Doran ebf725c949 feat(client/pdf): store and restore page position 2025-12-29 15:55:47 +02:00
Elian Doran fc0ea36cf3 chore(pdfjs): first attempt at intercepting store 2025-12-29 14:06:59 +02:00
Elian Doran 7836de3f08 fix(client/pdf): form elements not detected for save 2025-12-29 13:29:04 +02:00
Elian Doran 406232c478 chore(pdfjs): log event bus 2025-12-29 13:23:54 +02:00
Elian Doran 9e0c29496f refactor(pdfjs): use TypeScript for the custom script 2025-12-29 13:14:00 +02:00
Elian Doran 480954ee87 feat(pdfjs): react to dark mode 2025-12-29 12:51:43 +02:00
Elian Doran 94039bd9b1 chore(pdfjs): improve toolbar contrast 2025-12-29 12:40:43 +02:00
Elian Doran 667eaca9f2 feat(pdfjs): improve style to better match Trilium 2025-12-29 12:35:49 +02:00
Elian Doran 446822a7ae chore(client/pdf): inject some CSS variables 2025-12-29 12:21:44 +02:00
Elian Doran f09a3e06f4 refactor(client/pdf): split into own component 2025-12-29 12:01:47 +02:00
Elian Doran 7c4a56f5f2 chore(deps): add missing pdfjs dependency 2025-12-29 11:10:12 +02:00
Elian Doran 08f6a32c34 fix(client/pdfjs): not reacting to all changes 2025-12-29 10:33:57 +02:00
Elian Doran 3e255fa647 feat(client/pdf): add debouncing 2025-12-29 10:15:15 +02:00
Elian Doran c0a90402ef feat(client/pdf): save annotations by uploading new revision 2025-12-29 09:51:54 +02:00
openapphub 37c0f7ec75 Fix: Change /calendar/weeks/{date} to use ISO week format (YYYY-Www) instead of date 2025-12-29 15:44:37 +08:00
Elian Doran 5e42627bce chore(client/pdf): basic reaction to annotations 2025-12-29 02:00:59 +02:00
Elian Doran 41bcf9524a feat(client/pdf): integrate pdf.js 2025-12-29 01:16:56 +02:00
Elian Doran 914cf10911 chore(pdfjs): get icons to show up 2025-12-29 01:11:04 +02:00
Elian Doran 855d4d139d chore(pdfjs): get to actually render something 2025-12-29 01:03:16 +02:00
Elian Doran abb7b0f8c8 feat(server): serve pdfjs over static route 2025-12-29 00:50:59 +02:00
Elian Doran d78ad52662 chore(pdfjs): copy viewer to dist 2025-12-29 00:45:57 +02:00
Elian Doran 25b4bcd311 chore(pdfjs): create empty package 2025-12-29 00:26:37 +02:00
Elian Doran a14eed81f6 Translations update from Hosted Weblate (#8197) 2025-12-28 23:25:34 +02:00
Hosted Weblate 54f51b365a Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2025-12-28 22:19:17 +01:00
Marcelo Nolasco c0e0a712ad Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/pt_BR/
2025-12-28 22:19:16 +01:00
Marcelo Nolasco 3ab5bbae4d Translated using Weblate (Portuguese (Brazil))
Currently translated at 11.2% (13 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/pt_BR/
2025-12-28 22:19:15 +01:00
Marcelo Nolasco cafeb3920a Translated using Weblate (Portuguese (Brazil))
Currently translated at 12.5% (19 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/pt_BR/
2025-12-28 22:19:14 +01:00
MarcelWie fb465b442c Translated using Weblate (German)
Currently translated at 94.3% (1632 of 1730 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2025-12-28 22:19:13 +01:00
Francis C. d3a559a700 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.5% (1722 of 1730 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2025-12-28 22:19:13 +01:00
green 7768003735 Translated using Weblate (Japanese)
Currently translated at 100.0% (1730 of 1730 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-12-28 22:19:12 +01:00
Elian Doran f02b3b48e8 docs(user): add missing share aliases 2025-12-28 23:18:51 +02:00
Elian Doran ba273bb9f4 Custom icon pack (#8190) 2025-12-28 23:09:43 +02:00
Elian Doran 490c539d63 Merge branch 'main' into feature/icon_packs 2025-12-28 23:09:34 +02:00
Elian Doran ebd60519dd fix(note_icon): empty slots appearing when reducing list 2025-12-28 22:59:01 +02:00
Elian Doran 56304a4d71 chore(icon-pack-builder): improve output dir 2025-12-28 22:54:29 +02:00
Elian Doran 32f0f98522 feat(icon-pack-builder): integrate boxicons 3 with brands 2025-12-28 22:53:03 +02:00
Elian Doran b18dd22341 fix(icon-pack-builder): add missing deps 2025-12-28 22:52:54 +02:00
Elian Doran 8eebae0955 chore(scripts): add script to compare the two boxicons 2025-12-28 22:29:51 +02:00
Elian Doran ed229e0578 chore(scripts): update boxicons script to use packs instead of weights 2025-12-28 22:29:42 +02:00
Elian Doran dbfaad6c06 test(server): fix broken test after changes to CSS generation 2025-12-28 21:46:19 +02:00
Elian Doran 6e5176b088 chore(deps): fix dependency 2025-12-28 21:31:10 +02:00
Elian Doran becf4d7426 fix(note_icon): crash when reducing number of items 2025-12-28 21:10:22 +02:00
Elian Doran 082040c6e1 feat(share): display an icon for attachment download 2025-12-28 21:03:30 +02:00
Elian Doran 1ae11ce3a5 fix(export/share): .zip attachment marked as html 2025-12-28 20:52:47 +02:00
Elian Doran cf968b3590 fix(export/share): attachment download links not working 2025-12-28 20:45:33 +02:00
Adorian Doran a3db1ab156 UI fixes (#8200) 2025-12-28 20:36:19 +02:00
Adorian Doran 7440110a44 Merge branch 'feat/ui/fixes' of https://github.com/TriliumNext/Trilium into feat/ui/fixes 2025-12-28 20:31:43 +02:00
Adorian Doran 3638e6b12c style/note title actions: fix an issue identified by gemini-code-assist 2025-12-28 20:31:32 +02:00
Adorian Doran 621ed5b9de Update apps/client/src/widgets/type_widgets/text/EditableText.css
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-28 20:24:24 +02:00
Adorian Doran 1e3135dea0 style/note title actions: fix width for full-width content notes 2025-12-28 20:19:51 +02:00
Elian Doran 8f21c0b34a feat(note_icon): use grid virtualization for listing high performance 2025-12-28 19:46:57 +02:00
Adorian Doran b3feb38369 style/options: properly align the title with the option cards when the content is centered 2025-12-28 19:45:48 +02:00
Adorian Doran 2bf862d5b9 style/note scrolling container: make the alignment of children more consistent 2025-12-28 19:20:46 +02:00
Elian Doran cbb7b4ffea refactor(note_icon): split off into two hooks 2025-12-28 19:20:44 +02:00
Elian Doran b2f496048f feat(icon-pack-builder): add icons to packs 2025-12-28 18:57:32 +02:00
Elian Doran e084bc4c07 feat(icon-pack-builder): add phosphor fill 2025-12-28 18:52:08 +02:00
Elian Doran d9b0660def fix(icon-pack-builder): some phosphor icons not working due to alias 2025-12-28 18:41:54 +02:00
Elian Doran b997452733 feat(icon-pack-builder): integrate phosphor 2025-12-28 18:33:01 +02:00
Elian Doran e699566e62 chore(note_icon): remove ellipsis in placeholder 2025-12-28 18:13:46 +02:00
Elian Doran 2bd83e6285 feat(note_icon): display count and filter in search placeholder 2025-12-28 17:41:11 +02:00
Elian Doran 46e5090445 fix(icon-pack): non-BMP icons not rendering 2025-12-28 17:33:12 +02:00
Elian Doran 035a311e4d feat(icon-pack-builder): save attachment 2025-12-28 17:17:08 +02:00
Elian Doran 850528750c feat(icon-pack-builder): add manifest to zip 2025-12-28 16:56:41 +02:00
Elian Doran 645720a725 feat(icon-pack-builder): build zip without content yet 2025-12-28 16:50:16 +02:00
Elian Doran a6c74449aa feat(icon-pack-builder): generate CSS for mdi 2025-12-28 16:25:21 +02:00
Elian Doran 7f05d9cdff test(client): broken tests after change in icon definition 2025-12-28 15:51:48 +02:00
Elian Doran 02d42dc5ff chore(icon_packs): address requested changes 2025-12-28 15:50:01 +02:00
Elian Doran e730378b27 fix(icon_packs): references to .bx for icon selection 2025-12-28 13:42:45 +02:00
Elian Doran c14d95f561 docs(user): mention icon pack prefix constraints 2025-12-28 12:36:18 +02:00
Elian Doran 13b700e0e5 chore(icon_packs): address requested changes 2025-12-28 12:30:26 +02:00
Elian Doran f849c4b315 chore: fix typecheck 2025-12-28 12:15:43 +02:00
Elian Doran c2c19e8ecd chore(server): address self-review 2025-12-28 12:01:10 +02:00
Elian Doran 12875ec308 chore(deps): update package lock 2025-12-28 11:56:50 +02:00
Elian Doran 5d12d57a22 test(server): fix broken tests after changes 2025-12-28 11:52:49 +02:00
Elian Doran 5cc2296768 chore(server): fix typecheck 2025-12-28 11:46:25 +02:00
Elian Doran 7c1175995f chore(icon_packs): remove prefix from phosphor script 2025-12-28 11:43:37 +02:00
Elian Doran d834cd78a7 docs(user): document icon packs 2025-12-28 11:43:25 +02:00
Adorian Doran 79d2010bfa style/note title actions: properly align when the content is centered 2025-12-28 10:18:50 +02:00
Adorian Doran 3f86c809ce style/note title actions: properly align when the content is centered 2025-12-28 10:12:01 +02:00
Elian Doran 1570ea77d8 chore(icon_packs): integrate prefix as part of the attribute instead of manifest 2025-12-28 09:56:08 +02:00
Elian Doran 99bdd2e433 feat(icon_packs): skip duplicate icon packs 2025-12-28 09:43:33 +02:00
Elian Doran 7646061215 refactor(client): move a bx style to dedicated CSS 2025-12-28 09:43:17 +02:00
Elian Doran 505a985755 fix(mobile): icons missing 2025-12-28 09:28:24 +02:00
Elian Doran e895ea406a chore(client): reintegrate boxicons special class names (e.g. flip) 2025-12-28 09:25:10 +02:00
Elian Doran 8b8a78e949 chore(server): get rid of boxicons CSS import 2025-12-28 02:27:02 +02:00
Elian Doran 1c940ff8a2 fix(icon_packs): integrate boxicons back into share export 2025-12-28 02:24:18 +02:00
Elian Doran 841cb32835 fix(icon_packs): integrate boxicons back into share theme 2025-12-28 01:58:22 +02:00
Elian Doran 61e96f91d0 fix(icon_packs): use right name for boxicons for compatibility 2025-12-28 01:20:01 +02:00
Elian Doran 9f6c07f5cc chore(icon_packs): use builtin boxicons for client 2025-12-28 01:00:45 +02:00
Elian Doran 1efb21c627 feat(export/share): render custom icons 2025-12-27 23:39:27 +02:00
Elian Doran d5b04864c8 chore(export/share): inject font 2025-12-27 23:31:56 +02:00
Elian Doran da28f4505a chore(export/share): inject pack CSS 2025-12-27 23:21:59 +02:00
Elian Doran 5174deac07 fix(status_bar): attribute count displays system links 2025-12-27 23:02:35 +02:00
Elian Doran e2a628fa2f feat(icon_packs): ignore protected notes 2025-12-27 22:50:31 +02:00
Elian Doran 290f488c78 feat(share): ignore unsupported icon packs 2025-12-27 22:09:16 +02:00
Elian Doran b00cb52da5 feat(share): basic support for custom icon packs 2025-12-27 21:58:18 +02:00
Elian Doran c7bb5ff119 feat(attachments): display MIME type 2025-12-27 20:54:14 +02:00
Elian Doran faa069b8a1 feat(note_icon): add message if no results 2025-12-27 20:47:56 +02:00
Elian Doran e57f1e6f23 feat(note_icon): add placeholder for search 2025-12-27 20:45:08 +02:00
Elian Doran 73975ab521 feat(note_icon): use bootstrap tooltip 2025-12-27 20:43:05 +02:00
Elian Doran 761a67f238 feat(note_icon): display icon pack in note title 2025-12-27 20:37:59 +02:00
Elian Doran 736c69816d feat(note_icon): change design for icon reset button 2025-12-27 20:21:10 +02:00
Elian Doran 270339da11 style(next): selector interfering with grouped buttons 2025-12-27 20:16:13 +02:00
Elian Doran aa93bc5492 fix(note_icon): one column short 2025-12-27 19:52:11 +02:00
Elian Doran 0c9c36ea7e fix(note_icon): missing tooltip for filter 2025-12-27 18:14:53 +02:00
Elian Doran af67967502 fix(note_icon): modal not dismissing 2025-12-27 18:11:07 +02:00
Elian Doran 78bec0c782 feat(icon_packs): integrate boxicons JSON 2025-12-27 18:04:16 +02:00
Elian Doran 0c77563672 feat(icon_packs): mark icon packs as unsafe 2025-12-27 18:02:59 +02:00
Elian Doran 241a9e2e7f chore(icon_packs): process boxicons v2 2025-12-27 17:56:12 +02:00
Elian Doran 59b691d670 chore(scripts): process boxicons v3 icons 2025-12-27 00:26:33 +02:00
Elian Doran a6c515aea0 Translations update from Hosted Weblate (#8189) 2025-12-26 23:02:47 +02:00
green 850710926e Translated using Weblate (Japanese)
Currently translated at 100.0% (1730 of 1730 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-12-26 21:50:48 +01:00
noobhjy 904da14895 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1730 of 1730 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2025-12-26 21:50:47 +01:00
Kuzma Simonov 4c5bc3a3d3 Translated using Weblate (Russian)
Currently translated at 100.0% (1730 of 1730 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-12-26 21:50:47 +01:00
Elian Doran ecec661b72 chore(scripts): add icon to process phosphor meta 2025-12-26 22:43:03 +02:00
Elian Doran fb629f7693 feat(note_icon): display note pack icon 2025-12-26 21:14:13 +02:00
Elian Doran 13fff33aa4 feat(icon_packs): use note title isntead of manifest 2025-12-26 21:08:37 +02:00
Elian Doran 8053221b12 chore(note_icon): hide filter if no custom icon packs 2025-12-26 21:01:48 +02:00
Elian Doran ba699f9842 refactor(note_icon): split filter content into a component 2025-12-26 21:01:19 +02:00
Elian Doran eb5ebb53cb fix(icon_list): border-right icon missing 2025-12-26 20:57:10 +02:00
Elian Doran c26357be40 feat(note_icon): allow filtering default icons 2025-12-26 20:49:20 +02:00
Elian Doran db4af96040 feat(note_icon): filter by icon pack 2025-12-26 20:42:19 +02:00
Elian Doran 5cb3983fe0 chore(note_icon): get rid of categories 2025-12-26 20:03:34 +02:00
Elian Doran 92292de0ff chore(client): basic integration of icon packs in icon selector 2025-12-26 19:52:54 +02:00
Elian Doran a26923cc6d fix(icon_pack): listing definitions even if parsing fails 2025-12-26 19:42:23 +02:00
Elian Doran 2c4ac4ba30 fix(server): crashing due to bad icon pack 2025-12-26 19:37:10 +02:00
Elian Doran 254511bfbf chore(icon_pack): switch schema to support multiple terms per icon 2025-12-26 19:25:31 +02:00
Elian Doran e2f6f8a4e4 feat(icon_pack): generate icon registry for client 2025-12-26 19:10:28 +02:00
Elian Doran e346963e76 feat(icon_pack): inject the icon pack into the client 2025-12-26 18:36:36 +02:00
Elian Doran 5f1bdf7264 chore(icon_pack): generate icon declarations 2025-12-26 18:16:33 +02:00
Elian Doran 93a3b29677 chore(icon_pack): generate root declaration 2025-12-26 18:08:26 +02:00
Elian Doran b157cd909c chore(icon_pack): generate src declaration 2025-12-26 18:04:39 +02:00
Elian Doran 2f24703690 chore(icon_pack): generate font face declaration without source 2025-12-26 17:42:44 +02:00
Elian Doran 27efa8844e refactor(server): mark ownerId in AttachmentRow as mandatory 2025-12-26 17:32:28 +02:00
Elian Doran 98de4b6dc3 chore(icon_pack): map ttf 2025-12-26 17:31:35 +02:00
Elian Doran d121de5152 chore(icon_pack): map woff attachment 2025-12-26 17:30:19 +02:00
Elian Doran 5ad7323d03 chore(icon_pack): map woff2 attachment 2025-12-26 17:28:57 +02:00
Elian Doran 183020a4e3 chore(icon_pack): return icon mappings 2025-12-26 16:04:56 +02:00
Elian Doran a56a5fe1f5 feat(icon_pack): check if JSON is parsable 2025-12-26 16:00:21 +02:00
Elian Doran af4fc11a4e docs(release): fix link to new layout 2025-12-26 14:13:52 +02:00
Wael Nasreddine 1d3e971ed7 Merge branch 'static-correct-type' into static-implement-sharejs
* static-correct-type:
  improve the protected note handling
  be loosy and honor startsWith application/javascript
2025-12-25 23:01:30 -08:00
Wael Nasreddine 7e7f3ba78f improve the protected note handling 2025-12-25 23:01:01 -08:00
Wael Nasreddine 03eaebc71c be loosy and honor startsWith application/javascript 2025-12-25 22:54:58 -08:00
Wael Nasreddine 3d1f6c4f91 be loosy and honor startsWith application/javascript 2025-12-25 22:54:14 -08:00
Wael Nasreddine 8368969932 implement the second part of the sharejs 2025-12-25 22:06:30 -08:00
Wael Nasreddine afcd23cb99 add a todo 2025-12-25 22:03:06 -08:00
Wael Nasreddine 94d1181fe8 render js notes as-is 2025-12-25 21:52:35 -08:00
Wael Nasreddine 7e45aaa1da for frontend js files add .js 2025-12-25 21:40:42 -08:00
Wael Nasreddine cb016c4307 Address Gemini's comment 2025-12-25 16:26:58 -08:00
Wael Nasreddine 7c7797d35a fix(share/prev_next): Prevent crashing if candide page is null
When a note is not visible, attempting to export it ends up crashing the
server with this error:

```
TypeError: ejs:193
    191|
    192|                 <% if (hasTree) { %>
 >> 193|                     <%- include("prev_next", { note: note, subRoot: subRoot }) %>
    194|                 <% } %>
    195|             </footer>
    196|         </div>
ejs:1
 >> 1| <%
    2|     // TODO: code cleanup + putting this behind a toggle/attribute
    3|     const previousNote = (() => {
    4|         // If we are at the subRoot, there is no previous
Cannot read properties of undefined (reading 'hasVisibleChildren')
    at eval (eval at compile (/usr/src/app/main.cjs:553:203), <anonymous>:27:26)
    at eval (eval at compile (/usr/src/app/main.cjs:553:203), <anonymous>:34:7)
    at d (/usr/src/app/main.cjs:557:265)
    at g (/usr/src/app/main.cjs:557:251)
    at eval (eval at compile (/usr/src/app/main.cjs:553:203), <anonymous>:293:17)
    at d (/usr/src/app/main.cjs:557:265)
    at as.render (/usr/src/app/main.cjs:532:458)
    at Omr (/usr/src/app/main.cjs:581:109552)
    at Rmr (/usr/src/app/main.cjs:581:107637)
    at $W.prepareContent (/usr/src/app/main.cjs:653:28) {
  path: ''
```

fixes #8002
fixes #8162
2025-12-25 16:11:01 -08:00
meinzzzz 87ab41c80c Fix shift+tab behavior in MathInputView 2025-12-23 18:02:40 +01:00
Meinzzzz d2391f94c0 Fix offline math rendering by bundling local fonts 2025-12-15 21:32:50 +01:00
Meinzzzz 050ddb8c55 Improve css to fix tooltips 2025-12-15 20:17:58 +01:00
Meinzzzz bc23e0984a Undo unnecessary formatting changes 2025-12-14 22:00:56 +01:00
Meinzzzz 07de353207 Adding comments and improving code quality in math input views 2025-12-14 20:21:42 +01:00
Meinzzzz c02491d2e6 Remove unnecessary any casts in math plugin 2025-12-12 23:09:20 +01:00
Meinzzzz a6ede8f905 Improve mathinputview 2025-12-12 21:33:59 +01:00
Meinzzzz 22941a9ce0 Fix sync issues 2025-12-12 19:48:09 +01:00
Meinzzzz 633a09d414 Fix sync bug 2025-12-11 23:06:13 +01:00
Meinzzzz 29f0881c5a Fix clicking issue in Mathfield 2025-12-10 22:44:02 +01:00
Meinzzzz 60debca37b Improve comments 2025-12-10 18:36:34 +01:00
Meinzzzz 30ea81d0fb Improve virtual keyboard logic and fix Tab issues 2025-12-08 22:59:08 +01:00
Meinzzzz b1d92c4fe6 Fix Tab issues 2025-12-08 22:39:12 +01:00
Meinzzzz 70f46de2d8 MathLive virtual keyboard only appears when focusing the mathfield 2025-12-08 20:30:07 +01:00
Meinzzzz f1b2d0b870 Increas Mathfield font size and ensure virtual keyboard appears above CKEditor 2025-12-08 20:22:52 +01:00
Meinzzzz 8a385972fc Close Virtual Keyboard when Mathinput is closed 2025-12-08 18:49:06 +01:00
Meinzzzz 28dd85c1d1 Merge upstream changes and resolve conflicts 2025-12-07 23:51:41 +01:00
meinzzzz 827c8e0e72 Refactor: Combine MathLive and LaTeX inputs into one single component 2025-12-07 23:19:48 +01:00
meinzzzz 162c076a14 Improve MathLive integration and lazy loading 2025-12-02 22:30:37 +01:00
meinzzzz 9386465de7 Added mathrender error class for better error handling in math rendering 2025-12-02 22:29:20 +01:00
meinzzzz acca22f3a1 Improve Synchronization Between Mathlive and rawlatex input 2025-12-02 22:28:16 +01:00
Romain DEP. a1c0314334 chore(sorting): add test cases for previous commit and increase test coverage 2025-11-28 23:28:14 +01:00
Romain DEP. 3ecdcd9ea0 fix(sorting): BC! give precedence to #top notes over #sortFolderFirst 2025-11-28 23:22:20 +01:00
meinzzzz f8d84814e0 Fix differential d problems 2025-11-26 23:02:34 +01:00
meinzzzz c46cf41842 Small improvements 2025-11-26 22:48:57 +01:00
meinzzzz 64ab1c4116 Imrovement for Latex 2025-11-26 22:29:29 +01:00
meinzzzz a6de1041c7 Fix bug in math rendering where old content was not cleared 2025-11-26 21:59:33 +01:00
meinzzzz c8d34e65ea Improve max window size 2025-11-26 21:49:09 +01:00
meinzzzz 51db729546 Improve and simplify Mathfield integration 2025-11-25 23:27:06 +01:00
meinzzzz d2052ad236 Disable mathlive sound effects 2025-11-24 21:51:59 +01:00
meinzzzz 9c4301467f Remove unused icons from ckeditor5-math package 2025-11-24 19:46:04 +01:00
meinzzzz e7355dc0e4 remove gitignore unneccesary changes 2025-11-24 18:43:52 +01:00
meinzzzz 4110fec94f Removed unnecessary declare keyboard 2025-11-24 18:28:59 +01:00
meinzzzz d5e601eae9 Simpliyfied resize logic for math input form and improved css 2025-11-24 17:56:18 +01:00
meinzzzz 4f044c4a57 Use icons form CKEditor5 icons, instead of testing icons. 2025-11-23 22:43:07 +01:00
meinzzzz 5821c350e1 Fixing class property initialization order 2025-11-23 17:58:51 +01:00
meinzzzz edba8188fe Fix dark selection colors in MathLive math-field 2025-11-23 13:44:28 +01:00
meinzzzz 1471a72633 refactor: avoid recursive updates in mathLiveInput by normalizing value before updateing 2025-11-23 13:34:22 +01:00
meinzzzz 56834cb88a Improve MathLive and Raw LaTeX input views to propagate mousedown events 2025-11-23 13:29:26 +01:00
meinzzzz a0f16f9184 Fix typos in mathform.css 2025-11-23 13:09:56 +01:00
meinzzzz de80eb4806 Improve mathform.css styling for better visual integration 2025-11-22 22:42:34 +01:00
meinzzzz 48a4b81fbe remove automated screenshot files 2025-11-22 21:40:55 +01:00
meinzzzz e225794f72 Better window focus handling in MathFormView 2025-11-22 21:35:37 +01:00
meinzzzz 4eef30f8b5 Fix names 2025-11-22 00:20:20 +01:00
meinzzzz 569b09609d Remove mathlive dependency and chunking 2025-11-22 00:01:14 +01:00
meinzzzz 39838c25c2 Fixed chaching problems 2025-11-21 23:50:49 +01:00
meinzzzz 49e90c08a9 Better Names for Math UI Components 2025-11-20 22:45:21 +01:00
meinzzzz e777b06fb8 Math 2025-11-20 18:53:39 +01:00
meinzzzz 497ec2ac74 Merge branch 'main' of https://github.com/Meinzzzz/Trilium-Mathlive 2025-11-20 18:00:18 +01:00
meinzzzz c5d282d203 Mathlive 2025-11-20 00:09:10 +01:00
Elian Doran b9cef158d8 Merge remote-tracking branch 'origin/main' into feat/add-ocr-capabilities 2025-07-31 08:25:30 +03:00
Elian Doran a3a3b3cb5c Merge remote-tracking branch 'origin/main' into renovate/csrf-csrf-4.x 2025-07-26 15:49:50 +03:00
Elian Doran 5ec6141369 feat(ocr): filter out text based on confidence 2025-07-26 14:57:12 +03:00
Elian Doran 55ac1e01f2 chore(ocr): improve ocr search result style 2025-07-26 14:15:45 +03:00
Elian Doran 65b58c3668 feat(ocr): auto-process images only if enabled in settings 2025-07-26 14:12:22 +03:00
Elian Doran 2cb4e5e8dc feat(ocr): run the image operation in the background 2025-07-26 14:07:23 +03:00
Elian Doran 72cea245f1 feat(ocr): automatically process images 2025-07-26 14:00:35 +03:00
Elian Doran 08ca86c68a chore(deps): move workspace dependencies to server 2025-07-26 13:48:28 +03:00
Elian Doran 925c9c1e7b feat(ocr): display OCR text only in search results 2025-07-26 12:55:52 +03:00
Elian Doran 6212ea0304 feat(ocr): display OCR text in search results 2025-07-26 12:41:30 +03:00
Elian Doran f295592134 fix(ocr): search error due to scoring 2025-07-26 12:33:45 +03:00
Elian Doran 69b0973e6d feat(ocr): add a button to trigger an OCR manually 2025-07-26 12:18:20 +03:00
Elian Doran 422d318dac feat(ocr): add an option to display OCR text 2025-07-26 12:08:04 +03:00
Elian Doran c55aa6ee88 refactor(ocr): unnecessary initialization logic 2025-07-26 11:56:48 +03:00
Elian Doran 090b175152 refactor(ocr): deduplicate mime types partially 2025-07-26 11:51:53 +03:00
Elian Doran 11e9b097a2 feat(ocr): basic processing of new files 2025-07-26 11:46:28 +03:00
Elian Doran 2adfc1d32b chore(ci): remove unnecessary change 2025-07-26 11:24:42 +03:00
Elian Doran 99fa5d89e7 Merge remote-tracking branch 'origin/main' into feat/add-ocr-capabilities 2025-07-26 10:33:01 +03:00
perf3ct ca8cbf8ccf feat(ocr): add additional processors for OCR feature 2025-07-16 20:10:56 +00:00
perf3ct 6722d2d266 feat(ocr): implement new language selection form 2025-07-16 20:10:41 +00:00
perf3ct 508cbeaa1b feat(ocr): update this new migration to also add a ocr_last_processed column 2025-07-16 20:10:07 +00:00
perf3ct e040865905 feat(ocr): add officeparser, pdf-parse, and sharp dependencies for ocr 2025-07-16 20:09:41 +00:00
perf3ct a7878dd2c6 Merge branch 'main' into feat/add-ocr-capabilities 2025-07-16 17:54:32 +00:00
Jon Fuller 02980834ad Merge branch 'main' into feat/add-ocr-capabilities 2025-07-15 10:10:47 -07:00
perf3ct 2a8c8871c4 fix(dev): resolve issues with pnpm-lock.yaml 2025-07-14 16:41:02 +00:00
perf3ct 893be24c1d merge main into feature branch 2025-07-14 16:38:22 +00:00
perf3ct 9029f59410 feat(ocr): swap from custom table to using the blobs table, with a new column 2025-07-14 16:15:15 +00:00
Jon Fuller d4aaf4ca9b Merge branch 'develop' into renovate/csrf-csrf-4.x 2025-06-11 12:44:51 -07:00
Jon Fuller 4b5e8d33a6 Update playwright.yml 2025-06-10 15:37:05 -07:00
perf3ct 09196c045f fix(ocr): obviously don't need this migration file anymore 2025-06-10 20:59:17 +00:00
perf3ct 7868ebec1e fix(unit): also fix broken llm test 2025-06-10 20:51:34 +00:00
perf3ct 80a9182f05 feat(unit): ocr tests almost pass... 2025-06-10 20:41:40 +00:00
perf3ct d20b3d854f feat(unit): ocr tests almost pass... 2025-06-10 20:36:52 +00:00
perf3ct f1356228a3 feat(unit): ocr unit tests almost pass 2025-06-10 20:22:31 +00:00
perf3ct a4adc51e50 fix(unit): resolve typecheck errors 2025-06-10 19:48:48 +00:00
perf3ct 864543e4f9 feat(ocr): drop confidence down a little bit 2025-06-10 19:22:46 +00:00
perf3ct 33a549202b fix(package): referenced wrong tesseract.js lol 2025-06-10 19:19:17 +00:00
perf3ct c4a0219b18 feat(ocr): add unit tests, resolve double sent headers, and fix the wonderful tesseract.js path issues 2025-06-10 19:12:50 +00:00
Elian Doran e7450b5143 Merge branch 'develop' into renovate/csrf-csrf-4.x 2025-06-08 14:31:55 +03:00
Elian Doran fd90454eb6 Merge branch 'develop' into renovate/csrf-csrf-4.x 2025-05-17 09:51:02 +03:00
Elian Doran f327b54c0e feat(csrf): use different token to avoid issues with old token 2025-05-16 19:45:32 +03:00
Elian Doran f38105ef05 Merge remote-tracking branch 'origin/develop' into renovate/csrf-csrf-4.x 2025-05-16 19:34:19 +03:00
Elian Doran 6f6041ee7b fix(server): migrate csrf to v4 2025-05-15 20:39:31 +03:00
renovate[bot] 2c1517d259 chore(deps): update dependency csrf-csrf to v4 2025-05-15 16:12:11 +00:00
1866 changed files with 239358 additions and 90378 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
root = true
[*.{js,ts,tsx,css}]
[*.{js,cjs,ts,tsx,css}]
charset = utf-8
end_of_line = lf
indent_size = 4
+20 -3
View File
@@ -21,7 +21,7 @@ runs:
# Certificate setup
- name: Import Apple certificates
if: inputs.os == 'macos'
uses: apple-actions/import-codesign-certs@v6
uses: apple-actions/import-codesign-certs@v7
with:
p12-file-base64: ${{ env.APPLE_APP_CERTIFICATE_BASE64 }}
p12-password: ${{ env.APPLE_APP_CERTIFICATE_PASSWORD }}
@@ -30,7 +30,7 @@ runs:
- name: Install Installer certificate
if: inputs.os == 'macos'
uses: apple-actions/import-codesign-certs@v6
uses: apple-actions/import-codesign-certs@v7
with:
p12-file-base64: ${{ env.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
p12-password: ${{ env.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
@@ -66,12 +66,20 @@ runs:
if: ${{ inputs.os == 'linux' }}
shell: ${{ inputs.shell }}
run: |
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils libfuse2
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
FLATPAK_ARCH=$(if [[ ${{ inputs.arch }} = 'arm64' ]]; then echo 'aarch64'; else echo 'x86_64'; fi)
FLATPAK_VERSION='24.08'
flatpak install --user --no-deps --arch $FLATPAK_ARCH --assumeyes runtime/org.freedesktop.Platform/$FLATPAK_ARCH/$FLATPAK_VERSION runtime/org.freedesktop.Sdk/$FLATPAK_ARCH/$FLATPAK_VERSION org.electronjs.Electron2.BaseApp/$FLATPAK_ARCH/$FLATPAK_VERSION
- name: Install appimagetool
if: ${{ inputs.os == 'linux' }}
shell: ${{ inputs.shell }}
run: |
APPIMAGETOOL_ARCH=$(if [[ ${{ inputs.arch }} = 'arm64' ]]; then echo 'aarch64'; else echo 'x86_64'; fi)
wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${APPIMAGETOOL_ARCH}.AppImage" -O /usr/local/bin/appimagetool
chmod +x /usr/local/bin/appimagetool
- name: Update build info
shell: ${{ inputs.shell }}
run: pnpm run chore:update-build-info
@@ -85,10 +93,19 @@ runs:
APPLE_ID: ${{ env.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
WINDOWS_SIGN_EXECUTABLE: ${{ env.WINDOWS_SIGN_EXECUTABLE }}
WINDOWS_SIGN_ERROR_LOG: ${{ env.WINDOWS_SIGN_ERROR_LOG }}
TRILIUM_ARTIFACT_NAME_HINT: TriliumNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
TARGET_ARCH: ${{ inputs.arch }}
run: pnpm run --filter desktop electron-forge:make --arch=${{ inputs.arch }} --platform=${{ inputs.forge_platform }}
- name: Build AppImage
if: ${{ inputs.os == 'linux' }}
shell: ${{ inputs.shell }}
env:
TRILIUM_ARTIFACT_NAME_HINT: TriliumNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
APPIMAGE_EXTRACT_AND_RUN: "1"
run: bash apps/desktop/scripts/build-appimage.sh ${{ inputs.arch }}
# Add DMG signing step
- name: Sign DMG
if: inputs.os == 'macos'
+1 -1
View File
@@ -8,7 +8,7 @@ inputs:
runs:
using: composite
steps:
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
@@ -55,7 +55,7 @@ runs:
# Post deployment URL as PR comment
- name: Comment PR with Preview URL
if: github.event_name == 'pull_request'
uses: actions/github-script@v8
uses: actions/github-script@v9
env:
COMMENT_BODY: ${{ inputs.comment_body }}
PRODUCTION_URL: ${{ inputs.production_url }}
+1 -1
View File
@@ -69,7 +69,7 @@ runs:
# Post github action comment
- name: Post comment
uses: marocchino/sticky-pull-request-comment@v2
uses: marocchino/sticky-pull-request-comment@v3
if: ${{ steps.bundleSize.outputs.hasDifferences == 'true' }} # post only in case of changes
with:
number: ${{ github.event.pull_request.number }}
+60
View File
@@ -1,5 +1,7 @@
# Trilium Notes - AI Coding Agent Instructions
> **Note**: When updating this file, also update `CLAUDE.md` in the repository root to keep both AI coding assistants in sync.
## Project Overview
Trilium Notes is a hierarchical note-taking application with advanced features like synchronization, scripting, and rich text editing. Built as a TypeScript monorepo using pnpm, it implements a three-layer caching architecture (Becca/Froca/Shaca) with a widget-based UI system and supports extensive user scripting capabilities.
@@ -115,6 +117,24 @@ class MyNoteWidget extends NoteContextAwareWidget {
**Important**: Widgets use jQuery (`this.$widget`) for DOM manipulation. Don't mix React patterns here.
### Reusable Preact Components
Common UI components are available in `apps/client/src/widgets/react/`**always** reuse these instead of writing raw HTML elements or custom implementations:
- `NoItems` - Empty state placeholder with icon and message (use for "no results", "too many items", error states)
- `ActionButton` - Consistent button styling with icon support
- `FormTextBox` - Text input with validation and controlled input handling; `FormTextBoxWithUnit` for inputs with a unit suffix (e.g. "mm", "px")
- `FormSelect` - Dropdown/combobox taking an object array as data
- `Slider` - Range slider with label
- `Checkbox`, `RadioButton` - Form controls
- `CollapsibleSection` - Expandable content sections
**Do not use Bootstrap utility classes** (e.g. `form-control-sm`, `form-select-sm`, `input-group`) on these components — they manage their own styling internally. If you need to adjust sizing or layout, use props provided by the component or CSS custom properties, not Bootstrap overrides.
#### Component Styling
- **Avoid inline styles** — do not use the `style` attribute/prop on JSX elements unless absolutely necessary (e.g. a truly dynamic, computed value that cannot be expressed in CSS). Static layout, sizing, spacing, and visual properties must go in CSS.
- **Per-component CSS files**: each component should have a matching `.css` file (e.g. `my_dialog.tsx``my_dialog.css`), imported at the top of the component file.
- **CSS nesting for scoping**: since CSS modules are not available, scope styles using a root class and native CSS nesting. For example, a dialog with `className="my-dialog"` should have its styles nested under `.modal.my-dialog { … }`.
- **Reuse existing components** instead of building custom markup — prefer `FormTextBox`, `FormTextBoxWithUnit`, `FormSelect`, `Slider`, `Button`, etc. over hand-rolled `<input>`, `<select>`, or `<button>` elements.
## Development Workflow
### Running & Testing
@@ -186,6 +206,14 @@ When adding query parameters to ETAPI endpoints (`apps/server/src/etapi/`), main
**Auth note**: ETAPI uses basic auth with tokens. Internal API endpoints trust the frontend.
### Adding New LLM Tools
Tools are defined using `defineTools()` in `apps/server/src/services/llm/tools/` and automatically registered for both the LLM chat and MCP server.
1. Add the tool definition in the appropriate module (`note_tools.ts`, `attribute_tools.ts`, `hierarchy_tools.ts`) or create a new module
2. Each tool needs: `description`, `inputSchema` (Zod), `execute` function, and optionally `mutates: true` for write operations or `needsContext: true` for tools that need the current note context
3. If creating a new module, wrap tools in `defineTools({...})` and add the registry to `allToolRegistries` in `tools/index.ts`
4. Add a client-side friendly name in `apps/client/src/translations/en/translation.json` under `llm.tools.<tool_name>` — use **imperative tense** (e.g. "Search notes", "Create note", "Get attributes"), not present continuous
### Database Migrations
- Add scripts in `apps/server/src/migrations/YYMMDD_HHMM__description.sql`
- Update schema in `apps/server/src/assets/db/schema.sql`
@@ -213,6 +241,12 @@ When adding query parameters to ETAPI endpoints (`apps/server/src/etapi/`), main
10. **Attribute inheritance can be complex** - When checking for labels/relations, use `note.getOwnedAttribute()` for direct attributes or `note.getAttribute()` for inherited ones. Don't assume attributes are directly on the note.
## MCP Server
- Trilium exposes an MCP (Model Context Protocol) server at `http://localhost:8080/mcp`, configured in `.mcp.json`
- The MCP server is **only available when the Trilium server is running** (`pnpm run server:start`)
- It provides tools for reading, searching, and modifying notes directly from the AI assistant
- Use it to interact with actual note data when developing or debugging note-related features
## TypeScript Configuration
- **Project references**: Monorepo uses TypeScript project references (`tsconfig.json`)
@@ -275,6 +309,12 @@ View types are configured via `#viewType` label (e.g., `#viewType=table`). Each
- Register in `packages/ckeditor5/src/plugins.ts`
- See `ckeditor5-admonition`, `ckeditor5-footnotes`, `ckeditor5-math`, `ckeditor5-mermaid` for examples
### Updating PDF.js
1. Update `pdfjs-dist` version in `packages/pdfjs-viewer/package.json`
2. Run `npx tsx scripts/update-viewer.ts` from that directory
3. Run `pnpm build` to verify success
4. Commit all changes including updated viewer files
### Database Migrations
- Add migration scripts in `apps/server/src/migrations/YYMMDD_HHMM__description.sql`
- Update schema in `apps/server/src/assets/db/schema.sql`
@@ -299,9 +339,29 @@ Trilium provides powerful user scripting capabilities:
- Translation files in `apps/client/src/translations/`
- Use translation system via `t()` function
- Automatic pluralization: Add `_other` suffix to translation keys (e.g., `item` and `item_other` for singular/plural)
- When a translated string contains **interpolated components** (e.g. links, note references) whose order may vary across languages, use `<Trans>` from `react-i18next` instead of `t()`. This lets translators reorder components freely (e.g. `"<Note/> in <Parent/>"` vs `"in <Parent/>, <Note/>"`)
- When adding a new locale, follow the step-by-step guide in `docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Adding a new locale.md`
#### Client vs Server Translation Usage
- **Client-side**: `import { t } from "../services/i18n"` with keys in `apps/client/src/translations/en/translation.json`
- **Server-side**: `import { t } from "i18next"` with keys in `apps/server/src/assets/translations/en/server.json`
- **Interpolation**: Use `{{variable}}` for normal interpolation; use `{{- variable}}` (with hyphen) for **unescaped** interpolation when the value contains special characters like quotes that shouldn't be HTML-escaped
### Storing User Preferences
- **Do not use `localStorage`** for user preferences — Trilium has a synced options system that persists across devices
- To add a new user preference:
1. Add the option type to `OptionDefinitions` in `packages/commons/src/lib/options_interface.ts`
2. Add a default value in `apps/server/src/services/options_init.ts` in the `defaultOptions` array
3. **Whitelist the option** in `apps/server/src/routes/api/options.ts` by adding it to `ALLOWED_OPTIONS` (required for client updates)
4. Use `useTriliumOption("optionName")` hook in React components to read/write the option
- Available hooks: `useTriliumOption` (string), `useTriliumOptionBool`, `useTriliumOptionInt`, `useTriliumOptionJson`
- See `docs/Developer Guide/Developer Guide/Concepts/Options/Creating a new option.md` for detailed documentation
## Testing Conventions
- **Write concise tests**: Group related assertions together in a single test case rather than creating many one-shot tests
- **Extract and test business logic**: When adding pure business logic (e.g., data transformations, migrations, validations), extract it as a separate function and always write unit tests for it
```typescript
// ETAPI test pattern
describe("etapi/feature", () => {
+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Check if PRs have conflicts
uses: eps1lon/actions-label-merge-conflict@v3
if: github.repository == ${{ vars.REPO_MAIN }}
if: ${{ github.repository == vars.REPO_MAIN }}
with:
dirtyLabel: "merge-conflicts"
repoToken: "${{ secrets.MERGE_CONFLICT_LABEL_PAT }}"
+2 -2
View File
@@ -45,7 +45,7 @@ jobs:
uses: actions/checkout@v6
- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v6
- name: Setup Node.js
uses: actions/setup-node@v6
@@ -67,7 +67,7 @@ jobs:
- name: Deploy
uses: ./.github/actions/deploy-to-cloudflare-pages
if: github.repository == ${{ vars.REPO_MAIN }}
if: ${{ github.repository == vars.REPO_MAIN }}
with:
project_name: "trilium-docs"
comment_body: "📚 Documentation preview is ready"
+42 -11
View File
@@ -1,9 +1,13 @@
name: Dev
on:
push:
branches: [ main ]
branches:
- main
- "release/*"
pull_request:
branches: [ main ]
branches:
- main
- "release/*"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -26,7 +30,7 @@ jobs:
- name: Checkout the repository
uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
@@ -37,8 +41,35 @@ jobs:
- name: Typecheck
run: pnpm typecheck
- name: Run the unit tests
run: pnpm run test:all
- name: Run the client-side tests
run: pnpm run --filter=client test
- name: Upload client test report
uses: actions/upload-artifact@v7
if: always()
with:
name: client-test-report
path: apps/client/test-output/vitest/html/
retention-days: 30
- name: Run the server-side tests
run: pnpm run --filter=server test
- name: Upload server test report
uses: actions/upload-artifact@v7
if: always()
with:
name: server-test-report
path: apps/server/test-output/vitest/html/
retention-days: 30
- name: Run CKEditor e2e tests
run: |
pnpm run --filter=ckeditor5-mermaid test
pnpm run --filter=ckeditor5-math test
- name: Run the rest of the tests
run: pnpm run --filter=\!client --filter=\!server --filter=\!ckeditor5-mermaid --filter=\!ckeditor5-math test
build_docker:
name: Build Docker image
@@ -47,7 +78,7 @@ jobs:
- test_dev
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Update build info
@@ -62,8 +93,8 @@ jobs:
key: ${{ secrets.RELATIVE_CI_CLIENT_KEY }}
- name: Trigger server build
run: pnpm run server:build
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
- uses: docker/setup-buildx-action@v4
- uses: docker/build-push-action@v7
with:
context: apps/server
cache-from: type=gha
@@ -82,7 +113,7 @@ jobs:
- name: Checkout the repository
uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -97,10 +128,10 @@ jobs:
run: echo "TEST_TAG=${TEST_TAG,,}" >> $GITHUB_ENV
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: Build and export to Docker
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: apps/server
file: apps/server/${{ matrix.dockerfile }}
+30
View File
@@ -0,0 +1,30 @@
name: Internationalization
on:
push:
branches:
- "weblate:*"
workflow_dispatch:
pull_request:
paths:
- "apps/client/src/translations/**"
- ".github/workflows/i18n.yml"
permissions:
contents: read
jobs:
i18n-check:
name: Check i18n translations
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
node-version: 24
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Check translations
run: pnpm tsx scripts/translation/check-translation-coverage.ts
+74 -72
View File
@@ -40,9 +40,9 @@ jobs:
run: echo "TEST_TAG=${TEST_TAG,,}" >> $GITHUB_ENV
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
@@ -59,7 +59,7 @@ jobs:
run: pnpm run server:build
- name: Build and export to Docker
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: apps/server
file: apps/server/${{ matrix.dockerfile }}
@@ -86,12 +86,12 @@ jobs:
- name: Upload Playwright trace
if: failure()
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: Playwright trace (${{ matrix.dockerfile }})
path: test-output/playwright/output
- uses: actions/upload-artifact@v6
- uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
name: Playwright report (${{ matrix.dockerfile }})
@@ -142,7 +142,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
@@ -164,11 +164,9 @@ jobs:
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: |
${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}
${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}
images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=tag
@@ -177,28 +175,21 @@ jobs:
latest=false
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: Login to GHCR
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.GHCR_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub
uses: docker/login-action@v3
with:
registry: ${{ env.DOCKERHUB_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: apps/server
file: apps/server/${{ matrix.dockerfile }}
@@ -213,7 +204,7 @@ jobs:
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: digests-${{ env.PLATFORM_PAIR }}-${{ matrix.dockerfile }}
path: /tmp/digests/*
@@ -227,7 +218,7 @@ jobs:
- build
steps:
- name: Download digests
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
path: /tmp/digests
pattern: digests-*
@@ -237,75 +228,86 @@ jobs:
- name: Set TEST_TAG to lowercase
run: echo "TEST_TAG=${TEST_TAG,,}" >> $GITHUB_ENV
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}
${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}
flavor: |
latest=false
- name: Set up crane
uses: imjasonh/setup-crane@v0.5
- name: Login to GHCR
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.GHCR_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.DOCKERHUB_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create manifest list and push
- name: Docker meta
id: meta
uses: docker/metadata-action@v6
with:
images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=tag
type=sha
flavor: |
latest=false
- name: Verify digests exist on GHCR
working-directory: /tmp/digests
run: |
# Extract the branch or tag name from the ref
REF_NAME=$(echo "${GITHUB_REF}" | sed 's/refs\/heads\///' | sed 's/refs\/tags\///')
echo "Verifying all digests are available on GHCR..."
for DIGEST_FILE in *; do
DIGEST="sha256:${DIGEST_FILE}"
echo -n " ${DIGEST}: "
crane manifest "${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@${DIGEST}" > /dev/null
echo "OK"
done
# Create and push the manifest list with both the branch/tag name and the commit SHA
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \
$(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
- name: Create and push multi-arch manifest
working-directory: /tmp/digests
run: |
GHCR_IMAGE="${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}"
DOCKERHUB_IMAGE="${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}"
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \
$(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
# Build -m flags for crane index append from digest files
MANIFEST_ARGS=""
for d in *; do
MANIFEST_ARGS="${MANIFEST_ARGS} -m ${GHCR_IMAGE}@sha256:${d}"
done
# If the ref is a tag, also tag the image as stable as this is part of a 'release'
# and only go in the `if` if there is NOT a `-` in the tag's name, due to tagging of `-alpha`, `-beta`, etc...
# Create multi-arch manifest for each tag from metadata, plus copy to DockerHub
while IFS= read -r TAG; do
echo "Creating manifest: ${TAG}"
crane index append ${MANIFEST_ARGS} -t "${TAG}"
SUFFIX="${TAG#*:}"
echo "Copying to DockerHub: ${DOCKERHUB_IMAGE}:${SUFFIX}"
crane copy "${TAG}" "${DOCKERHUB_IMAGE}:${SUFFIX}"
done <<< "${{ steps.meta.outputs.tags }}"
# For stable releases (tags without hyphens), also create stable + latest
REF_NAME="${GITHUB_REF#refs/tags/}"
if [[ "${GITHUB_REF}" == refs/tags/* && ! "${REF_NAME}" =~ - ]]; then
# First create stable tags
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \
$(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \
$(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
# Small delay to ensure stable tag is fully propagated
sleep 5
# Now update latest tags
docker buildx imagetools create \
-t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \
${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable
docker buildx imagetools create \
-t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \
${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable
echo "Creating stable tags..."
crane index append ${MANIFEST_ARGS} -t "${GHCR_IMAGE}:stable"
crane copy "${GHCR_IMAGE}:stable" "${DOCKERHUB_IMAGE}:stable"
echo "Creating latest tags..."
crane copy "${GHCR_IMAGE}:stable" "${GHCR_IMAGE}:latest"
crane copy "${GHCR_IMAGE}:latest" "${DOCKERHUB_IMAGE}:latest"
fi
- name: Inspect image
- name: Inspect manifests
run: |
docker buildx imagetools inspect ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}
docker buildx imagetools inspect ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}
REF_NAME="${GITHUB_REF#refs/heads/}"
REF_NAME="${REF_NAME#refs/tags/}"
echo "=== GHCR ==="
crane manifest "${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME}"
echo ""
echo "=== DockerHub ==="
crane manifest "${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME}"
+9 -8
View File
@@ -26,7 +26,7 @@ permissions:
jobs:
nightly-electron:
if: github.repository == ${{ vars.REPO_MAIN }}
if: ${{ github.repository == vars.REPO_MAIN }}
name: Deploy nightly
strategy:
fail-fast: false
@@ -42,7 +42,7 @@ jobs:
shell: bash
forge_platform: linux
- name: windows
image: win-signing
image: windows-latest
shell: cmd
forge_platform: win32
# Exclude ARM64 Linux from default matrix to use native runner
@@ -61,7 +61,7 @@ jobs:
runs-on: ${{ matrix.os.image }}
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
@@ -69,6 +69,8 @@ jobs:
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
env:
npm_config_package_import_method: copy
- name: Update nightly version
run: pnpm run chore:ci-update-nightly-version
- name: Run the build
@@ -86,11 +88,10 @@ jobs:
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
WINDOWS_SIGN_EXECUTABLE: ${{ vars.WINDOWS_SIGN_EXECUTABLE }}
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
- name: Publish release
uses: softprops/action-gh-release@v2.5.0
uses: softprops/action-gh-release@v3.0.0
if: ${{ github.event_name != 'pull_request' }}
with:
make_latest: false
@@ -102,14 +103,14 @@ jobs:
name: Nightly Build
- name: Publish artifacts
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
if: ${{ github.event_name == 'pull_request' }}
with:
name: TriliumNotes ${{ matrix.os.name }} ${{ matrix.arch }}
path: apps/desktop/upload
nightly-server:
if: github.repository == ${{ vars.REPO_MAIN }}
if: ${{ github.repository == vars.REPO_MAIN }}
name: Deploy server nightly
strategy:
fail-fast: false
@@ -131,7 +132,7 @@ jobs:
arch: ${{ matrix.arch }}
- name: Publish release
uses: softprops/action-gh-release@v2.5.0
uses: softprops/action-gh-release@v3.0.0
if: ${{ github.event_name != 'pull_request' }}
with:
make_latest: false
+2 -2
View File
@@ -38,7 +38,7 @@ jobs:
filter: tree:0
fetch-depth: 0
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: 24
@@ -77,7 +77,7 @@ jobs:
- name: Upload test report
if: failure()
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: e2e report ${{ matrix.arch }}
path: apps/server-e2e/test-output
+28 -5
View File
@@ -11,8 +11,28 @@ concurrency:
cancel-in-progress: true
jobs:
sanity-check:
name: Sanity Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
node-version: 24
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --filter source --frozen-lockfile --ignore-scripts
- name: Check version consistency
run: pnpm tsx ${{ github.workspace }}/scripts/check-version-consistency.ts ${{ github.ref_name }}
make-electron:
name: Make Electron
needs:
- sanity-check
strategy:
fail-fast: false
matrix:
@@ -46,7 +66,7 @@ jobs:
runs-on: ${{ matrix.os.image }}
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
@@ -70,16 +90,19 @@ jobs:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
WINDOWS_SIGN_EXECUTABLE: ${{ vars.WINDOWS_SIGN_EXECUTABLE }}
WINDOWS_SIGN_ERROR_LOG: ${{ vars.WINDOWS_SIGN_ERROR_LOG }}
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
- name: Upload the artifact
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: release-desktop-${{ matrix.os.name }}-${{ matrix.arch }}
path: apps/desktop/upload/*.*
build_server:
name: Build Linux Server
needs:
- sanity-check
strategy:
fail-fast: false
matrix:
@@ -100,7 +123,7 @@ jobs:
arch: ${{ matrix.arch }}
- name: Upload the artifact
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: release-server-linux-${{ matrix.arch }}
path: upload/*.*
@@ -120,14 +143,14 @@ jobs:
docs/Release Notes
- name: Download all artifacts
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
merge-multiple: true
pattern: release-*
path: upload
- name: Publish stable release
uses: softprops/action-gh-release@v2.5.0
uses: softprops/action-gh-release@v3.0.0
with:
draft: false
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md
+69
View File
@@ -0,0 +1,69 @@
name: Deploy web clipper extension
on:
push:
branches:
- main
paths:
- "apps/web-clipper/**"
tags:
- "web-clipper-v*"
pull_request:
paths:
- "apps/web-clipper/**"
permissions:
contents: write
discussions: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
name: Build web clipper extension
permissions:
contents: read
deployments: write
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
node-version: 24
cache: "pnpm"
- name: Install dependencies
run: pnpm install --filter web-clipper --frozen-lockfile --ignore-scripts
- name: Build the web clipper extension
run: |
pnpm --filter web-clipper zip
pnpm --filter web-clipper zip:firefox
- name: Upload build artifacts
uses: actions/upload-artifact@v7
if: ${{ !startsWith(github.ref, 'refs/tags/web-clipper-v') }}
with:
name: web-clipper-extension
path: apps/web-clipper/.output/*.zip
include-hidden-files: true
if-no-files-found: error
compression-level: 0
- name: Release web clipper extension
uses: softprops/action-gh-release@v3.0.0
if: ${{ startsWith(github.ref, 'refs/tags/web-clipper-v') }}
with:
draft: false
fail_on_unmatched_files: true
files: apps/web-clipper/.output/*.zip
discussion_category_name: Releases
make_latest: false
token: ${{ secrets.RELEASE_PAT }}
+2 -2
View File
@@ -26,7 +26,7 @@ jobs:
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
@@ -34,7 +34,7 @@ jobs:
cache: "pnpm"
- name: Install dependencies
run: pnpm install --filter website --frozen-lockfile
run: pnpm install --filter website --frozen-lockfile --ignore-scripts
- name: Build the website
run: pnpm website:build
+4 -1
View File
@@ -46,8 +46,11 @@ upload
/.direnv
/result
.svelte-kit
# docs
site/
apps/*/coverage
scripts/translation/.language*.json
.claude
.pnpm-store
+116 -2
View File
@@ -1,2 +1,116 @@
zadam <adam.zivner@gmail.com>
zadam <zadam.apps@gmail.com>
# Format: Canonical Name <canonical-email> <commit-email>
# Merges aliases so `git shortlog`, `git log --use-mailmap`, etc. group commits per person.
# Core maintainers
zadam <zadam.apps@gmail.com>
zadam <zadam.apps@gmail.com> <adam.zivner@gmail.com>
zadam <zadam.apps@gmail.com> <adam.zivner@gemalto.com>
Elian Doran <contact@eliandoran.me>
Elian Doran <contact@eliandoran.me> <online@eliandoran.me>
Adorian Doran <adorian@esevo.ro>
Adorian Doran <adorian@esevo.ro> <adoriandoran@gmail.com>
# Contributors with multiple emails / name variants
Panagiotis Papadopoulos <pano_90@gmx.net> <102623907+pano9000@users.noreply.github.com>
Jon Fuller <jonfuller2012@gmail.com>
SiriusXT <1160925501@qq.com>
SiriusXT <1160925501@qq.com> <11609255001@qq.com>
SiriusXT <1160925501@qq.com> <37627919+SiriusXT@users.noreply.github.com>
JYC333 <22962980+JYC333@users.noreply.github.com>
JYC333 <22962980+JYC333@users.noreply.github.com> <yuchuanjin333@gmail.com>
Nriver <6752679+Nriver@users.noreply.github.com>
Francis C. <normitomf@gmail.com>
Francis C. <normitomf@gmail.com> <francistw@users.noreply.github.com>
Thomas Frei <7283497+thfrei@users.noreply.github.com>
hasecilu <hasecilu@tuta.io>
meinzzzz <lukas.geiselhart35@gmail.com>
FliegendeWurst <arne.keller@posteo.de>
FliegendeWurst <arne.keller@posteo.de> <2012gdwu@web.de>
FliegendeWurst <arne.keller@posteo.de> <2012gdwu+github@posteo.de>
MeIchthys <github.com@meichthys.com>
MeIchthys <github.com@meichthys.com> <10717998+meichthys@users.noreply.github.com>
Marcel Wiechmann <marcel.wiechmann@gmail.com>
Marcel Wiechmann <marcel.wiechmann@gmail.com> <github.y3y0w@sl.wiechmann.at>
Tomas Adamek <ad.tomik@seznam.cz>
Tomas Adamek <ad.tomik@seznam.cz> <50672285+Kureii@users.noreply.github.com>
soulsands <407221377@qq.com>
chesspro13 <chesspro13@gmail.com>
sigaloid <69441971+sigaloid@users.noreply.github.com>
Marek Lewandowski <m.lewandowski@cksource.com>
Marek Lewandowski <m.lewandowski@cksource.com> <code@mlewandowski.com>
Marek Lewandowski <m.lewandowski@cksource.com> <mlewand@users.noreply.github.com>
lzinga <lucas.elzinga@outlook.com>
lzinga <lucas.elzinga@outlook.com> <lzinga@users.noreply.github.com>
Sukant Gujar <sukantgujar@yahoo.com>
Matt Wilkie <maphew@gmail.com>
Matt Wilkie <maphew@gmail.com> <matt.wilkie@yukon.ca>
Andreas Haan <andreas.mobil1@googlemail.com>
Potjoe-97 <42873357+Potjoe-97@users.noreply.github.com>
Potjoe-97 <42873357+Potjoe-97@users.noreply.github.com> <giann@LAPTOPT490-GF>
Alex Pietsch <54153428+alexpietsch@users.noreply.github.com>
Laurent Cozic <laurent@cozic.net>
Laurent Cozic <laurent@cozic.net> <laurent22@users.noreply.github.com>
Zexin Yuan <git@yzx9.xyz>
Zexin Yuan <git@yzx9.xyz> <yuan.zx@outlook.com>
hulmgulm <hulmgulm@users.noreply.github.com>
hulmgulm <hulmgulm@users.noreply.github.com> <12165268+hulmgulm@users.noreply.github.com>
hulmgulm <hulmgulm@users.noreply.github.com> <github@hulmgulm.de>
Jules Bertholet <jules.bertholet@gmail.com>
Charles Dagenais <dagenais.charles@gmail.com>
Giulia Ye <yg97.cs@gmail.com>
baddate <37013819+baddate@users.noreply.github.com>
DerVogel101 <128903814+DerVogel101@users.noreply.github.com>
DerVogel101 <128903814+DerVogel101@users.noreply.github.com> <jan.irmer@outlook.de>
Marcello Fuschi <marcellofuschi1@gmail.com>
Jiahao Lee <lijiahao34@live.com>
Dmitry Matveyev <dev@greenfork.me>
Dmitry Matveyev <dev@greenfork.me> <info@greenfork.me>
Grant Zhu <a1065135230@gmail.com>
Sylvain Pasche <sylvain.pasche@gmail.com>
Sylvain Pasche <sylvain.pasche@gmail.com> <spasche@spasche.net>
mm21 <8033134+mm21@users.noreply.github.com>
mm21 <8033134+mm21@users.noreply.github.com> <mm21.dev@gmail.com>
BeatLink <git@beatlink.simplelogin.com>
BeatLink <git@beatlink.simplelogin.com> <github@beatlink.simplelogin.com>
Florian Meißner <161936+Mystler@users.noreply.github.com>
Florian Meißner <161936+Mystler@users.noreply.github.com> <developer@mystler.eu>
+8
View File
@@ -0,0 +1,8 @@
{
"mcpServers": {
"trilium": {
"type": "http",
"url": "http://localhost:8080/mcp"
}
}
}
+1 -1
View File
@@ -1 +1 @@
24.12.0
24.15.0
+57
View File
@@ -0,0 +1,57 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch client (Chrome)",
"request": "launch",
"type": "chrome",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/apps/client"
},
{
"name": "Launch server",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/apps/server/src/main.ts",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/tsx",
"env": {
"NODE_ENV": "development",
"TRILIUM_ENV": "dev",
"TRILIUM_DATA_DIR": "${input:trilium_data_dir}",
"TRILIUM_RESOURCE_DIR": "${workspaceFolder}/apps/server/src"
},
"autoAttachChildProcesses": true,
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": ["<node_internals>/**", "${workspaceFolder}/node_modules/**"]
},
{
"name": "Launch Vitest with current test file",
"type": "node",
"request": "launch",
"autoAttachChildProcesses": true,
"program": "${workspaceFolder}/node_modules/vitest/vitest.mjs",
"args": ["run", "${relativeFile}"],
"smartStep": true,
"console": "integratedTerminal",
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
"cwd": "${workspaceFolder}"
}
],
"compounds": [
{
"name": "Launch client (Chrome) and server",
"configurations": ["Launch server","Launch client (Chrome)"],
"stopAll": true
}
],
"inputs": [
{
"id": "trilium_data_dir",
"type": "promptString",
"description": "Select Trilum Notes data directory",
"default": "${workspaceFolder}/apps/server/data"
}
]
}
+4 -1
View File
@@ -42,5 +42,8 @@
},
"eslint.rules.customizations": [
{ "rule": "*", "severity": "warn" }
],
"cSpell.words": [
"Trilium"
]
}
}
+98
View File
@@ -2,6 +2,8 @@
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
> **Note**: When updating this file, also update `.github/copilot-instructions.md` to keep both AI coding assistants in sync.
## Overview
Trilium Notes is a hierarchical note-taking application with advanced features like synchronization, scripting, and rich text editing. It's built as a TypeScript monorepo using pnpm, with multiple applications and shared packages.
@@ -66,6 +68,24 @@ Frontend uses a widget system (`apps/client/src/widgets/`):
- `RightPanelWidget` - Widgets displayed in the right panel
- Type-specific widgets in `type_widgets/` directory
#### Reusable Preact Components
Common UI components are available in `apps/client/src/widgets/react/`**always** reuse these instead of writing raw HTML elements or custom implementations:
- `NoItems` - Empty state placeholder with icon and message (use for "no results", "too many items", error states)
- `ActionButton` - Consistent button styling with icon support
- `FormTextBox` - Text input with validation and controlled input handling; `FormTextBoxWithUnit` for inputs with a unit suffix (e.g. "mm", "px")
- `FormSelect` - Dropdown/combobox taking an object array as data
- `Slider` - Range slider with label
- `Checkbox`, `RadioButton` - Form controls
- `CollapsibleSection` - Expandable content sections
**Do not use Bootstrap utility classes** (e.g. `form-control-sm`, `form-select-sm`, `input-group`) on these components — they manage their own styling internally. If you need to adjust sizing or layout, use props provided by the component or CSS custom properties, not Bootstrap overrides.
#### Component Styling
- **Avoid inline styles** — do not use the `style` attribute/prop on JSX elements unless absolutely necessary (e.g. a truly dynamic, computed value that cannot be expressed in CSS). Static layout, sizing, spacing, and visual properties must go in CSS.
- **Per-component CSS files**: each component should have a matching `.css` file (e.g. `my_dialog.tsx``my_dialog.css`), imported at the top of the component file.
- **CSS nesting for scoping**: since CSS modules are not available, scope styles using a root class and native CSS nesting. For example, a dialog with `className="my-dialog"` should have its styles nested under `.modal.my-dialog { … }`.
- **Reuse existing components** instead of building custom markup — prefer `FormTextBox`, `FormTextBoxWithUnit`, `FormSelect`, `Slider`, `Button`, etc. over hand-rolled `<input>`, `<select>`, or `<button>` elements.
#### API Architecture
- **Internal API**: REST endpoints in `apps/server/src/routes/api/`
- **ETAPI**: External API for third-party integrations (`apps/server/src/etapi/`)
@@ -108,6 +128,8 @@ Trilium supports multiple note types, each with specialized widgets:
- Client tests can run in parallel
- E2E tests use Playwright for both server and desktop apps
- Build validation tests check artifact integrity
- **Write concise tests**: Group related assertions together in a single test case rather than creating many one-shot tests
- **Extract and test business logic**: When adding pure business logic (e.g., data transformations, migrations, validations), extract it as a separate function and always write unit tests for it
### Scripting System
Trilium provides powerful user scripting capabilities:
@@ -118,6 +140,21 @@ Trilium provides powerful user scripting capabilities:
### Internationalization
- Translation files in `apps/client/src/translations/`
- Supported languages: English, German, Spanish, French, Romanian, Chinese
- **Only add new translation keys to `en/translation.json`** — translations for other languages are managed via Weblate and will be contributed by the community
- Third-party components (e.g., mind-map context menu) should use i18next `t()` for their labels, with the English strings added to `en/translation.json` under a dedicated namespace (e.g., `"mind-map"`)
- When a translated string contains **interpolated components** (e.g. links, note references) whose order may vary across languages, use `<Trans>` from `react-i18next` instead of `t()`. This lets translators reorder components freely (e.g. `"<Note/> in <Parent/>"` vs `"in <Parent/>, <Note/>"`)
- When adding a new locale, follow the step-by-step guide in `docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Adding a new locale.md`
- **Server-side translations** (e.g. hidden subtree titles) go in `apps/server/src/assets/translations/en/server.json`, not in the client `translation.json`
#### Client vs Server Translation Usage
- **Client-side**: `import { t } from "../services/i18n"` with keys in `apps/client/src/translations/en/translation.json`
- **Server-side**: `import { t } from "i18next"` with keys in `apps/server/src/assets/translations/en/server.json`
- **Interpolation**: Use `{{variable}}` for normal interpolation; use `{{- variable}}` (with hyphen) for **unescaped** interpolation when the value contains special characters like quotes that shouldn't be HTML-escaped
### Electron Desktop App
- Desktop entry point: `apps/desktop/src/main.ts`, window management: `apps/server/src/services/window.ts`
- IPC communication: use `electron.ipcMain.on(channel, handler)` on server side, `electron.ipcRenderer.send(channel, data)` on client side
- Electron-only features should check `isElectron()` from `apps/client/src/services/utils.ts` (client) or `utils.isElectron` (server)
### Security Considerations
- Per-note encryption with granular protected sessions
@@ -125,6 +162,26 @@ Trilium provides powerful user scripting capabilities:
- OpenID and TOTP authentication support
- Sanitization of user-generated content
### Client-Side API Restrictions
- **Do not use `crypto.randomUUID()`** or other Web Crypto APIs that require secure contexts - Trilium can run over HTTP, not just HTTPS
- Use `randomString()` from `apps/client/src/services/utils.ts` for generating IDs instead
### Storing User Preferences
- **Do not use `localStorage`** for user preferences — Trilium has a synced options system that persists across devices
- To add a new user preference:
1. Add the option type to `OptionDefinitions` in `packages/commons/src/lib/options_interface.ts`
2. Add a default value in `apps/server/src/services/options_init.ts` in the `defaultOptions` array
3. **Whitelist the option** in `apps/server/src/routes/api/options.ts` by adding it to the `ALLOWED_OPTIONS` array — **without this, the API will reject changes with "Option 'X' is not allowed to be changed"**
4. If the option should be user-editable in the UI, add a control in the appropriate settings component (e.g., `apps/client/src/widgets/type_widgets/options/other.tsx`) and a translation key in `apps/client/src/translations/en/translation.json`
5. Use `useTriliumOption("optionName")` hook in React components to read/write the option
- Available hooks: `useTriliumOption` (string), `useTriliumOptionBool`, `useTriliumOptionInt`, `useTriliumOptionJson`
- See `docs/Developer Guide/Developer Guide/Concepts/Options/Creating a new option.md` for detailed documentation
### Shared Types Policy
- Types shared between client and server belong in `@triliumnext/commons` (`packages/commons/src/lib/`)
- Import shared types directly from `@triliumnext/commons` - do not re-export them from app-specific modules
- Keep app-specific types (e.g., `LlmProvider` for server, `StreamCallbacks` for client) in their respective apps
## Common Development Tasks
### Adding New Note Types
@@ -140,10 +197,51 @@ Trilium provides powerful user scripting capabilities:
- Create new package in `packages/` following existing plugin structure
- Register in `packages/ckeditor5/src/plugins.ts`
### Adding Hidden System Notes
The hidden subtree (`_hidden`) contains system notes with predictable IDs (prefixed with `_`). Defined in `apps/server/src/services/hidden_subtree.ts` via the `HiddenSubtreeItem` interface from `@triliumnext/commons`.
1. Add the note definition to `buildHiddenSubtreeDefinition()` in `apps/server/src/services/hidden_subtree.ts`
2. Add a translation key for the title in `apps/server/src/assets/translations/en/server.json` under `"hidden-subtree"`
3. The note is auto-created on startup by `checkHiddenSubtree()` — uses deterministic IDs so all sync cluster instances generate the same structure
4. Key properties: `id` (must start with `_`), `title`, `type`, `icon` (format: `bx-icon-name` without `bx ` prefix), `attributes`, `children`, `content`
5. Use `enforceAttributes: true` to keep attributes in sync, `enforceBranches: true` for correct placement, `enforceDeleted: true` to remove deprecated notes
6. For launcher bar entries, see `hidden_subtree_launcherbar.ts`; for templates, see `hidden_subtree_templates.ts`
### Writing to Notes from Server Services
- `note.setContent()` requires a CLS (Continuation Local Storage) context — wrap calls in `cls.init(() => { ... })` (from `apps/server/src/services/cls.ts`)
- Operations called from Express routes already have CLS context; standalone services (schedulers, Electron IPC handlers) do not
### Adding New LLM Tools
Tools are defined using `defineTools()` in `apps/server/src/services/llm/tools/` and automatically registered for both the LLM chat and MCP server.
1. Add the tool definition in the appropriate module (`note_tools.ts`, `attribute_tools.ts`, `attachment_tools.ts`, `hierarchy_tools.ts`) or create a new module
2. Each tool needs: `description`, `inputSchema` (Zod), `execute` function, and optionally `mutates: true` for write operations
3. If creating a new module, wrap tools in `defineTools({...})` and add the registry to `allToolRegistries` in `tools/index.ts`
4. Add a client-side friendly name in `apps/client/src/translations/en/translation.json` under `llm.tools.<tool_name>` — use **imperative tense** (e.g. "Search notes", "Create note", "Get attributes"), not present continuous
5. Use ETAPI (`apps/server/src/etapi/`) as inspiration for what fields to expose, but **do not import ETAPI mappers** — inline the field mappings directly in the tool so the LLM layer stays decoupled from the API layer
### Updating PDF.js
1. Update `pdfjs-dist` version in `packages/pdfjs-viewer/package.json`
2. Run `npx tsx scripts/update-viewer.ts` from that directory
3. Run `pnpm build` to verify success
4. Commit all changes including updated viewer files
### Database Migrations
- Add migration scripts in `apps/server/src/migrations/`
- Update schema in `apps/server/src/assets/db/schema.sql`
### Server-Side Static Assets
- Static assets (templates, SQL, translations, etc.) go in `apps/server/src/assets/`
- Access them at runtime via `RESOURCE_DIR` from `apps/server/src/services/resource_dir.ts` (e.g. `path.join(RESOURCE_DIR, "llm", "skills", "file.md")`)
- **Do not use `import.meta.url`/`fileURLToPath`** to resolve file paths — the server is bundled into CJS for production, so `import.meta.url` will not point to the source directory
- **Do not use `__dirname` with relative paths** from source files — after bundling, `__dirname` points to the bundle output, not the original source tree
## MCP Server
- Trilium exposes an MCP (Model Context Protocol) server at `http://localhost:8080/mcp`, configured in `.mcp.json`
- The MCP server is **only available when the Trilium server is running** (`pnpm run server:start`)
- It provides tools for reading, searching, and modifying notes directly from the AI assistant
- Use it to interact with actual note data when developing or debugging note-related features
## Build System Notes
- Uses pnpm for monorepo management
- Vite for fast development builds
+11
View File
@@ -165,6 +165,17 @@ pnpm install
pnpm edit-docs:edit-docs
```
Alternatively, if you have Nix installed:
```shell
# Run directly
nix run .#edit-docs
# Or install to your profile
nix profile install .#edit-docs
trilium-edit-docs
```
### Building the Executable
Download the repository, install dependencies using `pnpm` and then build the desktop app for Windows:
```shell
+79 -4
View File
@@ -2,12 +2,87 @@
## Supported Versions
In the (still active) 0.X phase of the project only the latest stable minor release is getting bugfixes (including security ones).
Only the latest stable minor release receives security fixes.
So e.g. if the latest stable version is 0.42.3 and the latest beta version is 0.43.0-beta, then 0.42 line will still get security fixes but older versions (like 0.41.X) won't get any fixes.
For example, if the latest stable version is 0.92.3 and the latest beta is 0.93.0-beta, then only the 0.92.x line will receive security patches. Older versions (like 0.91.x) will not receive fixes.
Description above is a general rule and may be altered on case by case basis.
This policy may be altered on a case-by-case basis for critical vulnerabilities.
## Reporting a Vulnerability
You can report low severity vulnerabilities as GitHub issues, more severe vulnerabilities should be reported to the email [contact@eliandoran.me](mailto:contact@eliandoran.me)
**Please report all security vulnerabilities through [GitHub Security Advisories](https://github.com/TriliumNext/Notes/security/advisories/new).**
We do not accept security reports via email, public issues, or other channels. GitHub Security Advisories allows us to:
- Discuss and triage vulnerabilities privately
- Coordinate fixes before public disclosure
- Credit reporters appropriately
- Publish advisories with CVE identifiers
### What to Include
When reporting, please provide:
- A clear description of the vulnerability
- Steps to reproduce or proof-of-concept
- Affected versions (if known)
- Potential impact assessment
- Any suggested mitigations or fixes
### Response Timeline
- **Initial response**: Within 7 days
- **Triage decision**: Within 14 days
- **Fix timeline**: Depends on severity and complexity
## Scope
### In Scope
- Remote code execution
- Authentication/authorization bypass
- Cross-site scripting (XSS) that affects other users
- SQL injection
- Path traversal
- Sensitive data exposure
- Privilege escalation
### Out of Scope (Won't Fix)
The following are considered out of scope or accepted risks:
#### Self-XSS / Self-Injection
Trilium is a personal knowledge base where users have full control over their own data. Users can intentionally create notes containing scripts, HTML, or other executable content. This is by design - Trilium's scripting system allows users to extend functionality with custom JavaScript.
Vulnerabilities that require a user to inject malicious content into their own notes and then view it themselves are not considered security issues.
#### Electron Architecture (nodeIntegration)
Trilium's desktop application runs with `nodeIntegration: true` to enable its powerful scripting features. This is an intentional design decision, similar to VS Code extensions having full system access. We mitigate risks by:
- Sanitizing content at input boundaries
- Fixing specific XSS vectors as they're discovered
- Using Electron fuses to prevent external abuse
#### Authenticated User Actions
Actions that require valid authentication and only affect the authenticated user's own data are generally not vulnerabilities.
#### Denial of Service via Resource Exhaustion
Creating extremely large notes or performing many operations is expected user behavior in a note-taking application.
#### Missing Security Headers on Non-Sensitive Endpoints
We implement security headers where they provide meaningful protection, but may omit them on endpoints where they provide no practical benefit.
## Coordinated Disclosure
We follow a coordinated disclosure process:
1. **Report received** - We acknowledge receipt and begin triage
2. **Fix developed** - We develop and test a fix privately
3. **Release prepared** - Security release is prepared with vague changelog
4. **Users notified** - Release is published, users encouraged to upgrade
5. **Advisory published** - After reasonable upgrade window (typically 2-4 weeks), full advisory is published
We appreciate reporters allowing us time to fix issues before public disclosure. We aim to credit all reporters in published advisories unless they prefer to remain anonymous.
## Security Updates
Security fixes are released as patch versions (e.g., 0.92.1 → 0.92.2) to minimize upgrade friction. We recommend all users keep their installations up to date.
Subscribe to GitHub releases or watch the repository to receive notifications of new releases.
+13 -9
View File
@@ -1,22 +1,26 @@
{
"name": "build-docs",
"version": "1.0.0",
"description": "",
"description": "Build documentation from Trilium notes",
"main": "src/main.ts",
"bin": {
"trilium-build-docs": "dist/cli.js"
},
"scripts": {
"start": "tsx ."
"start": "tsx .",
"cli": "tsx src/cli.ts",
"build": "tsx scripts/build.ts"
},
"keywords": [],
"author": "Elian Doran <contact@eliandoran.me>",
"license": "AGPL-3.0-only",
"packageManager": "pnpm@10.26.2",
"packageManager": "pnpm@10.33.2",
"devDependencies": {
"@redocly/cli": "2.14.1",
"@redocly/cli": "2.30.0",
"archiver": "7.0.1",
"fs-extra": "11.3.3",
"react": "19.2.3",
"react-dom": "19.2.3",
"typedoc": "0.28.15",
"typedoc-plugin-missing-exports": "4.1.2"
"fs-extra": "11.3.4",
"js-yaml": "4.1.1",
"typedoc": "0.28.19",
"typedoc-plugin-missing-exports": "4.1.3"
}
}
+23
View File
@@ -0,0 +1,23 @@
import BuildHelper from "../../../scripts/build-utils";
const build = new BuildHelper("apps/build-docs");
async function main() {
// Build the CLI and other TypeScript files
await build.buildBackend([
"src/cli.ts",
"src/main.ts",
"src/build-docs.ts",
"src/swagger.ts",
"src/script-api.ts",
"src/context.ts"
]);
// Copy HTML template
build.copy("src/index.html", "index.html");
// Copy node modules dependencies if needed
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path" ]);
}
main();
@@ -13,8 +13,12 @@
* Make sure to keep in line with backend's `script_context.ts`.
*/
export type { default as AbstractBeccaEntity } from "../../server/src/becca/entities/abstract_becca_entity.js";
export type { default as BAttachment } from "../../server/src/becca/entities/battachment.js";
export type {
default as AbstractBeccaEntity
} from "../../server/src/becca/entities/abstract_becca_entity.js";
export type {
default as BAttachment
} from "../../server/src/becca/entities/battachment.js";
export type { default as BAttribute } from "../../server/src/becca/entities/battribute.js";
export type { default as BBranch } from "../../server/src/becca/entities/bbranch.js";
export type { default as BEtapiToken } from "../../server/src/becca/entities/betapi_token.js";
@@ -31,6 +35,7 @@ export type { Api };
const fakeNote = new BNote();
/**
* The `api` global variable allows access to the backend script API, which is documented in {@link Api}.
* The `api` global variable allows access to the backend script API,
* which is documented in {@link Api}.
*/
export const api: Api = new BackendScriptApi(fakeNote, {});
+158 -31
View File
@@ -1,19 +1,90 @@
process.env.TRILIUM_INTEGRATION_TEST = "memory-no-store";
process.env.TRILIUM_RESOURCE_DIR = "../server/src";
// Only set TRILIUM_RESOURCE_DIR if not already set (e.g., by Nix wrapper)
if (!process.env.TRILIUM_RESOURCE_DIR) {
process.env.TRILIUM_RESOURCE_DIR = "../server/src";
}
process.env.NODE_ENV = "development";
import cls from "@triliumnext/server/src/services/cls.js";
import { dirname, join, resolve } from "path";
import archiver from "archiver";
import { execSync } from "child_process";
import { WriteStream } from "fs";
import * as fs from "fs/promises";
import * as fsExtra from "fs-extra";
import archiver from "archiver";
import { WriteStream } from "fs";
import { execSync } from "child_process";
import yaml from "js-yaml";
import { dirname, join, resolve } from "path";
import BuildContext from "./context.js";
interface NoteMapping {
rootNoteId: string;
path: string;
format: "markdown" | "html" | "share";
ignoredFiles?: string[];
exportOnly?: boolean;
}
interface Config {
baseUrl: string;
noteMappings: NoteMapping[];
}
const DOCS_ROOT = "../../../docs";
const OUTPUT_DIR = "../../site";
// Load configuration from edit-docs-config.yaml
async function loadConfig(configPath?: string): Promise<Config | null> {
const pathsToTry = configPath
? [resolve(configPath)]
: [
join(process.cwd(), "edit-docs-config.yaml"),
join(__dirname, "../../../edit-docs-config.yaml")
];
for (const path of pathsToTry) {
try {
const configContent = await fs.readFile(path, "utf-8");
const config = yaml.load(configContent) as Config;
// Resolve all paths relative to the config file's directory
const CONFIG_DIR = dirname(path);
config.noteMappings = config.noteMappings.map((mapping) => ({
...mapping,
path: resolve(CONFIG_DIR, mapping.path)
}));
return config;
} catch (error) {
if (error.code !== "ENOENT") {
throw error; // rethrow unexpected errors
}
}
}
return null; // No config file found
}
async function exportDocs(
noteId: string,
format: "markdown" | "html" | "share",
outputPath: string,
ignoredFiles?: string[]
) {
const zipFilePath = `output-${noteId}.zip`;
try {
const { exportToZipFile } = (await import("@triliumnext/server/src/services/export/zip.js"))
.default;
await exportToZipFile(noteId, format, zipFilePath, {});
const ignoredSet = ignoredFiles ? new Set(ignoredFiles) : undefined;
await extractZip(zipFilePath, outputPath, ignoredSet);
} finally {
if (await fsExtra.exists(zipFilePath)) {
await fsExtra.rm(zipFilePath);
}
}
}
async function importAndExportDocs(sourcePath: string, outputSubDir: string) {
const note = await importData(sourcePath);
@@ -21,15 +92,18 @@ async function importAndExportDocs(sourcePath: string, outputSubDir: string) {
const zipName = outputSubDir || "user-guide";
const zipFilePath = `output-${zipName}.zip`;
try {
const { exportToZip } = (await import("@triliumnext/server/src/services/export/zip.js")).default;
const { exportToZip } = (await import("@triliumnext/server/src/services/export/zip.js"))
.default;
const branch = note.getParentBranches()[0];
const taskContext = new (await import("@triliumnext/server/src/services/task_context.js")).default(
"no-progress-reporting",
"export",
null
);
const taskContext = new (await import("@triliumnext/server/src/services/task_context.js"))
.default(
"no-progress-reporting",
"export",
null
);
const fileOutputStream = fsExtra.createWriteStream(zipFilePath);
await exportToZip(taskContext, branch, "share", fileOutputStream);
const { waitForStreamToFinish } = await import("@triliumnext/server/src/services/utils.js");
await waitForStreamToFinish(fileOutputStream);
// Output to root directory if outputSubDir is empty, otherwise to subdirectory
@@ -42,7 +116,7 @@ async function importAndExportDocs(sourcePath: string, outputSubDir: string) {
}
}
async function buildDocsInner() {
async function buildDocsInner(config?: Config) {
const i18n = await import("@triliumnext/server/src/services/i18n.js");
await i18n.initializeTranslations();
@@ -53,18 +127,49 @@ async function buildDocsInner() {
const beccaLoader = await import("../../server/src/becca/becca_loader.js");
await beccaLoader.beccaLoaded;
// Build User Guide
console.log("Building User Guide...");
await importAndExportDocs(join(__dirname, DOCS_ROOT, "User Guide"), "user-guide");
if (config) {
// Config-based build (reads from edit-docs-config.yaml)
console.log("Building documentation from config file...");
// Build Developer Guide
console.log("Building Developer Guide...");
await importAndExportDocs(join(__dirname, DOCS_ROOT, "Developer Guide"), "developer-guide");
// Import all non-export-only mappings
for (const mapping of config.noteMappings) {
if (!mapping.exportOnly) {
console.log(`Importing from ${mapping.path}...`);
await importData(mapping.path);
}
}
// Copy favicon.
await fs.copyFile("../../apps/website/src/assets/favicon.ico", join(OUTPUT_DIR, "favicon.ico"));
await fs.copyFile("../../apps/website/src/assets/favicon.ico", join(OUTPUT_DIR, "user-guide", "favicon.ico"));
await fs.copyFile("../../apps/website/src/assets/favicon.ico", join(OUTPUT_DIR, "developer-guide", "favicon.ico"));
// Export all mappings
for (const mapping of config.noteMappings) {
if (mapping.exportOnly) {
console.log(`Exporting ${mapping.format} to ${mapping.path}...`);
await exportDocs(
mapping.rootNoteId,
mapping.format,
mapping.path,
mapping.ignoredFiles
);
}
}
} else {
// Legacy hardcoded build (for backward compatibility)
console.log("Building User Guide...");
await importAndExportDocs(join(__dirname, DOCS_ROOT, "User Guide"), "user-guide");
console.log("Building Developer Guide...");
await importAndExportDocs(
join(__dirname, DOCS_ROOT, "Developer Guide"),
"developer-guide"
);
// Copy favicon.
await fs.copyFile("../../apps/website/src/assets/favicon.ico",
join(OUTPUT_DIR, "favicon.ico"));
await fs.copyFile("../../apps/website/src/assets/favicon.ico",
join(OUTPUT_DIR, "user-guide", "favicon.ico"));
await fs.copyFile("../../apps/website/src/assets/favicon.ico",
join(OUTPUT_DIR, "developer-guide", "favicon.ico"));
}
console.log("Documentation built successfully!");
}
@@ -91,12 +196,13 @@ async function createImportZip(path: string) {
zlib: { level: 0 }
});
console.log("Archive path is ", resolve(path))
console.log("Archive path is ", resolve(path));
archive.directory(path, "/");
const outputStream = fsExtra.createWriteStream(inputFile);
archive.pipe(outputStream);
archive.finalize();
const { waitForStreamToFinish } = await import("@triliumnext/server/src/services/utils.js");
await waitForStreamToFinish(outputStream);
try {
@@ -106,15 +212,15 @@ async function createImportZip(path: string) {
}
}
function waitForStreamToFinish(stream: WriteStream) {
return new Promise<void>((res, rej) => {
stream.on("finish", () => res());
stream.on("error", (err) => rej(err));
});
}
export async function extractZip(zipFilePath: string, outputPath: string, ignoredFiles?: Set<string>) {
const { readZipFile, readContent } = (await import("@triliumnext/server/src/services/import/zip.js"));
export async function extractZip(
zipFilePath: string,
outputPath: string,
ignoredFiles?: Set<string>
) {
const { readZipFile, readContent } = (await import(
"@triliumnext/server/src/services/import/zip.js"
));
await readZipFile(await fs.readFile(zipFilePath), async (zip, entry) => {
// We ignore directories since they can appear out of order anyway.
if (!entry.fileName.endsWith("/") && !ignoredFiles?.has(entry.fileName)) {
@@ -129,6 +235,27 @@ export async function extractZip(zipFilePath: string, outputPath: string, ignore
});
}
export async function buildDocsFromConfig(configPath?: string, gitRootDir?: string) {
const config = await loadConfig(configPath);
if (gitRootDir) {
// Build the share theme if we have a gitRootDir (for Trilium project)
execSync(`pnpm run --filter share-theme build`, {
stdio: "inherit",
cwd: gitRootDir
});
}
// Trigger the actual build.
await new Promise((res, rej) => {
cls.init(() => {
buildDocsInner(config ?? undefined)
.catch(rej)
.then(res);
});
});
}
export default async function buildDocs({ gitRootDir }: BuildContext) {
// Build the share theme.
execSync(`pnpm run --filter share-theme build`, {
+89
View File
@@ -0,0 +1,89 @@
#!/usr/bin/env node
import packageJson from "../package.json" with { type: "json" };
import { buildDocsFromConfig } from "./build-docs.js";
// Parse command-line arguments
function parseArgs() {
const args = process.argv.slice(2);
let configPath: string | undefined;
let showHelp = false;
let showVersion = false;
for (let i = 0; i < args.length; i++) {
if (args[i] === "--config" || args[i] === "-c") {
configPath = args[i + 1];
if (!configPath) {
console.error("Error: --config/-c requires a path argument");
process.exit(1);
}
i++; // Skip the next argument as it's the value
} else if (args[i] === "--help" || args[i] === "-h") {
showHelp = true;
} else if (args[i] === "--version" || args[i] === "-v") {
showVersion = true;
}
}
return { configPath, showHelp, showVersion };
}
function getVersion(): string {
return packageJson.version;
}
function printHelp() {
const version = getVersion();
console.log(`
Usage: trilium-build-docs [options]
Options:
-c, --config <path> Path to the configuration file
(default: edit-docs-config.yaml in current directory)
-h, --help Display this help message
-v, --version Display version information
Description:
Builds documentation from Trilium note structure and exports to various formats.
Configuration file should be in YAML format with the following structure:
baseUrl: "https://example.com"
noteMappings:
- rootNoteId: "noteId123"
path: "docs"
format: "markdown"
- rootNoteId: "noteId456"
path: "public/docs"
format: "share"
exportOnly: true
Version: ${version}
`);
}
function printVersion() {
const version = getVersion();
console.log(version);
}
async function main() {
const { configPath, showHelp, showVersion } = parseArgs();
if (showHelp) {
printHelp();
process.exit(0);
} else if (showVersion) {
printVersion();
process.exit(0);
}
try {
await buildDocsFromConfig(configPath);
process.exit(0);
} catch (error) {
console.error("Error building documentation:", error);
process.exit(1);
}
}
main();
@@ -13,16 +13,19 @@
* Make sure to keep in line with frontend's `script_context.ts`.
*/
export type { default as BasicWidget } from "../../client/src/widgets/basic_widget.js";
export type { default as FAttachment } from "../../client/src/entities/fattachment.js";
export type { default as FAttribute } from "../../client/src/entities/fattribute.js";
export type { default as FBranch } from "../../client/src/entities/fbranch.js";
export type { default as FNote } from "../../client/src/entities/fnote.js";
export type { Api } from "../../client/src/services/frontend_script_api.js";
export type { default as NoteContextAwareWidget } from "../../client/src/widgets/note_context_aware_widget.js";
export type { default as BasicWidget } from "../../client/src/widgets/basic_widget.js";
export type {
default as NoteContextAwareWidget
} from "../../client/src/widgets/note_context_aware_widget.js";
export type { default as RightPanelWidget } from "../../client/src/widgets/right_panel_widget.js";
import FrontendScriptApi, { type Api } from "../../client/src/services/frontend_script_api.js";
//@ts-expect-error
// @ts-expect-error - FrontendScriptApi is not directly exportable as Api without this simulation.
export const api: Api = new FrontendScriptApi();
+4 -3
View File
@@ -1,9 +1,10 @@
import { join } from "path";
import BuildContext from "./context";
import buildSwagger from "./swagger";
import { cpSync, existsSync, mkdirSync, rmSync } from "fs";
import { join } from "path";
import buildDocs from "./build-docs";
import BuildContext from "./context";
import buildScriptApi from "./script-api";
import buildSwagger from "./swagger";
const context: BuildContext = {
gitRootDir: join(__dirname, "../../../"),
+2 -1
View File
@@ -1,7 +1,8 @@
import { execSync } from "child_process";
import BuildContext from "./context";
import { join } from "path";
import BuildContext from "./context";
export default function buildScriptApi({ baseDir, gitRootDir }: BuildContext) {
// Generate types
execSync(`pnpm typecheck`, { stdio: "inherit", cwd: gitRootDir });
+7 -3
View File
@@ -1,7 +1,8 @@
import BuildContext from "./context";
import { join } from "path";
import { execSync } from "child_process";
import { mkdirSync } from "fs";
import { join } from "path";
import BuildContext from "./context";
interface BuildInfo {
specPath: string;
@@ -27,6 +28,9 @@ export default function buildSwagger({ baseDir, gitRootDir }: BuildContext) {
const absSpecPath = join(gitRootDir, specPath);
const targetDir = join(baseDir, outDir);
mkdirSync(targetDir, { recursive: true });
execSync(`pnpm redocly build-docs ${absSpecPath} -o ${targetDir}/index.html`, { stdio: "inherit" });
execSync(
`pnpm redocly build-docs ${absSpecPath} -o ${targetDir}/index.html`,
{ stdio: "inherit" }
);
}
}
+3 -1
View File
@@ -1,6 +1,8 @@
{
"extends": "../../tsconfig.base.json",
"include": [],
"include": [
"scripts/**/*.ts"
],
"references": [
{
"path": "../server"
+1
View File
@@ -4,6 +4,7 @@
"entryPoints": [
"src/backend_script_entrypoint.ts"
],
"tsconfig": "tsconfig.app.json",
"plugin": [
"typedoc-plugin-missing-exports"
]
+1
View File
@@ -4,6 +4,7 @@
"entryPoints": [
"src/frontend_script_entrypoint.ts"
],
"tsconfig": "tsconfig.app.json",
"plugin": [
"typedoc-plugin-missing-exports"
]
+26
View File
@@ -0,0 +1,26 @@
{
"languageOptions": {
"directionality": {
"block": "top-to-bottom",
"inline": "left-to-right"
}
},
"rules": {
"property-layout-mappings": ["flow-relative", {
"ignoreProperties": [
"top", "bottom",
"width", "height",
"min-width", "min-height",
"max-width", "max-height",
"margin-top", "margin-bottom",
"padding-top", "padding-bottom",
"border-top", "border-top-width", "border-top-style", "border-top-color",
"border-bottom", "border-bottom-width", "border-bottom-style", "border-bottom-color",
"scroll-margin-top", "scroll-margin-bottom",
"scroll-padding-top", "scroll-padding-bottom",
"overflow-x", "overflow-y",
"contain-intrinsic-width", "contain-intrinsic-height"
]
}]
}
}
+30
View File
@@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="shortcut icon" href="favicon.ico">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, interactive-widget=resizes-content" />
<link rel="manifest" crossorigin="use-credentials" href="manifest.webmanifest">
<title>Trilium Notes</title>
</head>
<body id="trilium-app">
<noscript>Trilium requires JavaScript to be enabled.</noscript>
<div id="context-menu-cover"></div>
<div class="dropdown-menu dropdown-menu-sm" id="context-menu-container" style="display: none"></div>
<!-- Required to match the PWA's top bar color with the theme -->
<!-- This works even when the user directly changes --root-background in CSS -->
<div id="background-color-tracker" style="position: absolute; visibility: hidden; color: var(--root-background); transition: color 1ms;"></div>
<script src="./src/index.ts" type="module"></script>
<!-- Required for correct loading of scripts in Electron -->
<script>
if (typeof module === 'object') {window.module = module; module = undefined;}
</script>
</body>
</html>
+42 -31
View File
@@ -1,6 +1,6 @@
{
"name": "@triliumnext/client",
"version": "0.101.1",
"version": "0.102.2",
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
"private": true,
"license": "AGPL-3.0-only",
@@ -13,72 +13,83 @@
"build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build",
"test": "vitest",
"coverage": "vitest --coverage",
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular",
"stylelint": "stylelint --allow-empty-input \"src/**/*.css\""
},
"dependencies": {
"@excalidraw/excalidraw": "0.18.0",
"@excalidraw/excalidraw": "0.18.1",
"@fullcalendar/core": "6.1.20",
"@fullcalendar/daygrid": "6.1.20",
"@fullcalendar/interaction": "6.1.20",
"@fullcalendar/list": "6.1.20",
"@fullcalendar/multimonth": "6.1.20",
"@fullcalendar/rrule": "6.1.20",
"@fullcalendar/timegrid": "6.1.20",
"@maplibre/maplibre-gl-leaflet": "0.1.3",
"@mermaid-js/layout-elk": "0.2.0",
"@mermaid-js/layout-elk": "0.2.1",
"@mind-elixir/node-menu": "5.0.1",
"@popperjs/core": "2.11.8",
"@preact/signals": "2.5.1",
"@preact/signals": "2.9.0",
"@triliumnext/ckeditor5": "workspace:*",
"@triliumnext/codemirror": "workspace:*",
"@triliumnext/commons": "workspace:*",
"@triliumnext/highlightjs": "workspace:*",
"@triliumnext/share-theme": "workspace:*",
"@triliumnext/split.js": "workspace:*",
"@zumer/snapdom": "2.0.1",
"@univerjs/preset-sheets-conditional-formatting": "0.20.1",
"@univerjs/preset-sheets-core": "0.20.1",
"@univerjs/preset-sheets-data-validation": "0.20.1",
"@univerjs/preset-sheets-filter": "0.20.1",
"@univerjs/preset-sheets-find-replace": "0.20.1",
"@univerjs/preset-sheets-note": "0.20.1",
"@univerjs/preset-sheets-sort": "0.20.1",
"@univerjs/presets": "0.20.1",
"@zumer/snapdom": "2.9.0",
"autocomplete.js": "0.38.1",
"bootstrap": "5.3.8",
"boxicons": "2.1.4",
"clsx": "2.1.1",
"color": "5.0.3",
"debounce": "3.0.0",
"dompurify": "3.4.1",
"draggabilly": "3.0.0",
"force-graph": "1.51.0",
"globals": "16.5.0",
"i18next": "25.7.3",
"i18next-http-backend": "3.0.2",
"jquery": "3.7.1",
"force-graph": "1.51.4",
"htmldiff-js": "1.0.5",
"i18next": "26.0.8",
"i18next-http-backend": "3.0.6",
"jquery": "4.0.0",
"jquery.fancytree": "2.38.5",
"jsplumb": "2.15.6",
"katex": "0.16.27",
"knockout": "3.5.1",
"katex": "0.16.45",
"leaflet": "1.9.4",
"leaflet-gpx": "2.2.0",
"mark.js": "8.11.1",
"marked": "17.0.1",
"mermaid": "11.12.2",
"mind-elixir": "5.3.8",
"normalize.css": "8.0.1",
"panzoom": "9.4.3",
"preact": "10.28.1",
"react-i18next": "16.5.0",
"reveal.js": "5.2.1",
"marked": "18.0.2",
"mermaid": "11.14.0",
"mind-elixir": "5.11.0",
"panzoom": "9.4.4",
"preact": "10.29.1",
"react-i18next": "17.0.4",
"react-window": "2.2.7",
"reveal.js": "6.0.1",
"rrule": "2.8.1",
"svg-pan-zoom": "3.6.2",
"tabulator-tables": "6.3.1",
"tabulator-tables": "6.4.0",
"vanilla-js-wheel-zoom": "9.0.4"
},
"devDependencies": {
"@ckeditor/ckeditor5-inspector": "5.0.0",
"@preact/preset-vite": "2.10.2",
"@prefresh/vite": "3.0.0",
"@types/bootstrap": "5.2.10",
"@types/jquery": "3.5.33",
"@types/jquery": "4.0.0",
"@types/leaflet": "1.9.21",
"@types/leaflet-gpx": "1.3.8",
"@types/mark.js": "8.11.12",
"@types/reveal.js": "5.2.2",
"@types/tabulator-tables": "6.3.1",
"copy-webpack-plugin": "13.0.1",
"happy-dom": "20.0.11",
"@types/tabulator-tables": "6.3.2",
"copy-webpack-plugin": "14.0.0",
"happy-dom": "20.9.0",
"lightningcss": "1.32.0",
"script-loader": "0.7.2",
"vite-plugin-static-copy": "3.1.4"
"stylelint": "17.9.0",
"vite-plugin-static-copy": "4.1.0"
}
}
}
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve"><path d="M63.966,45.043c0.008-0.009,0.021-0.021,0.027-0.029c0.938-1.156-0.823-13.453-5.063-20.125 c-1.389-2.186-2.239-3.423-3.219-4.719c-3.907-5.166-6-6.125-6-6.125S35.732,24.78,36.149,44.315 c-1.754,0.065-11.218,7.528-14.826,14.388c-1.206,2.291-1.856,3.645-2.493,5.141c-2.539,5.957-2.33,8.25-2.33,8.25 s16.271,6.79,33.014-3.294c0.007,0.021,0.013,0.046,0.02,0.063c0.537,1.389,12.08,5.979,19.976,5.621 c2.587-0.116,4.084-0.238,5.696-0.444c6.424-0.818,8.298-2.157,8.298-2.157S81.144,54.396,63.966,45.043z M50.787,65.343 c1.059-1.183,4.648-5.853,0.995-11.315c-0.253-0.377-0.496-0.236-0.496-0.236s0.063,10.822-5.162,12.359 c-5.225,1.537-13.886,4.4-20.427,0.455C25,66.186,26.924,53.606,38.544,47.229c0.546,1.599,2.836,6.854,9.292,6.409 c0.453-0.031,0.453-0.313,0.453-0.313s-9.422-5.328-8.156-10.625s3.089-14.236,9.766-17.948c0.714-0.397,10.746,7.593,10.417,20.94 c-1.606-0.319-7.377-1.004-10.226,4.864c-0.198,0.409,0.046,0.549,0.046,0.549s9.31-5.521,13.275-1.789 c3.965,3.733,10.813,9.763,10.71,17.4C74.111,67.533,62.197,72.258,50.787,65.343z M35.613,35.145c0,0-0.991,3.241-0.603,7.524 l-13.393-7.524C21.618,35.145,27.838,30.931,35.613,35.145z M21.193,36.03l13.344,7.612c-3.872,1.872-6.142,4.388-6.142,4.388 C20.78,43.531,21.193,36.03,21.193,36.03z M72.287,49.064c0,0-2.321-2.471-6.23-4.263l13.187-7.881 C79.243,36.92,79.808,44.413,72.287,49.064z M78.687,36.113l-13.237,7.794c0.3-4.291-0.754-7.511-0.754-7.511 C72.383,32.025,78.687,36.113,78.687,36.113z M42.076,73.778c0,0,3.309-0.737,6.845-3.185l0.056,15.361 C48.977,85.955,42.244,82.621,42.076,73.778z M49.956,85.888L50,70.526c3.539,2.445,6.846,3.181,6.846,3.181 C56.686,82.551,49.956,85.888,49.956,85.888z"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 256 256" version="1.1" viewBox="0 0 256 256" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<title>Trilium Notes</title>
<g>
<path d="m202.9 112.7c-22.5 16.1-54.5 12.8-74.9 6.3l14.8-11.8 14.1-11.3 49.1-39.3-51.2 35.9-14.3 10-14.9 10.5c0.7-21.2 7-49.9 28.6-65.4 1.8-1.3 3.9-2.6 6.1-3.8 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.4 2.8-4.9 5.4-7.4 7.8-3.4 3.5-6.8 6.4-10.1 8.8z" fill="#ab60e3"/>
<path d="m213.1 104c-22.2 12.6-51.4 9.3-70.3 3.2l14.1-11.3 49.1-39.3-51.2 35.9-14.3 10c0.5-18.1 4.9-42.1 19.7-58.6 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.3 2.8-4.8 5.4-7.2 7.8z" fill="#8038b8"/>
<path d="m220.5 96.2c-21.1 8.6-46.6 5.3-63.7-0.2l49.2-39.4-51.2 35.9c0.3-15.8 3.5-36.6 14.3-52.8 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.8 66z" fill="#560a8f"/>
<path d="m106.7 179c-5.8-21 5.2-43.8 15.5-57.2l4.8 14.2 4.5 13.4 15.9 47-12.8-47.6-3.6-13.2-3.7-13.9c15.5 6.2 35.1 18.6 40.7 38.8 0.5 1.7 0.9 3.6 1.2 5.5 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.1-3.8-7.6-1.6-3.5-2.9-6.8-3.8-10z" fill="#bb9dd2"/>
<path d="m110.4 188.9c-3.4-19.8 6.9-40.5 16.6-52.9l4.5 13.4 15.9 47-12.8-47.6-3.6-13.2c13.3 5.2 29.9 15 38.1 30.4 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.2-3.8-7.7z" fill="#9a6cbc"/>
<path d="m114.2 196.5c-0.7-18 8.6-35.9 17.3-47.1l15.9 47-12.8-47.6c11.6 4.4 26.1 12.4 35.2 24.8 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8z" fill="#783ba5"/>
<path d="m86.3 59.1c21.7 10.9 32.4 36.6 35.8 54.9l-15.2-6.6-14.5-6.3-50.6-22 48.8 24.9 13.6 6.9 14.3 7.3c-16.6 7.9-41.3 14.5-62.1 4.1-1.8-0.9-3.6-1.9-5.4-3.2-2.3-1.5-4.5-3.2-6.8-5.1-19.9-16.4-40.3-46.4-42.7-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.2 0.8 6.2 1.6 9.1 2.5 4 1.3 7.6 2.8 10.9 4.4z" fill="#ab60e3"/>
<path d="m75.4 54.8c18.9 12 28.4 35.6 31.6 52.6l-14.5-6.3-50.6-22 48.7 24.9 13.6 6.9c-14.1 6.8-34.5 13-53.3 8.2-2.3-1.5-4.5-3.2-6.8-5.1-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.1 0.8 6.2 1.6 9.1 2.6z" fill="#8038b8"/>
<path d="m66.3 52.2c15.3 12.8 23.3 33.6 26.1 48.9l-50.6-22 48.8 24.9c-12.2 6-29.6 11.8-46.5 10-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3z" fill="#6f2796"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 256 256" version="1.1" viewBox="0 0 256 256" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<title>Trilium Notes</title>
<style type="text/css">
.st0{fill:#95C980;}
.st1{fill:#72B755;}
.st2{fill:#4FA52B;}
.st3{fill:#EE8C89;}
.st4{fill:#E96562;}
.st5{fill:#E33F3B;}
.st6{fill:#EFB075;}
.st7{fill:#E99547;}
.st8{fill:#E47B19;}
</style>
<g>
<path class="st0" d="m202.9 112.7c-22.5 16.1-54.5 12.8-74.9 6.3l14.8-11.8 14.1-11.3 49.1-39.3-51.2 35.9-14.3 10-14.9 10.5c0.7-21.2 7-49.9 28.6-65.4 1.8-1.3 3.9-2.6 6.1-3.8 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.4 2.8-4.9 5.4-7.4 7.8-3.4 3.5-6.8 6.4-10.1 8.8z"/>
<path class="st1" d="m213.1 104c-22.2 12.6-51.4 9.3-70.3 3.2l14.1-11.3 49.1-39.3-51.2 35.9-14.3 10c0.5-18.1 4.9-42.1 19.7-58.6 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.3 2.8-4.8 5.4-7.2 7.8z"/>
<path class="st2" d="m220.5 96.2c-21.1 8.6-46.6 5.3-63.7-0.2l49.2-39.4-51.2 35.9c0.3-15.8 3.5-36.6 14.3-52.8 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.8 66z"/>
<path class="st3" d="m106.7 179c-5.8-21 5.2-43.8 15.5-57.2l4.8 14.2 4.5 13.4 15.9 47-12.8-47.6-3.6-13.2-3.7-13.9c15.5 6.2 35.1 18.6 40.7 38.8 0.5 1.7 0.9 3.6 1.2 5.5 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.1-3.8-7.6-1.6-3.5-2.9-6.8-3.8-10z"/>
<path class="st4" d="m110.4 188.9c-3.4-19.8 6.9-40.5 16.6-52.9l4.5 13.4 15.9 47-12.8-47.6-3.6-13.2c13.3 5.2 29.9 15 38.1 30.4 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.2-3.8-7.7z"/>
<path class="st5" d="m114.2 196.5c-0.7-18 8.6-35.9 17.3-47.1l15.9 47-12.8-47.6c11.6 4.4 26.1 12.4 35.2 24.8 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8z"/>
<path class="st6" d="m86.3 59.1c21.7 10.9 32.4 36.6 35.8 54.9l-15.2-6.6-14.5-6.3-50.6-22 48.8 24.9 13.6 6.9 14.3 7.3c-16.6 7.9-41.3 14.5-62.1 4.1-1.8-0.9-3.6-1.9-5.4-3.2-2.3-1.5-4.5-3.2-6.8-5.1-19.9-16.4-40.3-46.4-42.7-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.2 0.8 6.2 1.6 9.1 2.5 4 1.3 7.6 2.8 10.9 4.4z"/>
<path class="st7" d="m75.4 54.8c18.9 12 28.4 35.6 31.6 52.6l-14.5-6.3-50.6-22 48.7 24.9 13.6 6.9c-14.1 6.8-34.5 13-53.3 8.2-2.3-1.5-4.5-3.2-6.8-5.1-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.1 0.8 6.2 1.6 9.1 2.6z"/>
<path class="st8" d="m66.3 52.2c15.3 12.8 23.3 33.6 26.1 48.9l-50.6-22 48.8 24.9c-12.2 6-29.6 11.8-46.5 10-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

+19 -9
View File
@@ -1,12 +1,13 @@
import type { CKTextEditor } from "@triliumnext/ckeditor5";
import type CodeMirror from "@triliumnext/codemirror";
import { SqlExecuteResults } from "@triliumnext/commons";
import { type LOCALE_IDS, SqlExecuteResponse } from "@triliumnext/commons";
import type { NativeImage, TouchBar } from "electron";
import { ColumnComponent } from "tabulator-tables";
import type { Attribute } from "../services/attribute_parser.js";
import bundleService from "../services/bundle.js";
import froca from "../services/froca.js";
import { initLocale,t } from "../services/i18n.js";
import { initLocale, t } from "../services/i18n.js";
import keyboardActionsService from "../services/keyboard_actions.js";
import linkService, { type ViewScope } from "../services/link.js";
import type LoadResults from "../services/load_results.js";
@@ -23,6 +24,7 @@ import { IncludeNoteOpts } from "../widgets/dialogs/include_note.jsx";
import type { InfoProps } from "../widgets/dialogs/info.jsx";
import type { MarkdownImportOpts } from "../widgets/dialogs/markdown_import.jsx";
import { ChooseNoteTypeCallback } from "../widgets/dialogs/note_type_chooser.jsx";
import type { PrintPreviewData } from "../widgets/dialogs/print_preview.jsx";
import type { PromptDialogOptions } from "../widgets/dialogs/prompt.js";
import type NoteTreeWidget from "../widgets/note_tree.js";
import Component from "./component.js";
@@ -101,8 +103,6 @@ export type CommandMappings = {
showRevisions: CommandData & {
noteId?: string | null;
};
showLlmChat: CommandData;
createAiChat: CommandData;
showOptions: CommandData & {
section: string;
};
@@ -154,6 +154,7 @@ export type CommandMappings = {
};
openInTab: ContextMenuCommandData;
openNoteInSplit: ContextMenuCommandData;
openNoteInWindow: ContextMenuCommandData;
openNoteInPopup: ContextMenuCommandData;
toggleNoteHoisting: ContextMenuCommandData;
insertNoteAfter: ContextMenuCommandData;
@@ -172,6 +173,7 @@ export type CommandMappings = {
duplicateSubtree: ContextMenuCommandData;
expandSubtree: ContextMenuCommandData;
collapseSubtree: ContextMenuCommandData;
toggleArchivedNotes: CommandData;
sortChildNotes: ContextMenuCommandData;
copyNotePathToClipboard: ContextMenuCommandData;
recentChangesInSubtree: ContextMenuCommandData;
@@ -280,6 +282,7 @@ export type CommandMappings = {
backInNoteHistory: CommandData;
forwardInNoteHistory: CommandData;
forceSaveRevision: CommandData;
saveNamedRevision: CommandData;
scrollToActiveNote: CommandData;
quickSearch: CommandData;
collapseTree: CommandData;
@@ -303,6 +306,7 @@ export type CommandMappings = {
ninthTab: CommandData;
lastTab: CommandData;
showNoteSource: CommandData;
showNoteOCRText: CommandData;
showSQLConsole: CommandData;
showBackendLog: CommandData;
showCheatsheet: CommandData;
@@ -329,6 +333,7 @@ export type CommandMappings = {
toggleRightPane: CommandData;
printActiveNote: CommandData;
exportAsPdf: CommandData;
showPrintPreview: PrintPreviewData;
openNoteExternally: CommandData;
openNoteCustom: CommandData;
openNoteOnServer: CommandData;
@@ -382,7 +387,8 @@ export type CommandMappings = {
reloadTextEditor: CommandData;
chooseNoteType: CommandData & {
callback: ChooseNoteTypeCallback
}
};
customDownload: CommandData;
};
type EventMappings = {
@@ -408,7 +414,7 @@ type EventMappings = {
addNewLabel: CommandData;
addNewRelation: CommandData;
sqlQueryResults: CommandData & {
results: SqlExecuteResults;
response: SqlExecuteResponse;
};
readOnlyTemporarilyDisabled: {
noteContext: NoteContext;
@@ -473,6 +479,11 @@ type EventMappings = {
noteContextRemoved: {
ntxIds: string[];
};
contextDataChanged: {
noteContext: NoteContext;
key: string;
value: unknown;
};
exportSvg: { ntxId: string | null | undefined; };
exportPng: { ntxId: string | null | undefined; };
geoMapCreateChildNote: {
@@ -503,7 +514,7 @@ type EventMappings = {
contentSafeMarginChanged: {
top: number;
noteContext: NoteContext;
}
};
};
export type EventListener<T extends EventNames> = {
@@ -557,7 +568,7 @@ export class AppContext extends Component {
*/
async earlyInit() {
await options.initializedPromise;
await initLocale();
await initLocale((options.get("locale") || "en") as LOCALE_IDS);
}
setLayout(layout: Layout) {
@@ -572,7 +583,6 @@ export class AppContext extends Component {
this.tabManager.loadTabs();
const bundleService = (await import("../services/bundle.js")).default;
setTimeout(() => bundleService.executeStartupBundles(), 2000);
}
+12
View File
@@ -57,6 +57,18 @@ export class TypedComponent<ChildT extends TypedComponent<ChildT>> {
return this;
}
/**
* Removes a child component from this component's children array.
* This is used for cleanup when a widget is unmounted to prevent event listener accumulation.
*/
removeChild(component: ChildT) {
const index = this.children.indexOf(component);
if (index !== -1) {
this.children.splice(index, 1);
component.parent = undefined;
}
}
handleEvent<T extends EventNames>(name: T, data: EventData<T>): Promise<unknown[] | unknown> | null | undefined {
try {
const callMethodPromise = this.initialized ? this.initialized.then(() => this.callMethod((this as any)[`${name}Event`], data)) : this.callMethod((this as any)[`${name}Event`], data);
+29 -15
View File
@@ -1,16 +1,18 @@
import utils from "../services/utils.js";
import { CreateChildrenResponse, SqlExecuteResponse } from "@triliumnext/commons";
import bundleService from "../services/bundle.js";
import dialog from "../services/dialog.js";
import dateNoteService from "../services/date_notes.js";
import froca from "../services/froca.js";
import { t } from "../services/i18n.js";
import linkService from "../services/link.js";
import protectedSessionHolder from "../services/protected_session_holder.js";
import server from "../services/server.js";
import toastService from "../services/toast.js";
import utils from "../services/utils.js";
import ws from "../services/ws.js";
import appContext, { type NoteCommandData } from "./app_context.js";
import Component from "./component.js";
import toastService from "../services/toast.js";
import ws from "../services/ws.js";
import bundleService from "../services/bundle.js";
import froca from "../services/froca.js";
import linkService from "../services/link.js";
import { t } from "../services/i18n.js";
import { CreateChildrenResponse, SqlExecuteResponse } from "@triliumnext/commons";
export default class Entrypoints extends Component {
constructor() {
@@ -187,13 +189,8 @@ export default class Entrypoints extends Component {
} else if (note.mime.endsWith("env=backend")) {
await server.post(`script/run/${note.noteId}`);
} else if (note.mime === "text/x-sqlite;schema=trilium") {
const resp = await server.post<SqlExecuteResponse>(`sql/execute/${note.noteId}`);
if (!resp.success) {
toastService.showError(t("entrypoints.sql-error", { message: resp.error }));
}
await appContext.triggerEvent("sqlQueryResults", { ntxId: ntxId, results: resp.results });
const response = await server.post<SqlExecuteResponse>(`sql/execute/${note.noteId}`);
await appContext.triggerEvent("sqlQueryResults", { ntxId, response });
}
toastService.showMessage(t("entrypoints.note-executed"));
@@ -220,4 +217,21 @@ export default class Entrypoints extends Component {
toastService.showMessage(t("entrypoints.note-revision-created"));
}
async saveNamedRevisionCommand() {
const noteId = appContext.tabManager.getActiveContextNoteId();
if (!noteId) return;
const name = await dialog.prompt({
title: t("entrypoints.save-named-revision-title"),
message: t("entrypoints.save-named-revision-message"),
defaultValue: ""
});
// null means the user cancelled
if (name === null) return;
await server.post(`notes/${noteId}/revision`, { description: name || undefined });
toastService.showMessage(t("entrypoints.note-revision-created"));
}
}
@@ -79,4 +79,8 @@ export default class MainTreeExecutors extends Component {
saveSelection: false
});
}
async toggleArchivedNotesCommand(){
await this.tree?.toggleArchivedNotes();
}
}
+129 -3
View File
@@ -12,16 +12,57 @@ import server from "../services/server.js";
import treeService from "../services/tree.js";
import utils from "../services/utils.js";
import { ReactWrappedWidget } from "../widgets/basic_widget.js";
import type { HeadingContext } from "../widgets/sidebar/TableOfContents.js";
import appContext, { type EventData, type EventListener } from "./app_context.js";
import Component from "./component.js";
export interface SetNoteOpts {
triggerSwitchEvent?: unknown;
viewScope?: ViewScope;
/** If true, skip closing the currently active dialog. Used when opening a note into a stackable popup (e.g. quick-edit) that must not dismiss the dialog it was launched from. */
keepActiveDialog?: boolean;
}
export type GetTextEditorCallback = (editor: CKTextEditor) => void;
export type SaveState = "saved" | "saving" | "unsaved" | "error";
const READ_ONLY_CAPABLE_TYPES: string[] = [
"text",
"code",
"mermaid",
"canvas",
"mindMap",
"spreadsheet"
];
export interface NoteContextDataMap {
toc: HeadingContext;
pdfPages: {
totalPages: number;
currentPage: number;
scrollToPage(page: number): void;
requestThumbnail(page: number): void;
};
pdfAttachments: {
attachments: PdfAttachment[];
downloadAttachment(filename: string): void;
};
pdfLayers: {
layers: PdfLayer[];
toggleLayer(layerId: string, visible: boolean): void;
};
pdfAnnotations: {
annotations: PdfAnnotationInfo[];
scrollToAnnotation(annotationId: string, pageNumber: number): void;
};
saveState: {
state: SaveState;
};
}
type ContextDataKey = keyof NoteContextDataMap;
class NoteContext extends Component implements EventListener<"entitiesReloaded"> {
ntxId: string | null;
hoistedNoteId: string;
@@ -32,6 +73,13 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
parentNoteId?: string | null;
viewScope?: ViewScope;
/**
* Metadata storage for UI components (e.g., table of contents, PDF page list, code outline).
* This allows type widgets to publish data that sidebar/toolbar components can consume.
* Data is automatically cleared when navigating to a different note.
*/
private contextData: Map<string, unknown> = new Map();
constructor(ntxId: string | null = null, hoistedNoteId: string = "root", mainNtxId: string | null = null) {
super();
@@ -85,12 +133,30 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
await this.triggerEvent("beforeNoteSwitch", { noteContext: this });
closeActiveDialog();
if (!opts.keepActiveDialog) {
closeActiveDialog();
}
this.notePath = resolvedNotePath;
this.viewScope = opts.viewScope;
({ noteId: this.noteId, parentNoteId: this.parentNoteId } = treeService.getNoteIdAndParentIdFromUrl(resolvedNotePath));
// Clear context data when switching notes and notify subscribers
const oldKeys = Array.from(this.contextData.keys());
this.contextData.clear();
if (oldKeys.length > 0) {
// Notify subscribers asynchronously to avoid blocking navigation
window.setTimeout(() => {
for (const key of oldKeys) {
this.triggerEvent("contextDataChanged", {
noteContext: this,
key,
value: undefined
});
}
}, 0);
}
this.saveToRecentNotes(resolvedNotePath);
protectedSessionHolder.touchProtectedSessionIfNecessary(this.note);
@@ -254,8 +320,13 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
return false;
}
// "readOnly" is a state valid only for text/code notes
if (!this.note || (this.note.type !== "text" && this.note.type !== "code")) {
if (!this.note) {
return false;
}
// Note types that support a read-only state (via the #readOnly label, source view, or auto-readonly).
const isPdf = this.note.type === "file" && this.note.mime === "application/pdf";
if (!isPdf && !READ_ONLY_CAPABLE_TYPES.includes(this.note.type)) {
return false;
}
@@ -271,6 +342,11 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
return true;
}
// Auto read-only based on content size is only configurable for text/code.
if (this.note.type !== "text" && this.note.type !== "code") {
return false;
}
// Store the initial decision about read-only status in the viewScope
// This will be "remembered" until the viewScope is refreshed
if (!this.viewScope) {
@@ -332,6 +408,10 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
// Collections must always display a note list, even if no children.
if (note.type === "book") {
if (note.isProtected && !protectedSessionHolder.isProtectedSessionAvailable()) {
return false;
}
const viewType = note.getLabelValue("viewType") ?? "grid";
if (!["list", "grid"].includes(viewType)) {
return true;
@@ -443,6 +523,52 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
return title;
}
/**
* Set metadata for this note context (e.g., table of contents, PDF pages, code outline).
* This data can be consumed by sidebar/toolbar components.
*
* @param key - Unique identifier for the data type (e.g., "toc", "pdfPages", "codeOutline")
* @param value - The data to store (will be cleared when switching notes)
*/
setContextData<K extends ContextDataKey>(key: K, value: NoteContextDataMap[K]): void {
this.contextData.set(key, value);
// Trigger event so subscribers can react
this.triggerEvent("contextDataChanged", {
noteContext: this,
key,
value
});
}
/**
* Get metadata for this note context.
*
* @param key - The data key to retrieve
* @returns The stored data, or undefined if not found
*/
getContextData<K extends ContextDataKey>(key: K): NoteContextDataMap[K] | undefined {
return this.contextData.get(key) as NoteContextDataMap[K] | undefined;
}
/**
* Check if context data exists for a given key.
*/
hasContextData(key: ContextDataKey): boolean {
return this.contextData.has(key);
}
/**
* Clear specific context data.
*/
clearContextData(key: ContextDataKey): void {
this.contextData.delete(key);
this.triggerEvent("contextDataChanged", {
noteContext: this,
key,
value: undefined
});
}
}
export function openInCurrentNoteContext(evt: MouseEvent | JQuery.ClickEvent | JQuery.MouseDownEvent | React.PointerEvent<HTMLCanvasElement> | null, notePath: string, viewScope?: ViewScope) {
@@ -1,10 +1,8 @@
import dateNoteService from "../services/date_notes.js";
import froca from "../services/froca.js";
import noteCreateService from "../services/note_create.js";
import openService from "../services/open.js";
import options from "../services/options.js";
import protectedSessionService from "../services/protected_session.js";
import toastService from "../services/toast.js";
import treeService from "../services/tree.js";
import utils, { openInReusableSplit } from "../services/utils.js";
import appContext, { type CommandListenerData } from "./app_context.js";
@@ -150,6 +148,19 @@ export default class RootCommandExecutor extends Component {
}
}
async showNoteOCRTextCommand() {
const notePath = appContext.tabManager.getActiveContextNotePath();
if (notePath) {
await appContext.tabManager.openTabWithNoteWithHoisting(notePath, {
activate: true,
viewScope: {
viewMode: "ocr"
}
});
}
}
async showAttachmentsCommand() {
const notePath = appContext.tabManager.getActiveContextNotePath();
@@ -248,34 +259,4 @@ export default class RootCommandExecutor extends Component {
}
}
async createAiChatCommand() {
try {
// Create a new AI Chat note at the root level
const rootNoteId = "root";
const result = await noteCreateService.createNote(rootNoteId, {
title: "New AI Chat",
type: "aiChat",
content: JSON.stringify({
messages: [],
title: "New AI Chat"
})
});
if (!result.note) {
toastService.showError("Failed to create AI Chat note");
return;
}
await appContext.tabManager.openTabWithNoteWithHoisting(result.note.noteId, {
activate: true
});
toastService.showMessage("Created new AI Chat note");
}
catch (e) {
console.error("Error creating AI Chat note:", e);
toastService.showError(`Failed to create AI Chat note: ${(e as Error).message}`);
}
}
}
+26 -39
View File
@@ -1,17 +1,18 @@
import appContext from "./components/app_context.js";
import utils from "./services/utils.js";
import noteTooltipService from "./services/note_tooltip.js";
import bundleService from "./services/bundle.js";
import toastService from "./services/toast.js";
import noteAutocompleteService from "./services/note_autocomplete.js";
import electronContextMenu from "./menus/electron_context_menu.js";
import glob from "./services/glob.js";
import { t } from "./services/i18n.js";
import options from "./services/options.js";
import "autocomplete.js/index_jquery.js";
import type ElectronRemote from "@electron/remote";
import type Electron from "electron";
import "boxicons/css/boxicons.min.css";
import "autocomplete.js/index_jquery.js";
import appContext from "./components/app_context.js";
import electronContextMenu from "./menus/electron_context_menu.js";
import bundleService from "./services/bundle.js";
import glob from "./services/glob.js";
import { t } from "./services/i18n.js";
import noteAutocompleteService from "./services/note_autocomplete.js";
import noteTooltipService from "./services/note_tooltip.js";
import options from "./services/options.js";
import toastService from "./services/toast.js";
import utils from "./services/utils.js";
await appContext.earlyInit();
@@ -45,10 +46,6 @@ if (utils.isElectron()) {
electronContextMenu.setupContextMenu();
}
if (utils.isPWA()) {
initPWATopbarColor();
}
function initOnElectron() {
const electron: typeof Electron = utils.dynamicRequire("electron");
electron.ipcRenderer.on("globalShortcut", async (event, actionName) => appContext.triggerCommand(actionName));
@@ -57,7 +54,7 @@ function initOnElectron() {
const currentWindow = electronRemote.getCurrentWindow();
const style = window.getComputedStyle(document.body);
initDarkOrLightMode(style);
initDarkOrLightMode();
initTransparencyEffects(style, currentWindow);
initFullScreenDetection(currentWindow);
@@ -98,15 +95,22 @@ function initFullScreenDetection(currentWindow: Electron.BrowserWindow) {
}
function initTransparencyEffects(style: CSSStyleDeclaration, currentWindow: Electron.BrowserWindow) {
const material = style.getPropertyValue("--background-material").trim();
if (window.glob.platform === "win32") {
const material = style.getPropertyValue("--background-material");
// TriliumNextTODO: find a nicer way to make TypeScript happy unfortunately TS did not like Array.includes here
const bgMaterialOptions = ["auto", "none", "mica", "acrylic", "tabbed"] as const;
const foundBgMaterialOption = bgMaterialOptions.find((bgMaterialOption) => material === bgMaterialOption);
if (foundBgMaterialOption) {
currentWindow.setBackgroundMaterial(foundBgMaterialOption);
}
}
if (window.glob.platform === "darwin") {
const bgMaterialOptions = [ "popover", "tooltip", "titlebar", "selection", "menu", "sidebar", "header", "sheet", "window", "hud", "fullscreen-ui", "content", "under-window", "under-page" ] as const;
const foundBgMaterialOption = bgMaterialOptions.find((bgMaterialOption) => material === bgMaterialOption);
if (foundBgMaterialOption) {
currentWindow.setVibrancy(foundBgMaterialOption);
}
}
}
/**
@@ -115,31 +119,14 @@ function initTransparencyEffects(style: CSSStyleDeclaration, currentWindow: Elec
*
* @param style the root CSS element to read variables from.
*/
function initDarkOrLightMode(style: CSSStyleDeclaration) {
function initDarkOrLightMode() {
let themeSource: typeof nativeTheme.themeSource = "system";
const themeStyle = style.getPropertyValue("--theme-style");
if (style.getPropertyValue("--theme-style-auto") !== "true" && (themeStyle === "light" || themeStyle === "dark")) {
const themeStyle = window.glob.getThemeStyle();
if (themeStyle !== "auto") {
themeSource = themeStyle;
}
const { nativeTheme } = utils.dynamicRequire("@electron/remote") as typeof ElectronRemote;
nativeTheme.themeSource = themeSource;
}
function initPWATopbarColor() {
const tracker = $("#background-color-tracker");
if (tracker.length) {
const applyThemeColor = () => {
let meta = $("meta[name='theme-color']");
if (!meta.length) {
meta = $(`<meta name="theme-color">`).appendTo($("head"));
}
meta.attr("content", tracker.css("color"));
};
tracker.on("transitionend", applyThemeColor);
applyThemeColor();
}
}
+9 -1
View File
@@ -66,7 +66,15 @@ class FAttribute {
}
get isAutoLink() {
return this.type === "relation" && ["internalLink", "imageLink", "relationMapLink", "includeNoteLink"].includes(this.name);
if (this.type === "relation") {
return ["internalLink", "imageLink", "relationMapLink", "includeNoteLink"].includes(this.name);
}
if (this.type === "label") {
return this.name === "internalBookmark";
}
return false;
}
get toString() {
+39 -43
View File
@@ -1,5 +1,6 @@
import { MIME_TYPES_DICT } from "@triliumnext/commons";
import { getNoteIcon } from "@triliumnext/commons";
import bundleService from "../services/bundle.js";
import cssClassManager from "../services/css_class_manager.js";
import type { Froca } from "../services/froca-interface.js";
import noteAttributeCache from "../services/note_attribute_cache.js";
@@ -8,36 +9,17 @@ import search from "../services/search.js";
import server from "../services/server.js";
import utils from "../services/utils.js";
import type FAttachment from "./fattachment.js";
import type { AttributeType,default as FAttribute } from "./fattribute.js";
import type { AttributeType, default as FAttribute } from "./fattribute.js";
const LABEL = "label";
const RELATION = "relation";
export const NOTE_TYPE_ICONS = {
file: "bx bx-file",
image: "bx bx-image",
code: "bx bx-code",
render: "bx bx-extension",
search: "bx bx-file-find",
relationMap: "bx bxs-network-chart",
book: "bx bx-book",
noteMap: "bx bxs-network-chart",
mermaid: "bx bx-selection",
canvas: "bx bx-pen",
webView: "bx bx-globe-alt",
launcher: "bx bx-link",
doc: "bx bxs-file-doc",
contentWidget: "bx bxs-widget",
mindMap: "bx bx-sitemap",
aiChat: "bx bx-bot"
};
/**
* There are many different Note types, some of which are entirely opaque to the
* end user. Those types should be used only for checking against, they are
* not for direct use.
*/
export type NoteType = "file" | "image" | "search" | "noteMap" | "launcher" | "doc" | "contentWidget" | "text" | "relationMap" | "render" | "canvas" | "mermaid" | "book" | "webView" | "code" | "mindMap" | "aiChat";
export type NoteType = "file" | "image" | "search" | "noteMap" | "launcher" | "doc" | "contentWidget" | "text" | "relationMap" | "render" | "canvas" | "mermaid" | "book" | "webView" | "code" | "mindMap" | "spreadsheet" | "llmChat";
export interface NotePathRecord {
isArchived: boolean;
@@ -254,6 +236,16 @@ export default class FNote {
return this.hasAttribute("label", "archived");
}
/**
* Returns true if the note's metadata (title, icon) should not be editable.
* This applies to system notes like options, help, and launch bar configuration.
*/
get isMetadataReadOnly() {
return utils.isLaunchBarConfig(this.noteId)
|| this.noteId.startsWith("_help_")
|| this.noteId.startsWith("_options");
}
getChildNoteIds() {
return this.children;
}
@@ -585,25 +577,15 @@ export default class FNote {
const iconClassLabels = this.getLabels("iconClass");
const workspaceIconClass = this.getWorkspaceIconClass();
if (iconClassLabels && iconClassLabels.length > 0) {
return iconClassLabels[0].value;
} else if (workspaceIconClass) {
return workspaceIconClass;
} else if (this.noteId === "root") {
return "bx bx-home-alt-2";
}
if (this.noteId === "_share") {
return "bx bx-share-alt";
} else if (this.type === "text") {
if (this.isFolder()) {
return "bx bx-folder";
}
return "bx bx-note";
} else if (this.type === "code") {
const correspondingMimeType = MIME_TYPES_DICT.find(m => m.mime === this.mime);
return correspondingMimeType?.icon ?? NOTE_TYPE_ICONS.code;
}
return NOTE_TYPE_ICONS[this.type];
const icon = getNoteIcon({
noteId: this.noteId,
type: this.type,
mime: this.mime,
iconClass: iconClassLabels.length > 0 ? iconClassLabels[0].value : undefined,
workspaceIconClass,
isFolder: this.isFolder.bind(this)
});
return `tn-icon ${icon}`;
}
getColorClass() {
@@ -612,7 +594,9 @@ export default class FNote {
}
isFolder() {
return this.type === "search" || this.getFilteredChildBranches().length > 0;
if (this.isLabelTruthy("subtreeHidden")) return false;
if (this.type === "search") return true;
return this.getFilteredChildBranches().length > 0;
}
getFilteredChildBranches() {
@@ -727,6 +711,15 @@ export default class FNote {
return this.hasAttribute(LABEL, name);
}
/**
* Returns `true` if the note has a label with the given name (same as {@link hasOwnedLabel}), or it has a label with the `disabled:` prefix (for example due to a safe import).
* @param name the name of the label to look for.
* @returns `true` if the label exists, or its version with the `disabled:` prefix.
*/
hasLabelOrDisabled(name: string) {
return this.hasLabel(name) || this.hasLabel(`disabled:${name}`);
}
/**
* @param name - label name
* @returns true if label exists (including inherited) and does not have "false" value.
@@ -1032,7 +1025,6 @@ export default class FNote {
const env = this.getScriptEnv();
if (env === "frontend") {
const bundleService = (await import("../services/bundle.js")).default;
return await bundleService.getAndExecuteBundle(this.noteId);
} else if (env === "backend") {
await server.post(`script/run/${this.noteId}`);
@@ -1077,6 +1069,10 @@ export default class FNote {
return this.mime === "text/x-sqlite;schema=trilium";
}
isMarkdown() {
return this.type === "code" && (this.mime === "text/markdown" || this.mime === "text/x-markdown" || this.mime === "text/x-gfm");
}
isTriliumScript() {
return this.mime.startsWith("application/javascript");
}
Binary file not shown.
+168
View File
@@ -0,0 +1,168 @@
import { getThemeStyle } from "./services/theme";
async function bootstrap() {
showSplash();
await setupGlob();
await Promise.all([
initJQuery(),
loadBootstrapCss()
]);
loadStylesheets();
loadIcons();
setBodyAttributes();
await loadScripts();
hideSplash();
}
async function initJQuery() {
const $ = (await import("jquery")).default;
window.$ = $;
window.jQuery = $;
// Polyfill removed jQuery methods for autocomplete.js compatibility
($ as any).isArray = Array.isArray;
($ as any).isFunction = function(obj: any) { return typeof obj === 'function'; };
($ as any).isPlainObject = function(obj: any) {
if (obj == null || typeof obj !== 'object') { return false; }
const proto = Object.getPrototypeOf(obj);
if (proto === null) { return true; }
const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor;
return typeof Ctor === 'function' && Ctor === Object;
};
}
async function setupGlob() {
const response = await fetch(`./bootstrap${window.location.search}`);
const json = await response.json();
window.global = globalThis; /* fixes https://github.com/webpack/webpack/issues/10035 */
window.glob = {
...json,
activeDialog: null
};
window.glob.getThemeStyle = getThemeStyle;
}
async function loadBootstrapCss() {
// We have to selectively import Bootstrap CSS based on text direction.
if (glob.isRtl) {
await import("bootstrap/dist/css/bootstrap.rtl.min.css");
} else {
await import("bootstrap/dist/css/bootstrap.min.css");
}
}
type StylesheetRef = {
href: string;
media?: string;
};
function getConfiguredThemeStylesheets(stylesheetsPath: string, theme: string, customThemeCssUrl?: string) {
if (theme === "auto") {
return [{ href: `${stylesheetsPath}/theme-dark.css`, media: "(prefers-color-scheme: dark)" }];
}
if (theme === "dark") {
return [{ href: `${stylesheetsPath}/theme-dark.css` }];
}
if (theme === "next") {
return [
{ href: `${stylesheetsPath}/theme-next-light.css` },
{ href: `${stylesheetsPath}/theme-next-dark.css`, media: "(prefers-color-scheme: dark)" }
];
}
if (theme === "next-light") {
return [{ href: `${stylesheetsPath}/theme-next-light.css` }];
}
if (theme === "next-dark") {
return [{ href: `${stylesheetsPath}/theme-next-dark.css` }];
}
if (theme !== "light" && customThemeCssUrl) {
return [{ href: customThemeCssUrl }];
}
return [];
}
function loadStylesheets() {
const { device, assetPath, theme, themeBase, customThemeCssUrl } = window.glob;
const stylesheetsPath = `${assetPath}/stylesheets`;
const cssToLoad: StylesheetRef[] = [];
if (device !== "print") {
cssToLoad.push({ href: `${stylesheetsPath}/ckeditor-theme.css` });
cssToLoad.push({ href: `api/fonts` });
cssToLoad.push({ href: `${stylesheetsPath}/theme-light.css` });
cssToLoad.push(...getConfiguredThemeStylesheets(stylesheetsPath, theme, customThemeCssUrl));
if (themeBase) {
cssToLoad.push(...getConfiguredThemeStylesheets(stylesheetsPath, themeBase));
}
cssToLoad.push({ href: `${stylesheetsPath}/style.css` });
}
for (const { href, media } of cssToLoad) {
const linkEl = document.createElement("link");
linkEl.href = href;
linkEl.rel = "stylesheet";
if (media) {
linkEl.media = media;
}
document.head.appendChild(linkEl);
}
}
function loadIcons() {
const styleEl = document.createElement("style");
styleEl.innerText = window.glob.iconPackCss;
document.head.appendChild(styleEl);
}
function setBodyAttributes() {
const { device, headingStyle, layoutOrientation, platform, isElectron, hasNativeTitleBar, hasBackgroundEffects, currentLocale } = window.glob;
const classesToSet = [
device,
`heading-style-${headingStyle}`,
`layout-${layoutOrientation}`,
`platform-${platform}`,
isElectron && "electron",
hasNativeTitleBar && "native-titlebar",
hasBackgroundEffects && "background-effects"
].filter(Boolean) as string[];
for (const classToSet of classesToSet) {
document.body.classList.add(classToSet);
}
document.body.lang = currentLocale.id;
document.body.dir = currentLocale.rtl ? "rtl" : "ltr";
}
async function loadScripts() {
switch (glob.device) {
case "mobile":
await import("./mobile.js");
break;
case "print":
await import("./print.js");
break;
case "desktop":
default:
await import("./desktop.js");
break;
}
}
function showSplash() {
// hide body to reduce flickering on the startup. This is done through JS and not CSS to not hide <noscript>
document.body.style.display = "none";
}
function hideSplash() {
document.body.style.display = "block";
}
bootstrap();
@@ -46,8 +46,6 @@ import ScrollPadding from "../widgets/scroll_padding.js";
import SearchResult from "../widgets/search_result.jsx";
import SharedInfo from "../widgets/shared_info.jsx";
import RightPanelContainer from "../widgets/sidebar/RightPanelContainer.jsx";
import SqlResults from "../widgets/sql_result.js";
import SqlTableSchemas from "../widgets/sql_table_schemas.js";
import TabRowWidget from "../widgets/tab_row.js";
import TabHistoryNavigationButtons from "../widgets/TabHistoryNavigationButtons.jsx";
import TitleBarButtons from "../widgets/title_bar_buttons.jsx";
@@ -163,11 +161,9 @@ export default class DesktopLayout {
.child(<SharedInfo />)
)
.optChild(!isNewLayout, <PromotedAttributes />)
.child(<SqlTableSchemas />)
.child(<NoteDetail />)
.child(<NoteList media="screen" />)
.child(<SearchResult />)
.child(<SqlResults />)
.child(<ScrollPadding />)
)
.child(<ApiLog />)
@@ -24,6 +24,7 @@ import InfoDialog from "../widgets/dialogs/info.js";
import IncorrectCpuArchDialog from "../widgets/dialogs/incorrect_cpu_arch.js";
import CallToActionDialog from "../widgets/dialogs/call_to_action.jsx";
import PopupEditorDialog from "../widgets/dialogs/PopupEditor.jsx";
import PrintPreviewDialog from "../widgets/dialogs/print_preview.jsx";
import ToastContainer from "../widgets/Toast.jsx";
export function applyModals(rootContainer: RootContainer) {
@@ -46,6 +47,7 @@ export function applyModals(rootContainer: RootContainer) {
.child(<ProtectedSessionPasswordDialog />)
.child(<RevisionsDialog />)
.child(<DeleteNotesDialog />)
.child(<PrintPreviewDialog />)
.child(<InfoDialog />)
.child(<ConfirmDialog />)
.child(<PromptDialog />)
+76
View File
@@ -0,0 +1,76 @@
#background-color-tracker {
color: var(--main-background-color) !important;
}
span.keyboard-shortcut,
kbd {
display: none;
}
.dropdown-menu {
font-size: larger;
}
.action-button {
background: none;
border: none;
cursor: pointer;
font-size: 1.25em;
padding-inline-start: 0.5em;
padding-inline-end: 0.5em;
color: var(--main-text-color);
}
.quick-search {
margin: 0;
}
.quick-search .dropdown-menu {
max-width: 350px;
}
/* #region Tree */
.tree-wrapper {
max-height: 100%;
margin-top: 0px;
overflow-y: auto;
contain: content;
padding-inline-start: 10px;
}
.fancytree-title {
margin-inline-start: 0.6em !important;
}
.fancytree-node {
padding: 5px;
}
span.fancytree-expander {
width: 24px !important;
margin-inline-end: 5px;
}
.fancytree-loading span.fancytree-expander {
width: 24px;
height: 32px;
}
.fancytree-loading span.fancytree-expander:after {
width: 20px;
height: 20px;
margin-top: 4px;
border-width: 2px;
border-style: solid;
}
.tree-wrapper .collapse-tree-button,
.tree-wrapper .scroll-to-active-note-button,
.tree-wrapper .tree-settings-button {
position: fixed;
margin-inline-end: 16px;
display: none;
}
.tree-wrapper .unhoist-button {
font-size: 200%;
}
/* #endregion */
+30 -133
View File
@@ -1,128 +1,38 @@
import { applyModals } from "./layout_commons.js";
import { MOBILE_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx";
import { useNoteContext } from "../widgets/react/hooks.jsx";
import CloseZenModeButton from "../widgets/close_zen_button.js";
import FilePropertiesTab from "../widgets/ribbon/FilePropertiesTab.jsx";
import FlexContainer from "../widgets/containers/flex_container.js";
import FloatingButtons from "../widgets/FloatingButtons.jsx";
import "./mobile_layout.css";
import type AppContext from "../components/app_context.js";
import GlobalMenuWidget from "../widgets/buttons/global_menu.js";
import MobileDetailMenu from "../widgets/mobile_widgets/mobile_detail_menu.js";
import CloseZenModeButton from "../widgets/close_zen_button.js";
import NoteList from "../widgets/collections/NoteList.jsx";
import FlexContainer from "../widgets/containers/flex_container.js";
import RootContainer from "../widgets/containers/root_container.js";
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
import SplitNoteContainer from "../widgets/containers/split_note_container.js";
import FindWidget from "../widgets/find.js";
import LauncherContainer from "../widgets/launch_bar/LauncherContainer.jsx";
import InlineTitle from "../widgets/layout/InlineTitle.jsx";
import NoteBadges from "../widgets/layout/NoteBadges.jsx";
import NoteTitleActions from "../widgets/layout/NoteTitleActions.jsx";
import MobileDetailMenu from "../widgets/mobile_widgets/mobile_detail_menu.js";
import ScreenContainer from "../widgets/mobile_widgets/screen_container.js";
import SidebarContainer from "../widgets/mobile_widgets/sidebar_container.js";
import ToggleSidebarButton from "../widgets/mobile_widgets/toggle_sidebar_button.jsx";
import NoteIconWidget from "../widgets/note_icon.jsx";
import NoteTitleWidget from "../widgets/note_title.js";
import ContentHeader from "../widgets/containers/content_header.js";
import NoteTreeWidget from "../widgets/note_tree.js";
import NoteWrapperWidget from "../widgets/note_wrapper.js";
import QuickSearchWidget from "../widgets/quick_search.js";
import ReadOnlyNoteInfoBar from "../widgets/ReadOnlyNoteInfoBar.jsx";
import RootContainer from "../widgets/containers/root_container.js";
import ScreenContainer from "../widgets/mobile_widgets/screen_container.js";
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
import SearchDefinitionTab from "../widgets/ribbon/SearchDefinitionTab.jsx";
import SearchResult from "../widgets/search_result.jsx";
import SharedInfoWidget from "../widgets/shared_info.js";
import SidebarContainer from "../widgets/mobile_widgets/sidebar_container.js";
import StandaloneRibbonAdapter from "../widgets/ribbon/components/StandaloneRibbonAdapter.jsx";
import TabRowWidget from "../widgets/tab_row.js";
import ToggleSidebarButton from "../widgets/mobile_widgets/toggle_sidebar_button.jsx";
import type AppContext from "../components/app_context.js";
import NoteDetail from "../widgets/NoteDetail.jsx";
import QuickSearchWidget from "../widgets/quick_search.js";
import ScrollPadding from "../widgets/scroll_padding";
import SearchResult from "../widgets/search_result.jsx";
import MobileEditorToolbar from "../widgets/type_widgets/text/mobile_editor_toolbar.jsx";
import PromotedAttributes from "../widgets/PromotedAttributes.jsx";
import SplitNoteContainer from "../widgets/containers/split_note_container.js";
import LauncherContainer from "../widgets/launch_bar/LauncherContainer.jsx";
const MOBILE_CSS = `
<style>
span.keyboard-shortcut,
kbd {
display: none;
}
.dropdown-menu {
font-size: larger;
}
.action-button {
background: none;
border: none;
cursor: pointer;
font-size: 1.25em;
padding-inline-start: 0.5em;
padding-inline-end: 0.5em;
color: var(--main-text-color);
}
.quick-search {
margin: 0;
}
.quick-search .dropdown-menu {
max-width: 350px;
}
</style>`;
const FANCYTREE_CSS = `
<style>
.tree-wrapper {
max-height: 100%;
margin-top: 0px;
overflow-y: auto;
contain: content;
padding-inline-start: 10px;
}
.fancytree-custom-icon {
font-size: 2em;
}
.fancytree-title {
font-size: 1.5em;
margin-inline-start: 0.6em !important;
}
.fancytree-node {
padding: 5px;
}
.fancytree-node .fancytree-expander:before {
font-size: 2em !important;
}
span.fancytree-expander {
width: 24px !important;
margin-inline-end: 5px;
}
.fancytree-loading span.fancytree-expander {
width: 24px;
height: 32px;
}
.fancytree-loading span.fancytree-expander:after {
width: 20px;
height: 20px;
margin-top: 4px;
border-width: 2px;
border-style: solid;
}
.tree-wrapper .collapse-tree-button,
.tree-wrapper .scroll-to-active-note-button,
.tree-wrapper .tree-settings-button {
position: fixed;
margin-inline-end: 16px;
display: none;
}
.tree-wrapper .unhoist-button {
font-size: 200%;
}
</style>`;
import { applyModals } from "./layout_commons.js";
export default class MobileLayout {
getRootWidget(appContext: typeof AppContext) {
const rootContainer = new RootContainer(true)
.setParent(appContext)
.class("horizontal-layout")
.cssBlock(MOBILE_CSS)
.child(new FlexContainer("column").id("mobile-sidebar-container"))
.child(
new FlexContainer("row")
@@ -136,7 +46,7 @@ export default class MobileLayout {
.css("padding-inline-start", "0")
.css("padding-inline-end", "0")
.css("contain", "content")
.child(new FlexContainer("column").filling().id("mobile-sidebar-wrapper").child(new QuickSearchWidget()).child(new NoteTreeWidget().cssBlock(FANCYTREE_CSS)))
.child(new FlexContainer("column").filling().id("mobile-sidebar-wrapper").child(new QuickSearchWidget()).child(new NoteTreeWidget()))
)
.child(
new ScreenContainer("detail", "row")
@@ -147,30 +57,28 @@ export default class MobileLayout {
new NoteWrapperWidget()
.child(
new FlexContainer("row")
.class("title-row note-split-title")
.contentSized()
.css("font-size", "larger")
.css("align-items", "center")
.child(<ToggleSidebarButton />)
.child(<NoteIconWidget />)
.child(<NoteTitleWidget />)
.child(<NoteBadges />)
.child(<MobileDetailMenu />)
)
.child(<FloatingButtons items={MOBILE_FLOATING_BUTTONS} />)
.child(<PromotedAttributes />)
.child(
new ScrollingContainer()
.filling()
.contentSized()
.child(new ContentHeader()
.child(<ReadOnlyNoteInfoBar />)
.child(<SharedInfoWidget />)
)
.child(<InlineTitle />)
.child(<NoteTitleActions />)
.child(<NoteDetail />)
.child(<NoteList media="screen" />)
.child(<StandaloneRibbonAdapter component={SearchDefinitionTab} />)
.child(<SearchResult />)
.child(<FilePropertiesWrapper />)
.child(<ScrollPadding />)
)
.child(<MobileEditorToolbar />)
.child(new FindWidget())
)
)
)
@@ -179,7 +87,6 @@ export default class MobileLayout {
new FlexContainer("column")
.contentSized()
.id("mobile-bottom-bar")
.child(new TabRowWidget().css("height", "40px"))
.child(new FlexContainer("row")
.class("horizontal")
.css("height", "53px")
@@ -192,13 +99,3 @@ export default class MobileLayout {
return rootContainer;
}
}
function FilePropertiesWrapper() {
const { note } = useNoteContext();
return (
<div>
{note?.type === "file" && <FilePropertiesTab note={note} />}
</div>
);
}
+16 -16
View File
@@ -1,8 +1,9 @@
import { KeyboardActionNames } from "@triliumnext/commons";
import { h, JSX, render } from "preact";
import keyboardActionService, { getActionSync } from "../services/keyboard_actions.js";
import note_tooltip from "../services/note_tooltip.js";
import utils from "../services/utils.js";
import { h, JSX, render } from "preact";
export interface ContextMenuOptions<T> {
x: number;
@@ -38,6 +39,7 @@ export interface MenuCommandItem<T> {
title: string;
command?: T;
type?: string;
mime?: string;
/**
* The icon to display in the menu item.
*
@@ -62,17 +64,17 @@ export type ContextMenuEvent = PointerEvent | MouseEvent | JQuery.ContextMenuEve
class ContextMenu {
private $widget: JQuery<HTMLElement>;
private $cover: JQuery<HTMLElement>;
private $cover?: JQuery<HTMLElement>;
private options?: ContextMenuOptions<any>;
private isMobile: boolean;
constructor() {
this.$widget = $("#context-menu-container");
this.$cover = $("#context-menu-cover");
this.$widget.addClass("dropend");
this.isMobile = utils.isMobile();
if (this.isMobile) {
this.$cover = $("#context-menu-cover");
this.$cover.on("click", () => this.hide());
} else {
$(document).on("click", (e) => this.hide());
@@ -91,7 +93,7 @@ class ContextMenu {
}
this.$widget.toggleClass("mobile-bottom-menu", !this.options.forcePositionOnMobile);
this.$cover.addClass("show");
this.$cover?.addClass("show");
$("body").addClass("context-menu-shown");
this.$widget.empty();
@@ -140,16 +142,14 @@ class ContextMenu {
} else {
left = this.options.x - contextMenuWidth + CONTEXT_MENU_OFFSET;
}
} else if (contextMenuWidth && this.options.x + contextMenuWidth - CONTEXT_MENU_OFFSET > clientWidth - CONTEXT_MENU_PADDING) {
// Overflow: right
left = clientWidth - contextMenuWidth - CONTEXT_MENU_PADDING;
} else if (this.options.x - CONTEXT_MENU_OFFSET < CONTEXT_MENU_PADDING) {
// Overflow: left
left = CONTEXT_MENU_PADDING;
} else {
if (contextMenuWidth && this.options.x + contextMenuWidth - CONTEXT_MENU_OFFSET > clientWidth - CONTEXT_MENU_PADDING) {
// Overflow: right
left = clientWidth - contextMenuWidth - CONTEXT_MENU_PADDING;
} else if (this.options.x - CONTEXT_MENU_OFFSET < CONTEXT_MENU_PADDING) {
// Overflow: left
left = CONTEXT_MENU_PADDING;
} else {
left = this.options.x - CONTEXT_MENU_OFFSET;
}
left = this.options.x - CONTEXT_MENU_OFFSET;
}
this.$widget
@@ -249,7 +249,7 @@ class ContextMenu {
if ("uiIcon" in item || "checked" in item) {
const icon = (item.checked ? "bx bx-check" : item.uiIcon);
if (icon) {
$icon.addClass(icon);
$icon.addClass([icon, "tn-icon"]);
} else {
$icon.append("&nbsp;");
}
@@ -261,7 +261,7 @@ class ContextMenu {
.append(item.title);
if ("badges" in item && item.badges) {
for (let badge of item.badges) {
for (const badge of item.badges) {
const badgeElement = $(`<span class="badge">`).text(badge.title);
if (badge.className) {
@@ -352,7 +352,7 @@ class ContextMenu {
async hide() {
this.options?.onHide?.();
this.$widget.removeClass("show");
this.$cover.removeClass("show");
this.$cover?.removeClass("show");
$("body").removeClass("context-menu-shown");
this.$widget.hide();
}
+39 -14
View File
@@ -1,10 +1,14 @@
import utils from "../services/utils.js";
import options from "../services/options.js";
import zoomService from "../components/zoom.js";
import contextMenu, { type MenuItem } from "./context_menu.js";
import { t } from "../services/i18n.js";
import type { BrowserWindow } from "electron";
import type { CommandNames, AppContext } from "../components/app_context.js";
import type { CommandNames } from "../components/app_context.js";
import appContext from "../components/app_context.js";
import zoomService from "../components/zoom.js";
import * as clipboardExt from "../services/clipboard_ext.js";
import { t } from "../services/i18n.js";
import options from "../services/options.js";
import server from "../services/server.js";
import utils from "../services/utils.js";
import contextMenu, { type MenuItem } from "./context_menu.js";
function setupContextMenu() {
const electron = utils.dynamicRequire("electron");
@@ -13,8 +17,6 @@ function setupContextMenu() {
// FIXME: Remove typecast once Electron is properly integrated.
const { webContents } = remote.getCurrentWindow() as BrowserWindow;
let appContext: AppContext;
webContents.on("context-menu", (event, params) => {
const { editFlags } = params;
const hasText = params.selectionText.trim().length > 0;
@@ -36,7 +38,7 @@ function setupContextMenu() {
items.push({
title: t("electron_context_menu.add-term-to-dictionary", { term: params.misspelledWord }),
uiIcon: "bx bx-plus",
handler: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord)
handler: () => electron.ipcRenderer.send("add-word-to-dictionary", params.misspelledWord)
});
items.push({ kind: "separator" });
@@ -60,6 +62,33 @@ function setupContextMenu() {
uiIcon: "bx bx-copy",
handler: () => webContents.copy()
});
items.push({
enabled: hasText,
title: t("electron_context_menu.copy-as-markdown"),
uiIcon: "bx bx-copy-alt",
handler: async () => {
const selection = window.getSelection();
if (!selection || !selection.rangeCount) return '';
const range = selection.getRangeAt(0);
const div = document.createElement('div');
div.appendChild(range.cloneContents());
const htmlContent = div.innerHTML;
if (htmlContent) {
try {
const { markdownContent } = await server.post<{ markdownContent: string }>(
"other/to-markdown",
{ htmlContent }
);
await clipboardExt.copyTextWithToast(markdownContent);
} catch (error) {
console.error("Failed to copy as markdown:", error);
}
}
}
});
}
if (!["", "javascript:", "about:blank#blocked"].includes(params.linkURL) && params.mediaType === "none") {
@@ -112,7 +141,7 @@ function setupContextMenu() {
}
// Replace the placeholder with the real search keyword.
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
const searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
items.push({ kind: "separator" });
@@ -126,10 +155,6 @@ function setupContextMenu() {
title: t("electron_context_menu.search_in_trilium", { term: shortenedSelection }),
uiIcon: "bx bx-search",
handler: async () => {
if (!appContext) {
appContext = (await import("../components/app_context.js")).default;
}
await appContext.triggerCommand("searchNotes", {
searchString: params.selectionText
});
@@ -0,0 +1,101 @@
import type { ToggleInParentResponse } from "@triliumnext/commons";
import type FNote from "../entities/fnote.js";
import branchService from "../services/branches.js";
import { t } from "../services/i18n.js";
import server from "../services/server.js";
import toast from "../services/toast.js";
import contextMenu, { type ContextMenuEvent, type MenuItem } from "./context_menu.js";
const VISIBLE_LAUNCHER_PARENTS = ["_lbVisibleLaunchers", "_lbMobileVisibleLaunchers"];
function getVisibleLauncherBranch(launcherNote: FNote) {
return launcherNote.getParentBranches().find((b) => VISIBLE_LAUNCHER_PARENTS.includes(b.parentNoteId));
}
function getBookmarkBranch(launcherNote: FNote) {
return launcherNote.getParentBranches().find((b) => b.parentNoteId === "_lbBookmarks");
}
async function removeFromLaunchBar(launcherNote: FNote) {
const bookmarkBranch = getBookmarkBranch(launcherNote);
if (bookmarkBranch) {
// Individual bookmarks are represented via a branch under `_lbBookmarks`; removing them
// from the launch bar is the same as unbookmarking the note.
const resp = await server.put<ToggleInParentResponse>(
`notes/${launcherNote.noteId}/toggle-in-parent/_lbBookmarks/false`
);
if (!resp.success && resp.message) {
toast.showError(resp.message);
}
return;
}
const launcherBranch = getVisibleLauncherBranch(launcherNote);
if (!launcherBranch) return;
const isMobileLauncher = launcherBranch.parentNoteId === "_lbMobileVisibleLaunchers";
// Branch IDs in the hidden subtree follow the `${parentNoteId}_${noteId}` convention,
// so the branch linking `_lb(Mobile)?Root` to the "available" launchers root is predictable.
const targetBranchId = isMobileLauncher
? "_lbMobileRoot__lbMobileAvailableLaunchers"
: "_lbRoot__lbAvailableLaunchers";
await branchService.moveToParentNote([launcherBranch.branchId], targetBranchId);
}
export function canRemoveFromLaunchBar(launcherNote: FNote | null | undefined) {
if (!launcherNote) return false;
return !!(getVisibleLauncherBranch(launcherNote) || getBookmarkBranch(launcherNote));
}
export interface ShowLauncherContextMenuOptions<T extends string> {
/** Menu items specific to this launcher (e.g. "Open in new tab" for note-based launchers). They appear above the "Remove from launch bar" item. */
extraItems?: MenuItem<T>[];
/** Handler for the {@link extraItems}. The "Remove from launch bar" item is handled internally and will not be forwarded. */
onCommand?: (command: T | undefined) => void;
}
const REMOVE_COMMAND = "__removeFromLaunchBar__";
/**
* Displays the launch bar icon context menu. When the launcher can be removed (i.e. it is a direct
* child of the visible launchers root or of `_lbBookmarks`), a "Remove from launch bar" entry is
* appended. Extra items can be supplied to preserve launcher-specific actions (e.g. "Open in new tab").
*/
export async function showLauncherContextMenu<T extends string>(
launcherNote: FNote | null | undefined,
e: ContextMenuEvent,
options: ShowLauncherContextMenuOptions<T> = {}
) {
e.preventDefault();
const items = [...(options.extraItems ?? [])] as MenuItem<string>[];
if (canRemoveFromLaunchBar(launcherNote)) {
if (items.length > 0) {
items.push({ kind: "separator" });
}
items.push({
title: t("launcher_button_context_menu.remove_from_launch_bar"),
command: REMOVE_COMMAND,
uiIcon: "bx bx-x-circle"
});
}
if (items.length === 0) return;
contextMenu.show<string>({
x: e.pageX ?? 0,
y: e.pageY ?? 0,
items,
selectMenuItemHandler: ({ command }) => {
if (command === REMOVE_COMMAND) {
if (launcherNote) {
void removeFromLaunchBar(launcherNote);
}
return;
}
options.onCommand?.(command as T | undefined);
}
});
}
@@ -1,12 +1,12 @@
import treeService from "../services/tree.js";
import froca from "../services/froca.js";
import contextMenu, { type MenuCommandItem, type MenuItem } from "./context_menu.js";
import dialogService from "../services/dialog.js";
import server from "../services/server.js";
import { t } from "../services/i18n.js";
import type { ContextMenuCommandData,FilteredCommandNames } from "../components/app_context.js";
import type { SelectMenuItemEventListener } from "../components/events.js";
import dialogService from "../services/dialog.js";
import froca from "../services/froca.js";
import { t } from "../services/i18n.js";
import server from "../services/server.js";
import treeService from "../services/tree.js";
import type NoteTreeWidget from "../widgets/note_tree.js";
import type { FilteredCommandNames, ContextMenuCommandData } from "../components/app_context.js";
import contextMenu, { type MenuCommandItem, type MenuItem } from "./context_menu.js";
type LauncherCommandNames = FilteredCommandNames<ContextMenuCommandData>;
@@ -32,8 +32,8 @@ export default class LauncherContextMenu implements SelectMenuItemEventListener<
const note = this.node.data.noteId ? await froca.getNote(this.node.data.noteId) : null;
const parentNoteId = this.node.getParent().data.noteId;
const isVisibleRoot = note?.noteId === "_lbVisibleLaunchers";
const isAvailableRoot = note?.noteId === "_lbAvailableLaunchers";
const isVisibleRoot = note?.noteId === "_lbVisibleLaunchers" || note?.noteId === "_lbMobileVisibleLaunchers";
const isAvailableRoot = note?.noteId === "_lbAvailableLaunchers" || note?.noteId === "_lbMobileAvailableLaunchers";
const isVisibleItem = parentNoteId === "_lbVisibleLaunchers" || parentNoteId === "_lbMobileVisibleLaunchers";
const isAvailableItem = parentNoteId === "_lbAvailableLaunchers" || parentNoteId === "_lbMobileAvailableLaunchers";
const isItem = isVisibleItem || isAvailableItem;
+52 -32
View File
@@ -1,21 +1,21 @@
import NoteColorPicker from "./custom-items/NoteColorPicker.jsx";
import treeService from "../services/tree.js";
import froca from "../services/froca.js";
import clipboard from "../services/clipboard.js";
import noteCreateService from "../services/note_create.js";
import contextMenu, { type MenuCommandItem, type MenuItem } from "./context_menu.js";
import appContext, { type ContextMenuCommandData, type FilteredCommandNames } from "../components/app_context.js";
import type { SelectMenuItemEventListener } from "../components/events.js";
import type FAttachment from "../entities/fattachment.js";
import attributes from "../services/attributes.js";
import { executeBulkActions } from "../services/bulk_action.js";
import clipboard from "../services/clipboard.js";
import dialogService from "../services/dialog.js";
import froca from "../services/froca.js";
import { t } from "../services/i18n.js";
import noteCreateService from "../services/note_create.js";
import noteTypesService from "../services/note_types.js";
import server from "../services/server.js";
import toastService from "../services/toast.js";
import dialogService from "../services/dialog.js";
import { t } from "../services/i18n.js";
import type NoteTreeWidget from "../widgets/note_tree.js";
import type FAttachment from "../entities/fattachment.js";
import type { SelectMenuItemEventListener } from "../components/events.js";
import treeService from "../services/tree.js";
import utils from "../services/utils.js";
import attributes from "../services/attributes.js";
import { executeBulkActions } from "../services/bulk_action.js";
import type NoteTreeWidget from "../widgets/note_tree.js";
import contextMenu, { type MenuCommandItem, type MenuItem } from "./context_menu.js";
import NoteColorPicker from "./custom-items/NoteColorPicker.jsx";
// TODO: Deduplicate once client/server is well split.
interface ConvertToAttachmentResponse {
@@ -72,6 +72,8 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
const noSelectedNotes = selNodes.length === 0 || (selNodes.length === 1 && selNodes[0] === this.node);
const notSearch = note?.type !== "search";
const hasSubtreeHidden = note?.isLabelTruthy("subtreeHidden") ?? false;
const isSpotlighted = this.node.extraClasses.includes("spotlighted-node");
const notOptionsOrHelp = !note?.noteId.startsWith("_options") && !note?.noteId.startsWith("_help");
const parentNotSearch = !parentNote || parentNote.type !== "search";
const insertNoteAfterEnabled = isNotRoot && !isHoisted && parentNotSearch;
@@ -79,17 +81,18 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
const items: (MenuItem<TreeCommandNames> | null)[] = [
{ title: t("tree-context-menu.open-in-a-new-tab"), command: "openInTab", shortcut: "Ctrl+Click", uiIcon: "bx bx-link-external", enabled: noSelectedNotes },
{ title: t("tree-context-menu.open-in-a-new-split"), command: "openNoteInSplit", uiIcon: "bx bx-dock-right", enabled: noSelectedNotes },
{ title: t("tree-context-menu.open-in-a-new-window"), command: "openNoteInWindow", uiIcon: "bx bx-window-open", enabled: noSelectedNotes },
{ title: t("tree-context-menu.open-in-popup"), command: "openNoteInPopup", uiIcon: "bx bx-edit", enabled: noSelectedNotes },
isHoisted
? null
: {
title: `${t("tree-context-menu.hoist-note")}`,
command: "toggleNoteHoisting",
keyboardShortcut: "toggleNoteHoisting",
uiIcon: "bx bxs-chevrons-up",
enabled: noSelectedNotes && notSearch
},
title: `${t("tree-context-menu.hoist-note")}`,
command: "toggleNoteHoisting",
keyboardShortcut: "toggleNoteHoisting",
uiIcon: "bx bxs-chevrons-up",
enabled: noSelectedNotes && notSearch
},
!isHoisted || !isNotRoot
? null
: { title: t("tree-context-menu.unhoist-note"), command: "toggleNoteHoisting", keyboardShortcut: "toggleNoteHoisting", uiIcon: "bx bx-door-open" },
@@ -112,7 +115,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
keyboardShortcut: "createNoteInto",
uiIcon: "bx bx-plus",
items: notSearch ? await noteTypesService.getNoteTypeItems("insertChildNote") : null,
enabled: notSearch && noSelectedNotes && notOptionsOrHelp,
enabled: notSearch && noSelectedNotes && notOptionsOrHelp && !hasSubtreeHidden && !isSpotlighted,
columns: 2
},
@@ -150,8 +153,18 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
{ kind: "separator" },
{ title: t("tree-context-menu.expand-subtree"), command: "expandSubtree", keyboardShortcut: "expandSubtree", uiIcon: "bx bx-expand", enabled: noSelectedNotes },
{ title: t("tree-context-menu.collapse-subtree"), command: "collapseSubtree", keyboardShortcut: "collapseSubtree", uiIcon: "bx bx-collapse", enabled: noSelectedNotes },
!hasSubtreeHidden && { title: t("tree-context-menu.expand-subtree"), command: "expandSubtree", keyboardShortcut: "expandSubtree", uiIcon: "bx bx-expand", enabled: noSelectedNotes },
!hasSubtreeHidden && { title: t("tree-context-menu.collapse-subtree"), command: "collapseSubtree", keyboardShortcut: "collapseSubtree", uiIcon: "bx bx-collapse", enabled: noSelectedNotes },
{
title: hasSubtreeHidden ? t("tree-context-menu.show-subtree") : t("tree-context-menu.hide-subtree"),
uiIcon: "bx bx-show",
enabled: isNotRoot,
handler: async () => {
const note = await froca.getNote(this.node.data.noteId);
if (!note) return;
attributes.setBooleanWithInheritance(note, "subtreeHidden", !hasSubtreeHidden);
}
},
{
title: t("tree-context-menu.sort-by"),
command: "sortChildNotes",
@@ -164,7 +177,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
{ title: t("tree-context-menu.copy-note-path-to-clipboard"), command: "copyNotePathToClipboard", uiIcon: "bx bx-directions", enabled: true },
{ title: t("tree-context-menu.recent-changes-in-subtree"), command: "recentChangesInSubtree", uiIcon: "bx bx-history", enabled: noSelectedNotes && notOptionsOrHelp }
]
].filter(Boolean) as MenuItem<TreeCommandNames>[]
},
{ kind: "separator" },
@@ -276,7 +289,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
return items.filter((row) => row !== null) as MenuItem<TreeCommandNames>[];
}
async selectMenuItemHandler({ command, type, templateNoteId }: MenuCommandItem<TreeCommandNames>) {
async selectMenuItemHandler({ command, type, mime, templateNoteId }: MenuCommandItem<TreeCommandNames>) {
const notePath = treeService.getNotePath(this.node);
if (utils.isMobile()) {
@@ -292,25 +305,32 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
noteCreateService.createNote(parentNotePath, {
target: "after",
targetBranchId: this.node.data.branchId,
type: type,
isProtected: isProtected,
templateNoteId: templateNoteId
type,
mime,
isProtected,
templateNoteId
});
} else if (command === "insertChildNote") {
const parentNotePath = treeService.getNotePath(this.node);
noteCreateService.createNote(parentNotePath, {
type: type,
type,
mime,
isProtected: this.node.data.isProtected,
templateNoteId: templateNoteId
templateNoteId
});
} else if (command === "openNoteInSplit") {
const subContexts = appContext.tabManager.getActiveContext()?.getSubContexts();
const { ntxId } = subContexts?.[subContexts.length - 1] ?? {};
this.treeWidget.triggerCommand("openNewNoteSplit", { ntxId, notePath });
} else if (command === "openNoteInWindow") {
appContext.triggerCommand("openInWindow", {
notePath,
hoistedNoteId: appContext.tabManager.getActiveContext()?.hoistedNoteId
});
} else if (command === "openNoteInPopup") {
appContext.triggerCommand("openInPopup", { noteIdOrPath: notePath })
appContext.triggerCommand("openInPopup", { noteIdOrPath: notePath });
} else if (command === "convertNoteToAttachment") {
if (!(await dialogService.confirm(t("tree-context-menu.convert-to-attachment-confirm")))) {
return;
@@ -332,11 +352,11 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
toastService.showMessage(t("tree-context-menu.converted-to-attachments", { count: converted }));
} else if (command === "copyNotePathToClipboard") {
navigator.clipboard.writeText("#" + notePath);
navigator.clipboard.writeText(`#${ notePath}`);
} else if (command) {
this.treeWidget.triggerCommand<TreeCommandNames>(command, {
node: this.node,
notePath: notePath,
notePath,
noteId: this.node.data.noteId,
selectedOrActiveBranchIds: this.treeWidget.getSelectedOrActiveBranchIds(this.node),
selectedOrActiveNoteIds: this.treeWidget.getSelectedOrActiveNoteIds(this.node)
+4 -4
View File
@@ -1,9 +1,9 @@
import appContext from "./components/app_context.js";
import noteAutocompleteService from "./services/note_autocomplete.js";
import glob from "./services/glob.js";
import "boxicons/css/boxicons.min.css";
import "autocomplete.js/index_jquery.js";
import appContext from "./components/app_context.js";
import glob from "./services/glob.js";
import noteAutocompleteService from "./services/note_autocomplete.js";
glob.setupGlobs();
await appContext.earlyInit();
+28 -6
View File
@@ -2,18 +2,17 @@
:root {
--print-font-size: 11pt;
--ck-content-color-image-caption-background: transparent !important;
}
html,
body {
--print-font-family: var(--detail-font-family, sans-serif);
width: 100%;
height: 100%;
color: black;
}
@page {
margin: 2cm;
font-family: var(--print-font-family);
}
.note-list-widget.full-height,
@@ -26,6 +25,12 @@ body {
}
body[data-note-type="text"] .ck-content {
--ck-content-font-family: var(--print-font-family);
--ck-content-font-size: var(--print-font-size);
--ck-content-font-color: black;
--ck-content-line-height: 1.5;
--ck-content-color-image-caption-background: transparent;
font-size: var(--print-font-size);
text-align: justify;
}
@@ -144,6 +149,23 @@ span[style] {
}
/* #endregion */
/* #region Spreadsheet */
.spreadsheet-table {
border-collapse: collapse;
width: 100%;
font-size: var(--print-font-size);
print-color-adjust: exact;
-webkit-print-color-adjust: exact;
}
.spreadsheet-table td {
border: 0.5pt solid #ccc;
padding: 2pt 4pt;
overflow: hidden;
text-overflow: ellipsis;
}
/* #endregion */
/* #region Page breaks */
.page-break {
page-break-after: always;
@@ -154,4 +176,4 @@ span[style] {
.page-break::after {
display: none !important;
}
/* #endregion */
/* #endregion */
+55 -21
View File
@@ -1,9 +1,11 @@
import { renderSpreadsheetToHtml } from "@triliumnext/commons";
import { render } from "preact";
import { useCallback, useLayoutEffect, useRef } from "preact/hooks";
import FNote from "./entities/fnote";
import content_renderer from "./services/content_renderer";
import { applyInlineMermaid } from "./services/content_renderer_text";
import froca from "./services/froca";
import { dynamicRequire, isElectron } from "./services/utils";
import { CustomNoteList, useNoteViewType } from "./widgets/collections/NoteList";
@@ -18,6 +20,10 @@ export type PrintReport = {
} | {
type: "collection";
ignoredNoteIds: string[];
} | {
type: "error";
message: string;
stack?: string;
};
async function main() {
@@ -26,10 +32,26 @@ async function main() {
if (!noteId) return;
await import("./print.css");
const froca = (await import("./services/froca")).default;
// Browser printing relies on @page margins since there's no programmatic control.
// Electron uses printToPDF() margins instead, so we only inject this for the browser path.
if (!isElectron()) {
const style = document.createElement("style");
style.textContent = "@page { margin: 2cm; }";
document.head.appendChild(style);
}
// Load the user's font preferences so that --detail-font-family is available.
const fontLink = document.createElement("link");
fontLink.rel = "stylesheet";
fontLink.href = "api/fonts";
document.head.appendChild(fontLink);
const note = await froca.getNote(noteId);
render(<App note={note} noteId={noteId} />, document.body);
const bodyWrapper = document.createElement("div");
render(<App note={note} noteId={noteId} />, bodyWrapper);
document.body.appendChild(bodyWrapper);
}
function App({ note, noteId }: { note: FNote | null | undefined, noteId: string }) {
@@ -73,32 +95,43 @@ function SingleNoteRenderer({ note, onReady }: RendererProps) {
useLayoutEffect(() => {
async function load() {
if (note.type === "text") {
await import("@triliumnext/ckeditor5/src/theme/ck-content.css");
}
const { $renderedContent } = await content_renderer.getRenderedContent(note, { noChildrenList: true });
const container = containerRef.current!;
container.replaceChildren(...$renderedContent);
// Wait for all images to load.
const images = Array.from(container.querySelectorAll("img"));
await Promise.all(
images.map(img => {
if (img.complete) return Promise.resolve();
return new Promise<void>(resolve => {
img.addEventListener("load", () => resolve(), { once: true });
img.addEventListener("error", () => resolve(), { once: true });
});
})
);
if (note.type === "spreadsheet") {
// Render spreadsheet as HTML tables instead of an image.
const blob = await note.getBlob();
const html = renderSpreadsheetToHtml(blob?.content ?? "");
container.innerHTML = html;
} else {
if (note.type === "text") {
await import("@triliumnext/ckeditor5/src/theme/ck-content.css");
}
const { $renderedContent } = await content_renderer.getRenderedContent(note, { noChildrenList: true });
container.replaceChildren(...$renderedContent);
// Initialize mermaid.
if (note.type === "text") {
await applyInlineMermaid(container);
// Wait for all images to load.
const images = Array.from(container.querySelectorAll("img"));
await Promise.all(
images.map(img => {
if (img.complete) return Promise.resolve();
return new Promise<void>(resolve => {
img.addEventListener("load", () => resolve(), { once: true });
img.addEventListener("error", () => resolve(), { once: true });
});
})
);
// Initialize mermaid.
if (note.type === "text") {
await applyInlineMermaid(container);
}
}
// Check custom CSS.
await loadCustomCss(note);
// Wait for all fonts (including those from custom CSS) to finish loading.
await document.fonts.ready;
}
load().then(() => requestAnimationFrame(() => onReady({
@@ -124,6 +157,7 @@ function CollectionRenderer({ note, onReady, onProgressChanged }: RendererProps)
media="print"
onReady={async (data: PrintReport) => {
await loadCustomCss(note);
await document.fonts.ready;
onReady(data);
}}
onProgressChanged={onProgressChanged}
+11
View File
@@ -8,6 +8,17 @@ async function loadBootstrap() {
}
}
// Polyfill removed jQuery methods for autocomplete.js compatibility
($ as any).isArray = Array.isArray;
($ as any).isFunction = function(obj: any) { return typeof obj === 'function'; };
($ as any).isPlainObject = function(obj: any) {
if (obj == null || typeof obj !== 'object') { return false; }
const proto = Object.getPrototypeOf(obj);
if (proto === null) { return true; }
const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor;
return typeof Ctor === 'function' && Ctor === Object;
};
(window as any).$ = $;
(window as any).jQuery = $;
await loadBootstrap();
@@ -7,6 +7,10 @@ async function renderAttribute(attribute: FAttribute, renderIsInheritable: boole
const isInheritable = renderIsInheritable && attribute.isInheritable ? `(inheritable)` : "";
const $attr = $("<span>");
if (attribute.isAutoLink) {
return $attr;
}
if (attribute.type === "label") {
$attr.append(document.createTextNode(`#${attribute.name}${isInheritable}`));
@@ -15,9 +19,6 @@ async function renderAttribute(attribute: FAttribute, renderIsInheritable: boole
$attr.append(document.createTextNode(formatValue(attribute.value)));
}
} else if (attribute.type === "relation") {
if (attribute.isAutoLink) {
return $attr;
}
// when the relation has just been created, then it might not have a value
if (attribute.value) {
+137
View File
@@ -0,0 +1,137 @@
import { beforeEach, describe, expect, it, vi } from "vitest";
import { buildNote } from "../test/easy-froca";
import { setBooleanWithInheritance } from "./attributes";
import froca from "./froca";
import server from "./server.js";
// Spy on server methods to track calls
server.put = vi.fn(async () => ({})) as typeof server.put;
server.remove = vi.fn(async () => ({})) as typeof server.remove;
describe("Set boolean with inheritance", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("doesn't call server if value matches directly", async () => {
const noteWithLabel = buildNote({
title: "New note",
"#foo": ""
});
const noteWithoutLabel = buildNote({
title: "New note"
});
await setBooleanWithInheritance(noteWithLabel, "foo", true);
await setBooleanWithInheritance(noteWithoutLabel, "foo", false);
expect(server.put).not.toHaveBeenCalled();
expect(server.remove).not.toHaveBeenCalled();
});
it("sets boolean normally without inheritance", async () => {
const standaloneNote = buildNote({
title: "New note"
});
await setBooleanWithInheritance(standaloneNote, "foo", true);
expect(server.put).toHaveBeenCalledWith(`notes/${standaloneNote.noteId}/set-attribute`, {
type: "label",
name: "foo",
value: "",
isInheritable: false
}, undefined);
});
it("removes boolean normally without inheritance", async () => {
const standaloneNote = buildNote({
title: "New note",
"#foo": ""
});
const attributeId = standaloneNote.getLabel("foo")!.attributeId;
await setBooleanWithInheritance(standaloneNote, "foo", false);
expect(server.remove).toHaveBeenCalledWith(`notes/${standaloneNote.noteId}/attributes/${attributeId}`);
});
it("doesn't call server if value matches inherited", async () => {
const parentNote = buildNote({
title: "Parent note",
"#foo(inheritable)": "",
"children": [
{
title: "Child note"
}
]
});
const childNote = froca.getNoteFromCache(parentNote.children[0])!;
expect(childNote.isLabelTruthy("foo")).toBe(true);
await setBooleanWithInheritance(childNote, "foo", true);
expect(server.put).not.toHaveBeenCalled();
expect(server.remove).not.toHaveBeenCalled();
});
it("overrides boolean with inheritance", async () => {
const parentNote = buildNote({
title: "Parent note",
"#foo(inheritable)": "",
"children": [
{
title: "Child note"
}
]
});
const childNote = froca.getNoteFromCache(parentNote.children[0])!;
expect(childNote.isLabelTruthy("foo")).toBe(true);
await setBooleanWithInheritance(childNote, "foo", false);
expect(server.put).toHaveBeenCalledWith(`notes/${childNote.noteId}/set-attribute`, {
type: "label",
name: "foo",
value: "false",
isInheritable: false
}, undefined);
});
it("overrides boolean with inherited false", async () => {
const parentNote = buildNote({
title: "Parent note",
"#foo(inheritable)": "false",
"children": [
{
title: "Child note"
}
]
});
const childNote = froca.getNoteFromCache(parentNote.children[0])!;
expect(childNote.isLabelTruthy("foo")).toBe(false);
await setBooleanWithInheritance(childNote, "foo", true);
expect(server.put).toHaveBeenCalledWith(`notes/${childNote.noteId}/set-attribute`, {
type: "label",
name: "foo",
value: "",
isInheritable: false
}, undefined);
});
it("deletes override boolean with inherited false with already existing value", async () => {
const parentNote = buildNote({
title: "Parent note",
"#foo(inheritable)": "false",
"children": [
{
title: "Child note",
"#foo": "false",
}
]
});
const childNote = froca.getNoteFromCache(parentNote.children[0])!;
expect(childNote.isLabelTruthy("foo")).toBe(false);
await setBooleanWithInheritance(childNote, "foo", true);
expect(server.put).toBeCalledWith(`notes/${childNote.noteId}/set-attribute`, {
type: "label",
name: "foo",
value: "",
isInheritable: false
}, undefined);
});
});
+94 -17
View File
@@ -1,36 +1,67 @@
import server from "./server.js";
import froca from "./froca.js";
import type FNote from "../entities/fnote.js";
import type { AttributeRow } from "./load_results.js";
import { AttributeType } from "@triliumnext/commons";
import type FNote from "../entities/fnote.js";
import froca from "./froca.js";
import type { AttributeRow } from "./load_results.js";
import server from "./server.js";
async function addLabel(noteId: string, name: string, value: string = "", isInheritable = false) {
await server.put(`notes/${noteId}/attribute`, {
type: "label",
name: name,
value: value,
name,
value,
isInheritable
});
}
export async function setLabel(noteId: string, name: string, value: string = "", isInheritable = false) {
export async function setLabel(noteId: string, name: string, value: string = "", isInheritable = false, componentId?: string) {
await server.put(`notes/${noteId}/set-attribute`, {
type: "label",
name: name,
value: value,
isInheritable
});
name,
value,
isInheritable,
}, componentId);
}
export async function setRelation(noteId: string, name: string, value: string = "", isInheritable = false) {
await server.put(`notes/${noteId}/set-attribute`, {
type: "relation",
name: name,
value: value,
name,
value,
isInheritable
});
}
/**
* Sets a boolean label on the given note, taking inheritance into account. If the desired value matches the inherited
* value, any owned label will be removed to allow the inherited value to take effect. If the desired value differs
* from the inherited value, an owned label will be created or updated to reflect the desired value.
*
* When checking if the boolean value is set, don't use `note.hasLabel`; instead use `note.isLabelTruthy`.
*
* @param note the note on which to set the boolean label.
* @param labelName the name of the label to set.
* @param value the boolean value to set for the label.
*/
export async function setBooleanWithInheritance(note: FNote, labelName: string, value: boolean) {
const actualValue = note.isLabelTruthy(labelName);
if (actualValue === value) return;
const hasInheritedValue = !note.hasOwnedLabel(labelName) && note.hasLabel(labelName);
if (hasInheritedValue) {
if (value) {
setLabel(note.noteId, labelName, "");
} else {
// Label is inherited - override to false.
setLabel(note.noteId, labelName, "false");
}
} else if (value) {
setLabel(note.noteId, labelName, "");
} else {
removeOwnedLabelByName(note, labelName);
}
}
async function removeAttributeById(noteId: string, attributeId: string) {
await server.remove(`notes/${noteId}/attributes/${attributeId}`);
}
@@ -86,15 +117,15 @@ function removeOwnedRelationByName(note: FNote, relationName: string) {
* @param name the name of the attribute to set.
* @param value the value of the attribute to set.
*/
export async function setAttribute(note: FNote, type: "label" | "relation", name: string, value: string | null | undefined) {
export async function setAttribute(note: FNote, type: "label" | "relation", name: string, value: string | null | undefined, componentId?: string) {
if (value !== null && value !== undefined) {
// Create or update the attribute.
await server.put(`notes/${note.noteId}/set-attribute`, { type, name, value });
await server.put(`notes/${note.noteId}/set-attribute`, { type, name, value }, componentId);
} else {
// Remove the attribute if it exists on the server but we don't define a value for it.
const attributeId = note.getAttribute(type, name)?.attributeId;
if (attributeId) {
await server.remove(`notes/${note.noteId}/attributes/${attributeId}`);
await server.remove(`notes/${note.noteId}/attributes/${attributeId}`, componentId);
}
}
}
@@ -137,13 +168,59 @@ function isAffecting(attrRow: AttributeRow, affectedNote: FNote | null | undefin
return false;
}
/**
* Toggles whether a dangerous attribute is enabled or not. When an attribute is disabled, its name is prefixed with `disabled:`.
*
* Note that this work for non-dangerous attributes as well.
*
* If there are multiple attributes with the same name, all of them will be toggled at the same time.
*
* @param note the note whose attribute to change.
* @param type the type of dangerous attribute (label or relation).
* @param name the name of the dangerous attribute.
* @param willEnable whether to enable or disable the attribute.
* @returns a promise that will resolve when the request to the server completes.
*/
async function toggleDangerousAttribute(note: FNote, type: "label" | "relation", name: string, willEnable: boolean) {
const attrs = [
...note.getOwnedAttributes(type, name),
...note.getOwnedAttributes(type, `disabled:${name}`)
];
for (const attr of attrs) {
const baseName = getNameWithoutDangerousPrefix(attr.name);
const newName = willEnable ? baseName : `disabled:${baseName}`;
if (newName === attr.name) continue;
// We are adding and removing afterwards to avoid a flicker (because for a moment there would be no active content attribute anymore) because the operations are done in sequence and not atomically.
if (attr.type === "label") {
await setLabel(note.noteId, newName, attr.value);
} else {
await setRelation(note.noteId, newName, attr.value);
}
await removeAttributeById(note.noteId, attr.attributeId);
}
}
/**
* Returns the name of an attribute without the `disabled:` prefix, or the same name if it's not disabled.
* @param name the name of an attribute.
* @returns the name without the `disabled:` prefix.
*/
function getNameWithoutDangerousPrefix(name: string) {
return name.startsWith("disabled:") ? name.substring(9) : name;
}
export default {
addLabel,
setLabel,
setRelation,
setAttribute,
setBooleanWithInheritance,
removeAttributeById,
removeOwnedLabelByName,
removeOwnedRelationByName,
isAffecting
isAffecting,
toggleDangerousAttribute,
getNameWithoutDangerousPrefix
};
+32 -17
View File
@@ -1,12 +1,12 @@
import utils from "./utils.js";
import server from "./server.js";
import toastService, { type ToastOptionsWithRequiredId } from "./toast.js";
import appContext from "../components/app_context.js";
import type { ResolveOptions } from "../widgets/dialogs/delete_notes.js";
import froca from "./froca.js";
import hoistedNoteService from "./hoisted_note.js";
import ws from "./ws.js";
import appContext from "../components/app_context.js";
import { t } from "./i18n.js";
import type { ResolveOptions } from "../widgets/dialogs/delete_notes.js";
import server from "./server.js";
import toastService, { type ToastOptionsWithRequiredId } from "./toast.js";
import utils from "./utils.js";
import ws from "./ws.js";
// TODO: Deduplicate type with server
interface Response {
@@ -66,7 +66,7 @@ async function moveAfterBranch(branchIdsToMove: string[], afterBranchId: string)
}
}
async function moveToParentNote(branchIdsToMove: string[], newParentBranchId: string) {
async function moveToParentNote(branchIdsToMove: string[], newParentBranchId: string, componentId?: string) {
const newParentBranch = froca.getBranch(newParentBranchId);
if (!newParentBranch) {
return;
@@ -86,7 +86,7 @@ async function moveToParentNote(branchIdsToMove: string[], newParentBranchId: st
continue;
}
const resp = await server.put<Response>(`branches/${branchIdToMove}/move-to/${newParentBranchId}`);
const resp = await server.put<Response>(`branches/${branchIdToMove}/move-to/${newParentBranchId}`, undefined, componentId);
if (!resp.success) {
toastService.showError(resp.message);
@@ -103,7 +103,7 @@ async function moveToParentNote(branchIdsToMove: string[], newParentBranchId: st
* @param moveToParent whether to automatically go to the parent note path after a succesful delete. Usually makes sense if deleting the active note(s).
* @returns promise that returns false if the operation was cancelled or there was nothing to delete, true if the operation succeeded.
*/
async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = false, moveToParent = true) {
async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = false, moveToParent = true, componentId?: string) {
branchIdsToDelete = filterRootNote(branchIdsToDelete);
if (branchIdsToDelete.length === 0) {
@@ -120,7 +120,7 @@ async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = f
if (moveToParent) {
try {
await activateParentNotePath();
await activateParentNotePath(branchIdsToDelete);
} catch (e) {
console.error(e);
}
@@ -139,9 +139,9 @@ async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = f
const branch = froca.getBranch(branchIdToDelete);
if (deleteAllClones && branch) {
await server.remove(`notes/${branch.noteId}${query}`);
await server.remove(`notes/${branch.noteId}${query}`, componentId);
} else {
await server.remove(`branches/${branchIdToDelete}${query}`);
await server.remove(`branches/${branchIdToDelete}${query}`, componentId);
}
}
@@ -152,13 +152,28 @@ async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = f
return true;
}
async function activateParentNotePath() {
// this is not perfect, maybe we should find the next/previous sibling, but that's more complex
async function activateParentNotePath(branchIdsToDelete: string[]) {
const activeContext = appContext.tabManager.getActiveContext();
const parentNotePathArr = activeContext?.notePathArray.slice(0, -1);
const activeNotePath = activeContext?.notePathArray ?? [];
if (parentNotePathArr && parentNotePathArr.length > 0) {
activeContext?.setNote(parentNotePathArr.join("/"));
// Find the deleted branch that appears earliest in the active note's path
let earliestIndex = activeNotePath.length;
for (const branchId of branchIdsToDelete) {
const branch = froca.getBranch(branchId);
if (branch) {
const index = activeNotePath.indexOf(branch.noteId);
if (index !== -1 && index < earliestIndex) {
earliestIndex = index;
}
}
}
// Navigate to the parent of the highest deleted ancestor
if (earliestIndex < activeNotePath.length) {
const parentPath = activeNotePath.slice(0, earliestIndex);
if (parentPath.length > 0) {
await activeContext?.setNote(parentPath.join("/"));
}
}
}
+10 -8
View File
@@ -2,7 +2,6 @@ import { h, VNode } from "preact";
import BasicWidget, { ReactWrappedWidget } from "../widgets/basic_widget.js";
import RightPanelWidget from "../widgets/right_panel_widget.js";
import froca from "./froca.js";
import type { Entity } from "./frontend_script_api.js";
import { WidgetDefinitionWithType } from "./frontend_script_api_preact.js";
import { t } from "./i18n.js";
@@ -27,7 +26,7 @@ type WithNoteId<T> = T & {
};
export type Widget = WithNoteId<(LegacyWidget | WidgetDefinitionWithType)>;
async function getAndExecuteBundle(noteId: string, originEntity = null, script = null, params = null) {
async function getAndExecuteBundle(noteId: string, originEntity: Entity | null = null, script: string | null = null, params: string | null = null) {
const bundle = await server.post<Bundle>(`script/bundle/${noteId}`, {
script,
params
@@ -38,15 +37,18 @@ async function getAndExecuteBundle(noteId: string, originEntity = null, script =
export type ParentName = "left-pane" | "center-pane" | "note-detail-pane" | "right-pane";
export async function executeBundle(bundle: Bundle, originEntity?: Entity | null, $container?: JQuery<HTMLElement>) {
export async function executeBundleWithoutErrorHandling(bundle: Bundle, originEntity?: Entity | null, $container?: JQuery<HTMLElement>) {
const apiContext = await ScriptContext(bundle.noteId, bundle.allNoteIds, originEntity, $container);
return await function () {
return eval(`const apiContext = this; (async function() { ${bundle.script}\r\n})()`);
}.call(apiContext);
}
export async function executeBundle(bundle: Bundle, originEntity?: Entity | null, $container?: JQuery<HTMLElement>) {
try {
return await function () {
return eval(`const apiContext = this; (async function() { ${bundle.script}\r\n})()`);
}.call(apiContext);
} catch (e: any) {
showErrorForScriptNote(bundle.noteId, t("toast.bundle-error.message", { message: e.message }));
return await executeBundleWithoutErrorHandling(bundle, originEntity, $container);
} catch (e: unknown) {
showErrorForScriptNote(bundle.noteId, t("toast.bundle-error.message", { message: getErrorMessage(e) }));
logError("Widget initialization failed: ", e);
}
}
+16 -16
View File
@@ -1,3 +1,6 @@
import { t } from "./i18n.js";
import toast from "./toast.js";
export function copyText(text: string) {
if (!text) {
return;
@@ -6,29 +9,26 @@ export function copyText(text: string) {
if (navigator.clipboard) {
navigator.clipboard.writeText(text);
return true;
} else {
// Fallback method: https://stackoverflow.com/a/72239825
const textArea = document.createElement("textarea");
textArea.value = text;
try {
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
return document.execCommand('copy');
} finally {
document.body.removeChild(textArea);
}
}
// Fallback method: https://stackoverflow.com/a/72239825
const textArea = document.createElement("textarea");
textArea.value = text;
try {
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
return document.execCommand('copy');
} finally {
document.body.removeChild(textArea);
}
} catch (e) {
console.warn(e);
return false;
}
}
export async function copyTextWithToast(text: string) {
const t = (await import("./i18n.js")).t;
const toast = (await import("./toast.js")).default;
export function copyTextWithToast(text: string) {
if (copyText(text)) {
toast.showMessage(t("clipboard.copy_success"));
} else {
@@ -0,0 +1,9 @@
.rendered-content.no-preview > div {
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
height: 100%;
font-size: 500%;
flex-grow: 1;
}
+114 -42
View File
@@ -1,18 +1,24 @@
import renderService from "./render.js";
import "./content_renderer.css";
import { normalizeMimeTypeForCKEditor, renderToHtml, type TextRepresentationResponse } from "@triliumnext/commons";
import DOMPurify from "dompurify";
import { h, render } from "preact";
import WheelZoom from 'vanilla-js-wheel-zoom';
import FAttachment from "../entities/fattachment.js";
import FNote from "../entities/fnote.js";
import imageContextMenuService from "../menus/image_context_menu.js";
import { t } from "../services/i18n.js";
import renderText, { postProcessRichContent, renderChildrenList } from "./content_renderer_text.js";
import renderDoc from "./doc_renderer.js";
import { loadElkIfNeeded, postprocessMermaidSvg } from "./mermaid.js";
import openService from "./open.js";
import protectedSessionService from "./protected_session.js";
import protectedSessionHolder from "./protected_session_holder.js";
import openService from "./open.js";
import utils from "./utils.js";
import FNote from "../entities/fnote.js";
import FAttachment from "../entities/fattachment.js";
import imageContextMenuService from "../menus/image_context_menu.js";
import renderService from "./render.js";
import server from "./server.js";
import { applySingleBlockSyntaxHighlight } from "./syntax_highlight.js";
import { loadElkIfNeeded, postprocessMermaidSvg } from "./mermaid.js";
import renderDoc from "./doc_renderer.js";
import { t } from "../services/i18n.js";
import WheelZoom from 'vanilla-js-wheel-zoom';
import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons";
import renderText from "./content_renderer_text.js";
import utils, { getErrorMessage } from "./utils.js";
let idCounter = 1;
@@ -22,6 +28,13 @@ export interface RenderOptions {
imageHasZoom?: boolean;
/** If enabled, it will prevent the default behavior in which an empty note would display a list of children. */
noChildrenList?: boolean;
/** If enabled, it will prevent rendering of included notes. */
noIncludedNotes?: boolean;
/** If enabled, it will include archived notes when rendering children list. */
includeArchivedNotes?: boolean;
/** Set of note IDs that have already been seen during rendering to prevent infinite recursion. */
seenNoteIds?: Set<string>;
showTextRepresentation?: boolean;
}
const CODE_MIME_TYPES = new Set(["application/json"]);
@@ -42,18 +55,23 @@ export async function getRenderedContent(this: {} | { ctx: string }, entity: FNo
if (type === "text" || type === "book") {
await renderText(entity, $renderedContent, options);
} else if (type === "markdown") {
await renderMarkdown(entity, $renderedContent, options);
} else if (type === "code") {
await renderCode(entity, $renderedContent);
} else if (["image", "canvas", "mindMap"].includes(type)) {
renderImage(entity, $renderedContent, options);
} else if (["image", "canvas", "mindMap", "spreadsheet"].includes(type)) {
await renderImage(entity, $renderedContent, options);
} else if (!options.tooltip && ["file", "pdf", "audio", "video"].includes(type)) {
renderFile(entity, type, $renderedContent);
await renderFile(entity, type, $renderedContent, options);
} else if (type === "mermaid") {
await renderMermaid(entity, $renderedContent);
} else if (type === "render" && entity instanceof FNote) {
const $content = $("<div>");
await renderService.render(entity, $content);
await renderService.render(entity, $content, (e) => {
const $error = $("<div>").addClass("admonition caution").text(typeof e === "string" ? e : getErrorMessage(e));
$content.empty().append($error);
});
$renderedContent.append($content);
} else if (type === "doc" && "noteId" in entity) {
@@ -64,18 +82,9 @@ export async function getRenderedContent(this: {} | { ctx: string }, entity: FNo
$renderedContent.append($("<div>").append("<div>This note is protected and to access it you need to enter password.</div>").append("<br/>").append($button));
} else if (entity instanceof FNote) {
$renderedContent
.css("display", "flex")
.css("flex-direction", "column");
$renderedContent.addClass("no-preview");
$renderedContent.append(
$("<div>")
.css("display", "flex")
.css("justify-content", "space-around")
.css("align-items", "center")
.css("height", "100%")
.css("font-size", "500%")
.css("flex-grow", "1")
.append($("<span>").addClass(entity.getIcon()))
$("<div>").append($("<span>").addClass(entity.getIcon()))
);
if (entity.type === "webView" && entity.hasLabel("webViewSrc")) {
@@ -113,6 +122,31 @@ export async function getRenderedContent(this: {} | { ctx: string }, entity: FNo
};
}
/**
* Renders a markdown note by converting its source to CKEditor-compatible HTML,
* then running the same post-render pipeline as text notes (included notes,
* math, reference links, Mermaid, code highlight) so the preview matches what
* the user sees in the Markdown note type's preview pane.
*/
async function renderMarkdown(note: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions) {
const blob = await note.getBlob();
const source = blob?.content ?? "";
if (!source.trim()) {
if (note instanceof FNote && !options.noChildrenList) {
await renderChildrenList($renderedContent, note, options.includeArchivedNotes ?? false);
}
return;
}
const html = renderToHtml(source, note.title, {
sanitize: (dirty) => DOMPurify.sanitize(dirty),
wikiLink: { formatHref: (id) => `#root/${id}` }
});
$renderedContent.append($('<div class="ck-content">').html(html));
await postProcessRichContent(note, $renderedContent, options);
}
/**
* Renders a code note, by displaying its content and applying syntax highlighting based on the selected MIME type.
*/
@@ -134,7 +168,7 @@ async function renderCode(note: FNote | FAttachment, $renderedContent: JQuery<HT
await applySingleBlockSyntaxHighlight($codeBlock, normalizeMimeTypeForCKEditor(note.mime));
}
function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
async function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
const encodedTitle = encodeURIComponent(entity.title);
let url;
@@ -142,17 +176,18 @@ function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLE
if (entity instanceof FNote) {
url = `api/images/${entity.noteId}/${encodedTitle}?${Math.random()}`;
} else if (entity instanceof FAttachment) {
url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}">`;
url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}`;
}
$renderedContent // styles needed for the zoom to work well
.css("display", "flex")
.css("align-items", "center")
.css("justify-content", "center");
.css("justify-content", "center")
.css("flex-direction", "column"); // OCR text is displayed below the image.
const $img = $("<img>")
.attr("src", url || "")
.attr("id", "attachment-image-" + idCounter++)
.attr("id", `attachment-image-${idCounter++}`)
.css("max-width", "100%");
$renderedContent.append($img);
@@ -174,9 +209,35 @@ function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLE
}
imageContextMenuService.setupContextMenu($img);
if (entity instanceof FNote && options.showTextRepresentation) {
await addOCRTextIfAvailable(entity, $renderedContent);
}
}
function renderFile(entity: FNote | FAttachment, type: string, $renderedContent: JQuery<HTMLElement>) {
async function addOCRTextIfAvailable(note: FNote, $content: JQuery<HTMLElement>) {
try {
const data = await server.get<TextRepresentationResponse>(`ocr/notes/${note.noteId}/text`);
if (data.success && data.hasOcr && data.text) {
const $ocrSection = $(`
<div class="ocr-text-section">
<div class="ocr-header">
<span class="bx bx-text"></span> ${t("ocr.extracted_text")}
</div>
<div class="ocr-content"></div>
</div>
`);
$ocrSection.find('.ocr-content').text(data.text);
$content.append($ocrSection);
}
} catch (error) {
// Silently fail if OCR API is not available
console.debug('Failed to fetch OCR text:', error);
}
}
async function renderFile(entity: FNote | FAttachment, type: string, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
let entityType, entityId;
if (entity instanceof FNote) {
@@ -189,13 +250,17 @@ function renderFile(entity: FNote | FAttachment, type: string, $renderedContent:
throw new Error(`Can't recognize entity type of '${entity}'`);
}
const $content = $('<div style="display: flex; flex-direction: column; height: 100%;">');
const $content = $('<div style="display: flex; flex-direction: column; height: 100%; justify-content: end;">');
if (type === "pdf") {
const $pdfPreview = $('<iframe class="pdf-preview" style="width: 100%; flex-grow: 100;"></iframe>');
$pdfPreview.attr("src", openService.getUrlForDownload(`api/${entityType}/${entityId}/open`));
const url = `../../api/${entityType}/${entityId}/open`;
const $viewer = $(`<div style="height: 100%">`);
const PdfViewer = (await import("../widgets/type_widgets/file/PdfViewer")).default;
render(h(PdfViewer, {pdfUrl: url, editable: false, toolbar: false}), $viewer.get(0)!);
$content.append($viewer);
$content.append($pdfPreview);
} else if (type === "audio") {
const $audioPreview = $("<audio controls></audio>")
.attr("src", openService.getUrlForDownload(`api/${entityType}/${entityId}/open-partial`))
@@ -212,33 +277,37 @@ function renderFile(entity: FNote | FAttachment, type: string, $renderedContent:
$content.append($videoPreview);
}
if (entity instanceof FNote && options.showTextRepresentation) {
await addOCRTextIfAvailable(entity, $content);
}
if (entityType === "notes" && "noteId" in entity) {
// TODO: we should make this available also for attachments, but there's a problem with "Open externally" support
// in attachment list
const $downloadButton = $(`
<button class="file-download btn btn-primary" type="button">
<span class="bx bx-download"></span>
<span class="tn-icon bx bx-download"></span>
${t("file_properties.download")}
</button>
`);
const $openButton = $(`
<button class="file-open btn btn-primary" type="button">
<span class="bx bx-link-external"></span>
<span class="tn-icon bx bx-link-external"></span>
${t("file_properties.open")}
</button>
`);
$downloadButton.on("click", (e) => {
e.stopPropagation();
openService.downloadFileNote(entity.noteId)
openService.downloadFileNote(entity, null, null);
});
$openButton.on("click", async (e) => {
const iconEl = $openButton.find("> .bx");
iconEl.removeClass("bx bx-link-external");
iconEl.addClass("bx bx-loader spin");
e.stopPropagation();
await openService.openNoteExternally(entity.noteId, entity.mime)
await openService.openNoteExternally(entity.noteId, entity.mime);
iconEl.removeClass("bx bx-loader spin");
iconEl.addClass("bx bx-link-external");
});
@@ -266,7 +335,7 @@ async function renderMermaid(note: FNote | FAttachment, $renderedContent: JQuery
try {
await loadElkIfNeeded(mermaid, content);
const { svg } = await mermaid.mermaidAPI.render("in-mermaid-graph-" + idCounter++, content);
const { svg } = await mermaid.mermaidAPI.render(`in-mermaid-graph-${idCounter++}`, content);
$renderedContent.append($(postprocessMermaidSvg(svg)));
} catch (e) {
@@ -285,10 +354,13 @@ function getRenderingType(entity: FNote | FAttachment) {
}
const mime = "mime" in entity && entity.mime;
const isIconPack = entity instanceof FNote && entity.hasLabel("iconPack");
if (type === "file" && mime === "application/pdf") {
type = "pdf";
} else if ((type === "file" || type === "viewConfig") && mime && CODE_MIME_TYPES.has(mime)) {
} else if (type === "code" && entity instanceof FNote && entity.isMarkdown()) {
type = "markdown";
} else if ((type === "file" || type === "viewConfig") && mime && CODE_MIME_TYPES.has(mime) && !isIconPack) {
type = "code";
} else if (type === "file" && mime && mime.startsWith("audio/")) {
type = "audio";
@@ -0,0 +1,132 @@
import { trimIndentation } from "@triliumnext/commons";
import { describe, expect, it } from "vitest";
import { buildNote } from "../test/easy-froca";
import renderText from "./content_renderer_text";
describe("Text content renderer", () => {
it("renders included note", async () => {
const contentEl = document.createElement("div");
const includedNote = buildNote({
title: "Included note",
content: "<p>This is the included note.</p>"
});
const note = buildNote({
title: "New note",
content: trimIndentation`
<p>
Hi there
</p>
<section class="include-note" data-note-id="${includedNote.noteId}" data-box-size="medium">
&nbsp;
</section>
`
});
await renderText(note, $(contentEl));
expect(contentEl.querySelectorAll("section.include-note").length).toBe(1);
expect(contentEl.querySelectorAll("section.include-note p").length).toBe(1);
});
it("skips rendering included note", async () => {
const contentEl = document.createElement("div");
const includedNote = buildNote({
title: "Included note",
content: "<p>This is the included note.</p>"
});
const note = buildNote({
title: "New note",
content: trimIndentation`
<p>
Hi there
</p>
<section class="include-note" data-note-id="${includedNote.noteId}" data-box-size="medium">
&nbsp;
</section>
`
});
await renderText(note, $(contentEl), { noIncludedNotes: true });
expect(contentEl.querySelectorAll("section.include-note").length).toBe(0);
});
it("doesn't enter infinite loop on direct recursion", async () => {
const contentEl = document.createElement("div");
const note = buildNote({
title: "New note",
id: "Y7mBwmRjQyb4",
content: trimIndentation`
<p>
Hi there
</p>
<section class="include-note" data-note-id="Y7mBwmRjQyb4" data-box-size="medium">
&nbsp;
</section>
<section class="include-note" data-note-id="Y7mBwmRjQyb4" data-box-size="medium">
&nbsp;
</section>
`
});
await renderText(note, $(contentEl));
expect(contentEl.querySelectorAll("section.include-note").length).toBe(0);
});
it("doesn't enter infinite loop on indirect recursion", async () => {
const contentEl = document.createElement("div");
buildNote({
id: "first",
title: "Included note",
content: trimIndentation`\
<p>This is the included note.</p>
<section class="include-note" data-note-id="second" data-box-size="medium">
&nbsp;
</section>
`
});
const note = buildNote({
id: "second",
title: "New note",
content: trimIndentation`
<p>
Hi there
</p>
<section class="include-note" data-note-id="first" data-box-size="medium">
&nbsp;
</section>
`
});
await renderText(note, $(contentEl));
expect(contentEl.querySelectorAll("section.include-note").length).toBe(1);
});
it("renders children list when note is empty", async () => {
const contentEl = document.createElement("div");
const parentNote = buildNote({
title: "Parent note",
children: [
{ title: "Child note 1" },
{ title: "Child note 2" }
]
});
await renderText(parentNote, $(contentEl));
const items = contentEl.querySelectorAll("a");
expect(items.length).toBe(2);
expect(items[0].textContent).toBe("Child note 1");
expect(items[1].textContent).toBe("Child note 2");
});
it("skips archived notes in children list", async () => {
const contentEl = document.createElement("div");
const parentNote = buildNote({
title: "Parent note",
children: [
{ title: "Child note 1" },
{ title: "Child note 2", "#archived": "" },
{ title: "Child note 3" }
]
});
await renderText(parentNote, $(contentEl));
const items = contentEl.querySelectorAll("a");
expect(items.length).toBe(2);
expect(items[0].textContent).toBe("Child note 1");
expect(items[1].textContent).toBe("Child note 3");
});
});
+143 -29
View File
@@ -15,31 +15,48 @@ export default async function renderText(note: FNote | FAttachment, $renderedCon
if (blob && !isHtmlEmpty(blob.content)) {
$renderedContent.append($('<div class="ck-content">').html(blob.content));
await renderIncludedNotes($renderedContent[0]);
if ($renderedContent.find("span.math-tex").length > 0) {
renderMathInElement($renderedContent[0], { trust: true });
}
const getNoteIdFromLink = (el: HTMLElement) => tree.getNoteIdFromUrl($(el).attr("href") || "");
const referenceLinks = $renderedContent.find<HTMLAnchorElement>("a.reference-link");
const noteIdsToPrefetch = referenceLinks.map((i, el) => getNoteIdFromLink(el));
await froca.getNotes(noteIdsToPrefetch);
for (const el of referenceLinks) {
const innerSpan = document.createElement("span");
await link.loadReferenceLinkTitle($(innerSpan), el.href);
el.replaceChildren(innerSpan);
}
await rewriteMermaidDiagramsInContainer($renderedContent[0] as HTMLDivElement);
await formatCodeBlocks($renderedContent);
await postProcessRichContent(note, $renderedContent, options);
} else if (note instanceof FNote && !options.noChildrenList) {
await renderChildrenList($renderedContent, note);
await renderChildrenList($renderedContent, note, options.includeArchivedNotes ?? false);
}
}
async function renderIncludedNotes(contentEl: HTMLElement) {
/**
* Apply the post-render passes that make CKEditor-compatible HTML fully
* interactive: expand `<section class="include-note">`, render inline math and
* Mermaid diagrams, rewrite reference-link titles, and highlight code blocks.
* Assumes the caller has already appended the HTML inside a `.ck-content` child
* of `$renderedContent`.
*/
export async function postProcessRichContent(note: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
const seenNoteIds = options.seenNoteIds ?? new Set<string>();
seenNoteIds.add("noteId" in note ? note.noteId : note.attachmentId);
if (!options.noIncludedNotes) {
await renderIncludedNotes($renderedContent[0], seenNoteIds);
} else {
$renderedContent.find("section.include-note").remove();
}
if ($renderedContent.find("span.math-tex").length > 0) {
renderMathInElement($renderedContent[0], { trust: true });
}
const getNoteIdFromLink = (el: HTMLElement) => tree.getNoteIdFromUrl($(el).attr("href") || "");
const referenceLinks = $renderedContent.find<HTMLAnchorElement>("a.reference-link");
const noteIdsToPrefetch = referenceLinks.map((i, el) => getNoteIdFromLink(el));
await froca.getNotes(noteIdsToPrefetch);
await Promise.all(referenceLinks.toArray().map(async (el) => {
const innerSpan = document.createElement("span");
await link.loadReferenceLinkTitle($(innerSpan), el.getAttribute("href"));
el.replaceChildren(innerSpan);
}));
await rewriteMermaidDiagramsInContainer($renderedContent[0] as HTMLDivElement);
await formatCodeBlocks($renderedContent);
}
async function renderIncludedNotes(contentEl: HTMLElement, seenNoteIds: Set<string>) {
// TODO: Consider duplicating with server's share/content_renderer.ts.
const includeNoteEls = contentEl.querySelectorAll("section.include-note");
@@ -66,7 +83,15 @@ async function renderIncludedNotes(contentEl: HTMLElement) {
continue;
}
const renderedContent = (await content_renderer.getRenderedContent(note)).$renderedContent;
if (seenNoteIds.has(noteId)) {
console.warn(`Skipping inclusion of ${noteId} to avoid circular reference.`);
includeNoteEl.remove();
continue;
}
const renderedContent = (await content_renderer.getRenderedContent(note, {
seenNoteIds
})).$renderedContent;
includeNoteEl.replaceChildren(...renderedContent);
}
}
@@ -86,36 +111,125 @@ export async function rewriteMermaidDiagramsInContainer(container: HTMLDivElemen
}
}
/**
* Per-container cache of rendered mermaid SVG keyed by diagram source text.
* Populated after each successful render; reused on subsequent renders to
* avoid flicker when the preview HTML is regenerated (e.g. live markdown
* editing). Entries for diagrams no longer present in the container are
* evicted on each run so the cache can't grow unbounded.
*/
const mermaidSvgCache = new WeakMap<HTMLElement, Map<string, string>>();
/**
* Per-container, ordered snapshot of the most recently rendered SVGs. Used as
* a positional placeholder so edits to a diagram's source keep the previous
* SVG visible while the new one renders offscreen.
*/
const mermaidLastRenderedByPosition = new WeakMap<HTMLElement, string[]>();
export async function applyInlineMermaid(container: HTMLDivElement) {
// Initialize mermaid
const nodes = Array.from(container.querySelectorAll<HTMLElement>("div.mermaid-diagram"));
if (!nodes.length) {
mermaidLastRenderedByPosition.delete(container);
return;
}
let cache = mermaidSvgCache.get(container);
if (!cache) {
cache = new Map();
mermaidSvgCache.set(container, cache);
}
const lastRendered = mermaidLastRenderedByPosition.get(container) ?? [];
// Decide per node: exact cache hit → paint final SVG; source changed →
// paint the previous SVG (by position) as a placeholder and queue an
// offscreen re-render. This way the user keeps seeing the old diagram
// until mermaid has finished producing the new one.
const pending: Array<{ visible: HTMLElement; source: string }> = [];
const seenSources = new Set<string>();
for (const [ index, node ] of nodes.entries()) {
const source = (node.textContent ?? "").trim();
seenSources.add(source);
const cached = cache.get(source);
if (cached) {
node.innerHTML = cached;
node.setAttribute("data-processed", "true");
continue;
}
pending.push({ visible: node, source });
const placeholder = lastRendered[index];
if (placeholder) {
node.innerHTML = placeholder;
}
}
// Evict cache entries whose source is no longer present.
for (const key of [ ...cache.keys() ]) {
if (!seenSources.has(key)) cache.delete(key);
}
if (!pending.length) {
mermaidLastRenderedByPosition.set(container, nodes.map((n) => n.innerHTML));
return;
}
const mermaid = (await import("mermaid")).default;
mermaid.initialize(getMermaidConfig());
const nodes = Array.from(container.querySelectorAll<HTMLElement>("div.mermaid-diagram"));
// Render clones offscreen so the visible nodes keep showing the placeholder
// until the new SVG is ready. Keeps mermaid away from our placeholder SVG
// (which would otherwise confuse its text-based parser).
const offscreen = document.createElement("div");
offscreen.style.cssText = "position:absolute;left:-9999px;top:-9999px;width:0;height:0;overflow:hidden;visibility:hidden;";
document.body.appendChild(offscreen);
const pairs = pending.map(({ visible, source }) => {
const clone = document.createElement("div");
clone.className = "mermaid-diagram";
clone.textContent = source;
offscreen.appendChild(clone);
return { visible, clone, source };
});
try {
await mermaid.run({ nodes });
await mermaid.run({ nodes: pairs.map((p) => p.clone) });
for (const { visible, clone, source } of pairs) {
if (clone.getAttribute("data-processed") !== "true") continue;
const svg = clone.innerHTML;
visible.innerHTML = svg;
visible.setAttribute("data-processed", "true");
cache.set(source, svg);
}
} catch (e) {
console.log(e);
console.error(e);
} finally {
offscreen.remove();
}
mermaidLastRenderedByPosition.set(container, nodes.map((n) => n.innerHTML));
}
async function renderChildrenList($renderedContent: JQuery<HTMLElement>, note: FNote) {
export async function renderChildrenList($renderedContent: JQuery<HTMLElement>, note: FNote, includeArchivedNotes: boolean) {
let childNoteIds = note.getChildNoteIds();
if (!childNoteIds.length) {
return;
}
$renderedContent.css("padding", "10px");
$renderedContent.addClass("text-with-ellipsis");
// just load the first 10 child notes
if (childNoteIds.length > 10) {
childNoteIds = childNoteIds.slice(0, 10);
}
// just load the first 10 child notes
const childNotes = await froca.getNotes(childNoteIds);
for (const childNote of childNotes) {
if (childNote.isArchived && !includeArchivedNotes) continue;
$renderedContent.append(
await link.createLink(`${note.noteId}/${childNote.noteId}`, {
showTooltip: false,
@@ -0,0 +1,14 @@
import { describe, expect, it } from "vitest";
import { getReadableTextColor } from "./css_class_manager";
describe("getReadableTextColor", () => {
it("doesn't crash for invalid color", () => {
expect(getReadableTextColor("RandomColor")).toBe("#000");
});
it("tolerates different casing", () => {
expect(getReadableTextColor("Blue"))
.toBe(getReadableTextColor("blue"));
});
});
+14 -13
View File
@@ -1,21 +1,22 @@
import clsx from "clsx";
import {readCssVar} from "../utils/css-var";
import Color, { ColorInstance } from "color";
import {readCssVar} from "../utils/css-var";
const registeredClasses = new Set<string>();
const colorsWithHue = new Set<string>();
// Read the color lightness limits defined in the theme as CSS variables
const lightThemeColorMaxLightness = readCssVar(
document.documentElement,
"tree-item-light-theme-max-color-lightness"
).asNumber(70);
document.documentElement,
"tree-item-light-theme-max-color-lightness"
).asNumber(70);
const darkThemeColorMinLightness = readCssVar(
document.documentElement,
"tree-item-dark-theme-min-color-lightness"
).asNumber(50);
document.documentElement,
"tree-item-dark-theme-min-color-lightness"
).asNumber(50);
function createClassForColor(colorString: string | null) {
if (!colorString?.trim()) return "";
@@ -27,7 +28,7 @@ function createClassForColor(colorString: string | null) {
if (!registeredClasses.has(className)) {
const adjustedColor = adjustColorLightness(color, lightThemeColorMaxLightness!,
darkThemeColorMinLightness!);
darkThemeColorMinLightness!);
const hue = getHue(color);
$("head").append(`<style>
@@ -48,9 +49,9 @@ function createClassForColor(colorString: string | null) {
return clsx("use-note-color", className, colorsWithHue.has(className) && "with-hue");
}
function parseColor(color: string) {
export function parseColor(color: string) {
try {
return Color(color);
return Color(color.toLowerCase());
} catch (ex) {
console.error(ex);
}
@@ -76,7 +77,7 @@ function adjustColorLightness(color: ColorInstance, lightThemeMaxLightness: numb
}
/** Returns the hue of the specified color, or undefined if the color is grayscale. */
function getHue(color: ColorInstance) {
export function getHue(color: ColorInstance) {
const hslColor = color.hsl();
if (hslColor.saturationl() > 0) {
return hslColor.hue();
@@ -84,8 +85,8 @@ function getHue(color: ColorInstance) {
}
export function getReadableTextColor(bgColor: string) {
const colorInstance = Color(bgColor);
return colorInstance.isLight() ? "#000" : "#fff";
const colorInstance = parseColor(bgColor);
return !colorInstance || colorInstance?.isLight() ? "#000" : "#fff";
}
export default {
+62 -3
View File
@@ -1,4 +1,5 @@
import { dayjs } from "@triliumnext/commons";
import type { FNoteRow } from "../entities/fnote.js";
import froca from "./froca.js";
import server from "./server.js";
@@ -14,8 +15,13 @@ async function getTodayNote() {
return await getDayNote(dayjs().format("YYYY-MM-DD"));
}
async function getDayNote(date: string) {
const note = await server.get<FNoteRow>(`special-notes/days/${date}`, "date-note");
async function getDayNote(date: string, calendarRootId?: string) {
let url = `special-notes/days/${date}`;
if (calendarRootId) {
url += `?calendarRootId=${calendarRootId}`;
}
const note = await server.get<FNoteRow>(url, "date-note");
await ws.waitForMaxKnownEntityChangeId();
@@ -78,6 +84,55 @@ async function createSearchNote(opts = {}) {
return await froca.getNote(note.noteId);
}
async function createLlmChat() {
const note = await server.post<FNoteRow>("special-notes/llm-chat");
await ws.waitForMaxKnownEntityChangeId();
return await froca.getNote(note.noteId);
}
/**
* Gets the most recently modified LLM chat.
* Returns null if no chat exists.
*/
async function getMostRecentLlmChat() {
const note = await server.get<FNoteRow | null>("special-notes/most-recent-llm-chat");
if (!note) {
return null;
}
await ws.waitForMaxKnownEntityChangeId();
return await froca.getNote(note.noteId);
}
/**
* Gets the most recent LLM chat, or creates a new one if none exists.
* Used by sidebar chat for persistent conversations across page refreshes.
*/
async function getOrCreateLlmChat() {
const note = await server.get<FNoteRow>("special-notes/get-or-create-llm-chat");
await ws.waitForMaxKnownEntityChangeId();
return await froca.getNote(note.noteId);
}
export interface RecentLlmChat {
noteId: string;
title: string;
dateModified: string;
}
/**
* Gets a list of recent LLM chats for the history popup.
*/
async function getRecentLlmChats(limit: number = 10): Promise<RecentLlmChat[]> {
return await server.get<RecentLlmChat[]>(`special-notes/recent-llm-chats?limit=${limit}`);
}
export default {
getInboxNote,
getTodayNote,
@@ -88,5 +143,9 @@ export default {
getMonthNote,
getYearNote,
createSqlConsole,
createSearchNote
createSearchNote,
createLlmChat,
getMostRecentLlmChat,
getOrCreateLlmChat,
getRecentLlmChats
};
+3 -2
View File
@@ -1,9 +1,11 @@
import { Modal } from "bootstrap";
import appContext from "../components/app_context.js";
import type { ConfirmDialogOptions, ConfirmDialogResult, ConfirmWithMessageOptions, MessageType } from "../widgets/dialogs/confirm.js";
import { InfoExtraProps } from "../widgets/dialogs/info.jsx";
import type { PromptDialogOptions } from "../widgets/dialogs/prompt.js";
import { focusSavedElement, saveFocusedElement } from "./focus.js";
import { InfoExtraProps } from "../widgets/dialogs/info.jsx";
import keyboardActionsService from "./keyboard_actions.js";
export async function openDialog($dialog: JQuery<HTMLElement>, closeActDialog = true, config?: Partial<Modal.Options>) {
if (closeActDialog) {
@@ -25,7 +27,6 @@ export async function openDialog($dialog: JQuery<HTMLElement>, closeActDialog =
}
});
const keyboardActionsService = (await import("./keyboard_actions.js")).default;
keyboardActionsService.updateDisplayedShortcuts($dialog);
return $dialog;
@@ -0,0 +1,30 @@
import { describe, expect, it } from "vitest";
import { isValidDocName } from "./doc_renderer.js";
describe("isValidDocName", () => {
it("accepts valid docNames", () => {
expect(isValidDocName("launchbar_intro")).toBe(true);
expect(isValidDocName("User Guide/Quick Start")).toBe(true);
expect(isValidDocName("User Guide/User Guide/Quick Start")).toBe(true);
expect(isValidDocName("Quick Start Guide")).toBe(true);
expect(isValidDocName("quick_start_guide")).toBe(true);
expect(isValidDocName("quick-start-guide")).toBe(true);
});
it("rejects path traversal attacks", () => {
expect(isValidDocName("..")).toBe(false);
expect(isValidDocName("../etc/passwd")).toBe(false);
expect(isValidDocName("foo/../bar")).toBe(false);
expect(isValidDocName("../../../../api/notes/_malicious/open")).toBe(false);
expect(isValidDocName("..\\etc\\passwd")).toBe(false);
expect(isValidDocName("foo\\bar")).toBe(false);
});
it("rejects URL manipulation attacks", () => {
expect(isValidDocName("../../../../api/notes/_malicious/open?x=")).toBe(false);
expect(isValidDocName("foo#bar")).toBe(false);
expect(isValidDocName("%2e%2e")).toBe(false);
expect(isValidDocName("%2e%2e%2f%2e%2e%2fapi")).toBe(false);
});
});
+34 -12
View File
@@ -3,22 +3,39 @@ import { applyReferenceLinks } from "../widgets/type_widgets/text/read_only_help
import { getCurrentLanguage } from "./i18n.js";
import { formatCodeBlocks } from "./syntax_highlight.js";
/**
* Validates a docName to prevent path traversal attacks.
* Allows forward slashes for subdirectories (e.g., "User Guide/Quick Start")
* but blocks traversal sequences and URL manipulation characters.
*/
export function isValidDocName(docName: string): boolean {
// Allow alphanumeric characters, spaces, underscores, hyphens, and forward slashes.
const validDocNameRegex = /^[a-zA-Z0-9_/\- ]+$/;
return validDocNameRegex.test(docName);
}
export default function renderDoc(note: FNote) {
return new Promise<JQuery<HTMLElement>>((resolve) => {
let docName = note.getLabelValue("docName");
const docName = note.getLabelValue("docName");
const $content = $("<div>");
if (docName) {
// find doc based on language
const url = getUrl(docName, getCurrentLanguage());
// find doc based on language
const url = getUrl(docName, getCurrentLanguage());
if (url) {
$content.load(url, async (response, status) => {
// fallback to english doc if no translation available
if (status === "error") {
const fallbackUrl = getUrl(docName, "en");
$content.load(fallbackUrl, async () => {
await processContent(fallbackUrl, $content)
if (fallbackUrl) {
$content.load(fallbackUrl, async () => {
await processContent(fallbackUrl, $content);
resolve($content);
});
} else {
resolve($content);
});
}
return;
}
@@ -28,8 +45,6 @@ export default function renderDoc(note: FNote) {
} else {
resolve($content);
}
return $content;
});
}
@@ -39,7 +54,7 @@ async function processContent(url: string, $content: JQuery<HTMLElement>) {
// Images are relative to the docnote but that will not work when rendered in the application since the path breaks.
$content.find("img").each((i, el) => {
const $img = $(el);
$img.attr("src", dir + "/" + $img.attr("src"));
$img.attr("src", `${dir}/${$img.attr("src")}`);
});
formatCodeBlocks($content);
@@ -48,10 +63,17 @@ async function processContent(url: string, $content: JQuery<HTMLElement>) {
await applyReferenceLinks($content[0]);
}
function getUrl(docNameValue: string, language: string) {
function getUrl(docNameValue: string | null, language: string) {
if (!docNameValue) return;
if (!isValidDocName(docNameValue)) {
console.error(`Invalid docName: ${docNameValue}`);
return null;
}
// Cannot have spaces in the URL due to how JQuery.load works.
docNameValue = docNameValue.replaceAll(" ", "%20");
const basePath = window.glob.isDev ? window.glob.assetPath + "/.." : window.glob.assetPath;
const basePath = window.glob.isDev ? `${window.glob.assetPath }/..` : window.glob.assetPath;
return `${basePath}/doc_notes/${language}/${docNameValue}.html`;
}
@@ -1,5 +1,6 @@
import { t } from "./i18n";
import options from "./options";
import { isMobile } from "./utils";
export interface ExperimentalFeature {
id: string;
@@ -12,6 +13,11 @@ export const experimentalFeatures = [
id: "new-layout",
name: t("experimental_features.new_layout_name"),
description: t("experimental_features.new_layout_description"),
},
{
id: "llm",
name: t("experimental_features.llm_name"),
description: t("experimental_features.llm_description"),
}
] as const satisfies ExperimentalFeature[];
@@ -21,7 +27,7 @@ let enabledFeatures: Set<ExperimentalFeatureId> | null = null;
export function isExperimentalFeatureEnabled(featureId: ExperimentalFeatureId): boolean {
if (featureId === "new-layout") {
return options.is("newLayout");
return (isMobile() || options.is("newLayout"));
}
return getEnabledFeatures().has(featureId);
@@ -29,7 +35,7 @@ export function isExperimentalFeatureEnabled(featureId: ExperimentalFeatureId):
export function getEnabledExperimentalFeatureIds() {
const values = [ ...getEnabledFeatures().values() ];
if (options.is("newLayout")) {
if (isMobile() || options.is("newLayout")) {
values.push("new-layout");
}
return values;
+17 -11
View File
@@ -1,14 +1,16 @@
import LoadResults from "./load_results.js";
import froca from "./froca.js";
import utils from "./utils.js";
import options from "./options.js";
import noteAttributeCache from "./note_attribute_cache.js";
import FBranch, { type FBranchRow } from "../entities/fbranch.js";
import FAttribute, { type FAttributeRow } from "../entities/fattribute.js";
import type { OptionNames } from "@triliumnext/commons";
import appContext from "../components/app_context.js";
import FAttachment, { type FAttachmentRow } from "../entities/fattachment.js";
import FAttribute, { type FAttributeRow } from "../entities/fattribute.js";
import FBranch, { type FBranchRow } from "../entities/fbranch.js";
import type { default as FNote, FNoteRow } from "../entities/fnote.js";
import type { EntityChange } from "../server_types.js";
import type { OptionNames } from "@triliumnext/commons";
import froca from "./froca.js";
import LoadResults from "./load_results.js";
import noteAttributeCache from "./note_attribute_cache.js";
import options from "./options.js";
import utils from "./utils.js";
async function processEntityChanges(entityChanges: EntityChange[]) {
const loadResults = new LoadResults(entityChanges);
@@ -63,7 +65,7 @@ async function processEntityChanges(entityChanges: EntityChange[]) {
if (entityName === "branches" && !((entity as FBranchRow).parentNoteId in froca.notes)) {
missingNoteIds.push((entity as FBranchRow).parentNoteId);
} else if (entityName === "attributes") {
let attributeEntity = entity as FAttributeRow;
const attributeEntity = entity as FAttributeRow;
if (attributeEntity.type === "relation" && (attributeEntity.name === "template" || attributeEntity.name === "inherit") && !(attributeEntity.value in froca.notes)) {
missingNoteIds.push(attributeEntity.value);
}
@@ -79,7 +81,6 @@ async function processEntityChanges(entityChanges: EntityChange[]) {
noteAttributeCache.invalidate();
}
const appContext = (await import("../components/app_context.js")).default;
await appContext.triggerEvent("entitiesReloaded", { loadResults });
}
}
@@ -110,7 +111,12 @@ function processNoteChange(loadResults: LoadResults, ec: EntityChange) {
}
}
if (ec.componentId) {
// Only register as a content change if the protection status didn't change.
// When isProtected changes, the blobId change is a side effect of re-encryption,
// not a content edit. Registering it as content would cause the tree's content-only
// filter to incorrectly skip the note update (since both changes share the same
// componentId).
if (ec.componentId && note.isProtected === (ec.entity as FNoteRow).isProtected) {
loadResults.addNoteContent(note.noteId, ec.componentId);
}
}
@@ -1,4 +1,4 @@
import { Fragment, h, VNode } from "preact";
import { createContext, Fragment, h, VNode } from "preact";
import * as hooks from "preact/hooks";
import ActionButton from "../widgets/react/ActionButton";
@@ -47,6 +47,7 @@ export const preactAPI = Object.freeze({
// Core
h,
Fragment,
createContext,
/**
* Method that must be run for widget scripts that run on Preact, using JSX. The method just returns the same definition, reserved for future typechecking and perhaps validation purposes.
-2
View File
@@ -75,8 +75,6 @@ function setupGlobs() {
requireCss(`api/notes/download/${appCssNoteId}`, false);
}
utils.initHelpButtons($(window));
$("body").on("click", "a.external", function () {
window.open($(this).attr("href"), "_blank");
+9 -2
View File
@@ -1,10 +1,10 @@
import { LOCALES } from "@triliumnext/commons";
import { findDuplicateJsonKeys, LOCALES } from "@triliumnext/commons";
import { readFileSync } from "fs";
import { join } from "path";
import { describe, expect, it } from "vitest";
describe("i18n", () => {
it("translations are valid JSON", () => {
it("translations are valid JSON with no duplicate keys", () => {
for (const locale of LOCALES) {
if (locale.contentOnly || locale.id === "en_rtl") {
continue;
@@ -14,6 +14,13 @@ describe("i18n", () => {
const translationFile = readFileSync(translationPath, { encoding: "utf-8" });
expect(() => JSON.parse(translationFile), `JSON error while parsing locale '${locale.id}' at "${translationPath}"`)
.not.toThrow();
const duplicates = findDuplicateJsonKeys(translationFile);
expect(
duplicates,
`Duplicate keys in locale '${locale.id}' at "${translationPath}":\n${
duplicates.map((d) => ` - "${d.key}" (line ${d.line})`).join("\n")}`
).toEqual([]);
}
});
});
+5 -16
View File
@@ -1,21 +1,14 @@
import options from "./options.js";
import { LOCALE_IDS, LOCALES, setDayjsLocale } from "@triliumnext/commons";
import i18next from "i18next";
import i18nextHttpBackend from "i18next-http-backend";
import server from "./server.js";
import { LOCALE_IDS, setDayjsLocale, type Locale } from "@triliumnext/commons";
import { initReactI18next } from "react-i18next";
let locales: Locale[] | null;
/**
* A deferred promise that resolves when translations are initialized.
*/
export let translationsInitializedPromise = $.Deferred();
export const translationsInitializedPromise = $.Deferred();
export async function initLocale() {
const locale = ((options.get("locale") as string) || "en") as LOCALE_IDS;
locales = await server.get<Locale[]>("options/locales");
export async function initLocale(locale: LOCALE_IDS = "en") {
i18next.use(initReactI18next);
await i18next.use(i18nextHttpBackend).init({
@@ -32,11 +25,7 @@ export async function initLocale() {
}
export function getAvailableLocales() {
if (!locales) {
throw new Error("Tried to load list of locales, but localization is not yet initialized.")
}
return locales;
return LOCALES;
}
/**
@@ -47,7 +36,7 @@ export function getAvailableLocales() {
*/
export function getLocaleById(localeId: string | null | undefined) {
if (!localeId) return null;
return locales?.find((l) => l.id === localeId) ?? null;
return LOCALES.find((l) => l.id === localeId) ?? null;
}
export const t = i18next.t;
+4 -2
View File
@@ -1,4 +1,5 @@
import { NoteType } from "@triliumnext/commons";
import FNote from "../entities/fnote";
import { ViewTypeOptions } from "../widgets/collections/interface";
@@ -18,7 +19,8 @@ export const byNoteType: Record<Exclude<NoteType, "book">, string | null> = {
search: null,
text: null,
webView: null,
aiChat: null
spreadsheet: null,
llmChat: null
};
export const byBookType: Record<ViewTypeOptions, string | null> = {
@@ -39,6 +41,6 @@ export function getHelpUrlForNote(note: FNote | null | undefined) {
} else if (note?.hasLabel("textSnippet")) {
return "pwc194wlRzcH";
} else if (note && note.type === "book") {
return byBookType[note.getAttributeValue("label", "viewType") as ViewTypeOptions ?? ""]
return byBookType[note.getAttributeValue("label", "viewType") as ViewTypeOptions ?? ""];
}
}
+40 -10
View File
@@ -4,6 +4,8 @@ import appContext, { type NoteCommandData } from "../components/app_context.js";
import { openInCurrentNoteContext } from "../components/note_context.js";
import linkContextMenuService from "../menus/link_context_menu.js";
import froca from "./froca.js";
import { t } from "./i18n.js";
import { showError } from "./toast.js";
import treeService from "./tree.js";
import utils from "./utils.js";
@@ -28,7 +30,7 @@ async function getLinkIcon(noteId: string, viewMode: ViewMode | undefined) {
return icon;
}
export type ViewMode = "default" | "source" | "attachments" | "contextual-help" | "note-map";
export type ViewMode = "default" | "source" | "attachments" | "contextual-help" | "note-map" | "ocr";
export interface ViewScope {
/**
@@ -58,6 +60,8 @@ export interface ViewScope {
*/
tocPreviousVisible?: boolean;
tocCollapsedHeadings?: Set<string>;
/** When set, scrolls to a bookmark anchor within the note after navigation. */
bookmark?: string;
}
interface CreateLinkOptions {
@@ -242,7 +246,7 @@ export function parseNavigationStateFromUrl(url: string | undefined) {
hoistedNoteId = value;
} else if (name === "searchString") {
searchString = value; // supports triggering search from URL, e.g. #?searchString=blabla
} else if (["viewMode", "attachmentId"].includes(name)) {
} else if (["viewMode", "attachmentId", "bookmark"].includes(name)) {
(viewScope as any)[name] = value;
} else if (name === "popup") {
openInPopup = true;
@@ -333,15 +337,30 @@ export function goToLinkExt(evt: MouseEvent | JQuery.ClickEvent | JQuery.MouseDo
if (openInNewTab || openInNewWindow || (isLeftClick && (withinEditLink || outsideOfCKEditor))) {
if (hrefLink.toLowerCase().startsWith("http") || hrefLink.startsWith("api/")) {
window.open(hrefLink, "_blank");
} else {
} else if (ALLOWED_PROTOCOLS.some((protocol) => hrefLink.toLowerCase().startsWith(`${protocol}:`))) {
// Enable protocols supported by CKEditor 5 to be clickable.
if (ALLOWED_PROTOCOLS.some((protocol) => hrefLink.toLowerCase().startsWith(`${protocol}:`))) {
if ( utils.isElectron()) {
const electron = utils.dynamicRequire("electron");
electron.shell.openExternal(hrefLink);
if (utils.isElectron()) {
const electron = utils.dynamicRequire("electron");
const reportLinkError = (e: unknown) => {
const message = e instanceof Error ? e.message : String(e);
logError(`Failed to open link '${hrefLink}': ${message}`);
showError(t("link.failed_to_open", { href: hrefLink, message }));
};
if (hrefLink.toLowerCase().startsWith("file:")) {
// shell.openExternal mishandles Unicode file:// URLs on Windows;
// convert to a filesystem path and use shell.openPath instead.
// Normalize file://c:/... (2 slashes — drive read as host) to file:///c:/...
const normalized = hrefLink.replace(/^file:\/\/(?=[a-zA-Z]:)/i, "file:///");
const { fileURLToPath } = utils.dynamicRequire("url");
electron.shell.openPath(fileURLToPath(normalized)).then((err: string) => {
if (err) reportLinkError(new Error(err));
}).catch(reportLinkError);
} else {
window.open(hrefLink, "_blank");
electron.shell.openExternal(hrefLink).catch(reportLinkError);
}
} else {
window.open(hrefLink, "_blank");
}
}
}
@@ -415,6 +434,13 @@ async function loadReferenceLinkTitle($el: JQuery<HTMLElement>, href: string | n
const title = await getReferenceLinkTitle(href);
$el.text(title);
if (viewScope?.bookmark) {
$el.append($("<small>").append(
$("<span>").addClass("bx bx-bookmark"),
document.createTextNode(viewScope.bookmark)
));
}
if (note) {
const icon = await getLinkIcon(noteId, viewScope.viewMode);
@@ -440,8 +466,8 @@ async function getReferenceLinkTitle(href: string) {
return attachment ? attachment.title : "[missing attachment]";
}
return note.title;
return note.title;
}
function getReferenceLinkTitleSync(href: string) {
@@ -464,8 +490,12 @@ function getReferenceLinkTitleSync(href: string) {
return attachment ? attachment.title : "[missing attachment]";
}
return note.title;
if (viewScope?.bookmark) {
return `${note.title} - ${viewScope.bookmark}`;
}
return note.title;
}
if (glob.device !== "print") {
+116
View File
@@ -0,0 +1,116 @@
import type { LlmChatConfig, LlmCitation, LlmMessage, LlmModelInfo,LlmUsage } from "@triliumnext/commons";
import server from "./server.js";
/**
* Fetch available models from all configured providers.
*/
export async function getAvailableModels(): Promise<LlmModelInfo[]> {
const response = await server.get<{ models?: LlmModelInfo[] }>("llm-chat/models");
return response.models ?? [];
}
export interface StreamCallbacks {
onChunk: (text: string) => void;
onThinking?: (text: string) => void;
onToolUse?: (toolName: string, input: Record<string, unknown>) => void;
onToolResult?: (toolName: string, result: string, isError?: boolean) => void;
onCitation?: (citation: LlmCitation) => void;
onUsage?: (usage: LlmUsage) => void;
onError: (error: string) => void;
onDone: () => void;
}
/**
* Stream a chat completion from the LLM API using Server-Sent Events.
*/
export async function streamChatCompletion(
messages: LlmMessage[],
config: LlmChatConfig,
callbacks: StreamCallbacks,
abortSignal?: AbortSignal
): Promise<void> {
const headers = await server.getHeaders();
const response = await fetch(`${window.glob.baseApiUrl}llm-chat/stream`, {
method: "POST",
headers: {
...headers,
"Content-Type": "application/json"
} as HeadersInit,
body: JSON.stringify({ messages, config }),
signal: abortSignal
});
if (!response.ok) {
callbacks.onError(`HTTP ${response.status}: ${response.statusText}`);
return;
}
const reader = response.body?.getReader();
if (!reader) {
callbacks.onError("No response body");
return;
}
const decoder = new TextDecoder();
let buffer = "";
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
buffer += decoder.decode(value, { stream: true });
const lines = buffer.split("\n");
buffer = lines.pop() || "";
for (const line of lines) {
if (line.startsWith("data: ")) {
try {
const data = JSON.parse(line.slice(6));
switch (data.type) {
case "text":
callbacks.onChunk(data.content);
break;
case "thinking":
callbacks.onThinking?.(data.content);
break;
case "tool_use":
callbacks.onToolUse?.(data.toolName, data.toolInput);
// Yield to force Preact to commit the pending tool call
// state before we process the result.
await new Promise((r) => setTimeout(r, 1));
break;
case "tool_result":
callbacks.onToolResult?.(data.toolName, data.result, data.isError);
await new Promise((r) => setTimeout(r, 1));
break;
case "citation":
if (data.citation) {
callbacks.onCitation?.(data.citation);
}
break;
case "usage":
if (data.usage) {
callbacks.onUsage?.(data.usage);
}
break;
case "error":
callbacks.onError(data.error);
break;
case "done":
callbacks.onDone();
break;
}
} catch (e) {
console.error("Failed to parse SSE data line:", line, e);
}
}
}
}
} finally {
reader.releaseLock();
}
}
+17 -2
View File
@@ -1,4 +1,5 @@
import type { AttachmentRow, EtapiTokenRow, NoteType, OptionNames } from "@triliumnext/commons";
import type { AttributeType } from "../entities/fattribute.js";
import type { EntityChange } from "../server_types.js";
@@ -135,7 +136,14 @@ export default class LoadResults {
}
getBranchRows() {
return this.branchRows.map((row) => this.getEntityRow("branches", row.branchId)).filter((branch) => !!branch);
return this.branchRows.map((row) => {
const branch = this.getEntityRow("branches", row.branchId);
if (branch) {
// Merge the componentId from the tracked row with the entity data
return { ...branch, componentId: row.componentId };
}
return null;
}).filter((branch) => !!branch) as BranchRow[];
}
addNoteReordering(parentNoteId: string, componentId: string) {
@@ -153,7 +161,14 @@ export default class LoadResults {
getAttributeRows(componentId = "none"): AttributeRow[] {
return this.attributeRows
.filter((row) => row.componentId !== componentId)
.map((row) => this.getEntityRow("attributes", row.attributeId))
.map((row) => {
const attr = this.getEntityRow("attributes", row.attributeId);
if (attr) {
// Merge the componentId from the tracked row with the entity data
return { ...attr, componentId: row.componentId };
}
return null;
})
.filter((attr) => !!attr) as AttributeRow[];
}
+5
View File
@@ -32,4 +32,9 @@ describe("Mermaid", () => {
`;
expect(postprocessMermaidSvg(before)).toBe(after);
});
it("replaces &nbsp; with numeric entity for valid XML", () => {
expect(postprocessMermaidSvg("<text>a&nbsp;b&nbsp;&nbsp;c</text>"))
.toBe("<text>a&#160;b&#160;&#160;c</text>");
});
});
+6 -2
View File
@@ -49,11 +49,15 @@ export async function loadElkIfNeeded(mermaid: Mermaid, mermaidContent: string)
* Processes the output of a Mermaid SVG render before it should be delivered to the user.
*
* <p>
* Currently this fixes <br> to <br/> which would otherwise cause an invalid XML.
* Currently this fixes <br> to <br/> and replaces named HTML entities like &nbsp; with their
* numeric equivalents, both of which would otherwise cause invalid XML when the SVG is saved
* as an attachment.
*
* @param svg the Mermaid SVG to process.
* @returns the processed SVG.
*/
export function postprocessMermaidSvg(svg: string) {
return svg.replaceAll(/<br\s*>/ig, "<br/>");
return svg
.replaceAll(/<br\s*>/ig, "<br/>")
.replaceAll(/&nbsp;/g, "&#160;");
}
@@ -68,7 +68,8 @@ async function autocompleteSourceForCKEditor(queryText: string) {
name: row.notePathTitle || "",
link: `#${row.notePath}`,
notePath: row.notePath,
highlightedNotePathTitle: row.highlightedNotePathTitle
highlightedNotePathTitle: row.highlightedNotePathTitle,
icon: row.icon
};
})
);
+17 -21
View File
@@ -1,15 +1,17 @@
import type { CKTextEditor } from "@triliumnext/ckeditor5";
import { AttributeRow } from "@triliumnext/commons";
import appContext from "../components/app_context.js";
import type FBranch from "../entities/fbranch.js";
import type FNote from "../entities/fnote.js";
import type { ChooseNoteTypeResponse } from "../widgets/dialogs/note_type_chooser.js";
import froca from "./froca.js";
import { t } from "./i18n.js";
import protectedSessionHolder from "./protected_session_holder.js";
import server from "./server.js";
import ws from "./ws.js";
import froca from "./froca.js";
import treeService from "./tree.js";
import toastService from "./toast.js";
import { t } from "./i18n.js";
import type FNote from "../entities/fnote.js";
import type FBranch from "../entities/fbranch.js";
import type { ChooseNoteTypeResponse } from "../widgets/dialogs/note_type_chooser.js";
import type { CKTextEditor } from "@triliumnext/ckeditor5";
import treeService from "./tree.js";
import ws from "./ws.js";
export interface CreateNoteOpts {
isProtected?: boolean;
@@ -24,6 +26,8 @@ export interface CreateNoteOpts {
target?: string;
targetBranchId?: string;
textEditor?: CKTextEditor;
/** Attributes to be set on the note. These are set atomically on note creation, so entity changes are not sent for attributes defined here. */
attributes?: Omit<AttributeRow, "noteId" | "attributeId">[];
}
interface Response {
@@ -37,7 +41,7 @@ interface DuplicateResponse {
note: FNote;
}
async function createNote(parentNotePath: string | undefined, options: CreateNoteOpts = {}) {
async function createNote(parentNotePath: string | undefined, options: CreateNoteOpts = {}, componentId?: string) {
options = Object.assign(
{
activate: true,
@@ -63,22 +67,15 @@ async function createNote(parentNotePath: string | undefined, options: CreateNot
const parentNoteId = treeService.getNoteIdFromUrl(parentNotePath);
if (options.type === "mermaid" && !options.content && !options.templateNoteId) {
options.content = `graph TD;
A-->B;
A-->C;
B-->D;
C-->D;`;
}
const { note, branch } = await server.post<Response>(`notes/${parentNoteId}/children?target=${options.target}&targetBranchId=${options.targetBranchId || ""}`, {
title: options.title,
content: options.content || "",
isProtected: options.isProtected,
type: options.type,
mime: options.mime,
templateNoteId: options.templateNoteId
});
templateNoteId: options.templateNoteId,
attributes: options.attributes
}, componentId);
if (options.saveSelection) {
// we remove the selection only after it was saved to server to make sure we don't lose anything
@@ -140,9 +137,8 @@ function parseSelectedHtml(selectedHtml: string) {
const content = selectedHtml.replace(dom[0].outerHTML, "");
return [title, content];
} else {
return [null, selectedHtml];
}
return [null, selectedHtml];
}
async function duplicateSubtree(noteId: string, parentNotePath: string) {
+14 -12
View File
@@ -1,20 +1,20 @@
import treeService from "./tree.js";
import linkService from "./link.js";
import froca from "./froca.js";
import utils from "./utils.js";
import attributeRenderer from "./attribute_renderer.js";
import contentRenderer from "./content_renderer.js";
import appContext from "../components/app_context.js";
import type FNote from "../entities/fnote.js";
import attributeRenderer from "./attribute_renderer.js";
import contentRenderer from "./content_renderer.js";
import froca from "./froca.js";
import { t } from "./i18n.js";
import linkService from "./link.js";
import treeService from "./tree.js";
import utils from "./utils.js";
// Track all elements that open tooltips
let openTooltipElements: JQuery<HTMLElement>[] = [];
let dismissTimer: ReturnType<typeof setTimeout>;
function setupGlobalTooltip() {
$(document).on("mouseenter", "a:not(.no-tooltip-preview)", mouseEnterHandler);
$(document).on("mouseenter", "[data-href]:not(.no-tooltip-preview)", mouseEnterHandler);
$(document).on("pointerenter", "a:not(.no-tooltip-preview)", mouseEnterHandler);
$(document).on("pointerenter", "[data-href]:not(.no-tooltip-preview)", mouseEnterHandler);
// close any note tooltip after click, this fixes the problem that sometimes tooltips remained on the screen
$(document).on("click", (e) => {
@@ -37,10 +37,12 @@ function dismissAllTooltips() {
}
function setupElementTooltip($el: JQuery<HTMLElement>) {
$el.on("mouseenter", mouseEnterHandler);
$el.on("pointerenter", mouseEnterHandler);
}
async function mouseEnterHandler(this: HTMLElement) {
async function mouseEnterHandler<T>(this: HTMLElement, e: JQuery.TriggeredEvent<T, undefined, T, T>) {
if (e.pointerType !== "mouse") return;
const $link = $(this);
if ($link.hasClass("no-tooltip-preview") || $link.hasClass("disabled")) {
@@ -91,7 +93,7 @@ async function mouseEnterHandler(this: HTMLElement) {
}
const html = `<div class="note-tooltip-content">${content}</div>`;
const tooltipClass = "tooltip-" + Math.floor(Math.random() * 999_999_999);
const tooltipClass = `tooltip-${ Math.floor(Math.random() * 999_999_999)}`;
// we need to check if we're still hovering over the element
// since the operation to get tooltip content was async, it is possible that
@@ -224,7 +226,7 @@ function renderFootnoteOrAnchor($link: JQuery<HTMLElement>, url: string) {
}
let footnoteContent = $targetContent.html();
footnoteContent = `<div class="ck-content">${footnoteContent}</div>`
footnoteContent = `<div class="ck-content">${footnoteContent}</div>`;
return footnoteContent || "";
}
+18 -14
View File
@@ -1,9 +1,10 @@
import { t } from "./i18n.js";
import froca from "./froca.js";
import server from "./server.js";
import type { MenuCommandItem, MenuItem, MenuItemBadge, MenuSeparatorItem } from "../menus/context_menu.js";
import type { NoteType } from "../entities/fnote.js";
import type { MenuCommandItem, MenuItem, MenuItemBadge, MenuSeparatorItem } from "../menus/context_menu.js";
import type { TreeCommandNames } from "../menus/tree_context_menu.js";
import { isExperimentalFeatureEnabled } from "./experimental_features.js";
import froca from "./froca.js";
import { t } from "./i18n.js";
import server from "./server.js";
export interface NoteTypeMapping {
type: NoteType;
@@ -26,6 +27,7 @@ export const NOTE_TYPES: NoteTypeMapping[] = [
// The default note type (always the first item)
{ type: "text", mime: "text/html", title: t("note_types.text"), icon: "bx-note" },
{ type: "spreadsheet", mime: "application/json", title: t("note_types.spreadsheet"), icon: "bx-table", isBeta: true, isNew: true },
// Text notes group
{ type: "book", mime: "", title: t("note_types.book"), icon: "bx-book" },
@@ -40,12 +42,14 @@ export const NOTE_TYPES: NoteTypeMapping[] = [
{ type: "relationMap", mime: "application/json", title: t("note_types.relation-map"), icon: "bxs-network-chart" },
// Misc note types
{ type: "llmChat", mime: "application/json", title: t("note_types.llm-chat"), icon: "bx-message-square-dots", isBeta: true },
{ type: "render", mime: "", title: t("note_types.render-note"), icon: "bx-extension" },
{ type: "search", title: t("note_types.saved-search"), icon: "bx-file-find", static: true },
{ type: "webView", mime: "", title: t("note_types.web-view"), icon: "bx-globe-alt" },
// Code notes
{ type: "code", mime: "text/plain", title: t("note_types.code"), icon: "bx-code" },
{ type: "code", mime: "text/x-markdown", title: t("note_types.markdown"), icon: "bxl-markdown", isNew: true },
// Reserved types (cannot be created by the user)
{ type: "contentWidget", mime: "", title: t("note_types.widget"), reserved: true },
@@ -53,7 +57,6 @@ export const NOTE_TYPES: NoteTypeMapping[] = [
{ type: "file", title: t("note_types.file"), reserved: true },
{ type: "image", title: t("note_types.image"), reserved: true },
{ type: "launcher", mime: "", title: t("note_types.launcher"), reserved: true },
{ type: "aiChat", mime: "application/json", title: t("note_types.ai-chat"), reserved: true }
];
/** The maximum age in days for a template to be marked with the "New" badge */
@@ -92,14 +95,16 @@ async function getNoteTypeItems(command?: TreeCommandNames) {
function getBlankNoteTypes(command?: TreeCommandNames): MenuItem<TreeCommandNames>[] {
return NOTE_TYPES
.filter((nt) => !nt.reserved && nt.type !== "book")
.filter((nt) => nt.type !== "llmChat" || isExperimentalFeatureEnabled("llm"))
.map((nt) => {
const menuItem: MenuCommandItem<TreeCommandNames> = {
title: nt.title,
command,
type: nt.type,
uiIcon: "bx " + nt.icon,
mime: nt.mime,
uiIcon: `bx ${nt.icon}`,
badges: []
}
};
if (nt.isNew) {
menuItem.badges?.push(NEW_BADGE);
@@ -131,7 +136,7 @@ async function getUserTemplates(command?: TreeCommandNames) {
const item: MenuItem<TreeCommandNames> = {
title: templateNote.title,
uiIcon: templateNote.getIcon(),
command: command,
command,
type: templateNote.type,
templateNoteId: templateNote.noteId
};
@@ -160,7 +165,7 @@ async function getBuiltInTemplates(title: string | null, command: TreeCommandNam
const items: MenuItem<TreeCommandNames>[] = [];
if (title) {
items.push({
title: title,
title,
kind: "header"
});
} else {
@@ -176,7 +181,7 @@ async function getBuiltInTemplates(title: string | null, command: TreeCommandNam
const item: MenuItem<TreeCommandNames> = {
title: templateNote.title,
uiIcon: templateNote.getIcon(),
command: command,
command,
type: templateNote.type,
templateNoteId: templateNote.noteId
};
@@ -194,7 +199,7 @@ async function isNewTemplate(templateNoteId) {
if (rootCreationDate === undefined) {
// Retrieve the root note creation date
try {
let rootNoteInfo: any = await server.get("notes/root");
const rootNoteInfo: any = await server.get("notes/root");
if ("dateCreated" in rootNoteInfo) {
rootCreationDate = new Date(rootNoteInfo.dateCreated);
}
@@ -209,7 +214,7 @@ async function isNewTemplate(templateNoteId) {
if (creationDate === undefined) {
// The creation date isn't available in the cache, try to retrieve it from the server
try {
const noteInfo: any = await server.get("notes/" + templateNoteId);
const noteInfo: any = await server.get(`notes/${templateNoteId}`);
if ("dateCreated" in noteInfo) {
creationDate = new Date(noteInfo.dateCreated);
creationDateCache.set(templateNoteId, creationDate);
@@ -231,9 +236,8 @@ async function isNewTemplate(templateNoteId) {
const age = (new Date().getTime() - creationDate.getTime()) / DAY_LENGTH;
// Return true if the template is at most NEW_TEMPLATE_MAX_AGE days old
return (age <= NEW_TEMPLATE_MAX_AGE);
} else {
return false;
}
return false;
}
export default {
+14 -7
View File
@@ -1,6 +1,8 @@
import utils from "./utils.js";
import Component from "../components/component.js";
import FNote from "../entities/fnote.js";
import options from "./options.js";
import server from "./server.js";
import utils from "./utils.js";
type ExecFunction = (command: string, cb: (err: string, stdout: string, stderror: string) => void) => void;
@@ -36,9 +38,14 @@ function download(url: string) {
}
}
export function downloadFileNote(noteId: string) {
const url = `${getFileUrl("notes", noteId)}?${Date.now()}`; // don't use cache
export function downloadFileNote(note: FNote, parentComponent: Component | null, ntxId: string | null | undefined) {
if (note.type === "file" && note.mime === "application/pdf" && parentComponent) {
// Special handling, manages its own downloading process.
parentComponent.triggerEvent("customDownload", { ntxId });
return;
}
const url = `${getFileUrl("notes", note.noteId)}?${Date.now()}`; // don't use cache
download(url);
}
@@ -97,7 +104,7 @@ async function openCustom(type: string, entityId: string, mime: string) {
// Note that the path separator must be \ instead of /
filePath = filePath.replace(/\//g, "\\");
}
const command = `rundll32.exe shell32.dll,OpenAs_RunDLL ` + filePath;
const command = `rundll32.exe shell32.dll,OpenAs_RunDLL ${filePath}`;
exec(command, (err, stdout, stderr) => {
if (err) {
console.error("Open Note custom: ", err);
@@ -131,10 +138,10 @@ export function getUrlForDownload(url: string) {
if (utils.isElectron()) {
// electron needs absolute URL, so we extract current host, port, protocol
return `${getHost()}/${url}`;
} else {
// web server can be deployed on subdomain, so we need to use a relative path
return url;
}
// web server can be deployed on subdomain, so we need to use a relative path
return url;
}
function canOpenInBrowser(mime: string) {

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