Compare commits

...

1189 Commits

Author SHA1 Message Date
Elian Doran
62bb8ac89a chore(release): prepare for 0.99.1 2025-10-05 11:52:06 +03:00
Elian Doran
33dfcb1c6e docs(release): 0.99.1 2025-10-05 11:50:52 +03:00
Elian Doran
5969815ed1 fix(deps): downgrade mind-elixir (closes #7170) 2025-10-05 11:27:25 +03:00
Elian Doran
2b2125c702 fix(ai_chat): conversation not visible on Firefox 2025-10-05 11:03:18 +03:00
Adorian Doran
85a4557bb0 website: tweak the hero section 2025-10-04 19:11:44 +03:00
Adorian Doran
0d9e4a1aa2 website/header: add some style to the GitHub button 2025-10-04 17:07:32 +03:00
Elian Doran
4a01181110 docs(readme): change file naming format 2025-10-04 15:53:33 +03:00
Elian Doran
89dfc480f3 docs(readme): bring back original documents 2025-10-04 15:47:27 +03:00
Elian Doran
c178fc2957 Translations update from Hosted Weblate (#7186) 2025-10-04 15:41:40 +03:00
Hosted Weblate
9d8c62caaf 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/
2025-10-04 06:44:06 +00:00
minkipark
279f014c42 Translated using Weblate (Korean)
Currently translated at 10.2% (39 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ko/
2025-10-04 06:44:06 +00:00
minkipark
826e9c7114 Translated using Weblate (Korean)
Currently translated at 2.1% (34 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ko/
2025-10-04 06:44:05 +00:00
Languages add-on
384c8649b4 Added translation using Weblate (Norwegian Bokmål) 2025-10-04 06:44:05 +00:00
Languages add-on
ecc8bc3866 Added translation using Weblate (Slovenian) 2025-10-04 06:44:04 +00:00
Languages add-on
bb4d723f18 Added translation using Weblate (Korean) 2025-10-04 06:44:04 +00:00
Languages add-on
e250510ab1 Added translation using Weblate (Serbian) 2025-10-04 06:44:03 +00:00
Languages add-on
dc630f927f Added translation using Weblate (Finnish) 2025-10-04 06:44:02 +00:00
Languages add-on
e47cb13b89 Added translation using Weblate (Persian) 2025-10-04 06:44:02 +00:00
Languages add-on
838ae315e3 Added translation using Weblate (French) 2025-10-04 06:44:01 +00:00
Languages add-on
58afa86a2b Added translation using Weblate (Dutch) 2025-10-04 06:44:01 +00:00
Languages add-on
5b90ece12f Added translation using Weblate (Arabic) 2025-10-04 06:44:00 +00:00
Languages add-on
afb2072b97 Added translation using Weblate (Polish) 2025-10-04 06:44:00 +00:00
Languages add-on
8e0ca56b85 Added translation using Weblate (Hungarian) 2025-10-04 06:43:59 +00:00
Languages add-on
8e4cf38840 Added translation using Weblate (Croatian) 2025-10-04 06:43:58 +00:00
Languages add-on
cb872d3638 Added translation using Weblate (Vietnamese) 2025-10-04 06:43:58 +00:00
Languages add-on
781be26833 Added translation using Weblate (Portuguese) 2025-10-04 06:43:57 +00:00
Languages add-on
0ad5f3493d Added translation using Weblate (Czech) 2025-10-04 06:43:57 +00:00
Languages add-on
15bb3acb31 Added translation using Weblate (Catalan) 2025-10-04 06:43:56 +00:00
Languages add-on
a43ddf3f9f Added translation using Weblate (Ukrainian) 2025-10-04 06:43:56 +00:00
Languages add-on
8417bfebb0 Added translation using Weblate (Greek) 2025-10-04 06:43:55 +00:00
Languages add-on
28e8ea2da9 Added translation using Weblate (Portuguese (Brazil)) 2025-10-04 06:43:54 +00:00
Languages add-on
393264b4a1 Added translation using Weblate (Turkish) 2025-10-04 06:43:54 +00:00
Jiho Min
9306a28c87 Translated using Weblate (Korean)
Currently translated at 1.8% (29 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ko/
2025-10-04 06:43:53 +00:00
Newcomer1989
77fef38009 Added translation using Weblate (German) 2025-10-04 06:43:53 +00:00
Elian Doran
c14ea42978 Translated using Weblate (Romanian)
Currently translated at 21.7% (25 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ro/
2025-10-04 06:43:52 +00:00
Elian Doran
341cd62b13 Added translation using Weblate (Romanian) 2025-10-04 06:43:52 +00:00
Hosted Weblate
9e6cfe7c1e 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/
2025-10-04 06:43:51 +00:00
Tore Aursand
9695dd404b Translated using Weblate (Norwegian Bokmål)
Currently translated at 1.8% (7 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/
2025-10-04 06:43:50 +00:00
green
5e6be01251 Translated using Weblate (Japanese)
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2025-10-04 06:43:50 +00:00
Elian Doran
f367a1c776 fix(deps): update eslint monorepo to v9.37.0 (#7197) 2025-10-04 09:43:42 +03:00
renovate[bot]
bce987c67a fix(deps): update eslint monorepo to v9.37.0 2025-10-04 05:55:42 +00:00
Elian Doran
e7a9f9c566 chore(deps): update dependency @types/serve-static to v1.15.9 (#7190) 2025-10-04 08:50:10 +03:00
Elian Doran
33150e3a98 chore(deps): update dependency electron to v38.2.1 (#7191) 2025-10-04 08:49:56 +03:00
renovate[bot]
e1aead098e chore(deps): update dependency @types/serve-static to v1.15.9 2025-10-04 05:49:51 +00:00
Elian Doran
9f9a276a51 chore(deps): update dependency eslint-plugin-react-hooks to v6.1.1 (#7192) 2025-10-04 08:49:41 +03:00
Elian Doran
873df6da6c chore(deps): update softprops/action-gh-release action to v2.3.4 (#7193) 2025-10-04 08:49:23 +03:00
Elian Doran
2e353afb98 fix(deps): update dependency katex to v0.16.23 (#7194) 2025-10-04 08:48:52 +03:00
Elian Doran
d497688d9a chore(deps): update dependency stylelint to v16.25.0 (#7195) 2025-10-04 08:48:32 +03:00
Elian Doran
2cf3a04482 fix(deps): update dependency eslint-linter-browserify to v9.37.0 (#7196) 2025-10-04 08:47:55 +03:00
renovate[bot]
e50fd6f540 fix(deps): update dependency eslint-linter-browserify to v9.37.0 2025-10-04 01:11:23 +00:00
renovate[bot]
5096163ae3 chore(deps): update dependency stylelint to v16.25.0 2025-10-04 01:10:24 +00:00
renovate[bot]
0d6640ae14 fix(deps): update dependency katex to v0.16.23 2025-10-04 01:09:28 +00:00
renovate[bot]
52ac93e99c chore(deps): update softprops/action-gh-release action to v2.3.4 2025-10-04 01:08:33 +00:00
renovate[bot]
674b0a8215 chore(deps): update dependency eslint-plugin-react-hooks to v6.1.1 2025-10-04 01:08:27 +00:00
renovate[bot]
ec56b297dc chore(deps): update dependency electron to v38.2.1 2025-10-04 01:07:35 +00:00
Elian Doran
a477cc22e6 docs(readme): normalize file name format 2025-10-03 20:25:49 +03:00
Elian Doran
119278b5f5 docs(readme): redesign support section 2025-10-03 20:12:32 +03:00
Elian Doran
5414fbeacb docs(readme): improve shoutsout section 2025-10-03 20:00:32 +03:00
Adorian Doran
a4b01bba9b website/GitHub utils: improve 2025-10-03 19:36:36 +03:00
Adorian Doran
bab536751a website: use a pre-defined GitHub stargazers count outside of SSR 2025-10-03 19:22:58 +03:00
Adorian Doran
7657e17373 website: add a GitHub social button to the site's header 2025-10-03 19:09:23 +03:00
Adorian Doran
30f530abdb website: use "Inter" as the main font 2025-10-03 17:09:17 +03:00
Adorian Doran
1d373bc7d5 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2025-10-03 16:49:20 +03:00
Adorian Doran
9d3c5d04b9 website: add meta description 2025-10-03 16:49:10 +03:00
Elian Doran
ba91fbbe6b fix(ribbon): formatting tab not activating automatically (closes #7185) 2025-10-03 16:46:26 +03:00
Elian Doran
f6898779bb fix(code): unable to search in read-only code notes 2025-10-03 16:09:32 +03:00
Elian Doran
dbb90bdd2b fix(client/print): split button visible 2025-10-03 16:05:32 +03:00
Elian Doran
f442c56ed6 fix(client/options): missing ribbon widgets section in Appearance 2025-10-03 16:01:31 +03:00
Elian Doran
e971a9cb03 fix(client): enter shortcut key not working 2025-10-03 15:46:53 +03:00
Elian Doran
b450a4faa0 fix(client): delete shortcut key not working 2025-10-03 15:39:27 +03:00
Elian Doran
9a2440942b chore(deps): update dependency vite to v7.1.9 (#7177) 2025-10-03 09:13:39 +03:00
Elian Doran
c3151f9afa chore(deps): update dependency openai to v6.1.0 (#7178) 2025-10-03 09:13:09 +03:00
renovate[bot]
f277612444 chore(deps): update dependency openai to v6.1.0 2025-10-03 06:12:29 +00:00
renovate[bot]
1b92ad2f53 chore(deps): update dependency vite to v7.1.9 2025-10-03 06:11:33 +00:00
Elian Doran
f96abe0e45 chore(deps): update pnpm to v10.18.0 (#7179) 2025-10-03 09:09:27 +03:00
Elian Doran
142a276cc4 fix(deps): update codemirror (#7180) 2025-10-03 09:09:05 +03:00
renovate[bot]
a52b0a45fe fix(deps): update codemirror 2025-10-03 00:28:25 +00:00
renovate[bot]
6df40ec80a chore(deps): update pnpm to v10.18.0 2025-10-03 00:27:33 +00:00
Elian Doran
713340a9ba docs(guide): advanced CSS customisation 2025-10-02 22:25:47 +03:00
Elian Doran
ee8b41c81b Equation improvements (#7174) 2025-10-02 21:43:58 +03:00
Elian Doran
dd477258a9 docs(guide): document formatting equations 2025-10-02 21:35:54 +03:00
Elian Doran
7c30e2b4f6 feat(math): inherit attributes from selection 2025-10-02 20:52:05 +03:00
Elian Doran
37a3c00214 Translations update from Hosted Weblate (#7175) 2025-10-02 19:13:50 +03:00
Tore Aursand
d30cdadb2d Added translation using Weblate (Norwegian Bokmål) 2025-10-02 18:09:59 +02:00
Tore Aursand
58f0d01944 Added translation using Weblate (Norwegian Bokmål) 2025-10-02 18:09:58 +02:00
Elian Doran
d4791944b0 Translated using Weblate (Romanian)
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ro/
2025-10-02 18:09:57 +02:00
Elian Doran
92a052674f Translated using Weblate (Romanian)
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/
2025-10-02 18:09:57 +02:00
Elian Doran
d49ce7c289 feat(math): support more attributes 2025-10-02 18:32:46 +03:00
Elian Doran
5f38d52f20 feat(math): support font size adjustment (closes #7172) 2025-10-02 18:31:08 +03:00
Elian Doran
6286745684 Translations update from Hosted Weblate (#7171) 2025-10-02 12:07:03 +03:00
Bilal Janati
4f574f8aa4 Translated using Weblate (French)
Currently translated at 88.4% (337 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/fr/
2025-10-02 11:02:04 +02:00
Bilal Janati
a3e27248ad Translated using Weblate (French)
Currently translated at 85.0% (1365 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
2025-10-02 11:02:01 +02:00
Elian Doran
e48569245d chore(deps): update dependency jiti to v2.6.1 (#7161) 2025-10-02 11:19:28 +03:00
Elian Doran
473f7a83e6 chore(deps): update dependency openai to v6.0.1 (#7162) 2025-10-02 11:19:18 +03:00
Elian Doran
1c622fa848 fix(deps): update dependency mind-elixir to v5.3.1 (#7166) 2025-10-02 11:19:09 +03:00
renovate[bot]
409e650506 fix(deps): update dependency mind-elixir to v5.3.1 2025-10-02 07:47:06 +00:00
renovate[bot]
d461f5474e chore(deps): update dependency openai to v6.0.1 2025-10-02 07:46:28 +00:00
renovate[bot]
36e731cc2c chore(deps): update dependency jiti to v2.6.1 2025-10-02 07:45:40 +00:00
Elian Doran
b77fbcb7ad chore(deps): update dependency vite-plugin-static-copy to v3.1.3 (#7163) 2025-10-02 10:38:46 +03:00
Elian Doran
7b7dc346ca fix(deps): update dependency i18next to v25.5.3 (#7164) 2025-10-02 10:38:26 +03:00
Elian Doran
b4f8a02ba6 chore(deps): update dependency react-refresh to v0.18.0 (#7165) 2025-10-02 10:38:10 +03:00
Elian Doran
9d6a5d1bb5 chore(deps): update dependency eslint-plugin-react-hooks to v6 (#7167) 2025-10-02 10:37:46 +03:00
renovate[bot]
fa747c5c4b chore(deps): update dependency eslint-plugin-react-hooks to v6 2025-10-02 04:56:39 +00:00
renovate[bot]
bc93f40cdb chore(deps): update dependency react-refresh to v0.18.0 2025-10-02 04:54:53 +00:00
renovate[bot]
a9975798d7 fix(deps): update dependency i18next to v25.5.3 2025-10-02 04:54:01 +00:00
renovate[bot]
4ea4404aba chore(deps): update dependency vite-plugin-static-copy to v3.1.3 2025-10-02 04:53:11 +00:00
Elian Doran
361848b518 fix(deps): update ckeditor monorepo to v47 (major) (#7168) 2025-10-02 07:49:34 +03:00
renovate[bot]
8c46103f63 fix(deps): update ckeditor monorepo to v47 2025-10-02 01:54:42 +00:00
Elian Doran
edcdecb720 Merge branch 'main' of https://github.com/TriliumNext/trilium 2025-10-01 22:27:42 +03:00
Elian Doran
e1ef02058d fix(client): function keys (e.g. help) not working due to change in modifiers 2025-10-01 22:27:39 +03:00
Elian Doran
d9746df16b chore(deps): pin all deps to latest (#7159) 2025-10-01 21:13:48 +03:00
Elian Doran
b4c20d9683 fix(client): shortcut keys without modifiers affecting normal usage 2025-10-01 21:08:51 +03:00
Elian Doran
59955b7414 chore(deps): pin all deps to latest 2025-10-01 20:52:25 +03:00
Elian Doran
95b1c82ccb docs(guide): document script logging 2025-10-01 20:22:50 +03:00
Elian Doran
7cfebbabeb feat(script): api.log now supports objects 2025-10-01 20:22:02 +03:00
Elian Doran
f412874c73 fix(export): missing toast icon 2025-10-01 19:51:36 +03:00
Elian Doran
873c4c6636 refactor(client): remove string from viewtype 2025-10-01 19:44:55 +03:00
Elian Doran
efcd54be50 fix(ribbon): not visible when coming from view source on same note 2025-10-01 19:41:20 +03:00
Elian Doran
ae0bb78b1c docs(guide): document included notes in share 2025-10-01 19:41:20 +03:00
Elian Doran
29fa335a27 chore(deps): update dependency typescript to v5.9.3 (#7151) 2025-10-01 19:32:42 +03:00
Elian Doran
3a84a78cd1 chore(deps): update dependency openai to v6 (#7155) 2025-10-01 19:31:40 +03:00
Elian Doran
df6bb7e6bf fix(deps): broken types after major update 2025-10-01 19:21:51 +03:00
renovate[bot]
dfcaebc613 chore(deps): update dependency openai to v6 2025-10-01 14:03:26 +00:00
renovate[bot]
1ece35536b chore(deps): update dependency typescript to v5.9.3 2025-10-01 14:02:28 +00:00
Elian Doran
1a90548622 chore(deps): update dependency @types/node to v22.18.8 (#7149) 2025-10-01 16:53:06 +03:00
renovate[bot]
cc7e5bdb80 chore(deps): update dependency @types/node to v22.18.8 2025-10-01 08:18:20 +00:00
Elian Doran
5c73b21ff7 chore(deps): update dependency dotenv to v17.2.3 (#7142) 2025-10-01 11:15:17 +03:00
Elian Doran
e9078107ae chore(deps): update dependency preact-render-to-string to v6.6.2 (#7150) 2025-10-01 11:14:59 +03:00
Elian Doran
6c24b18bc1 chore(deps): update dependency typescript to v5.9.3 (#7152) 2025-10-01 11:14:44 +03:00
renovate[bot]
be7ff73142 chore(deps): update dependency preact-render-to-string to v6.6.2 2025-10-01 08:14:24 +00:00
renovate[bot]
63ac45d369 chore(deps): update dependency dotenv to v17.2.3 2025-10-01 08:13:59 +00:00
Elian Doran
f164a4b786 fix(deps): update dependency @codemirror/legacy-modes to v6.5.2 (#7153) 2025-10-01 11:13:49 +03:00
Elian Doran
806d601115 chore(deps): update dependency @smithy/middleware-retry to v4.4.0 (#7154) 2025-10-01 11:13:05 +03:00
Elian Doran
6b3cf49398 Translations update from Hosted Weblate (#7158) 2025-10-01 11:11:37 +03:00
A
4a72f2c6a7 Translated using Weblate (Finnish)
Currently translated at 3.4% (13 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/fi/
2025-10-01 08:02:13 +02:00
A
446bdd6a5e Translated using Weblate (Finnish)
Currently translated at 6.1% (98 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fi/
2025-10-01 08:02:12 +02:00
Lorenzo Strambi
cb26fac2ea Translated using Weblate (Italian)
Currently translated at 35.6% (136 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2025-10-01 08:02:11 +02:00
Lorenzo Strambi
3a45440c74 Translated using Weblate (Italian)
Currently translated at 12.9% (208 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2025-10-01 08:02:09 +02:00
Kuzma Simonov
e115d6e275 Translated using Weblate (Russian)
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-10-01 08:02:07 +02:00
Aitanuqui
fc614ccf83 Translated using Weblate (Spanish)
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/es/
2025-10-01 08:02:06 +02:00
Aitanuqui
17c9db7698 Translated using Weblate (Spanish)
Currently translated at 99.8% (1603 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2025-10-01 08:02:04 +02:00
renovate[bot]
032819e812 chore(deps): update dependency @smithy/middleware-retry to v4.4.0 2025-10-01 02:24:12 +00:00
renovate[bot]
9d7d415756 fix(deps): update dependency @codemirror/legacy-modes to v6.5.2 2025-10-01 02:23:26 +00:00
renovate[bot]
e9d432b4bf chore(deps): update dependency typescript to v5.9.3 2025-10-01 02:22:42 +00:00
Elian Doran
be35584f9a chore(website): cross-platform preview 2025-09-30 22:22:10 +03:00
Elian Doran
80be4cc6b8 feat(website): improve ARM detection 2025-09-30 22:20:10 +03:00
Elian Doran
c74ba44b91 chore(website): apply download card effect only on desktop 2025-09-30 21:58:44 +03:00
Elian Doran
28a79baa01 fix(website): hamburger menu alignment on mobile 2025-09-30 21:56:32 +03:00
Elian Doran
5279601105 fix(website): screenshot would not fit properly on some screen sizes 2025-09-30 21:53:15 +03:00
Elian Doran
c2639951a5 style(website): improve alignment of download button 2025-09-30 21:38:46 +03:00
Elian Doran
6bfab1387d chore(website): remove redundant winget link 2025-09-30 21:32:30 +03:00
Elian Doran
4212d208fc chore(website): build on preview 2025-09-30 21:22:32 +03:00
Elian Doran
9e5bded4cf chore(website): maintain platform coloring despite reordering 2025-09-30 21:21:26 +03:00
Elian Doran
ce0763f03d feat(website): reorder platforms to always get the recommended one in center 2025-09-30 21:18:52 +03:00
Elian Doran
e860b7aa32 chore(website): arch & platform not properly rendered statically 2025-09-30 21:08:19 +03:00
Elian Doran
0be9310450 feat(website): highlight which platform to download 2025-09-30 21:06:19 +03:00
Elian Doran
d870a260e1 feat(website): improve download instructions 2025-09-30 20:53:29 +03:00
Elian Doran
2de545be1c chore(website): fix page title 2025-09-30 19:46:47 +03:00
Elian Doran
bf04e5a15b feat(website): different download behaviour for Linux 2025-09-30 19:45:56 +03:00
Elian Doran
46d2d7e160 feat(website): linux light/dark screenshot 2025-09-30 19:35:42 +03:00
Elian Doran
1775b22c7a chore(deps): update dependency @types/node to v22.18.7 (#7140) 2025-09-30 13:37:13 +03:00
Elian Doran
ae022b6389 chore(deps): update dependency dotenv to v17.2.3 (#7141) 2025-09-30 13:37:02 +03:00
renovate[bot]
d4155102c5 chore(deps): update dependency dotenv to v17.2.3 2025-09-30 09:52:06 +00:00
renovate[bot]
3b1a25230f chore(deps): update dependency @types/node to v22.18.7 2025-09-30 09:51:14 +00:00
Elian Doran
d8639793e0 chore(deps): update dependency happy-dom to v19.0.2 (#7143) 2025-09-30 12:43:46 +03:00
Elian Doran
06fec88214 chore(deps): update dependency @anthropic-ai/sdk to v0.65.0 (#7144) 2025-09-30 12:43:33 +03:00
Elian Doran
da93928976 chore(deps): update dependency cross-env to v10.1.0 (#7145) 2025-09-30 12:43:19 +03:00
Elian Doran
2314443d19 chore(deps): update typescript-eslint monorepo to v8.45.0 (#7146) 2025-09-30 12:42:59 +03:00
renovate[bot]
4b34047324 chore(deps): update typescript-eslint monorepo to v8.45.0 2025-09-30 00:39:57 +00:00
renovate[bot]
bc1d4de13d chore(deps): update dependency cross-env to v10.1.0 2025-09-30 00:38:12 +00:00
renovate[bot]
6bae4c8075 chore(deps): update dependency @anthropic-ai/sdk to v0.65.0 2025-09-30 00:37:22 +00:00
renovate[bot]
84a89fd0ba chore(deps): update dependency happy-dom to v19.0.2 2025-09-30 00:36:28 +00:00
Elian Doran
1447fa6f14 Translations update from Hosted Weblate (#7137) 2025-09-29 23:37:41 +03:00
Микола Копитін
bc4937f9d2 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/
2025-09-29 22:34:06 +02:00
Josue Estrada
43a7b828d9 Translated using Weblate (Spanish)
Currently translated at 99.1% (1591 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2025-09-29 22:34:06 +02:00
Elian Doran
d611591e1a docs(user): document a few gaps 2025-09-29 23:33:53 +03:00
Elian Doran
f7a565ec73 refactor(collections/table): rework persistence 2025-09-29 17:51:53 +03:00
Elian Doran
6b35e909ab fix(collections): note list sometimes not restored (fixes #7129) 2025-09-29 17:51:53 +03:00
Elian Doran
53b9ce0f3d Automatically resize webview (#7125) 2025-09-29 10:48:47 +03:00
Elian Doran
5e1cd7d6ac Replace jsdom with node-html-parser (#7128) 2025-09-29 10:47:33 +03:00
Elian Doran
acb98061ce chore(deps): remove jsdom as dev dependency 2025-09-29 09:59:39 +03:00
Elian Doran
979ef6287f chore(server): different handling of buffer vs string 2025-09-29 09:55:34 +03:00
Elian Doran
58a883797d fix(server): infinite loop in note map 2025-09-29 09:45:16 +03:00
Elian Doran
f718e87673 chore(server): fix share content renderer 2025-09-29 09:25:46 +03:00
Elian Doran
4c6a742af7 chore(server): fix clipper 2025-09-29 09:25:31 +03:00
Elian Doran
848dc51a7a Merge remote-tracking branch 'origin/main' into refactor/replace_jsdom 2025-09-29 09:22:36 +03:00
Elian Doran
44541b66c4 chore(deps): update dependency lint-staged to v16.2.3 (#7130) 2025-09-29 09:20:13 +03:00
Elian Doran
3694018441 chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.5 (#7131) 2025-09-29 09:20:00 +03:00
Elian Doran
3874e54d76 fix(deps): update dependency @codemirror/view to v6.38.4 (#7132) 2025-09-29 09:19:48 +03:00
Elian Doran
10de141c00 chore(deps): update dependency electron to v38.2.0 (#7133) 2025-09-29 09:19:32 +03:00
Elian Doran
806ba320a8 chore(deps): update dependency preact-iso to v2.11.0 (#7134) 2025-09-29 09:19:11 +03:00
Elian Doran
09ef24d27d chore(deps): update dependency happy-dom to v19 (#7135) 2025-09-29 09:18:58 +03:00
renovate[bot]
236f3cada7 chore(deps): update dependency happy-dom to v19 2025-09-29 05:59:00 +00:00
renovate[bot]
c2afef4832 chore(deps): update dependency preact-iso to v2.11.0 2025-09-29 05:58:11 +00:00
renovate[bot]
b9fa7d70bb chore(deps): update dependency electron to v38.2.0 2025-09-29 05:56:26 +00:00
renovate[bot]
9ac31f2667 fix(deps): update dependency @codemirror/view to v6.38.4 2025-09-29 05:55:32 +00:00
renovate[bot]
639d1befef chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.5 2025-09-29 05:54:31 +00:00
renovate[bot]
b99c8d5cc1 chore(deps): update dependency lint-staged to v16.2.3 2025-09-29 05:53:37 +00:00
Elian Doran
0770398010 Translations update from Hosted Weblate (#7136) 2025-09-29 08:51:13 +03:00
green
c3d24451b7 Translated using Weblate (Japanese)
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-09-29 03:02:01 +00:00
Francis C
4db1a3bdec Translated using Weblate (Japanese)
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-09-29 03:02:00 +00:00
Elian Doran
2a0410f597 chore(types): fill in gap from jsdom 2025-09-28 20:55:20 +03:00
Elian Doran
7e79d907be feat(server): replace jsdom 2025-09-28 19:43:04 +03:00
Elian Doran
c0ea441c59 chore(server): fix tests 2025-09-28 19:19:39 +03:00
Elian Doran
290d134d88 test(server/similarity): reward map 2025-09-28 19:10:49 +03:00
Elian Doran
517bfd2c9a test(server/note_map): clipper processing notes & images 2025-09-28 19:02:38 +03:00
Papierkorb2292
31990a9992 Let browser display webview with max size instead of manually adjusting the size, so the webview size is sure to be updated when a parent element changes size 2025-09-28 17:41:25 +02:00
Elian Doran
151a2c284d test(server/note_map): backlinks with excerpts 2025-09-28 17:12:01 +03:00
Elian Doran
614a8f177c test(server/share): attachment links 2025-09-28 15:43:39 +03:00
Elian Doran
8b5e53e579 test(server/share): included text notes 2025-09-28 15:07:10 +03:00
Elian Doran
1ad8b1bf85 test(server/share): protected notes 2025-09-28 14:48:14 +03:00
Elian Doran
a393584a2a test(server/share): implement basic shaca mocking with content 2025-09-28 14:40:30 +03:00
Elian Doran
804fc72ed8 test(server/share): basic text rendering check 2025-09-28 14:07:55 +03:00
Elian Doran
3f8f05368c fix(modal): event leak for onHidden 2025-09-28 11:10:39 +03:00
Elian Doran
5a56ba2fd5 chore: fix various references to the old repo 2025-09-28 11:02:24 +03:00
Elian Doran
de7c1329f8 fix(add_link): focus resets to start of note (closes #7115) 2025-09-28 10:55:48 +03:00
Elian Doran
6fc5aa0090 fix(bulk_actions): deleting a bulk action would execute all bulk actions 2025-09-28 10:42:15 +03:00
Elian Doran
2eaeccda05 fix(next): toasts unreadable with background effects on 2025-09-28 10:38:24 +03:00
Elian Doran
56f970ab08 chore(deps): update dependency webdriverio to v9.20.0 (#7119) 2025-09-28 10:37:49 +03:00
renovate[bot]
d1cb9e4a3f chore(deps): update dependency webdriverio to v9.20.0 2025-09-28 00:59:17 +00:00
Elian Doran
992adcab65 Correct 'febuary' key and fix Russian typos (#7103) 2025-09-28 02:14:11 +03:00
Elian Doran
d3b3a83477 Translations update from Hosted Weblate (#7118) 2025-09-28 02:12:34 +03:00
Miljenko Šuflaj
98ad371d01 Translated using Weblate (Croatian)
Currently translated at 25.7% (98 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/hr/
2025-09-28 01:02:04 +02:00
green
3cdae245e1 Translated using Weblate (Japanese)
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2025-09-28 01:02:03 +02:00
Kuzma Simonov
887c78d893 Translated using Weblate (Russian)
Currently translated at 99.6% (1600 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-09-28 01:02:02 +02:00
green
e208497d71 Translated using Weblate (Japanese)
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-09-28 01:02:01 +02:00
Elian Doran
dd744b4e0d Landing page (#7108) 2025-09-28 01:34:06 +03:00
Elian Doran
647cbc7e7a chore(ci): set up pnpm cache for website deployment 2025-09-28 01:08:27 +03:00
Elian Doran
cc93102859 fix(website): null error in download-helper 2025-09-28 01:03:31 +03:00
Elian Doran
5b673e753b fix(website): hydration issues due to rendering on the server of client-side logic 2025-09-28 00:58:15 +03:00
Elian Doran
bd2eb6fdbb fix(website): screenshot not loading due to SSR 2025-09-28 00:36:21 +03:00
Elian Doran
c25f783980 fix(website): typecheck failing due to asset import 2025-09-28 00:29:40 +03:00
Elian Doran
9b37708f0c fix(ci): missing deployment secrets in reusable action 2025-09-28 00:21:05 +03:00
Elian Doran
7386bb35e5 fix(website): yet another case of server-side rendering failing 2025-09-28 00:16:51 +03:00
Elian Doran
9274522877 chore(ci): don't run playwright on website changes 2025-09-28 00:15:15 +03:00
Elian Doran
1b444686af fix(website): another case of server-side rendering failing 2025-09-28 00:15:04 +03:00
Elian Doran
b3dfdacdc3 fix(ci): failing due to electron-rebuild 2025-09-28 00:10:54 +03:00
Elian Doran
159fab41ce fix(website): SSR not working due to download helper 2025-09-28 00:02:41 +03:00
Elian Doran
093f48f76a feat(ci): filter dependencies to make installation faster 2025-09-28 00:00:29 +03:00
Elian Doran
6998a3593e feat(ci): set up deployment workflow for website 2025-09-27 23:57:56 +03:00
Elian Doran
c3250cfd72 style(website): minor missing margin on mobile 2025-09-27 22:59:28 +03:00
Elian Doran
e52eb9bcb0 feat(website): switch assets to webp 2025-09-27 22:42:08 +03:00
Elian Doran
5ac2892e34 chore(website): fix typecheck issues 2025-09-27 22:36:26 +03:00
Elian Doran
a15aab395a feat(website): add alt + lazy loading 2025-09-27 22:26:41 +03:00
Elian Doran
f991276152 feat(website): add link to older versions 2025-09-27 22:23:10 +03:00
Elian Doran
1f71ceb611 fix(website): favicon no longer working 2025-09-27 22:16:38 +03:00
Elian Doran
92e14159b9 feat(website): display version to be downloaded 2025-09-27 22:16:19 +03:00
Elian Doran
b8419604e5 fix(website): discrepancies in production build 2025-09-27 21:29:39 +03:00
Elian Doran
096fd82e64 style(website): minor tweaks on light/dark mode 2025-09-27 21:20:28 +03:00
Elian Doran
cbaae52a7e style(website): minor improvements to get started 2025-09-27 21:14:20 +03:00
Elian Doran
5905299331 fix(website): mobile regression and layout tweaks 2025-09-27 21:11:34 +03:00
Elian Doran
2df0763141 refactor(website): use nested CSS 2025-09-27 21:02:23 +03:00
Elian Doran
fb7453f7b0 feat(website): improve icon fit 2025-09-27 19:59:12 +03:00
Elian Doran
974d20b0ba feat(website): add icons to collections 2025-09-27 19:56:11 +03:00
Elian Doran
c2f6d9aa07 feat(website): add icons to note types 2025-09-27 19:53:47 +03:00
Elian Doran
6194386464 feat(website): reorder sections around 2025-09-27 19:39:39 +03:00
Elian Doran
329ecd6894 feat(website): improve FAQ section 2025-09-27 19:29:40 +03:00
Elian Doran
150f470aee chore(website): improve scoop link 2025-09-27 19:26:29 +03:00
Elian Doran
83b843f047 style(website): disable link underline globally 2025-09-27 19:23:16 +03:00
Elian Doran
24043611c3 feat(website): split REST API into separate entry 2025-09-27 19:20:03 +03:00
Elian Doran
2c99ba64bc feat(website): add links to all feature descriptions 2025-09-27 19:08:39 +03:00
Elian Doran
ffe30bed75 chore(website): use same more info mechanism for list with screenshot 2025-09-27 19:02:13 +03:00
Elian Doran
b6088f488f feat(website): use list with screenshot for note types 2025-09-27 18:59:51 +03:00
Elian Doran
e04165a184 feat(website): use list with screenshot for note types 2025-09-27 18:47:45 +03:00
Elian Doran
d7aa95ce8e feat(website): add icons for each benefit 2025-09-27 18:40:00 +03:00
Elian Doran
28214ec9fb feat(website): split benefits into three different sections 2025-09-27 18:27:15 +03:00
Elian Doran
28952a5253 feat(website): list with screenshot for collections 2025-09-27 18:17:20 +03:00
Elian Doran
d66505e5bc fix(website): hover effect for buttons 2025-09-27 17:57:24 +03:00
Elian Doran
c4354032b5 feat(website): add a final call-to-action 2025-09-27 17:56:59 +03:00
Elian Doran
d23550d3ef fix(website): mobile menu causing issues with scroll anchoring 2025-09-27 17:39:40 +03:00
Elian Doran
894ec1e3c1 feat(website): social buttons in mobile menu 2025-09-27 17:37:01 +03:00
Elian Doran
bdb03f8d51 style(website): use color in header instead of bold for active 2025-09-27 17:28:14 +03:00
Elian Doran
61ea27c8f4 style(website): misalignment of icon in button 2025-09-27 17:27:02 +03:00
Elian Doran
ac45617d8f feat(website): mobile toggle menu 2025-09-27 17:23:44 +03:00
Elian Doran
35853ff988 fix(website): logo not working in subfolder 2025-09-27 17:04:31 +03:00
Elian Doran
80009f99e8 chore(website): rebrand donate to support us 2025-09-27 17:03:39 +03:00
Elian Doran
0b1d001c20 chore(website): rebrand download to get started 2025-09-27 17:01:54 +03:00
Elian Doran
cb63e88cdc style(website): colored download links 2025-09-27 16:52:43 +03:00
Elian Doran
a5c7f4221b feat(website): full-width Docker card 2025-09-27 16:49:32 +03:00
Elian Doran
f61010a65e feat(website): further improve alignment in download cards 2025-09-27 16:42:06 +03:00
Elian Doran
b99f5b2cbe feat(website): multiple recommended downloads for better fit 2025-09-27 16:39:10 +03:00
Elian Doran
9919d0cbfa style(website): align download buttons slightly 2025-09-27 16:35:09 +03:00
Elian Doran
fe8099d8d1 feat(website): change URL for NixOS server module 2025-09-27 16:30:25 +03:00
Elian Doran
0da336c8e1 feat(website): homebrew cask for macOS 2025-09-27 16:25:10 +03:00
Elian Doran
37f5d19739 feat(website): quick start for downloads 2025-09-27 16:23:12 +03:00
Elian Doran
2ac0d84cee feat(website): help button for Linux and Docker 2025-09-27 16:09:16 +03:00
Elian Doran
e639961b68 feat(website): open external links in new tab in downloads 2025-09-27 15:58:37 +03:00
Elian Doran
adf29b4e6e refactor(website): use button component in downloads 2025-09-27 15:57:23 +03:00
Elian Doran
b00cd032a3 feat(website): add dedicated card for docker in downloads 2025-09-27 15:51:42 +03:00
Elian Doran
60e8f46777 feat(website): add help pages to all note types / collections 2025-09-27 15:38:01 +03:00
Elian Doran
ef2860770f chore(website): minor adjustment to footer 2025-09-27 15:22:06 +03:00
Elian Doran
aa562e9c26 style(website): full-height for desktop download section 2025-09-27 15:01:59 +03:00
Elian Doran
866ccc1696 feat(website): windows light/dark screenshot 2025-09-27 15:01:03 +03:00
Elian Doran
dbe241dee7 feat(website): macos light/dark screenshot 2025-09-27 14:47:46 +03:00
Elian Doran
bd32a08e11 style(website): slight adjustments to hero section on desktop 2025-09-27 14:29:17 +03:00
Elian Doran
8416dab870 feat(website): improve hero download buttons on mobile 2025-09-27 14:27:31 +03:00
Elian Doran
6fda669307 feat(website): add github & docker links on hero section 2025-09-27 14:15:08 +03:00
Elian Doran
c21a9223f5 refactor(website): use link component with rel 2025-09-27 14:02:49 +03:00
Elian Doran
4e4e65b462 feat(website): adjust page title 2025-09-27 13:55:04 +03:00
Elian Doran
5e07231d78 feat(website): add footer social buttons 2025-09-27 13:37:31 +03:00
Elian Doran
d71d1ce8b4 feat(website): improve the donation page 2025-09-27 13:18:48 +03:00
Elian Doran
892e84deaa feat(website): outline for donation buttons 2025-09-27 12:46:16 +03:00
Elian Doran
7a73af0299 feat(website): improve download button with icon and platform title 2025-09-27 12:41:33 +03:00
Elian Doran
65dae511e5 feat(website): add icons for donate buttons 2025-09-27 12:14:16 +03:00
Elian Doran
55c70b404c chore(website): improve header layout on mobile 2025-09-27 11:55:49 +03:00
Elian Doran
8117586548 chore(website): further improve layout on mobile 2025-09-27 11:54:00 +03:00
Elian Doran
3ce9c7ba3d chore(website): improve screenshot fit on mobile 2025-09-27 11:46:36 +03:00
Elian Doran
ab162efab8 chore(website): improve hero section layout on mobile 2025-09-27 11:43:19 +03:00
Elian Doran
babfc3cfb9 chore(website): hide download buttons on mobile 2025-09-27 11:34:09 +03:00
Elian Doran
3d780d7d02 chore(website): improve main layout on mobile 2025-09-27 11:32:30 +03:00
Elian Doran
5b81aff8be chore(website): set up name and favicon 2025-09-27 11:26:08 +03:00
Elian Doran
86b14a5763 chore(website): improve contrast on buttons on light theme 2025-09-27 11:22:56 +03:00
Elian Doran
14a2794d15 chore(website): minor changes according to review 2025-09-27 11:19:29 +03:00
Elian Doran
eef68aca0f chore(deps): update dependency @smithy/middleware-retry to v4.3.1 (#7109) 2025-09-27 10:39:03 +03:00
Elian Doran
f6f7445528 chore(deps): update dependency @anthropic-ai/sdk to v0.64.0 (#7111) 2025-09-27 10:37:47 +03:00
Elian Doran
f7c0184a6b fix(deps): update dependency react-i18next to v16 (#7112) 2025-09-27 10:37:27 +03:00
renovate[bot]
65bc599a16 fix(deps): update dependency react-i18next to v16 2025-09-27 01:29:01 +00:00
renovate[bot]
b445bef74c chore(deps): update dependency @anthropic-ai/sdk to v0.64.0 2025-09-27 01:28:15 +00:00
renovate[bot]
93d7ba032d chore(deps): update dependency @smithy/middleware-retry to v4.3.1 2025-09-27 01:26:19 +00:00
Elian Doran
334e2c3949 chore(website): get rid of package lock 2025-09-27 01:43:28 +03:00
Elian Doran
a11797fe6e chore(website): remove old website 2025-09-27 01:42:15 +03:00
Elian Doran
3cf0ec5740 feat(website): draft a donation page 2025-09-27 01:40:47 +03:00
Elian Doran
40f578f43f Translations update from Hosted Weblate (#7106) 2025-09-27 01:39:46 +03:00
Elian Doran
428abb4591 feat(website): improve 404 page 2025-09-27 01:20:59 +03:00
Elian Doran
4954fa89b5 feat(website): add link to documentation 2025-09-27 01:16:39 +03:00
Elian Doran
10f7837a7f style(website): full-height layout 2025-09-27 01:11:12 +03:00
Miljenko Šuflaj
fca310cc31 Added translation using Weblate (Croatian) 2025-09-27 00:06:19 +02:00
Miljenko Šuflaj
cf58b511df Added translation using Weblate (Croatian) 2025-09-27 00:06:19 +02:00
green
9da1f52a71 Translated using Weblate (Japanese)
Currently translated at 99.7% (380 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2025-09-27 00:06:17 +02:00
green
5c8e674ddb Translated using Weblate (Japanese)
Currently translated at 99.7% (1601 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-09-27 00:06:16 +02:00
Newcomer1989
f027b25bc2 Translated using Weblate (German)
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2025-09-27 00:06:16 +02:00
Elian Doran
cfe71a3426 style(website): improve footer layout 2025-09-27 01:04:28 +03:00
Elian Doran
70afb636ca feat(website): architecture switcher for download 2025-09-27 01:01:06 +03:00
Elian Doran
818efe7fb0 feat(website): port download page 2025-09-27 00:46:51 +03:00
Elian Doran
3c2263db86 chore(website): apply content width to 404 page 2025-09-27 00:09:17 +03:00
Elian Doran
7c30bc9c72 feat(website): more options link in the hero section 2025-09-27 00:08:35 +03:00
Elian Doran
ec8d719d41 style(website): improve card title / content contrast 2025-09-26 23:54:39 +03:00
Elian Doran
5f884c4440 style(website): improve card on dark mode 2025-09-26 23:49:22 +03:00
Elian Doran
e6c806d462 style(website): improve hero section 2025-09-26 23:46:29 +03:00
Elian Doran
4afceeca79 style(website): general dark theme 2025-09-26 23:44:07 +03:00
Elian Doran
7990c60ce7 feat(website): clickable header banner 2025-09-26 23:40:34 +03:00
Elian Doran
74c248bce2 style(website): improve header nav layout 2025-09-26 23:37:36 +03:00
Elian Doran
2df646f80c refactor(website): move back into website2 2025-09-26 23:35:28 +03:00
Elian Doran
768260782a refactor(website): split each section into a component 2025-09-26 23:34:14 +03:00
Elian Doran
4eff105af5 refactor(website): split CSS 2025-09-26 23:32:09 +03:00
Elian Doran
68ef6ea142 chore(website): reimplement download button 2025-09-26 23:28:58 +03:00
Elian Doran
772d4ac5a1 chore(website): port the rest of the layout 2025-09-26 23:24:28 +03:00
Elian Doran
b3e1a79d40 chore(website): port FAQ 2025-09-26 23:21:41 +03:00
Elian Doran
d7afa8526d chore(website): port collections 2025-09-26 23:18:38 +03:00
Elian Doran
b4a2a6c12b chore(website): port note types 2025-09-26 23:16:06 +03:00
Elian Doran
32c15f5e03 chore(website): port benefits section 2025-09-26 23:06:57 +03:00
Elian Doran
b5a491820c chore(website): start with fresh template for preact 2025-09-26 22:54:56 +03:00
Elian Doran
8a477c87e0 chore(website): small adjustments to layout 2025-09-26 22:48:37 +03:00
Elian Doran
8bcae8cdb8 feat(website): smart download now button in header 2025-09-26 22:44:27 +03:00
Elian Doran
ea87161a91 feat(website): smart download now button 2025-09-26 22:40:27 +03:00
Elian Doran
f2bb6cb848 chore(website): remove unnecessary spacing in links 2025-09-26 22:21:12 +03:00
Elian Doran
fecb677552 chore(website): remove unnecessary nbsp 2025-09-26 22:19:21 +03:00
Elian Doran
3ba9b56833 chore(website): fix charset 2025-09-26 22:18:50 +03:00
Elian Doran
a329e7d72a chore(website): fix image references 2025-09-26 22:18:24 +03:00
Elian Doran
2568f6bb53 chore(website): improve formatting slightly 2025-09-26 22:11:15 +03:00
Elian Doran
23936596fa chore(website): extract stylesheet 2025-09-26 22:05:23 +03:00
Elian Doran
398db56fe7 chore(website): add existing structure 2025-09-26 22:04:17 +03:00
Elian Doran
423ef14ca6 chore(website): create empty template 2025-09-26 22:01:07 +03:00
Elian Doran
9921d3e0a7 feat(share): render included notes 2025-09-26 18:42:59 +03:00
e.lednev
ac22fd8d60 - Renamed localization key febuary to february.
- Corrected various spelling and grammatical errors in the `ru.json` translation file.
2025-09-26 13:17:19 +03:00
Elian Doran
ff065964e9 chore(deps): update dependency @sveltejs/kit to v2.43.5 (#7095) 2025-09-26 09:45:21 +03:00
Elian Doran
951dda50ac chore(deps): update dependency tsx to v4.20.6 (#7097) 2025-09-26 09:45:08 +03:00
renovate[bot]
01bd2f1815 chore(deps): update dependency tsx to v4.20.6 2025-09-26 05:42:18 +00:00
renovate[bot]
570f8fd155 chore(deps): update dependency @sveltejs/kit to v2.43.5 2025-09-26 05:41:31 +00:00
Elian Doran
5d348e3ad6 chore(deps): update dependency lint-staged to v16.2.1 (#7096) 2025-09-26 08:33:19 +03:00
Elian Doran
9573346d55 chore(deps): update dependency tsx to v4.20.6 (#7098) 2025-09-26 08:32:55 +03:00
Elian Doran
e4570a1bb0 chore(deps): update dependency @inlang/paraglide-js to v2.4.0 (#7099) 2025-09-26 08:32:18 +03:00
Elian Doran
b884aba244 Translations update from Hosted Weblate (#7100) 2025-09-26 08:31:57 +03:00
Jiri Novacek
9c73908560 Translated using Weblate (Czech)
Currently translated at 5.2% (20 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/cs/
2025-09-26 03:02:11 +00:00
Jiri Novacek
b399d292a9 Translated using Weblate (Czech)
Currently translated at 1.3% (21 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/cs/
2025-09-26 03:02:10 +00:00
green
a557d9770f Translated using Weblate (Japanese)
Currently translated at 98.9% (377 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2025-09-26 03:02:08 +00:00
greenfork
a11ebfeb42 Translated using Weblate (Russian)
Currently translated at 99.6% (1599 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-09-26 03:02:07 +00:00
green
4695c3726d Translated using Weblate (Japanese)
Currently translated at 93.0% (1494 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-09-26 03:02:05 +00:00
Francis C
324f79ceb9 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2025-09-26 03:02:04 +00:00
Antonio Martín Villaseñor
fc5e459895 Translated using Weblate (Spanish)
Currently translated at 99.0% (1589 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2025-09-26 03:02:03 +00:00
Francis C
bdaba67859 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1605 of 1605 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2025-09-26 03:02:01 +00:00
renovate[bot]
2b01e2fdaf chore(deps): update dependency @inlang/paraglide-js to v2.4.0 2025-09-26 02:12:30 +00:00
renovate[bot]
9967da6ea1 chore(deps): update dependency tsx to v4.20.6 2025-09-26 02:11:43 +00:00
renovate[bot]
a56a00ba2f chore(deps): update dependency lint-staged to v16.2.1 2025-09-26 02:10:11 +00:00
Elian Doran
82df26031f fix(client): Use number sorting for number columns in Table view (#7094) 2025-09-25 21:28:04 +03:00
Florian Meißner
b4af8e7339 fix(client): Use number sorting for number columns in Table view 2025-09-25 19:28:02 +02:00
Elian Doran
e6180f427b fix(client): note buttons visible in zen mode 2025-09-25 19:49:06 +03:00
Elian Doran
9a95ec170d fix(client): resize gutter not available in zen mode (fixes #7093) 2025-09-25 19:40:40 +03:00
Elian Doran
7be0507db5 chore(deps): update dependency electron to v38 (#6879) 2025-09-25 09:55:01 +03:00
Elian Doran
1d324ab3b0 chore(deps): override node-abi 2025-09-25 09:45:52 +03:00
Elian Doran
9e00ed7e14 chore(deps): update better-sqlite3 to 12.4.1 2025-09-25 09:38:13 +03:00
renovate[bot]
02a6652b44 chore(deps): update dependency electron to v38 2025-09-25 06:10:38 +00:00
Elian Doran
e19f7b286a chore(deps): update node.js to v22.20.0 (#7089) 2025-09-25 09:06:19 +03:00
Elian Doran
50301a97f3 chore(deps): update dependency @tailwindcss/typography to v0.5.19 (#7087) 2025-09-25 09:06:03 +03:00
Elian Doran
408e31079c chore(deps): update dependency ollama to v0.6.0 (#7088) 2025-09-25 09:05:49 +03:00
renovate[bot]
bf81e159ca chore(deps): update node.js to v22.20.0 2025-09-25 02:02:48 +00:00
renovate[bot]
b1f89296ff chore(deps): update dependency ollama to v0.6.0 2025-09-25 02:02:42 +00:00
renovate[bot]
1948302a64 chore(deps): update dependency @tailwindcss/typography to v0.5.19 2025-09-25 02:01:53 +00:00
Elian Doran
187585b32f style(next): fix alignment of multiplicity in promoted attrs 2025-09-24 23:37:00 +03:00
Elian Doran
d351fd506a chore(toast): get rid of redundant titles 2025-09-24 23:10:14 +03:00
Elian Doran
1cf29c985e Translations update from Hosted Weblate (#7086) 2025-09-24 22:57:32 +03:00
Jiri Novacek
04374540ad Translated using Weblate (Czech)
Currently translated at 2.8% (11 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/cs/
2025-09-24 21:40:24 +02:00
Jiri Novacek
ce8f3a4f8f Translated using Weblate (Czech)
Currently translated at 0.6% (11 of 1603 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/cs/
2025-09-24 21:40:24 +02:00
Krzysztof Kaplon
acb21b992d Translated using Weblate (Polish)
Currently translated at 75.0% (286 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2025-09-24 21:40:23 +02:00
Elian Doran
15f344fe4a feat(toast): improve layout for toasts without title 2025-09-24 22:40:03 +03:00
Elian Doran
120324c3f0 style(next): show toast titles again 2025-09-24 22:03:35 +03:00
Elian Doran
59ce8b912d feat(ws): add a warning toast if websocket gets disconnected 2025-09-24 21:56:15 +03:00
Elian Doran
619888847b chore(options/mfa): alert contained escaped characters 2025-09-24 21:56:15 +03:00
Elian Doran
06b782e91d chore(deps): update dependency jiti to v2.6.0 (#7066) 2025-09-24 21:22:43 +03:00
renovate[bot]
1d7e0a193a chore(deps): update dependency jiti to v2.6.0 2025-09-24 18:09:03 +00:00
Elian Doran
2d815852e4 chore(deps): update typescript-eslint monorepo to v8.44.1 (#7062) 2025-09-24 21:06:45 +03:00
Elian Doran
735a7104f1 chore(deps): update dependency @eslint/compat to v1.4.0 (#7065) 2025-09-24 21:06:17 +03:00
Elian Doran
e3e4772aab chore(deps): update dependency lint-staged to v16.2.0 (#7067) 2025-09-24 21:05:54 +03:00
Elian Doran
8bb65b94d0 chore(deps): update svelte monorepo (#7068) 2025-09-24 21:04:20 +03:00
renovate[bot]
b9edae4fc9 chore(deps): update svelte monorepo 2025-09-24 17:20:37 +00:00
renovate[bot]
27aae18345 chore(deps): update dependency @eslint/compat to v1.4.0 2025-09-24 17:19:28 +00:00
renovate[bot]
47db63d909 chore(deps): update typescript-eslint monorepo to v8.44.1 2025-09-24 17:18:48 +00:00
renovate[bot]
8ebeead32c chore(deps): update dependency lint-staged to v16.2.0 2025-09-24 17:15:03 +00:00
Elian Doran
09d43e710f chore(deps): update dependency @smithy/middleware-retry to v4.3.0 (#7081) 2025-09-24 20:12:54 +03:00
Elian Doran
7240f64a49 chore(deps): update dependency @playwright/test to v1.55.1 (#7080) 2025-09-24 20:12:42 +03:00
Elian Doran
ab868d76db chore(deps): update dependency @anthropic-ai/sdk to v0.63.1 (#7079) 2025-09-24 20:12:24 +03:00
renovate[bot]
acdaf6a636 chore(deps): update dependency @playwright/test to v1.55.1 2025-09-24 17:11:12 +00:00
Elian Doran
6dccef1689 fix(deps): update dependency mind-elixir to v5.2.1 (#7064) 2025-09-24 20:10:13 +03:00
Elian Doran
f7ec726b15 fix(deps): update dependency @codemirror/view to v6.38.3 (#7063) 2025-09-24 20:09:47 +03:00
Elian Doran
781570f950 chore(deps): update pnpm to v10.17.1 (#7061) 2025-09-24 20:08:51 +03:00
Elian Doran
7774d41457 chore(deps): update dependency vite to v7.1.7 (#7060) 2025-09-24 20:08:38 +03:00
Elian Doran
27e6d1b00b chore(release): prepare for v0.99.0 2025-09-24 19:20:20 +03:00
Elian Doran
73ea0cce32 docs(release): document v0.99.0 2025-09-24 19:19:59 +03:00
Elian Doran
a1741b8634 chore(ci/docker): version number set to late 2025-09-24 19:12:28 +03:00
Elian Doran
a0f1a63fb6 Revert "fix: re-enable rootless images" (#7082) 2025-09-24 19:07:06 +03:00
Elian Doran
7c13373f16 Revert "fix: re-enable rootless images" 2025-09-24 19:06:27 +03:00
Elian Doran
239b7b810d Translations update from Hosted Weblate (#7077) 2025-09-24 07:52:45 +03:00
renovate[bot]
29c8bcaf6e chore(deps): update dependency @smithy/middleware-retry to v4.3.0 2025-09-24 01:16:44 +00:00
renovate[bot]
2b3ae94f8d chore(deps): update dependency @anthropic-ai/sdk to v0.63.1 2025-09-24 01:15:20 +00:00
green
e753924c4b Translated using Weblate (Japanese)
Currently translated at 83.8% (1341 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-09-23 19:20:39 +00:00
Elian Doran
8080d3b8a7 fix(client/search): unable to search for empty string 2025-09-23 22:20:25 +03:00
Elian Doran
1f4dd04ef0 fix(client/search): highlight remaining stuck 2025-09-23 22:08:17 +03:00
Elian Doran
348432bd5b fix(client/search): not reacting to change 2025-09-23 21:55:39 +03:00
Elian Doran
d2962b060e fix(client/search): results not being displayed 2025-09-23 21:44:39 +03:00
Elian Doran
fae66e555e chore(client/search): fix improper nesting 2025-09-23 20:33:43 +03:00
Elian Doran
aeb9bfc1fd feat(client/options): add a description for the editor features 2025-09-23 20:31:15 +03:00
Elian Doran
5a15024e59 refactor(client): use type safety for option names 2025-09-23 20:24:55 +03:00
Elian Doran
23c2acaab7 fix(client): note title shown for read-only notes for the first time 2025-09-23 20:24:55 +03:00
Elian Doran
4cc55b02ab feat(client/text): provide a way to disable slash commands 2025-09-23 20:24:55 +03:00
Elian Doran
71ce9c459e refactor(client/options): deduplicate editor feature checkbox 2025-09-23 20:24:55 +03:00
Elian Doran
97b5ea0798 fix(share): text not visible under dark theme in prod 2025-09-23 20:24:54 +03:00
Elian Doran
5fd0f79d44 Translations update from Hosted Weblate (#7074) 2025-09-23 17:30:17 +03:00
Krzysztof Kaplon
2a090c7014 Translated using Weblate (Polish)
Currently translated at 72.9% (278 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2025-09-23 15:02:09 +02:00
Krzysztof Kaplon
126030f17e Translated using Weblate (Polish)
Currently translated at 29.7% (476 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2025-09-23 15:02:07 +02:00
Микола Копитін
f22fd1d454 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/uk/
2025-09-23 15:02:06 +02:00
green
8d4c656a6f Translated using Weblate (Japanese)
Currently translated at 98.1% (374 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/
2025-09-23 15:02:05 +02:00
greenfork
3c5a053a2c Translated using Weblate (Russian)
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-09-23 15:02:04 +02:00
green
664b7e45e7 Translated using Weblate (Japanese)
Currently translated at 74.5% (1192 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-09-23 15:02:00 +02:00
renovate[bot]
5c618abc79 fix(deps): update dependency mind-elixir to v5.2.1 2025-09-23 00:29:35 +00:00
renovate[bot]
220cf8aedd fix(deps): update dependency @codemirror/view to v6.38.3 2025-09-23 00:28:46 +00:00
renovate[bot]
78f16ddc12 chore(deps): update pnpm to v10.17.1 2025-09-23 00:27:00 +00:00
renovate[bot]
0048e95e0c chore(deps): update dependency vite to v7.1.7 2025-09-23 00:26:49 +00:00
Elian Doran
13e9fcbfba chore(global_menu): indicate external changes to zoom 2025-09-22 20:19:00 +03:00
Elian Doran
5249911ddb chore(client): remove redundant log 2025-09-22 20:08:37 +03:00
Elian Doran
59fe1299b2 chore(global_menu): make zoom item unclickable to avoid misclicks 2025-09-22 20:07:10 +03:00
Elian Doran
1c9f1ba82c chore(global_menu): dismiss menu when entering fullscreen 2025-09-22 20:06:01 +03:00
Elian Doran
311f4aded8 fix(global_menu): zoom controls tooltip overlapping 2025-09-22 20:03:06 +03:00
Elian Doran
ed8df51216 fix(desktop): wrong separator in spellcheck context menu 2025-09-22 19:59:45 +03:00
Elian Doran
5e4d403556 fix(ci/docker): upload digest failing due to x64 name 2025-09-22 19:51:58 +03:00
Elian Doran
f3a9c718ad fix(ci/docker): upload digest failing 2025-09-22 19:32:55 +03:00
Elian Doran
f3733eb341 fix: re-enable rootless images (#7050) 2025-09-22 19:14:21 +03:00
Elian Doran
3b06845a71 fix(board): unable to create by clicking outside 2025-09-22 18:52:41 +03:00
Elian Doran
94e20c44e5 fix(desktop): background effects always on 2025-09-22 18:45:45 +03:00
Elian Doran
1638fd8590 fix(ribbon): unable to set content language to "none" 2025-09-22 18:37:03 +03:00
Elian Doran
effe0a4f51 chore(options_init): disable bold & italic as default highlight options 2025-09-22 18:33:15 +03:00
Elian Doran
bb3ac277f4 feat(ribbon): hide file details when opening PDF (closes #6873) 2025-09-22 18:27:13 +03:00
Adorian Doran
68aacfea6f Merge branch 'main' of https://github.com/TriliumNext/Trilium 2025-09-22 13:57:09 +03:00
Adorian Doran
e0056a457e style(legacy)/jump to note: fix broken selection colors 2025-09-22 13:56:58 +03:00
Elian Doran
4d6c2fd8cb Update typo in ru translation (#7053) 2025-09-22 13:53:02 +03:00
Elian Doran
f63b8cef2d Translations update from Hosted Weblate (#7055) 2025-09-22 13:51:55 +03:00
renato rinaldi
f19da292c1 Translated using Weblate (Italian)
Currently translated at 35.6% (136 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/
2025-09-22 12:51:18 +02:00
Elian Doran
36003b76e9 Translations update from Hosted Weblate (#7054) 2025-09-22 13:50:17 +03:00
Jukka Tainio
1c627dec05 Translated using Weblate (Finnish)
Currently translated at 2.6% (10 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/fi/
2025-09-22 10:02:00 +00:00
Dmitry Matveyev
2dcb67b099 Update typo in ru translation 2025-09-22 10:59:08 +03:00
Elian Doran
de8a090410 Update dependency jsonc-eslint-parser to v2.4.1 (#7051) 2025-09-22 08:09:56 +03:00
Elian Doran
fc09a41ba0 Update svelte monorepo (#7052) 2025-09-22 08:09:37 +03:00
renovate[bot]
12f461d0ea Update svelte monorepo 2025-09-22 01:26:01 +00:00
renovate[bot]
1256338ab5 Update dependency jsonc-eslint-parser to v2.4.1 2025-09-22 01:25:21 +00:00
Quik2007
43c761328d fix: re-enable rootless images 2025-09-21 23:09:20 +02:00
Adorian Doran
6f565afd44 style/global menu: improve the full screen / zoom buttons, refactor 2025-09-21 15:13:08 +03:00
Adorian Doran
5c27e96960 style(next)/tab bar: tweak appearance 2025-09-21 12:00:23 +03:00
Adorian Doran
c0337befa7 style/tab bar: tweak the alignment of icons 2025-09-21 11:41:05 +03:00
Adorian Doran
3bda10caf0 style/title row/note icon: tweak alignment 2025-09-21 11:37:32 +03:00
Adorian Doran
a25e376f85 style/ribbon/similar notes: reduce the font size of the items 2025-09-21 11:04:22 +03:00
Adorian Doran
1b238a98de style(next)/ribbon/note map: fix the padding of the "fix nodes" button 2025-09-21 10:59:00 +03:00
Adorian Doran
38659e501e style(next)/ribbon: tweak the editability dropdown 2025-09-21 10:57:41 +03:00
Adorian Doran
113af940c1 client/dialogs/note type chooser: fix broken headings regression 2025-09-21 10:31:36 +03:00
Elian Doran
089ca7fd29 Update dependency mind-elixir to v5.2.0 (#7047) 2025-09-21 08:45:03 +03:00
renovate[bot]
529523dd4e Update dependency mind-elixir to v5.2.0 2025-09-21 00:33:07 +00:00
Adorian Doran
89417f15dc UI improvements (#7046) 2025-09-21 03:30:49 +03:00
Adorian Doran
51692aabd5 style(next)/dropdowns: fix scrollbar broken corners 2025-09-21 03:09:39 +03:00
Adorian Doran
9cde4c26d9 style(next)/horizontal layout launcher: increase the contrast of icons for the dark theme 2025-09-21 02:28:27 +03:00
Adorian Doran
c7bce91b67 Merge branch 'main' of https://github.com/TriliumNext/Trilium into feat/ui-improvements 2025-09-21 02:26:02 +03:00
Adorian Doran
91b6910a9c style(next)/horizontal layout launcher: increase the contrast of icons for the dark theme 2025-09-21 02:25:49 +03:00
Adorian Doran
9fb37968f8 style(next)/quick search/results dropdown: temporary workaround - improve appearance 2025-09-21 02:18:33 +03:00
Adorian Doran
6cfc6509f6 style(next)/quick search/results dropdown: add a temporary workaround for the broken backdrop effect when the background effects are active 2025-09-21 02:09:55 +03:00
Adorian Doran
fd054693d9 style(next)/note map: fix the broken padding of the "Fix nodes" button 2025-09-21 01:54:44 +03:00
Adorian Doran
8b65de2442 style/editor forms/text inputs: fix the hover state background color overriding the focused state background color 2025-09-21 01:44:08 +03:00
Adorian Doran
25905ebff7 style/dropdowns: tweak the appearance of keyboard selected items 2025-09-21 01:34:11 +03:00
Elian Doran
e88b59009a Translations update from Hosted Weblate (#7043) 2025-09-20 23:11:57 +03:00
Kuzma Simonov
3aee1c8546 Translated using Weblate (Russian)
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ru/
2025-09-20 20:02:08 +00:00
Kuzma Simonov
2dd554a8be Translated using Weblate (Russian)
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-09-20 20:02:06 +00:00
fr0st
f4fae04327 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pt_BR/
2025-09-20 20:02:04 +00:00
fr0st
21032d1bb8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pt_BR/
2025-09-20 20:02:02 +00:00
Adorian Doran
6745b887fb style/global menu button: fix the focus indicator 2025-09-20 22:46:56 +03:00
Adorian Doran
d0d166e426 style/global menu button: tweak appearance 2025-09-20 22:07:59 +03:00
Adorian Doran
754b95876e style/global menu button: tweak appearance 2025-09-20 22:04:37 +03:00
Adorian Doran
0bb10cf3ee style/global menu button: tweak appearance 2025-09-20 21:50:27 +03:00
Adorian Doran
d276cdf519 style/floating buttons: fix the offset of the "Show buttons" button on canvas notes 2025-09-20 17:05:06 +03:00
Adorian Doran
2768b76278 style(next)/horizontal layout: tweak the show/hide tree button 2025-09-20 16:36:43 +03:00
Elian Doran
d244803501 chore(deps): update dependency svelte to v5.39.3 (#7038) 2025-09-20 14:18:21 +03:00
renovate[bot]
158ca2acf2 chore(deps): update dependency svelte to v5.39.3 2025-09-20 05:17:09 +00:00
Elian Doran
3ef44febd8 chore(deps): update dependency @tailwindcss/typography to v0.5.18 (#7037) 2025-09-20 08:14:52 +03:00
Elian Doran
5be41ee669 chore(deps): update dependency @stylistic/eslint-plugin to v5.4.0 (#7039) 2025-09-20 08:14:05 +03:00
Elian Doran
b887d4a7d2 fix(deps): update dependency eslint-linter-browserify to v9.36.0 (#7040) 2025-09-20 08:13:46 +03:00
Elian Doran
be1de86a42 fix(deps): update eslint monorepo to v9.36.0 (#7041) 2025-09-20 08:13:06 +03:00
renovate[bot]
345d098e5f fix(deps): update eslint monorepo to v9.36.0 2025-09-20 01:17:03 +00:00
renovate[bot]
fae5421516 fix(deps): update dependency eslint-linter-browserify to v9.36.0 2025-09-20 01:15:47 +00:00
renovate[bot]
934f144bf9 chore(deps): update dependency @stylistic/eslint-plugin to v5.4.0 2025-09-20 01:14:52 +00:00
renovate[bot]
5affb837a6 chore(deps): update dependency @tailwindcss/typography to v0.5.18 2025-09-20 01:14:03 +00:00
Adorian Doran
188319d2d9 UI / theme improvements (#7036) 2025-09-20 04:11:40 +03:00
Adorian Doran
fe762577b1 Merge branch 'main' into feat/theme/improvements 2025-09-20 04:04:51 +03:00
Adorian Doran
f30da3d13b client/menus: improve the multicolumn breaking strategy 2025-09-20 04:02:46 +03:00
Adorian Doran
053a84483c client/menus: improve the multicolumn breaking strategy 2025-09-20 03:25:16 +03:00
Adorian Doran
34338a795f style/menus: document a style 2025-09-20 03:17:12 +03:00
Adorian Doran
012aceb7f2 style/menus: remove no longer used styles 2025-09-20 03:11:54 +03:00
Adorian Doran
a92604e92f client/menus: avoid unnecessary menu item no-column-break grouping 2025-09-20 03:09:56 +03:00
Adorian Doran
9a9edf16c4 client/menus: manage proper column breaking on Firefox 2025-09-20 02:59:41 +03:00
Adorian Doran
daba190e74 client/menus: rearrange "Insert note" submenu items 2025-09-20 01:57:58 +03:00
Adorian Doran
8877eded9b style/menus: tweak header layout and add multi-column menu divider line 2025-09-20 01:11:24 +03:00
Adorian Doran
0b05f597dc client/menus: refactor 2025-09-20 01:08:36 +03:00
Adorian Doran
b26803b627 client/menus: refactor 2025-09-20 00:34:25 +03:00
Adorian Doran
17e87278eb client/menus: add support for menu headers 2025-09-20 00:18:56 +03:00
Adorian Doran
79718c7e6e style(next)/bulk actions dialog: fix the alignment of the help and close buttons for actions 2025-09-19 23:46:14 +03:00
Elian Doran
0917c25bce Translations update from Hosted Weblate (#7034) 2025-09-19 22:49:56 +03:00
ssantos
45c3f6d44a Translated using Weblate (Portuguese)
Currently translated at 99.7% (380 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pt/
2025-09-19 21:02:01 +02:00
Adorian Doran
90337016e7 style(next)/launcher/calendar: fix the rounded corners of the arrow buttons 2025-09-19 21:49:01 +03:00
Adorian Doran
c0c1c8a9c2 style(next)/launcher/calendar: restyle the week number column 2025-09-19 21:41:44 +03:00
Adorian Doran
42a082f11b style: fix the spacing of the keyboard shortcuts in menu items 2025-09-19 21:10:26 +03:00
Elian Doran
891e6b9751 fix(canvas): canvas overwriting other notes (closes #6788) 2025-09-19 16:35:27 +03:00
Elian Doran
2be9d71659 fix(canvas): error when trying to save due to uninitialized API 2025-09-19 16:26:06 +03:00
Elian Doran
3f562332c7 chore(deps): update dependency @sveltejs/kit to v2.42.2 (#7028) 2025-09-19 09:31:17 +03:00
renovate[bot]
edd7e43b41 chore(deps): update dependency @sveltejs/kit to v2.42.2 2025-09-19 05:43:38 +00:00
Elian Doran
6ea1e31350 chore(deps): update dependency vite to v7.1.6 (#7029) 2025-09-19 08:41:19 +03:00
Elian Doran
770648619e fix(deps): update dependency mermaid to v11.12.0 (#7030) 2025-09-19 08:40:39 +03:00
renovate[bot]
08c3e97a46 fix(deps): update dependency mermaid to v11.12.0 2025-09-19 02:26:36 +00:00
renovate[bot]
9a08b864ee chore(deps): update dependency vite to v7.1.6 2025-09-19 02:25:50 +00:00
Elian Doran
039d6e6a4e chore(ckeditor): update license 2025-09-18 23:09:16 +03:00
Elian Doran
36692a5ad7 Translations update from Hosted Weblate (#7027) 2025-09-18 22:41:55 +03:00
ssantos
67c7d7575d Translated using Weblate (Portuguese)
Currently translated at 99.2% (378 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pt/
2025-09-18 20:17:21 +02:00
Languages add-on
bb51eed0bc Added translation using Weblate (Portuguese) 2025-09-18 18:13:46 +00:00
ssantos
adce041b02 Added translation using Weblate (Portuguese) 2025-09-18 20:13:44 +02:00
Elian Doran
183d11ff72 fix(client): global menu has outline 2025-09-18 16:19:23 +03:00
Elian Doran
a9f5b44fac fix(client): dangling tooltips after closing split 2025-09-18 15:30:11 +03:00
Elian Doran
c4560c2bc8 fix(ribbon): classic toolbar becoming empty sometimes 2025-09-18 13:39:30 +03:00
Elian Doran
ba740eff9b fix(client): global menu blur-behind not working 2025-09-18 12:36:39 +03:00
Elian Doran
9dcf46cbb3 chore(deps): update dependency @types/node to v22.18.6 (#7016) 2025-09-18 08:59:00 +03:00
renovate[bot]
7782b11186 chore(deps): update dependency @types/node to v22.18.6 2025-09-18 05:12:52 +00:00
Elian Doran
e1b8f973d5 chore(deps): update dependency @smithy/middleware-retry to v4.2.4 (#7015) 2025-09-18 08:08:35 +03:00
Elian Doran
a51e475095 chore(deps): update dependency electron to v37.5.1 (#7017) 2025-09-18 08:08:08 +03:00
Elian Doran
13685d2688 chore(deps): update dependency esbuild to v0.25.10 (#7018) 2025-09-18 08:07:10 +03:00
Elian Doran
8bef36c6c7 chore(deps): update dependency @anthropic-ai/sdk to v0.63.0 (#7019) 2025-09-18 08:05:41 +03:00
Elian Doran
207807e0c2 chore(deps): update dependency svelte to v5.39.2 (#7020) 2025-09-18 08:05:21 +03:00
renovate[bot]
b5c82af464 chore(deps): update dependency svelte to v5.39.2 2025-09-18 04:51:39 +00:00
Elian Doran
3fa95d4fee Translations update from Hosted Weblate (#7022) 2025-09-18 07:50:31 +03:00
Newcomer1989
ee43b21b0c Translated using Weblate (German)
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2025-09-18 04:49:38 +00:00
Newcomer1989
29e091461f Translated using Weblate (German)
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2025-09-18 04:49:38 +00:00
Elian Doran
5b6a2b1f5d chore(deps): update pnpm to v10.17.0 (#7021) 2025-09-18 07:49:32 +03:00
Elian Doran
d657303f2f fix(client): keyboard shortcuts offset in tree menu 2025-09-18 07:47:10 +03:00
renovate[bot]
a4d541ae1c chore(deps): update pnpm to v10.17.0 2025-09-18 00:54:54 +00:00
renovate[bot]
b38631b04b chore(deps): update dependency @anthropic-ai/sdk to v0.63.0 2025-09-18 00:53:04 +00:00
renovate[bot]
fe0f8ad83d chore(deps): update dependency esbuild to v0.25.10 2025-09-18 00:52:13 +00:00
renovate[bot]
46950cbceb chore(deps): update dependency electron to v37.5.1 2025-09-18 00:51:23 +00:00
renovate[bot]
9893de4642 chore(deps): update dependency @smithy/middleware-retry to v4.2.4 2025-09-18 00:49:37 +00:00
Elian Doran
b9055c6810 fix(client): close button not working on first render 2025-09-17 22:57:09 +03:00
Elian Doran
f068b335f5 Translations update from Hosted Weblate (#7014) 2025-09-17 20:53:57 +03:00
Dong-ha, Lee
7c750811cc Translated using Weblate (Korean)
Currently translated at 1.3% (21 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ko/
2025-09-17 19:02:05 +02:00
Francis C
2edce23a29 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2025-09-17 19:02:03 +02:00
Francis C
3efe628eb7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (381 of 381 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2025-09-17 19:02:01 +02:00
Elian Doran
fdbb88ccd1 Merge branch 'main' of https://github.com/TriliumNext/Trilium 2025-09-17 18:14:04 +03:00
Elian Doran
c44395887b refactor(react): remove deprecated import 2025-09-17 12:05:06 +03:00
Elian Doran
1ae81abf0a fix(collections/board): double entry on Enter + dismiss not working 2025-09-17 10:55:03 +03:00
Elian Doran
74b89098c5 fix(deps): update ckeditor monorepo (#7011) 2025-09-17 08:56:34 +03:00
Elian Doran
ae46798d1d fix(client/dialogs): branch prefix initial value incorrect 2025-09-17 08:52:47 +03:00
Elian Doran
b502e999de style(client): improve read-only note title 2025-09-17 08:50:37 +03:00
Elian Doran
57004ab848 fix(client): note title not working for in-app help 2025-09-17 08:50:23 +03:00
Elian Doran
fbd47025d6 chore(react): monkey patch boostrap tooltip handling 2025-09-17 08:47:13 +03:00
Elian Doran
f87d270caa refactor(react): get rid of jQuery in static tooltip 2025-09-17 08:26:05 +03:00
renovate[bot]
2ccaf5f97c fix(deps): update ckeditor monorepo 2025-09-17 05:01:16 +00:00
Elian Doran
641c6f4595 chore(dx/nix): fix flake fully (#7004) 2025-09-17 08:00:23 +03:00
Elian Doran
eb1039d9f7 chore(deps): update dependency @smithy/middleware-retry to v4.2.2 (#7007) 2025-09-17 07:59:32 +03:00
Elian Doran
349d946e6f chore(deps): update dependency @types/node to v22.18.5 (#7008) 2025-09-17 07:59:10 +03:00
Elian Doran
170e271bb4 chore(deps): update dependency fs-extra to v11.3.2 (#7009) 2025-09-17 07:58:41 +03:00
Elian Doran
adca755598 chore(deps): update dependency ollama to v0.5.18 (#7010) 2025-09-17 07:58:19 +03:00
Elian Doran
f58cbc64bb chore(deps): update dependency @sveltejs/kit to v2.42.1 (#7012) 2025-09-17 07:57:02 +03:00
Elian Doran
8d5e8c7ea8 chore(deps): update typescript-eslint monorepo to v8.44.0 (#7013) 2025-09-17 07:55:12 +03:00
renovate[bot]
411d61d251 chore(deps): update typescript-eslint monorepo to v8.44.0 2025-09-17 01:54:31 +00:00
renovate[bot]
e7556f7dfa chore(deps): update dependency @sveltejs/kit to v2.42.1 2025-09-17 01:53:05 +00:00
renovate[bot]
3e0f07aa48 chore(deps): update dependency ollama to v0.5.18 2025-09-17 01:51:03 +00:00
renovate[bot]
e5a90662eb chore(deps): update dependency fs-extra to v11.3.2 2025-09-17 01:50:24 +00:00
renovate[bot]
9886376738 chore(deps): update dependency @types/node to v22.18.5 2025-09-17 01:49:49 +00:00
renovate[bot]
73603f6593 chore(deps): update dependency @smithy/middleware-retry to v4.2.2 2025-09-17 01:49:04 +00:00
Elian Doran
88bc6739ca chore(react): port create_pane_button 2025-09-16 23:05:43 +03:00
Elian Doran
a4e8e62452 chore(react): port close_pane_button 2025-09-16 23:01:33 +03:00
Elian Doran
78e45d095b chore(react): port move_pane_button 2025-09-16 22:45:54 +03:00
FliegendeWurst
834c67aeff chore(dx/nix): fix flake fully 2025-09-16 18:05:56 +02:00
Elian Doran
23b798e392 Fix(build): Fix the issue that on ARM64 Linux failed to launch due to missing better_sqlite3.node (#7002) 2025-09-16 19:01:55 +03:00
Elian Doran
bd374bf617 Translations update from Hosted Weblate (#7003) 2025-09-16 18:59:38 +03:00
hllverel
87d8bcdde5 Translated using Weblate (Turkish)
Currently translated at 3.6% (59 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/tr/
2025-09-16 15:53:46 +00:00
Elian Doran
a840d91379 feat(desktop): use unique appdata if port is different 2025-09-16 18:43:01 +03:00
Elian Doran
0fcff6639f refactor(desktop): use shorter imports 2025-09-16 18:27:52 +03:00
Elian Doran
f607c9793d chore(desktop): use translation 2025-09-16 18:24:44 +03:00
Elian Doran
06254442c9 chore(desktop): use different mechanism for second instance 2025-09-16 18:22:32 +03:00
Linull/李林
c5725a5850 Merge branch 'main' into fix-arm64-sqlite 2025-09-16 22:22:00 +08:00
linull
dbad13c4e2 Add comments explaining exclude/include matrix configuration 2025-09-16 22:13:26 +08:00
linull
a274da80b7 Remove test workflow, prepare for PR
Core changes for ARM64 Linux better-sqlite3 fix:
- .github/workflows/release.yml: Use ubuntu-24.04-arm for ARM64 Linux
- .github/actions/build-electron/action.yml: Add TARGET_ARCH env var
- scripts/electron-rebuild.mts: Add arch parameter to rebuild
2025-09-16 22:02:51 +08:00
linull
66c05619df Fix path checking in test workflow 2025-09-16 21:51:27 +08:00
linull
67c99dea2d Fix flatpak dependencies for ARM64 build 2025-09-16 21:40:34 +08:00
linull
c77b7f8c74 Add detailed better_sqlite3.node checking
- Check exact path: app.asar.unpacked/node_modules/better-sqlite3/build/Release/
- Verify file existence and architecture
- Upload artifacts for manual inspection
2025-09-16 21:35:50 +08:00
linull
cc51fbe77e Update test workflow to build and check packages 2025-09-16 21:35:00 +08:00
linull
2e510f9dbb Fix better-sqlite3 for ARM64 Linux
- Use ubuntu-24.04-arm for ARM64 Linux builds
- Add TARGET_ARCH support to electron-rebuild
- Add test workflow for ARM64 fix
2025-09-16 21:29:16 +08:00
Elian Doran
e12df98d12 fix(desktop): export failing due to missing ckeditor5-content 2025-09-16 16:13:17 +03:00
Elian Doran
d8402755ee chore(client): add fallback font 2025-09-16 16:03:27 +03:00
Elian Doran
614b704702 Translations update from Hosted Weblate (#6995) 2025-09-16 14:33:29 +03:00
dev loupiz
fb6e87b0a5 Translated using Weblate (Arabic)
Currently translated at 0.1% (1 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2025-09-16 11:55:33 +02:00
dev loupiz
80baa31221 Added translation using Weblate (Arabic) 2025-09-16 11:44:45 +02:00
dev loupiz
e2f1f56e06 Added translation using Weblate (Arabic) 2025-09-16 11:44:44 +02:00
Микола Копитін
8ed6aeb278 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (380 of 380 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/uk/
2025-09-16 11:44:43 +02:00
Микола Копитін
7123dc305f Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/
2025-09-16 11:44:43 +02:00
Francis C
43cb632528 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2025-09-16 11:44:42 +02:00
Francis C
74c5b12a33 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2025-09-16 11:44:41 +02:00
Guido
acebed10b0 Translated using Weblate (Dutch)
Currently translated at 2.7% (44 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nl/
2025-09-15 16:43:59 +00:00
Kuzma Simonov
21f5c36c05 Translated using Weblate (Russian)
Currently translated at 100.0% (380 of 380 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ru/
2025-09-15 16:43:58 +00:00
Kuzma Simonov
35c297e0d1 Translated using Weblate (Russian)
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-09-15 16:43:57 +00:00
Elian Doran
e672890bd4 Translated using Weblate (Romanian)
Currently translated at 100.0% (380 of 380 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ro/
2025-09-15 16:43:56 +00:00
Elian Doran
a3f2dc5e76 Translated using Weblate (Romanian)
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/
2025-09-15 16:43:56 +00:00
openapphub
a19db4fd2d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1599 of 1599 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2025-09-15 16:43:55 +00:00
Elian Doran
982d136151 fix(client): menu stays active while printing 2025-09-15 19:42:31 +03:00
Elian Doran
377de59df9 fix(client): printing triggers twice 2025-09-15 19:40:32 +03:00
Elian Doran
b394fb1e86 fix(demo): geomap incorrect 2025-09-15 19:29:00 +03:00
Elian Doran
a5171ce093 fix(client): pressing "Download" on PDF preview also opens note 2025-09-15 18:58:58 +03:00
Elian Doran
c5dbaccea8 fix(client): pressing "Open" on PDF preview also opens note 2025-09-15 18:58:22 +03:00
Elian Doran
0c9d1e91bb fix(client): opening a new tab doesn't preserve view scope 2025-09-15 18:46:08 +03:00
Elian Doran
a1ee0cb5d0 feat(client): disable background effects setting if native title bar is on 2025-09-15 18:41:03 +03:00
Elian Doran
a2d41247fe fix(desktop): background effects breaking if native title bar is enabled 2025-09-15 18:35:04 +03:00
Elian Doran
97bb38e4f3 chore(deps): update dependency @types/node to v22.18.3 (#6976) 2025-09-15 09:03:48 +03:00
Elian Doran
8e8ae26828 chore(deps): update dependency debug to v4.4.3 (#6979) 2025-09-15 09:02:05 +03:00
Elian Doran
e241e91a84 fix(deps): update dependency @inlang/paraglide-js to v2.3.2 (#6983) 2025-09-15 08:41:00 +03:00
renovate[bot]
ea277cf972 chore(deps): update dependency debug to v4.4.3 2025-09-15 05:39:00 +00:00
Elian Doran
046e7ac4c3 fix(deps): update dependency @codemirror/lang-html to v6.4.10 (#6981) 2025-09-15 08:37:43 +03:00
Elian Doran
beea8d9edf chore(deps): update dependency typedoc to v0.28.13 (#6980) 2025-09-15 08:37:08 +03:00
Elian Doran
1c928bb139 chore(deps): update dependency axios to v1.12.2 (#6978) 2025-09-15 08:36:43 +03:00
Elian Doran
987e6ad4c6 fix(deps): update dependency preact to v10.27.2 (#6984) 2025-09-15 08:36:12 +03:00
Elian Doran
b7732e53c6 chore(deps): update pnpm to v10.16.1 (#6985) 2025-09-15 08:34:37 +03:00
renovate[bot]
bfb34cf236 chore(deps): update dependency @types/node to v22.18.3 2025-09-15 05:34:26 +00:00
Elian Doran
50b9bebf98 chore(deps): update svelte monorepo (#6986) 2025-09-15 08:32:58 +03:00
Elian Doran
e21624ed52 fix(deps): update dependency marked to v16.3.0 (#6987) 2025-09-15 08:27:24 +03:00
Elian Doran
86a8085239 feat(readme): update readme with new docs site (#6990) 2025-09-15 08:20:06 +03:00
perf3ct
19c756a971 feat(readme): update readme with new docs site 2025-09-15 04:16:57 +00:00
renovate[bot]
b76c6ed444 fix(deps): update dependency marked to v16.3.0 2025-09-15 01:16:38 +00:00
renovate[bot]
bd07342689 chore(deps): update svelte monorepo 2025-09-15 01:16:02 +00:00
renovate[bot]
be1d7309fd chore(deps): update pnpm to v10.16.1 2025-09-15 01:15:25 +00:00
renovate[bot]
9471fad7bb fix(deps): update dependency preact to v10.27.2 2025-09-15 01:15:15 +00:00
renovate[bot]
642bf60f45 fix(deps): update dependency @inlang/paraglide-js to v2.3.2 2025-09-15 01:14:26 +00:00
renovate[bot]
7245e32876 fix(deps): update dependency @codemirror/lang-html to v6.4.10 2025-09-15 01:13:40 +00:00
renovate[bot]
dcc1a2dc51 chore(deps): update dependency typedoc to v0.28.13 2025-09-15 01:13:01 +00:00
renovate[bot]
2b3874d8e9 chore(deps): update dependency axios to v1.12.2 2025-09-15 01:12:15 +00:00
Elian Doran
29f9c311d2 chore(client): missing class selector 2025-09-14 20:57:36 +03:00
Elian Doran
adae78e747 fix(client): typecheck 2025-09-14 20:16:38 +03:00
Elian Doran
5b5f3233d8 feat: create a more seamless PWA top bar (#6960) 2025-09-14 19:10:03 +03:00
Elian Doran
e6889798ff Translations update from Hosted Weblate (#6973) 2025-09-14 19:05:20 +03:00
Newcomer1989
a5ae6f7013 Translated using Weblate (German)
Currently translated at 100.0% (380 of 380 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
2025-09-14 18:01:48 +02:00
Elian Doran
0ac2df8102 Port collections to React (#6837) 2025-09-14 19:01:30 +03:00
Elian Doran
ec5e7607f0 Merge branch 'main' into react/collections 2025-09-14 19:01:18 +03:00
Elian Doran
7588026640 fix(collapse-subtree): improve performance of collapsing subtrees from O(n) to O(v) (#6971) 2025-09-14 18:27:29 +03:00
Elian Doran
ad366ee928 docs(help): document new features for collections 2025-09-14 18:25:14 +03:00
Jakob Schlanstedt
1fc38e941e fix(collapse-subtree): improve performance of collapsing subtrees from O(n) to O(v)
Only collapse currently expanded descendants instead of the entire subtree.
Assuming n is the number of subnotes and v is the number of opened notes
2025-09-14 10:56:18 +02:00
Elian Doran
b80c4ed921 chore(client): remove unnecessary file 2025-09-14 11:43:26 +03:00
Elian Doran
1de9634c44 chore(client): remove unnecessary logs 2025-09-14 11:29:19 +03:00
Elian Doran
d8386bfbe8 (fix)redirectBareDomain not working when MFA is on (#6961) 2025-09-14 11:18:20 +03:00
Elian Doran
3a02ad7836 chore(deps): update dependency axios to v1.12.0 [security] (#6968) 2025-09-14 11:15:46 +03:00
Elian Doran
d36716bdb6 chore(client): tests not being able to access .tsx 2025-09-14 10:59:15 +03:00
Elian Doran
970f4b028d chore(server): fix a few more type errors 2025-09-14 10:58:11 +03:00
Elian Doran
6077da0df8 chore(react/collections): fix the rest of client type errors 2025-09-14 10:53:54 +03:00
Elian Doran
e77e0c54f0 chore(react/collections): clean up old files 2025-09-14 10:40:14 +03:00
Elian Doran
4040f8ba89 chore(react): solve most type errors 2025-09-14 10:38:05 +03:00
Elian Doran
3ac0dfb2ad refactor(react): add type safety for note relations 2025-09-14 10:22:20 +03:00
Elian Doran
b8e4947adb refactor(react): add type safety for note labels 2025-09-14 10:17:06 +03:00
perf3ct
d1f2dfca05 fix(docs): handle quoted and unquoted paths in mkdocs fixer 2025-09-13 19:42:32 +00:00
renovate[bot]
c6a9b48aa0 chore(deps): update dependency axios to v1.12.0 [security] 2025-09-13 19:18:14 +00:00
perf3ct
fd690592ba feat(docs): cleanse .md from hyperlinks in compiled mkdocs 2025-09-13 19:14:45 +00:00
Elian Doran
8a66ee7565 feat(tree): allow multiple selection for archive/unarchive 2025-09-13 17:26:27 +03:00
Elian Doran
f42d375cc7 feat(tree): archive/unarchive notes 2025-09-13 17:16:02 +03:00
Elian Doran
68beb0d419 feat(collections/table): disable "Insert row above/below" if sorting 2025-09-13 16:52:26 +03:00
Elian Doran
50d2814044 Translations update from Hosted Weblate (#6963) 2025-09-13 16:33:24 +03:00
Guido
8ddd27c258 Translated using Weblate (Dutch)
Currently translated at 12.8% (49 of 380 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/nl/
2025-09-13 15:02:01 +02:00
Francis C
ac78eada0a Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (380 of 380 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2025-09-13 15:02:00 +02:00
Francis C
6b0395dec8 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (380 of 380 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hans/
2025-09-13 15:01:59 +02:00
Elian Doran
5bb1432450 fix(react/collections/geomap): "note not found" when deleting GPX 2025-09-13 15:46:09 +03:00
Elian Doran
dc854cbd10 fix(react/collections/geomap): react to icon & color changes 2025-09-13 15:16:58 +03:00
Elian Doran
3128f2dace fix(react/collections/geomap): corrupted map after closing split 2025-09-13 15:12:26 +03:00
Elian Doran
6ba494999c chore(collections): support child notes on import as well 2025-09-13 14:47:40 +03:00
Elian Doran
050ff5d8cd fix(collections): not updating on import 2025-09-13 14:42:02 +03:00
Elian Doran
9c8b0611ea refactor: add typesafety to TaskContext 2025-09-13 13:44:23 +03:00
Elian Doran
777d5ab3b7 refactor: extract WS API into separate file 2025-09-13 13:07:31 +03:00
Elian Doran
39fecb3ffe refactor: further improve task context types 2025-09-13 13:06:28 +03:00
Elian Doran
4cd0702cbb refactor: proper websocket message types 2025-09-13 12:59:00 +03:00
Elian Doran
998688573d refactor(server): integrate entity types changes into commons 2025-09-13 12:00:20 +03:00
Elian Doran
a6833f5a6f fix(react/notelist): normal list/grid not showing if text 2025-09-13 11:46:17 +03:00
Elian Doran
a162d697da fix(react/collections/geomap): note shifting on its own randomly 2025-09-13 11:14:46 +03:00
Elian Doran
f281e9691d fix(react/ribbon/collection): default property not working 2025-09-13 11:05:37 +03:00
Elian Doran
cbc2ee3cd1 chore(react/collections/board): simply column dragging slightly 2025-09-13 11:02:56 +03:00
Elian Doran
4f469d0d3c chore(react/collections/board): fix column dragging offset 2025-09-13 11:01:39 +03:00
Elian Doran
e77a49ace6 chore(react/collections/board): improve column dragging experience slightly 2025-09-13 10:43:48 +03:00
Elian Doran
8bde2092c6 chore(react/collections/board): improve note dragging experience 2025-09-13 10:13:37 +03:00
Elian Doran
7edfaad04e chore(react/collections/board): note not properly marked as dragged 2025-09-13 09:59:01 +03:00
Elian Doran
ae5576f2a3 chore(react/collections/board): fix dragging from tree 2025-09-13 09:46:09 +03:00
Elian Doran
b934b2b6ca chore(react/collections/board): use custom type for dragging cards 2025-09-13 09:41:54 +03:00
Elian Doran
87648f340b chore(react/collections/board): prevent crash if dragging wrong JSON 2025-09-13 09:31:37 +03:00
Elian Doran
679abc6e3e chore(react/collections/board): drag interfering with column title editing 2025-09-13 09:29:29 +03:00
Elian Doran
dd930261bf feat(react/collections/board): improve multiline in "New item" 2025-09-13 09:21:33 +03:00
Elian Doran
92a0faf475 feat(react/collections/board): title editor not dismissing on blur 2025-09-13 09:20:18 +03:00
Elian Doran
3ce6b43018 feat(react/collections/board): disable autofill when entering note title 2025-09-13 09:18:52 +03:00
Elian Doran
220858926f feat(react/collections/board): flickerless add new item 2025-09-13 09:15:31 +03:00
Elian Doran
d908a1b0d2 chore(react/collections/board): ignore empty titles 2025-09-12 23:41:56 +03:00
Elian Doran
b361cc0630 chore(react/collections/board): start with no name for new notes 2025-09-12 23:40:40 +03:00
Elian Doran
cd3663e041 chore(react/collections/board): fix add on blur if value not changed 2025-09-12 23:29:13 +03:00
Elian Doran
c53e927a55 fix(react/collections/board): column and card drag mixing 2025-09-12 23:14:15 +03:00
Elian Doran
7bbb15a535 fix(react/collections/board): no columns if dragging column onto itself 2025-09-12 22:49:58 +03:00
Elian Doran
0dddcbcfa1 feat(collections/board): remove note from board 2025-09-12 22:25:33 +03:00
Elian Doran
3175b75192 feat(collections/board): unarchive note 2025-09-12 22:08:32 +03:00
Elian Doran
6703b78457 refactor(collections/board): move within board to API 2025-09-12 21:50:56 +03:00
Elian Doran
7a61bbc297 feat(collections/board): allow dragging from note tree 2025-09-12 21:42:25 +03:00
Elian Doran
dd6003172d feat(collections/geomap): show toast if drag not enabled 2025-09-12 21:06:54 +03:00
Elian Doran
338f3d536f chore(ribbon): use "show" instead of "include" for archived notes 2025-09-12 19:51:53 +03:00
Elian Doran
27804384db feat(ribbon): improve display of note ID 2025-09-12 19:48:35 +03:00
Elian Doran
7e5069c7d1 feat(collections/board): support archived notes 2025-09-12 19:34:54 +03:00
Elian Doran
0a813f9b53 feat(collections/table): support archived notes 2025-09-12 19:02:10 +03:00
Judging28
c79c21e965 (fix)check redirectBareDomain option first 2025-09-12 23:49:32 +08:00
Elian Doran
0c0bcb87f9 feat(collections/calendar): support archived notes 2025-09-12 18:35:15 +03:00
Elian Doran
f537852469 fix(ribbon): book properties overlapping 2025-09-12 18:20:17 +03:00
Elian Doran
ff422d112b feat(collections/geomap): react to archived notes 2025-09-12 18:08:55 +03:00
Elian Doran
bf92280ed9 feat(collections): add book property to include archived notes 2025-09-12 18:03:07 +03:00
Elian Doran
d1e57e85b6 feat(collections): add label to show archived notes 2025-09-12 17:57:58 +03:00
Elian Doran
f300b6c8a2 refactor(collections/board): use API to reorder column 2025-09-12 17:39:52 +03:00
qwreey
4c0addd929 feat: Create a more seamless PWA top bar 2025-09-12 14:29:19 +00:00
Elian Doran
a08bc79ae4 feat(collections/board): add option to archive note 2025-09-12 17:21:59 +03:00
Elian Doran
8ad00084e1 style(collections/board): slightly bigger card padding 2025-09-12 17:08:36 +03:00
Elian Doran
0d275b3259 refactor(collections/board): use same title editor for new columns 2025-09-12 17:05:17 +03:00
Elian Doran
ede4b99bcd style(collections/board): better new item that creates only after enter 2025-09-12 16:57:23 +03:00
Elian Doran
e99748e45f style(collections/board): minor improvements to Add item 2025-09-12 16:28:26 +03:00
Elian Doran
114fdd6f91 style(collections/board): smoother shadows, no shift 2025-09-12 16:26:45 +03:00
Elian Doran
245675d409 chore(collections/board): reintroduce note click on the board 2025-09-12 16:24:35 +03:00
Elian Doran
e156f0a2e8 chore(collections/board): improve font size 2025-09-12 16:16:12 +03:00
Elian Doran
519d76d809 chore(collections/board): normalize line height when editing 2025-09-12 16:07:44 +03:00
Elian Doran
b4fa70d1d5 chore(collections/board): improve fit in multiline 2025-09-12 16:06:19 +03:00
Elian Doran
3825fb24f4 chore(collections/board): basic multiline editing 2025-09-12 16:02:44 +03:00
Elian Doran
79e51b543a chore(collections/board): icon as part of the text for better fit on multiline 2025-09-12 15:49:45 +03:00
Elian Doran
54fe9dde70 chore(collections/board): floating edit button for note titles 2025-09-12 15:46:39 +03:00
Elian Doran
d224ffd6d3 chore(collections/board): remove more of the old files 2025-09-12 15:39:44 +03:00
Elian Doran
1e1a458add chore(collections/board): bring back scrolling inside columns 2025-09-12 15:39:30 +03:00
Elian Doran
0844f60343 chore(collections/board): fix unnecessary repaint 2025-09-12 15:29:20 +03:00
Elian Doran
c8f9d6e6df chore(collections/board): fix dragging notes across columns 2025-09-12 15:10:20 +03:00
Elian Doran
95a392ccfa chore(collections/board): fix dragging notes not working 2025-09-12 15:08:00 +03:00
Elian Doran
2972a23f19 chore(collections/board): use context for column dragging 2025-09-12 14:48:05 +03:00
Elian Doran
f55a39eab6 chore(collections/board): clean up old code 2025-09-12 14:31:59 +03:00
Elian Doran
8611328a03 chore(collections/board): reordering notes not refreshing properly 2025-09-12 14:21:10 +03:00
Elian Doran
08dc05c504 chore(collections/board): extract dragging to separate hook 2025-09-12 14:13:00 +03:00
Elian Doran
174f796b56 chore(collections/board): context menu wrongly positioned 2025-09-12 13:58:52 +03:00
Elian Doran
85949a0464 Merge remote-tracking branch 'origin/main' into react/collections
; Conflicts:
;	pnpm-lock.yaml
2025-09-12 13:58:00 +03:00
Elian Doran
1b711e2c08 fix(client/dialogs): shrink images checked when it shouldn't (closes #6930) 2025-09-12 13:50:06 +03:00
Elian Doran
60ea415361 Merge branch 'main' of ssh://github.com/TriliumNext/trilium 2025-09-12 13:00:32 +03:00
Elian Doran
01613da38f Translations update from Hosted Weblate (#6952) 2025-09-12 12:53:28 +03:00
Elian Doran
d6e6e78acc chore(server): improve & translate DB not initialized message 2025-09-12 12:49:25 +03:00
Elian Doran
0e5e439f69 docs(help): remove clone causing small issues in hidden subtree 2025-09-12 12:43:54 +03:00
Elian Doran
fc78f68fa7 chore(server): display startup info right at the beginning 2025-09-12 12:36:59 +03:00
Elian Doran
2f6d81ce2c chore(server): remove LLM features ready log 2025-09-12 12:34:02 +03:00
Elian Doran
08a600167a chore(server): integrate DB size into startup info 2025-09-12 12:27:41 +03:00
Elian Doran
9779e706c5 chore(server): improve the display of the start-up information 2025-09-12 12:17:22 +03:00
Tino Elfering
b8e9d853e5 Translated using Weblate (Dutch)
Currently translated at 2.6% (41 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/nl/
2025-09-12 10:56:34 +02:00
Elian Doran
4041746240 chore(server): add a logo at startup 2025-09-12 09:34:00 +03:00
Elian Doran
c96a65b21d chore(react/collections/board): minor flicker when renaming note 2025-09-11 22:44:17 +03:00
Elian Doran
d67018b6d7 chore(react/collections/board): use translations 2025-09-11 22:35:31 +03:00
Elian Doran
f7e47b5120 feat(react/collections/table): make note title editable 2025-09-11 22:22:50 +03:00
Elian Doran
5bc28b63a6 fix(deps): update ckeditor monorepo to v46.1.0 (#6943) 2025-09-11 22:15:35 +03:00
Elian Doran
62452b61b1 refactor(react/collections/table): deduplicate editing 2025-09-11 21:51:02 +03:00
Elian Doran
cb84e4c7b6 refactor(react/collections/table): split card/column 2025-09-11 21:42:59 +03:00
Elian Doran
60ef816f0c chore(react/collections/table): bring back renaming columns 2025-09-11 21:37:33 +03:00
Elian Doran
d367cf9972 chore(react/collections/table): bring back wheel scroll 2025-09-11 21:20:25 +03:00
Elian Doran
05973672e4 chore(react/collections/table): add back insert above/below 2025-09-11 21:11:44 +03:00
Elian Doran
c4398e92e1 Translations update from Hosted Weblate (#6950) 2025-09-11 20:53:05 +03:00
Elian Doran
68b8ba691f chore(react/collections/table): fix one extra rendering of wrong type 2025-09-11 20:45:54 +03:00
Elian Doran
d52cf455a9 chore(react/collections/table): not loading config correctly 2025-09-11 20:37:09 +03:00
Elian Doran
fee822c689 chore(react/collections/table): slightly improve editing experience 2025-09-11 20:32:21 +03:00
Elian Doran
228a1ad0da chore(react/collections/table): reintroduce icon while editing 2025-09-11 20:07:01 +03:00
Elian Doran
1ce42d1301 chore(react/collections/table): reintroduce editing of newly added item 2025-09-11 20:02:58 +03:00
Elian Doran
3d2a4d8c38 chore(react/collections/table): reintroduce item context menu partially 2025-09-11 19:35:55 +03:00
Elian Doran
803164791f chore(react/collections/table): reintroduce column context menu 2025-09-11 19:25:17 +03:00
Elian Doran
2b452a18df refactor(react/collections/table): use class-based API 2025-09-11 19:14:54 +03:00
Elian Doran
efcdac75e4 chore(react/collections/table): fix adding new columns 2025-09-11 19:03:25 +03:00
Elian Doran
c30c9a7360 chore(react/collections/table): set up column dragging 2025-09-11 18:57:01 +03:00
Elian Doran
ce0da3fb80 chore(react/collections/table): use a placeholder for items 2025-09-11 18:32:06 +03:00
Elian Doran
728c20c184 chore(react/collections/table): bring back repositioning 2025-09-11 18:27:42 +03:00
Elian Doran
e10475679b chore(react/collections/table): bring back refresh 2025-09-11 18:17:24 +03:00
Elian Doran
d9af0461ef chore(react/collections/table): add drop indicator 2025-09-11 18:11:12 +03:00
Elian Doran
2e4791d377 chore(react/collections/table): basic drag support to change columns 2025-09-11 18:05:09 +03:00
Jan Mareš
d1244e02db Translated using Weblate (Czech)
Currently translated at 0.2% (1 of 378 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/cs/
2025-09-11 17:01:59 +02:00
renovate[bot]
867d1841e9 fix(deps): update ckeditor monorepo to v46.1.0 2025-09-11 14:50:50 +00:00
Elian Doran
3232900bdc chore(deps): update dependency electron to v37.5.0 (#6939) 2025-09-11 16:57:06 +03:00
Elian Doran
077de9f539 chore(deps): update dependency @anthropic-ai/sdk to v0.62.0 (#6938) 2025-09-11 16:56:12 +03:00
Elian Doran
b37f4bf0df chore(deps): update dependency globals to v16.4.0 (#6940) 2025-09-11 16:55:38 +03:00
renovate[bot]
64dd83e8fb chore(deps): update dependency globals to v16.4.0 2025-09-11 07:37:53 +00:00
renovate[bot]
5a615970c2 chore(deps): update dependency electron to v37.5.0 2025-09-11 07:37:25 +00:00
Elian Doran
2a5cb85199 fix(client/dialogs): include note not respecting size (closes #6947) 2025-09-11 10:06:07 +03:00
Elian Doran
5f1f27a4f9 chore(deps): update dependency @smithy/middleware-retry to v4.2.1 (#6937) 2025-09-11 08:16:43 +03:00
Elian Doran
0d9f398de2 chore(deps): update electron-forge monorepo to v7.9.0 (#6941) 2025-09-11 08:16:11 +03:00
Elian Doran
b0e84952c8 fix(deps): update dependency @inlang/paraglide-js to v2.3.0 (#6944) 2025-09-11 08:13:50 +03:00
Elian Doran
3df8cf3c13 fix(deps): update dependency globals to v16.4.0 (#6945) 2025-09-11 08:13:30 +03:00
Elian Doran
975e5a89af chore(deps): update svelte monorepo (#6942) 2025-09-11 08:11:08 +03:00
renovate[bot]
7102615eaa chore(deps): update svelte monorepo 2025-09-11 04:42:47 +00:00
renovate[bot]
68fa273c75 fix(deps): update dependency globals to v16.4.0 2025-09-11 01:33:09 +00:00
renovate[bot]
f8ecf0ec0b fix(deps): update dependency @inlang/paraglide-js to v2.3.0 2025-09-11 01:32:37 +00:00
renovate[bot]
888aba0b04 chore(deps): update electron-forge monorepo to v7.9.0 2025-09-11 01:31:03 +00:00
renovate[bot]
2216136de3 chore(deps): update dependency @anthropic-ai/sdk to v0.62.0 2025-09-11 01:29:29 +00:00
renovate[bot]
4163c5534a chore(deps): update dependency @smithy/middleware-retry to v4.2.1 2025-09-11 01:28:57 +00:00
Elian Doran
3ddcaddd79 Merge branch 'react/collections' of https://github.com/TriliumNext/trilium into react/collections 2025-09-10 22:53:22 +03:00
Elian Doran
b029e0d790 chore(react/collections/board): add columns without refresh yet 2025-09-10 22:20:17 +03:00
Elian Doran
6f2d51f3ff chore(react/collections/board): attempt to reload events 2025-09-10 21:41:15 +03:00
Elian Doran
ecf8c4ffbe chore(react/collections/board): get new items to be created 2025-09-10 21:10:31 +03:00
Elian Doran
4b769da90b chore(react/collections/board): render items 2025-09-10 20:38:47 +03:00
Elian Doran
4247c8fdc6 chore(react/collections/board): render empty columns 2025-09-10 20:18:17 +03:00
Elian Doran
7777cd5238 chore(react/collections/table): integrate relation editor 2025-09-10 19:05:01 +03:00
Elian Doran
cb959e93f2 chore(react/collections/table): fix type error 2025-09-10 18:48:42 +03:00
Elian Doran
30979b460b Translations update from Hosted Weblate (#6936) 2025-09-10 18:44:46 +03:00
Jan Mareš
901d1ecf4a Added translation using Weblate (Czech) 2025-09-10 16:41:48 +02:00
Jan Mareš
c84a38f2b2 Added translation using Weblate (Czech) 2025-09-10 16:41:48 +02:00
Elian Doran
ed461bc22f Translations update from Hosted Weblate (#6935) 2025-09-10 10:06:39 +03:00
Alberto Rossi
28368e6e12 Translated using Weblate (Italian)
Currently translated at 13.1% (207 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
2025-09-10 09:02:03 +02:00
Kuzma Simonov
8247855330 Translated using Weblate (Russian)
Currently translated at 100.0% (1573 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ru/
2025-09-10 09:02:02 +02:00
Elian Doran
7cd6237f16 chore(deps): update dependency express-http-proxy to v2.1.2 (#6933) 2025-09-10 09:28:13 +03:00
Elian Doran
ca9bdc337a chore(deps): update dependency @types/tabulator-tables to v6.2.11 (#6932) 2025-09-10 09:27:33 +03:00
Elian Doran
e6d2394d54 chore(deps): update svelte monorepo (#6934) 2025-09-10 09:27:04 +03:00
renovate[bot]
3d43665603 chore(deps): update svelte monorepo 2025-09-09 21:27:22 +00:00
renovate[bot]
f135ffbe49 chore(deps): update dependency express-http-proxy to v2.1.2 2025-09-09 21:26:51 +00:00
renovate[bot]
3d99bc7166 chore(deps): update dependency @types/tabulator-tables to v6.2.11 2025-09-09 21:26:20 +00:00
Elian Doran
3789edf53a chore(react/collections/table): port note relation formatter 2025-09-09 21:20:52 +03:00
Elian Doran
4d57134aa2 chore(react/collections/table): port note title formatter 2025-09-09 21:11:06 +03:00
Elian Doran
e3d9a120cb chore(react/collections/table): port row number formatter 2025-09-09 21:03:55 +03:00
Elian Doran
043791fc91 chore(react/collections/table): port note ID formatter 2025-09-09 20:35:57 +03:00
Elian Doran
33a37be378 chore(react/collections/table): fix occasional error when initializing 2025-09-09 19:49:57 +03:00
Elian Doran
32ce6e7a08 chore(react/collections/table): integrate cleanup 2025-09-09 19:41:38 +03:00
Elian Doran
3046cfd6ee chore(react/collections/table): react to external data changes 2025-09-09 19:34:22 +03:00
Elian Doran
9758632bf0 chore(react/collections/table): react to sorted change 2025-09-09 19:18:27 +03:00
Elian Doran
0c7f926421 chore(react/collections/table): react to nesting depth change 2025-09-09 19:00:08 +03:00
Elian Doran
ab6fc9303b chore(react/collections/table) reintroduce delete/rename 2025-09-09 18:56:53 +03:00
Elian Doran
4e37a5f08e chore(react/collections/table): fix some issues with col editing 2025-09-09 18:48:09 +03:00
Elian Doran
426b4dde54 chore(deps): update dependency vite to v7.1.5 (#6924) 2025-09-09 09:33:52 +03:00
renovate[bot]
d3cc79a28c chore(deps): update dependency vite to v7.1.5 2025-09-09 06:24:53 +00:00
Elian Doran
b0a826aaca chore(deps): update typescript-eslint monorepo to v8.43.0 (#6925) 2025-09-09 07:40:54 +03:00
Elian Doran
9c0e678e50 chore(deps): update dependency chalk to v5.6.2 (#6923) 2025-09-09 07:40:23 +03:00
renovate[bot]
bbb2571215 chore(deps): update typescript-eslint monorepo to v8.43.0 2025-09-09 00:51:37 +00:00
renovate[bot]
d2a0d75906 chore(deps): update dependency chalk to v5.6.2 2025-09-09 00:49:23 +00:00
Elian Doran
e16dc941d2 chore(deps): update dependency eslint-plugin-svelte to v3.12.2 (#6920) 2025-09-08 18:00:21 +03:00
Elian Doran
fa61e7bacb chore(deps): update dependency stylelint to v16.24.0 (#6921) 2025-09-08 17:59:54 +03:00
Elian Doran
439a182103 Translations update from Hosted Weblate (#6922) 2025-09-08 13:24:51 +03:00
Микола Копитін
7eb478cc6a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1573 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/
2025-09-08 11:03:19 +02:00
Francis C
4341c1fbc8 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1573 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2025-09-08 11:03:18 +02:00
Elian Doran
e8039715e7 Translated using Weblate (Romanian)
Currently translated at 100.0% (1573 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/
2025-09-08 11:03:18 +02:00
Newcomer1989
3cacfdfd6f Translated using Weblate (German)
Currently translated at 100.0% (1573 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2025-09-08 11:03:18 +02:00
Francis C
7b2cd20cff Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1573 of 1573 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2025-09-08 11:03:18 +02:00
renovate[bot]
79a5fab39e chore(deps): update dependency stylelint to v16.24.0 2025-09-08 02:12:38 +00:00
renovate[bot]
b03d687f75 chore(deps): update dependency eslint-plugin-svelte to v3.12.2 2025-09-08 02:12:02 +00:00
Elian Doran
61ec341c27 Revert "fix: close context menu when clicking items with submenus"
This reverts commit 2f93af4d6f.
2025-09-07 22:57:27 +03:00
Elian Doran
22835108be fix: add left-click check for tree button handlers (#6903) 2025-09-07 22:53:42 +03:00
Elian Doran
1e654fbcd6 chore(react/collections/table): refresh columns 2025-09-07 22:29:01 +03:00
Elian Doran
49c4776dbd chore(react/collections/table): reintroduce column creation 2025-09-07 22:16:21 +03:00
Elian Doran
41c4bc69cc chore(react/collections/table): get attribute detail to show 2025-09-07 22:08:26 +03:00
Elian Doran
6eea921820 chore(react/collections/table): bring back dragging rows 2025-09-07 21:23:04 +03:00
Elian Doran
3d97b317f2 chore(react/collections/table): fix when empty 2025-09-07 21:13:29 +03:00
Elian Doran
7ba24968d8 chore(react/collections/table): bring editing cells 2025-09-07 21:07:55 +03:00
Elian Doran
57046d714b chore(react/collections/table): bring back adding new rows 2025-09-07 20:44:39 +03:00
Elian Doran
0526445d3c chore(react/collections/table): add datatree props 2025-09-07 19:49:01 +03:00
Elian Doran
b62d1a303c chore(react/collections/table): add more properties 2025-09-07 19:41:25 +03:00
Elian Doran
e25c5cc6c7 refactor(react/collections/table): move events to dedicated prop 2025-09-07 19:19:09 +03:00
Elian Doran
e761cd7c27 chore(react/collections/table): set up writing to attachment 2025-09-07 19:03:16 +03:00
SiriusXT
617548f6b6 Merge branch 'main' into sirius_tree_patch 2025-09-07 19:18:23 +08:00
SiriusXT
2f93af4d6f fix: close context menu when clicking items with submenus 2025-09-07 17:15:09 +08:00
Elian Doran
c2504bb6db Merge remote-tracking branch 'origin/main' into react/collections 2025-09-07 11:54:34 +03:00
Elian Doran
145f89eded fix(shortcuts): try to fix ime composition checks (#6851) 2025-09-07 11:17:35 +03:00
Elian Doran
6c0e4b6a48 Merge branch 'main' into fix/ime-shortcut-input-fix 2025-09-07 11:13:18 +03:00
Elian Doran
87d1eefc86 chore(deps): update softprops/action-gh-release action to v2.3.3 (#6915) 2025-09-07 11:07:52 +03:00
Elian Doran
a87ec6f2e7 Translations update from Hosted Weblate (#6916) 2025-09-07 11:01:48 +03:00
donut
a9d5478bcd Translated using Weblate (Polish)
Currently translated at 37.8% (143 of 378 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2025-09-07 09:59:34 +02:00
Elian Doran
5eae51a1b4 Apply note wrapper on mobile (#6847) 2025-09-07 10:59:28 +03:00
Elian Doran
ac94ab6914 feat: Make splits resizable (#6866) 2025-09-07 10:48:37 +03:00
Elian Doran
38673a85c9 feat: show source diff between note and revision (#6887) 2025-09-07 10:42:21 +03:00
renovate[bot]
d75951c869 chore(deps): update softprops/action-gh-release action to v2.3.3 2025-09-07 07:24:01 +00:00
Elian Doran
67d36a9e28 fix(deps): update dependency mind-elixir to v5.1.1 (#6914) 2025-09-07 10:02:35 +03:00
renovate[bot]
de8e8915ff fix(deps): update dependency mind-elixir to v5.1.1 2025-09-07 01:22:19 +00:00
Elian Doran
2161816ef4 fix(deps): update ckeditor monorepo to v46.0.3 (#6895) 2025-09-06 23:15:09 +03:00
renovate[bot]
d046bdec65 fix(deps): update ckeditor monorepo to v46.0.3 2025-09-06 20:05:18 +00:00
Elian Doran
cddd7d1562 fix(deps): update dependency ckeditor5 to v46.0.3 [security] (#6885) 2025-09-06 23:01:30 +03:00
renovate[bot]
15a3104904 fix(deps): update dependency ckeditor5 to v46.0.3 [security] 2025-09-06 19:53:33 +00:00
Elian Doran
e1ca6eca0f chore(deps): update dependency vite to v7.1.4 (#6893) 2025-09-06 22:52:01 +03:00
Elian Doran
cc0137bdc9 fix(deps): update dependency @mermaid-js/layout-elk to v0.2.0 (#6899) 2025-09-06 22:42:06 +03:00
Elian Doran
86a620bc08 Add an option to disable smooth scrolling for the Electron app (#6912) 2025-09-06 22:41:26 +03:00
Elian Doran
3ba9c3b4a8 Merge branch 'main' into history_diff 2025-09-06 22:37:55 +03:00
Elian Doran
8dc5ada553 Style: improve window background effects (#6913) 2025-09-06 22:36:59 +03:00
Elian Doran
9fe744c545 chore(deps): update actions/setup-node action to v5 (#6902) 2025-09-06 22:36:15 +03:00
Elian Doran
cc29eb0f9b chore(deps): update svelte monorepo (#6892) 2025-09-06 22:27:17 +03:00
renovate[bot]
901edde634 chore(deps): update dependency vite to v7.1.4 2025-09-06 19:24:39 +00:00
Elian Doran
44dd6d499d fix(deps): update dependency eslint-linter-browserify to v9.35.0 (#6905) 2025-09-06 22:24:05 +03:00
renovate[bot]
375f09cbaf fix(deps): update dependency @mermaid-js/layout-elk to v0.2.0 2025-09-06 19:23:04 +00:00
Elian Doran
d4e5a31de4 chore(deps): update tailwindcss monorepo to v4.1.13 (#6894) 2025-09-06 22:22:25 +03:00
Elian Doran
f3fa3864b2 chore(deps): update dependency node to v22 (#6891) 2025-09-06 22:21:44 +03:00
Elian Doran
1c978c2497 chore(deps): update dependency @types/leaflet-gpx to v1.3.8 (#6890) 2025-09-06 22:21:05 +03:00
Elian Doran
0f4ec2b3e2 chore(deps): update dependency @anthropic-ai/sdk to v0.61.0 (#6896) 2025-09-06 22:20:02 +03:00
Elian Doran
e30b1abaa4 chore(deps): update dependency @smithy/middleware-retry to v4.2.0 (#6897) 2025-09-06 22:19:26 +03:00
renovate[bot]
16cbee1fb2 chore(deps): update svelte monorepo 2025-09-06 19:18:48 +00:00
Elian Doran
56932f2b56 chore(deps): update dependency express-rate-limit to v8.1.0 (#6898) 2025-09-06 22:18:40 +03:00
Elian Doran
6a8f6b8370 fix(deps): update dependency i18next to v25.5.2 (#6900) 2025-09-06 22:17:19 +03:00
Elian Doran
7fa8e65015 fix(deps): update dependency mermaid to v11.11.0 (#6901) 2025-09-06 22:16:53 +03:00
Elian Doran
4f50b8c7d5 fix(deps): update eslint monorepo to v9.35.0 (#6907) 2025-09-06 22:15:36 +03:00
Elian Doran
eca85d9978 chore(deps): update actions/setup-python action to v6 (#6909) 2025-09-06 22:15:10 +03:00
Elian Doran
f0ea2eb39b fix(deps): update dependency force-graph to v1.51.0 (#6906) 2025-09-06 22:14:42 +03:00
Elian Doran
4c5b229680 chore(deps): update actions/github-script action to v8 (#6908) 2025-09-06 22:13:07 +03:00
Elian Doran
83251cbc43 Merge branch 'main' into feat/performance/disable-smooth-scroll 2025-09-06 22:12:19 +03:00
Adorian Doran
c2f20cce32 Merge branch 'main' into feat/electron-app/background-effects-improvements 2025-09-06 22:02:47 +03:00
Adorian Doran
ec5ab44519 style/background effects: tweak launcher pane colors 2025-09-06 22:00:16 +03:00
renovate[bot]
ed6d21a05a chore(deps): update dependency node to v22 2025-09-06 18:58:17 +00:00
renovate[bot]
a2f3913fe5 chore(deps): update actions/setup-python action to v6 2025-09-06 18:57:17 +00:00
renovate[bot]
d66c0ef308 chore(deps): update actions/setup-node action to v5 2025-09-06 18:57:14 +00:00
renovate[bot]
0f9f6746ed chore(deps): update actions/github-script action to v8 2025-09-06 18:57:10 +00:00
renovate[bot]
9b534a0dc1 fix(deps): update eslint monorepo to v9.35.0 2025-09-06 18:57:07 +00:00
renovate[bot]
1ce73c1238 fix(deps): update dependency mermaid to v11.11.0 2025-09-06 18:56:11 +00:00
renovate[bot]
3b5b7ca01d fix(deps): update dependency i18next to v25.5.2 2025-09-06 18:55:40 +00:00
renovate[bot]
ce64a7816d fix(deps): update dependency force-graph to v1.51.0 2025-09-06 18:55:09 +00:00
renovate[bot]
37e095a93c fix(deps): update dependency eslint-linter-browserify to v9.35.0 2025-09-06 18:54:39 +00:00
Adorian Doran
300f6a103f style/background effects: tweak launcher pane colors 2025-09-06 21:53:47 +03:00
renovate[bot]
e7cb5a6b92 chore(deps): update dependency express-rate-limit to v8.1.0 2025-09-06 18:53:07 +00:00
renovate[bot]
67296fabf7 chore(deps): update dependency @smithy/middleware-retry to v4.2.0 2025-09-06 18:52:37 +00:00
renovate[bot]
d868f7fb26 chore(deps): update dependency @anthropic-ai/sdk to v0.61.0 2025-09-06 18:52:08 +00:00
renovate[bot]
1555d98f7d chore(deps): update tailwindcss monorepo to v4.1.13 2025-09-06 18:51:05 +00:00
renovate[bot]
3a02941b38 chore(deps): update dependency @types/leaflet-gpx to v1.3.8 2025-09-06 18:49:37 +00:00
Elian Doran
f25de1ffbe chore(ci): bring back typecheck 2025-09-06 21:43:48 +03:00
Adorian Doran
008e90324f style/background effects: tweak launcher pane colors 2025-09-06 21:43:09 +03:00
Adorian Doran
73dcc2eb26 style/background effects: convert the tree action button background color to a transparent color 2025-09-06 21:32:31 +03:00
Adorian Doran
eae2540a31 style/background effects: convert the tree item hover color to a transparent color 2025-09-06 21:21:43 +03:00
Adorian Doran
2a7fc8edb6 style/background effects: extract color overrides as theme variables 2025-09-06 21:13:09 +03:00
Elian Doran
cd67299b1d chore(react/collections/table): bring back footer 2025-09-06 21:08:32 +03:00
Elian Doran
ff38008207 chore(react/collections/table): react to note changes 2025-09-06 20:31:44 +03:00
Elian Doran
76e903a782 chore(react/collections/table): set up context menu partially 2025-09-06 20:25:50 +03:00
Adorian Doran
25698f5d9b electron app: display the smooth scrolling setting only on the Electron app 2025-09-06 19:31:45 +03:00
Adorian Doran
c729731c7e electron app: mention that a restart is required for the smooth scrolling setting to take effect 2025-09-06 19:24:32 +03:00
Elian Doran
9d877ec97a chore(react/collections/table): enable modules 2025-09-06 19:19:52 +03:00
Elian Doran
b4cead757d chore(react/collections/table): get rid of react-tables 2025-09-06 19:12:24 +03:00
Adorian Doran
dcc2f28079 electron app: add Romanian translation 2025-09-06 19:05:20 +03:00
Adorian Doran
97aa00e18b electron app: add an option to disable smooth scrolling 2025-09-06 19:00:45 +03:00
Elian Doran
f076581bed chore(react/collections/table): get table to render 2025-09-06 18:48:58 +03:00
Elian Doran
5d8f789791 fix(desktop): background effects causing issues on Win10 2025-09-06 17:47:13 +03:00
Elian Doran
4faabb7770 Translations update from Hosted Weblate (#6911) 2025-09-06 17:34:54 +03:00
Elian Doran
1cffff77bf fix(client): touch bar triggering on server 2025-09-06 17:26:48 +03:00
donut
8f9b3df681 Translated using Weblate (Polish)
Currently translated at 37.3% (141 of 378 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/
2025-09-06 14:08:09 +00:00
Mik Piet
449575e0f7 Translated using Weblate (Polish)
Currently translated at 7.3% (115 of 1566 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2025-09-06 14:08:08 +00:00
donut
b7d47779d6 Translated using Weblate (Polish)
Currently translated at 7.3% (115 of 1566 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/
2025-09-06 14:08:08 +00:00
Elian Doran
fe443c8a89 fix(next): window border cut-off on macOS 2025-09-06 17:07:56 +03:00
Elian Doran
f01a772d8d chore(react/collections/geomap): remove some logs 2025-09-06 16:23:42 +03:00
Elian Doran
76d068aa23 chore(react/collections/calendar): optimize button building 2025-09-06 16:13:33 +03:00
Elian Doran
b151db0843 chore(react/collections/calendar): header & touchbar sometimes not updating 2025-09-06 16:09:02 +03:00
Elian Doran
5a3f432d89 feat(react/collections/calendar): improve performance on option change 2025-09-06 16:02:25 +03:00
Elian Doran
8dcef5ea9f chore(react/collections): add spacer for calendar touch bar 2025-09-06 15:40:47 +03:00
Elian Doran
05299952a9 chore(react/collections): use normal buttons for calendar prev/next 2025-09-06 15:36:37 +03:00
Elian Doran
5966b9ff23 chore(react/collections): add date navigation buttons to calendar touchbar 2025-09-06 15:20:22 +03:00
Elian Doran
1917c04baf chore(react/collections): reintroduce calendar title & type touch bar 2025-09-06 14:59:57 +03:00
Elian Doran
4c20ac0b1c chore(react/collections): reintroduce geomap touch bar buttons 2025-09-06 14:31:41 +03:00
Elian Doran
6bd548cc22 refactor(react/touchbar): use more performant mechanism 2025-09-06 14:23:43 +03:00
Elian Doran
3e7f0ad0a8 chore(react/touchbar): add slider 2025-09-06 14:18:32 +03:00
Elian Doran
785f72ecd6 chore(react/touchbar): react to updates 2025-09-06 14:08:00 +03:00
Elian Doran
62cdb1a797 chore(react): basic React-like touch bar support 2025-09-06 14:00:23 +03:00
Elian Doran
24e17c4e4f style(collections/calendar): improve button style 2025-09-06 13:28:16 +03:00
Elian Doran
d664c0166d style(collections/calendar): bring back some header styles + layout 2025-09-06 13:19:25 +03:00
Elian Doran
05ebe821f2 Revert "chore(collections/calendar): experiment with avoiding floating buttons"
This reverts commit 6c4ac347db.
2025-09-06 13:17:21 +03:00
Elian Doran
6c4ac347db chore(collections/calendar): experiment with avoiding floating buttons 2025-09-06 13:09:24 +03:00
Elian Doran
e8024ce341 fix(collections/calendar): header not initializing properly on first render 2025-09-06 12:34:18 +03:00
Elian Doran
afc17f41f6 feat(collections/calendar): use own UI for header 2025-09-06 12:26:42 +03:00
Elian Doran
49c80f0e0b fix(client): sql result taking unnecessary space when inactive 2025-09-06 11:28:19 +03:00
Elian Doran
10a6a3056a chore(react/collections/calendar): reintroduce tests 2025-09-06 11:20:39 +03:00
Elian Doran
69af62cde0 refactor(react/collections/calendar): split editing 2025-09-06 11:06:24 +03:00
Elian Doran
0cc8b5def0 chore(react/collections/calendar): add back event customization 2025-09-06 10:58:24 +03:00
Elian Doran
fc52e73153 refactor(react/collections/calendar): change event handling 2025-09-06 10:54:18 +03:00
Elian Doran
ce67e460c6 refactor(react/collections/calendar): add a few more options 2025-09-06 10:53:15 +03:00
Elian Doran
85e5f4d2c0 refactor(react/collections/calendar): add back clicking on date notes 2025-09-06 10:52:14 +03:00
Elian Doran
6237afe3cd refactor(react/collections/calendar): change event in api 2025-09-06 10:43:43 +03:00
Elian Doran
cfddb6f04e chore(react/collections/calendar): port dragging items 2025-09-06 10:36:32 +03:00
perf3ct
3bf1a77381 feat(docs): also deploy docs upon README change 2025-09-05 19:52:03 +00:00
perf3ct
c4d430c62d feat(docs): use readme as index.md in mkdocs deployment 2025-09-05 19:40:59 +00:00
perf3ct
d583ee2de3 feat(docs): just remove the other language READMEs from the hide list 2025-09-05 19:34:54 +00:00
perf3ct
406a381ef4 feat(docs): try to continue fixing the links in the mkdocs 2025-09-05 19:18:14 +00:00
Elian Doran
1d82308c43 feat(docs): create docs.triliumnotes.org as additional place to serve user-facing docs (#6889) 2025-09-05 21:49:36 +03:00
perf3ct
5c1595b1fd feat(docs): remove unused python 2025-09-05 15:15:12 +00:00
perf3ct
667cfb999b feat(docs): oops forgot to add it to the package.json 2025-09-05 15:11:48 +00:00
Elian Doran
f0b5954c54 refactor(react/collections/calendar): refactor into API 2025-09-05 18:10:34 +03:00
perf3ct
9b0e817635 feat(docs): transition from python to ts 2025-09-05 15:09:27 +00:00
Elian Doran
b93d9a6b6e chore(react/collections/calendar): render calendar events 2025-09-05 18:00:27 +03:00
Elian Doran
5bb9117fde chore(react/collections/calendar): render non-calendar events 2025-09-05 17:56:35 +03:00
Elian Doran
84d35c1a37 chore(react/collections/calendar): create event from selection 2025-09-05 17:44:24 +03:00
Elian Doran
ba42e90502 chore(react/collections/calendar): handle resize 2025-09-05 17:33:46 +03:00
Elian Doran
10d1ec1bb2 chore(react/collections/calendar): bring back saving of view 2025-09-05 17:18:02 +03:00
Elian Doran
d6ccd106e6 chore(react/collections/calendar): bring back locale 2025-09-05 16:51:36 +03:00
Elian Doran
7f7eaea2b1 chore(react/collections/calendar): hide weekends & week numbers 2025-09-05 16:28:34 +03:00
Elian Doran
d33b1eb394 chore(react/collections/calendar): add views & first day of week 2025-09-05 16:26:52 +03:00
Elian Doran
feb984649f chore(react/collections/calendar): set up CSS 2025-09-05 16:22:48 +03:00
Elian Doran
aada49e548 chore(react/collections/calendar): get calendar to render 2025-09-05 16:03:12 +03:00
SiriusXT
7f3c34178b fix: add left-click check for tree button handlers 2025-09-05 19:32:42 +08:00
Elian Doran
c79dd43105 chore(react/collections): bring back touch bar 2025-09-05 11:54:58 +03:00
Elian Doran
cb53ff880d chore(react/collections/geomap): clean up 2025-09-05 11:04:36 +03:00
Elian Doran
3d88b3c74b fix(react/collections/geomap): drag not always working 2025-09-05 10:32:26 +03:00
Elian Doran
d3c66714c2 fix(react/collections/geomap): crash for notes without location 2025-09-05 08:48:24 +03:00
perf3ct
e8ca443697 feat(docs): try to fix local doc links 2025-09-04 22:16:43 -07:00
perf3ct
94089113ef feat(docs): try to handle moved files too in script 2025-09-04 21:55:28 -07:00
perf3ct
1847fc2060 feat(docs): fix nav and scripts 2025-09-04 23:50:22 +00:00
perf3ct
7ca21b52a0 feat(docs): fix references to zadam 2025-09-04 23:46:50 +00:00
perf3ct
444beb4908 feat(docs): get images to work now 2025-09-04 23:39:40 +00:00
perf3ct
791869ca9e feat(docs): try to capture all pages 2025-09-04 23:30:20 +00:00
perf3ct
33c8406b8a feat(docs): try to make pnpm happy for mkdocs
asfd

asdf
2025-09-04 21:57:26 +00:00
perf3ct
b6212c4e98 feat(docs): try to get wrangler to work...
feat(docs)asdf

asdf
2025-09-04 21:32:32 +00:00
perf3ct
fcd2409ee3 feat(docs): try to get mkdocs to work again 2025-09-04 21:20:01 +00:00
perf3ct
dad060d0c9 feat(docs): let's try to deploy our stuff to mkdocs 2025-09-04 21:13:12 +00:00
Elian Doran
9444195de7 chore(react/collections): set up dragging (partially) 2025-09-04 23:35:18 +03:00
Elian Doran
b25f3094b7 refactor(react/collections): reintroduce gpx tracks 2025-09-04 22:53:39 +03:00
Elian Doran
ec378a8fc5 refactor(react/collections): reintroduce scale 2025-09-04 22:05:44 +03:00
Elian Doran
9adf9a841c chore(react/collections/geomap): bring back remove from map 2025-09-04 21:52:41 +03:00
Elian Doran
8bb8e011f3 chore(react/collections/geomap): properly dispose 2025-09-04 21:50:45 +03:00
Elian Doran
3b66522a5e chore(react/collections/geomap): bring back map context menu 2025-09-04 21:46:05 +03:00
Elian Doran
dd2b718974 chore(react/collections/geomap): bring back dark theme labels 2025-09-04 21:40:12 +03:00
Elian Doran
50121153dd chore(react/collections/geomap): bring back adding new items 2025-09-04 21:37:08 +03:00
Elian Doran
189b7e20db chore(react/collections/geomap): bring back context menu 2025-09-04 21:26:09 +03:00
SiriusXT
5e572a8c6a fix: remove unnecessary line breaks 2025-09-04 22:07:04 +08:00
Elian Doran
dd654fcd8d chore(react/collections/geomap): bring back open on click 2025-09-04 16:51:03 +03:00
Elian Doran
0f9a529647 chore(react/collections/geomap): fix editability 2025-09-04 16:47:38 +03:00
Elian Doran
5854adb806 chore(react/collections/geomap): bring back dragging 2025-09-04 16:44:35 +03:00
SiriusXT
c60c738c7e feat: show source diff between note and revision 2025-09-04 21:34:13 +08:00
Elian Doran
ec40d20e6a chore(react/collections/geomap): middle click 2025-09-04 16:24:01 +03:00
Elian Doran
3e2b777c30 chore(react/collections/geomap): fix color class 2025-09-04 16:19:56 +03:00
Elian Doran
4a02981c09 refactor(react/collections/geomap): display reactive icon, text 2025-09-04 16:17:27 +03:00
Elian Doran
3382ccc7bf refactor(react/collections/geomap): use different mechanism for markers 2025-09-04 15:58:50 +03:00
Elian Doran
581303c923 chore(react/collections/geomap): get markers to show up 2025-09-04 15:47:56 +03:00
Elian Doran
63dd79e23c chore(react/collections/geomap): restore state 2025-09-04 15:16:49 +03:00
Elian Doran
2346230d36 chore(react/collections/geomap): save state 2025-09-04 14:26:29 +03:00
SiriusXT
1c451fb98a fix: adapt diff highlight for dark theme 2025-09-04 18:47:14 +08:00
SiriusXT
7eeb43a83b Merge branch 'main' into history_diff 2025-09-04 17:37:00 +08:00
SiriusXT
fa2188f087 fix: improve <pre> tag regex handling when formatting HTML strings 2025-09-04 17:36:19 +08:00
Elian Doran
df1b87e3ac chore(dx/nix): fix flake partially 2025-09-04 12:12:23 +03:00
Elian Doran
62a0a44049 chore(dx): have electron-rebuild read from path on NixOS too 2025-09-04 09:26:16 +03:00
SiriusXT
0ae25d2212 feat: show source diff between note and revision 2025-09-04 10:53:46 +08:00
Elian Doran
620e6012da refactor(react/collections): reintroduce view mode 2025-09-03 23:57:38 +03:00
Elian Doran
330b17bff8 refactor(react/collections): move layer name to view 2025-09-03 23:35:29 +03:00
Elian Doran
1969ce562a chore(react/collections): start porting geomap 2025-09-03 23:23:42 +03:00
Elian Doran
5ea15cc7eb Merge remote-tracking branch 'origin/main' into react/collections 2025-09-03 22:41:44 +03:00
Elian Doran
88aa76bcab Improve development experience (#6842) 2025-09-03 22:13:17 +03:00
Elian Doran
401120fa28 Merge remote-tracking branch 'origin/main' into feature/dx_improvement 2025-09-03 21:24:51 +03:00
Elian Doran
534113b303 fix(dx/share): ckcontent for share theme not preserved 2025-09-03 21:09:56 +03:00
Elian Doran
53df7835d3 Revert "chore(dx/server): remove dependency on CKEditor for now"
This reverts commit 4739e2e3b2.
2025-09-03 20:24:23 +03:00
Elian Doran
ee9afb7fa0 fix(next): 1px border on tab when background effects are on 2025-09-03 20:09:19 +03:00
Elian Doran
6163ab8c42 refactor(dx): remove unused .env files 2025-09-03 20:08:29 +03:00
Elian Doran
e73724a576 chore(dx/desktop): integrate e2e tests in same project 2025-09-03 20:08:17 +03:00
Elian Doran
e71284d887 chore(dx): get rid of references to NX 2025-09-03 18:23:47 +03:00
Elian Doran
11d95b89e1 chore(dx/edit-docs): de-nxify 2025-09-03 18:16:03 +03:00
Elian Doran
c75d2435fa fix(dx/share): ckcontent missing 2025-09-03 15:23:32 +03:00
Elian Doran
050aa40e20 fix(dx/share): templates and script not accessible 2025-09-03 12:12:01 +03:00
Elian Doran
cb6d87302d fix(dx/client): doc notes not working 2025-09-03 12:00:06 +03:00
Elian Doran
f9e725bcf8 chore(dx): add aliases to desktop 2025-09-03 11:56:44 +03:00
Elian Doran
a56d622df7 chore(dx): address self-review 2025-09-03 10:55:40 +03:00
SiriusXT
4e2ffad70d Merge branch 'main' into siriusxt_split 2025-09-03 14:05:08 +08:00
Elian Doran
7db3bde933 chore(e2e): merge .env in playwright config + add retry 2025-09-03 09:02:10 +03:00
Elian Doran
f63f24ac9d feat(server/e2e): upload test report if it fails 2025-09-02 22:51:57 +03:00
Elian Doran
e7521fe30c chore(server/e2e): increase timeout of a flaky test 2025-09-02 22:30:09 +03:00
Elian Doran
f6579ac434 fix(e2e/server): data dir not working 2025-09-02 21:45:59 +03:00
Elian Doran
9c43d661be fix(desktop): forge building for the wrong arch 2025-09-02 21:13:32 +03:00
Elian Doran
d2d8bff9f7 fix(e2e/server): wrong database dir 2025-09-02 21:06:41 +03:00
Elian Doran
a1beb13094 chore(ci): add logs for electron-forge flatpak build 2025-09-02 20:46:44 +03:00
Elian Doran
37d66848d6 Merge remote-tracking branch 'origin/main' into feature/dx_improvement
; Conflicts:
;	pnpm-lock.yaml
2025-09-02 20:43:43 +03:00
Elian Doran
26c7f0b017 feat(dx/desktop): improve rebuilding experience on NixOS 2025-09-02 19:56:27 +03:00
Elian Doran
d058dbe9af chore(dx/desktop): clean up env 2025-09-02 19:56:18 +03:00
Elian Doran
c1c237402a chore(dx/desktop): clean up package.json 2025-09-02 19:49:36 +03:00
Elian Doran
bb20de6c24 chore(dx/env): remove unnecessary nx config 2025-09-02 19:44:38 +03:00
Elian Doran
8d7af7b01d chore(dx/server): de-nxify 2025-09-02 19:44:28 +03:00
Elian Doran
fd1c122cd4 chore(dx/apps): build db-compare & dump-db 2025-09-02 19:29:38 +03:00
Elian Doran
3925ba3eef chore(dx/ci): fix sequential/parallel tests 2025-09-02 19:16:49 +03:00
Elian Doran
4306072ca7 chore(dx/ci): sequential/parallel tests 2025-09-02 19:09:45 +03:00
Elian Doran
15fba23ad7 chore(dx/ci): denx-ify playwright 2025-09-02 19:00:49 +03:00
Elian Doran
04753226e5 chore(dx/ci): fix package command 2025-09-02 18:42:30 +03:00
Elian Doran
3fda97a9bd chore(dx/client): allocate more memory for the build 2025-09-02 18:38:50 +03:00
Elian Doran
26afdd105f chore(dx/server): get tests to run 2025-09-02 18:33:22 +03:00
Elian Doran
7c50251c37 chore(dx): clean up global package.json 2025-09-02 18:32:03 +03:00
Elian Doran
3de9d07769 chore: update lock 2025-09-02 17:54:05 +03:00
Elian Doran
d60899e362 chore(dx): remove unnecessary nx configs 2025-09-02 17:43:32 +03:00
Elian Doran
7c8019ac5b chore(dx/ci): get rid of nx-specific workflows 2025-09-02 17:38:24 +03:00
Elian Doran
1258d0cf7d chore(dx/desktop): read electron version from package.json 2025-09-02 17:37:57 +03:00
SiriusXT
2264369e9e feat: Make splits resizable 2025-09-02 22:05:26 +08:00
Elian Doran
e18a8556c1 chore(dx/ci): remove most references to NX, apart from unit test 2025-09-02 16:40:52 +03:00
SiriusXT
5436011f8e feat: Make splits resizable 2025-09-02 20:17:01 +08:00
Elian Doran
ce0fd3cec2 chore(dx/desktop): get forge to run 2025-09-02 13:59:09 +03:00
Elian Doran
bd349f5abc feat(dx/desktop): support raw NixOS via LD_LIBRARY_PATH injection 2025-09-02 12:18:22 +03:00
Elian Doran
7fdea613ff feat(dx/desktop): perfect way to override bettersqlite native 2025-09-02 11:50:58 +03:00
Elian Doran
16beeb2e88 fix(dx): broken imports after changing hoisting 2025-09-02 11:03:24 +03:00
Elian Doran
ae74f8ea83 feat(dx/desktop): isolate node_modules dependency 2025-09-02 10:45:42 +03:00
SiriusXT
88b748e67b Merge branch 'main' into siriusxt_split 2025-09-02 09:36:06 +08:00
SiriusXT
3254069999 feat: Make splits resizable 2025-09-02 09:28:53 +08:00
Elian Doran
793102f3ad chore(dx/electron): fix tray icons 2025-09-01 22:55:53 +03:00
Elian Doran
6f29bdf355 chore(dx/electron): different window icon 2025-09-01 22:25:06 +03:00
Elian Doran
edf53c8a0f chore(dx/desktop): configure dev & start-prod 2025-09-01 21:16:10 +03:00
Elian Doran
24859e33c1 chore(dx/desktop): generate prod package.json 2025-09-01 21:15:44 +03:00
Elian Doran
ebcf4315f7 chore(dx/desktop): remote main not working in dist build 2025-09-01 21:15:17 +03:00
Elian Doran
135e2bb10e chore(dx/desktop): get prod build 2025-09-01 20:50:22 +03:00
Elian Doran
72a256eccf refactor(dx/server): simplify build script even further 2025-09-01 20:29:34 +03:00
Elian Doran
1e991c0526 refactor(dx/server): extract basic build commands to separate file 2025-09-01 19:36:14 +03:00
Elian Doran
978e6b9dde chore(dx/server): unnecessary import 2025-09-01 19:22:46 +03:00
perf3ct
a2acb3cbb7 fix(shortcuts): try to fix ime composition checks 2025-09-01 16:21:58 +00:00
Papierkorb2292
623fcce3d1 Also update note context in other note context events in note wrapper so it works with tabs 2025-09-01 11:33:15 +02:00
Papierkorb2292
c99ef4a549 Make note wrapper widget aware of note context on mobile 2025-09-01 11:01:29 +02:00
Papierkorb2292
c629ce6ef8 Add note wrapper widget in mobile_layout.tsx 2025-09-01 11:01:08 +02:00
Elian Doran
35743de0df fix(dx/client): client not starting due to duplicate config 2025-09-01 11:53:17 +03:00
Elian Doran
5cf182cf98 fix(dx/client): not serving Vite due to NODE_ENV 2025-09-01 11:50:41 +03:00
Elian Doran
01022546e8 fix(dx/client): insert math not working due to icon import 2025-09-01 11:33:18 +03:00
Elian Doran
4b9688af04 chore(dx/server): minify output 2025-08-31 23:19:07 +03:00
Elian Doran
897b896c11 chore(dx/server): fix vite interfering in production 2025-08-31 23:12:52 +03:00
Elian Doran
3600b46824 chore(dx/server): fix missing path to client 2025-08-31 23:04:18 +03:00
Elian Doran
9266fe63b9 chore(dx/client): disable share CSS for now 2025-08-31 23:03:38 +03:00
Elian Doran
a3ea52968f chore(dx/client): fix codemirror dep 2025-08-31 23:03:30 +03:00
Elian Doran
a06f2aeb8b chore(dx/server): trigger build of client & copy artifacts 2025-08-31 23:03:21 +03:00
Elian Doran
f4a56d4e19 chore(dx/client): get vite build to work 2025-08-31 23:02:41 +03:00
Elian Doran
f3f7ff5622 chore(dx/server): copy share templates when building 2025-08-31 22:48:50 +03:00
Elian Doran
dbf016adaf chore(dx/server): build all entrypoints with right ext 2025-08-31 22:43:21 +03:00
Elian Doran
0e5108bd08 chore(dx/server): start building & copying assets 2025-08-31 22:30:07 +03:00
Elian Doran
cf1180faa9 chore(dx/server): remove babel compacting for tiny gain in perf 2025-08-31 21:05:23 +03:00
Elian Doran
1b25275b2e fix(dx/electron): web contents not working 2025-08-31 20:43:48 +03:00
Elian Doran
886c694db7 chore(dx/server): update server:start command 2025-08-31 20:43:33 +03:00
Elian Doran
3d38a2aa14 chore(dx/desktop): get dev mode for Electron 2025-08-31 20:43:20 +03:00
Elian Doran
51d879ba6f style(client): toast sometimes going out of bounds 2025-08-31 20:42:46 +03:00
Elian Doran
91ae9d75f7 Revert "chore(dx/server): improve asset management for DB init"
This reverts commit 42559364e4.
2025-08-31 20:31:51 +03:00
Elian Doran
42559364e4 chore(dx/server): improve asset management for DB init 2025-08-31 20:28:21 +03:00
Elian Doran
c92860ae49 chore(dx/client): fix error when optimizing premium plugins 2025-08-31 19:27:05 +03:00
Elian Doran
b012624b67 chore(dx/client): fix emoji import error 2025-08-31 19:26:56 +03:00
Elian Doran
5f1d2f02ee chore(dx/client): fix SVG icons causing errors in CKEditor 2025-08-31 19:26:47 +03:00
Elian Doran
46cb869237 chore(dx/server): client paths not correct 2025-08-31 19:21:36 +03:00
Elian Doran
054c497678 chore(dx/client): improve startup speed by properly configuring middleware 2025-08-31 18:57:31 +03:00
Elian Doran
8362424976 chore(dx/client): fix highlightjs not working 2025-08-31 18:52:52 +03:00
Elian Doran
f7a0dc00e8 chore(dx/client): fix bootstrap CSS imports 2025-08-31 18:52:22 +03:00
Elian Doran
e49c4655a6 chore(dx/client): ckeditor5 CSS imports 2025-08-31 18:51:18 +03:00
Elian Doran
1dcb3b1529 chore(dx/server): set up cache for Vite 2025-08-31 18:28:20 +03:00
Elian Doran
cc474f39d8 chore(dx/server): basic middleware integration for vite 2025-08-31 18:24:02 +03:00
Elian Doran
113d36f5dd chore(dx/client): set paths for client dependencies 2025-08-31 18:19:03 +03:00
Elian Doran
63c0841c32 chore(dx/server): get server to run up to missing public server 2025-08-31 16:58:57 +03:00
Elian Doran
4739e2e3b2 chore(dx/server): remove dependency on CKEditor for now 2025-08-31 16:52:32 +03:00
Elian Doran
aa316091e6 chore(dx): fix cannot read properties of undefined if DB dir is missing 2025-08-31 16:41:03 +03:00
Elian Doran
2297721228 chore(dx): get rid of nx 2025-08-31 16:36:55 +03:00
Elian Doran
5b8394d685 chore(react/collections): display books even if collections only 2025-08-30 19:50:20 +03:00
Elian Doran
34fc30b8db chore(react/collections): avoid intersection observer when not needed 2025-08-30 19:48:05 +03:00
Elian Doran
6e575df40b chore(react/collections): add intersection observer 2025-08-30 19:42:16 +03:00
Elian Doran
2689b22674 chore(react): not reacting to deleted note labels 2025-08-30 19:33:32 +03:00
Elian Doran
5570f3bdcf chore(react/collections): title stretched thin 2025-08-30 19:27:41 +03:00
Elian Doran
cc7edbe3a7 chore(react/collections): full-height rendering for non-legacy 2025-08-30 19:24:32 +03:00
Elian Doran
c49e84efc6 refactor(react/collections): rename 2025-08-30 19:21:26 +03:00
Elian Doran
98a4a8d8c6 chore(react/collections): fix list body 2025-08-30 19:13:08 +03:00
Elian Doran
5f73532d62 chore(react/collections): fix expand state when switching notes 2025-08-30 19:11:12 +03:00
Elian Doran
d52f9f2a92 chore(react/collections): highlighting in grid title 2025-08-30 19:07:06 +03:00
Elian Doran
1cee01a22a chore(react/collections): content highlighting in list 2025-08-30 19:03:18 +03:00
Elian Doran
68dff71512 chore(react/collections): title highlighting in list title 2025-08-30 18:49:32 +03:00
Elian Doran
f92948d65c chore(react/collections): bring back attribute rendering 2025-08-30 17:39:09 +03:00
Elian Doran
c4d771f2c6 chore(react/collections): use translation 2025-08-30 17:30:35 +03:00
Elian Doran
566ffbdde2 fix(react/collections): pagination displayed when not needed 2025-08-30 17:26:43 +03:00
Elian Doran
5cf18ae17c chore(react/collections/view): first implementation 2025-08-30 17:26:00 +03:00
Elian Doran
4891721cc0 chore(react): fix editorconfig 2025-08-30 17:07:10 +03:00
Elian Doran
49b189e7a9 chore(react/collections/list): add note count to pagination 2025-08-30 17:05:33 +03:00
Elian Doran
a9c5a3105f chore(react/collections/list): add class to title 2025-08-30 17:00:24 +03:00
Elian Doran
c13f5a9b04 refactor(react/collections/list): split pagination into separate file 2025-08-30 16:58:23 +03:00
Elian Doran
12f805c020 chore(react/collections/list): display pagination 2025-08-30 16:40:25 +03:00
Elian Doran
c2a5f437fd chore(react/collections/list): display children recursively 2025-08-30 16:19:21 +03:00
Elian Doran
1c986e2bf6 chore(react/collections/list): display note content 2025-08-30 16:01:02 +03:00
Elian Doran
09fd1c7628 chore(react/collections): get list view to show something 2025-08-30 15:44:49 +03:00
Elian Doran
ecf44deecf chore(react/collections): calculate note Ids 2025-08-30 15:11:49 +03:00
Elian Doran
5fb843268f chore(react/collections): fix imports of ViewTypeOptions 2025-08-30 14:32:06 +03:00
Elian Doran
ffb90c2b4b chore(react/collections): move files around for ease of development 2025-08-30 14:29:54 +03:00
691 changed files with 22961 additions and 19441 deletions

View File

@@ -1,6 +1,6 @@
root = true
[*.{js,ts,.tsx}]
[*.{js,ts,tsx}]
charset = utf-8
end_of_line = lf
indent_size = 4

1
.env
View File

@@ -1 +0,0 @@
NODE_OPTIONS=--max_old_space_size=4096

View File

@@ -74,7 +74,7 @@ runs:
- name: Update build info
shell: ${{ inputs.shell }}
run: npm run chore:update-build-info
run: pnpm run chore:update-build-info
# Critical debugging configuration
- name: Run electron-forge build with enhanced logging
@@ -86,7 +86,8 @@ runs:
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
WINDOWS_SIGN_EXECUTABLE: ${{ env.WINDOWS_SIGN_EXECUTABLE }}
TRILIUM_ARTIFACT_NAME_HINT: TriliumNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
run: pnpm nx --project=desktop electron-forge:make -- --arch=${{ inputs.arch }} --platform=${{ inputs.forge_platform }}
TARGET_ARCH: ${{ inputs.arch }}
run: pnpm run --filter desktop electron-forge:make --arch=${{ inputs.arch }} --platform=${{ inputs.forge_platform }}
# Add DMG signing step
- name: Sign DMG

View File

@@ -10,7 +10,7 @@ runs:
steps:
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: "pnpm"
@@ -23,7 +23,7 @@ runs:
shell: bash
run: |
pnpm run chore:update-build-info
pnpm nx --project=server package
pnpm run --filter server package
- name: Prepare artifacts
shell: bash
run: |

View File

@@ -0,0 +1,103 @@
name: "Deploy to Cloudflare Pages"
description: "Deploys to Cloudflare Pages on either a temporary branch with preview comment, or on the production version if on the main branch."
inputs:
project_name:
description: "CloudFlare Pages project name"
comment_body:
description: "The message to display when deployment is ready"
default: "Deployment is ready."
required: false
production_url:
description: "The URL to mention as the production URL."
required: true
deploy_dir:
description: "The directory from which to deploy."
required: true
cloudflare_api_token:
description: "The Cloudflare API token to use for deployment."
required: true
cloudflare_account_id:
description: "The Cloudflare account ID to use for deployment."
required: true
github_token:
description: "The GitHub token to use for posting PR comments."
required: true
runs:
using: composite
steps:
# Install wrangler globally to avoid workspace issues
- name: Install Wrangler
shell: bash
run: npm install -g wrangler
# Deploy using Wrangler (use pre-installed wrangler)
- name: Deploy to Cloudflare Pages
id: deploy
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ inputs.cloudflare_api_token }}
accountId: ${{ inputs.cloudflare_account_id }}
command: pages deploy ${{ inputs.deploy_dir }} --project-name=${{ inputs.project_name}} --branch=${{ github.ref_name }}
wranglerVersion: '' # Use pre-installed version
# Deploy preview for PRs
- name: Deploy Preview to Cloudflare Pages
id: preview-deployment
if: github.event_name == 'pull_request'
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ inputs.cloudflare_api_token }}
accountId: ${{ inputs.cloudflare_account_id }}
command: pages deploy ${{ inputs.deploy_dir }} --project-name=${{ inputs.project_name}} --branch=pr-${{ github.event.pull_request.number }}
wranglerVersion: '' # Use pre-installed version
# Post deployment URL as PR comment
- name: Comment PR with Preview URL
if: github.event_name == 'pull_request'
uses: actions/github-script@v8
env:
COMMENT_BODY: ${{ inputs.comment_body }}
PRODUCTION_URL: ${{ inputs.production_url }}
PROJECT_NAME: ${{ inputs.project_name }}
with:
github-token: ${{ inputs.github_token }}
script: |
const prNumber = context.issue.number;
// Construct preview URL based on Cloudflare Pages pattern
const projectName = process.env.PROJECT_NAME;
const previewUrl = `https://pr-${prNumber}.${projectName}.pages.dev`;
// Check if we already commented
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber
});
const customMessage = process.env.COMMENT_BODY;
const botComment = comments.data.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes(customMessage)
);
const mainUrl = process.env.PRODUCTION_URL;
const commentBody = `${customMessage}!\n\n🔗 Preview URL: ${previewUrl}\n📖 Production URL: ${mainUrl}\n\n✅ All checks passed\n\n_This preview will be updated automatically with new commits._`;
if (botComment) {
// Update existing comment
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: commentBody
});
} else {
// Create new comment
await github.rest.issues.createComment({
issue_number: prNumber,
owner: context.repo.owner,
repo: context.repo.repo,
body: commentBody
});
}

View File

@@ -1,40 +0,0 @@
---
applyTo: '**'
---
// This file is automatically generated by Nx Console
You are in an nx workspace using Nx 21.3.9 and pnpm as the package manager.
You have access to the Nx MCP server and the tools it provides. Use them. Follow these guidelines in order to best help the user:
# General Guidelines
- When answering questions, use the nx_workspace tool first to gain an understanding of the workspace architecture
- For questions around nx configuration, best practices or if you're unsure, use the nx_docs tool to get relevant, up-to-date docs!! Always use this instead of assuming things about nx configuration
- If the user needs help with an Nx configuration or project graph error, use the 'nx_workspace' tool to get any errors
- To help answer questions about the workspace structure or simply help with demonstrating how tasks depend on each other, use the 'nx_visualize_graph' tool
# Generation Guidelines
If the user wants to generate something, use the following flow:
- learn about the nx workspace and any specifics the user needs by using the 'nx_workspace' tool and the 'nx_project_details' tool if applicable
- get the available generators using the 'nx_generators' tool
- decide which generator to use. If no generators seem relevant, check the 'nx_available_plugins' tool to see if the user could install a plugin to help them
- get generator details using the 'nx_generator_schema' tool
- you may use the 'nx_docs' tool to learn more about a specific generator or technology if you're unsure
- decide which options to provide in order to best complete the user's request. Don't make any assumptions and keep the options minimalistic
- open the generator UI using the 'nx_open_generate_ui' tool
- wait for the user to finish the generator
- read the generator log file using the 'nx_read_generator_log' tool
- use the information provided in the log file to answer the user's question or continue with what they were doing
# Running Tasks Guidelines
If the user wants help with tasks or commands (which include keywords like "test", "build", "lint", or other similar actions), use the following flow:
- Use the 'nx_current_running_tasks_details' tool to get the list of tasks (this can include tasks that were completed, stopped or failed).
- If there are any tasks, ask the user if they would like help with a specific task then use the 'nx_current_running_task_output' tool to get the terminal output for that task/command
- Use the terminal output from 'nx_current_running_task_output' to see what's wrong and help the user fix their problem. Use the appropriate tools if necessary
- If the user would like to rerun the task or command, always use `nx run <taskId>` to rerun in the terminal. This will ensure that the task will run in the nx context and will be run the same way it originally executed
- If the task was marked as "continuous" do not offer to rerun the task. This task is already running and the user can see the output in the terminal. You can use 'nx_current_running_task_output' to get the output of the task to verify the output.

128
.github/workflows/deploy-docs.yml vendored Normal file
View File

@@ -0,0 +1,128 @@
# GitHub Actions workflow for deploying MkDocs documentation to Cloudflare Pages
# This workflow builds and deploys your MkDocs site when changes are pushed to main
name: Deploy MkDocs Documentation
on:
# Trigger on push to main branch
push:
branches:
- main
- master # Also support master branch
# Only run when docs files change
paths:
- 'docs/**'
- 'README.md' # README is synced to docs/index.md
- 'mkdocs.yml'
- 'requirements-docs.txt'
- '.github/workflows/deploy-docs.yml'
- 'scripts/fix-mkdocs-structure.ts'
# Allow manual triggering from Actions tab
workflow_dispatch:
# Run on pull requests for preview deployments
pull_request:
branches:
- main
- master
paths:
- 'docs/**'
- 'README.md' # README is synced to docs/index.md
- 'mkdocs.yml'
- 'requirements-docs.txt'
- '.github/workflows/deploy-docs.yml'
- 'scripts/fix-mkdocs-structure.ts'
jobs:
build-and-deploy:
name: Build and Deploy MkDocs
runs-on: ubuntu-latest
timeout-minutes: 10
# Required permissions for deployment
permissions:
contents: read
deployments: write
pull-requests: write # For PR preview comments
id-token: write # For OIDC authentication (if needed)
steps:
- name: Checkout Repository
uses: actions/checkout@v5
with:
fetch-depth: 0 # Fetch all history for git info and mkdocs-git-revision-date plugin
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pip'
cache-dependency-path: 'requirements-docs.txt'
- name: Install MkDocs and Dependencies
run: |
pip install --upgrade pip
pip install -r requirements-docs.txt
env:
PIP_DISABLE_PIP_VERSION_CHECK: 1
# Setup pnpm before fixing docs structure
- name: Setup pnpm
uses: pnpm/action-setup@v4
# Setup Node.js with pnpm
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: '22'
cache: 'pnpm'
# Install Node.js dependencies for the TypeScript script
- name: Install Dependencies
run: |
pnpm install --frozen-lockfile
- name: Fix Documentation Structure
run: |
# Fix duplicate navigation entries by moving overview pages to index.md
pnpm run chore:fix-mkdocs-structure
- name: Build MkDocs Site
run: |
# Build with strict mode but allow expected warnings
mkdocs build --verbose || {
EXIT_CODE=$?
# Check if the only issue is expected warnings
if mkdocs build 2>&1 | grep -E "WARNING.*(README|not found)" && \
[ $(mkdocs build 2>&1 | grep -c "ERROR") -eq 0 ]; then
echo "✅ Build succeeded with expected warnings"
mkdocs build --verbose
else
echo "❌ Build failed with unexpected errors"
exit $EXIT_CODE
fi
}
- name: Fix HTML Links
run: |
# Remove .md extensions from links in generated HTML
pnpm tsx ./scripts/fix-html-links.ts site
- name: Validate Built Site
run: |
# Basic validation that important files exist
test -f site/index.html || (echo "ERROR: site/index.html not found" && exit 1)
test -f site/sitemap.xml || (echo "ERROR: site/sitemap.xml not found" && exit 1)
test -d site/assets || (echo "ERROR: site/assets directory not found" && exit 1)
echo "✅ Site validation passed"
- name: Deploy
uses: ./.github/actions/deploy-to-cloudflare-pages
with:
project_name: "trilium-docs"
comment_body: "📚 Documentation preview is ready"
production_url: "https://docs.triliumnotes.org"
deploy_dir: "site"
cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
github_token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -19,45 +19,24 @@ permissions:
pull-requests: write # for PR comments
jobs:
check-affected:
name: Check affected jobs (NX)
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v5
with:
fetch-depth: 0 # needed for https://github.com/marketplace/actions/nx-set-shas
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- uses: nrwl/nx-set-shas@v4
- name: Check affected
run: pnpm nx affected --verbose -t typecheck build rebuild-deps test-build
test_dev:
name: Test development
runs-on: ubuntu-latest
needs:
- check-affected
steps:
- name: Checkout the repository
uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: "pnpm"
- run: pnpm install --frozen-lockfile
- name: Typecheck
run: pnpm typecheck
- name: Run the unit tests
run: pnpm run test:all
@@ -66,7 +45,6 @@ jobs:
runs-on: ubuntu-latest
needs:
- test_dev
- check-affected
steps:
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
@@ -75,7 +53,7 @@ jobs:
- name: Update build info
run: pnpm run chore:update-build-info
- name: Trigger client build
run: pnpm nx run client:build
run: pnpm client:build
- name: Send client bundle stats to RelativeCI
if: false
uses: relative-ci/agent-action@v3
@@ -83,7 +61,7 @@ jobs:
webpackStatsFile: ./apps/client/dist/webpack-stats.json
key: ${{ secrets.RELATIVE_CI_CLIENT_KEY }}
- name: Trigger server build
run: pnpm nx run server:build
run: pnpm run server:build
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
with:
@@ -95,7 +73,6 @@ jobs:
runs-on: ubuntu-latest
needs:
- build_docker
- check-affected
strategy:
matrix:
include:
@@ -112,7 +89,7 @@ jobs:
- name: Update build info
run: pnpm run chore:update-build-info
- name: Trigger build
run: pnpm nx run server:build
run: pnpm server:build
- name: Set IMAGE_NAME to lowercase
run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV

View File

@@ -44,7 +44,7 @@ jobs:
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: "pnpm"
@@ -82,7 +82,7 @@ jobs:
require-healthy: true
- name: Run Playwright tests
run: TRILIUM_DOCKER=1 TRILIUM_PORT=8082 pnpm exec nx run server-e2e:e2e
run: TRILIUM_DOCKER=1 TRILIUM_PORT=8082 pnpm --filter=server-e2e e2e
- name: Upload Playwright trace
if: failure()
@@ -144,7 +144,7 @@ jobs:
uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: 'pnpm'
@@ -152,12 +152,12 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run the TypeScript build
run: pnpm run server:build
- name: Update build info
run: pnpm run chore:update-build-info
- name: Run the TypeScript build
run: pnpm run server:build
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
@@ -211,7 +211,7 @@ jobs:
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
name: digests-${{ env.PLATFORM_PAIR }}-${{ matrix.dockerfile }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1

View File

@@ -19,7 +19,6 @@ concurrency:
cancel-in-progress: true
env:
GITHUB_UPLOAD_URL: https://uploads.github.com/repos/TriliumNext/Notes/releases/179589950/assets{?name,label}
GITHUB_RELEASE_ID: 179589950
permissions:
@@ -51,13 +50,12 @@ jobs:
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- uses: nrwl/nx-set-shas@v4
- name: Update nightly version
run: npm run chore:ci-update-nightly-version
- name: Run the build
@@ -79,7 +77,7 @@ jobs:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
- name: Publish release
uses: softprops/action-gh-release@v2.3.2
uses: softprops/action-gh-release@v2.3.4
if: ${{ github.event_name != 'pull_request' }}
with:
make_latest: false
@@ -120,7 +118,7 @@ jobs:
arch: ${{ matrix.arch }}
- name: Publish release
uses: softprops/action-gh-release@v2.3.2
uses: softprops/action-gh-release@v2.3.4
if: ${{ github.event_name != 'pull_request' }}
with:
make_latest: false

View File

@@ -4,6 +4,8 @@ on:
push:
branches:
- main
paths-ignore:
- "apps/website/**"
pull_request:
permissions:
@@ -19,14 +21,8 @@ jobs:
filter: tree:0
fetch-depth: 0
# This enables task distribution via Nx Cloud
# Run this command as early as possible, before dependencies are installed
# Learn more at https://nx.dev/ci/reference/nx-cloud-cli#npx-nxcloud-startcirun
# Connect your workspace by running "nx connect" and uncomment this line to enable task distribution
# - run: npx nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="e2e-ci"
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: 22
cache: 'pnpm'
@@ -34,10 +30,12 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
- run: pnpm exec playwright install --with-deps
- uses: nrwl/nx-set-shas@v4
# Prepend any command with "nx-cloud record --" to record its logs to Nx Cloud
# - run: npx nx-cloud record -- echo Hello World
# Nx Affected runs only tasks affected by the changes in this PR/commit. Learn more: https://nx.dev/ci/features/affected
# When you enable task distribution, run the e2e-ci task instead of e2e
- run: pnpm exec nx affected -t e2e --exclude desktop-e2e
- run: pnpm --filter server-e2e e2e
- name: Upload test report
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e report
path: apps/server-e2e/test-output

View File

@@ -30,18 +30,30 @@ jobs:
image: win-signing
shell: cmd
forge_platform: win32
# Exclude ARM64 Linux from default matrix to use native runner
exclude:
- arch: arm64
os:
name: linux
# Add ARM64 Linux with native ubuntu-24.04-arm runner for better-sqlite3 compatibility
include:
- arch: arm64
os:
name: linux
image: ubuntu-24.04-arm
shell: bash
forge_platform: linux
runs-on: ${{ matrix.os.image }}
steps:
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- uses: nrwl/nx-set-shas@v4
- name: Run the build
uses: ./.github/actions/build-electron
with:
@@ -115,7 +127,7 @@ jobs:
path: upload
- name: Publish stable release
uses: softprops/action-gh-release@v2.3.2
uses: softprops/action-gh-release@v2.3.4
with:
draft: false
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md

48
.github/workflows/website.yml vendored Normal file
View File

@@ -0,0 +1,48 @@
name: Deploy website
on:
push:
branches:
- main
paths:
- "apps/website/**"
pull_request:
paths:
- "apps/website/**"
jobs:
build-and-deploy:
runs-on: ubuntu-latest
name: Build & deploy website
permissions:
contents: read
deployments: write
pull-requests: write # For PR preview comments
steps:
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
- name: Set up node & dependencies
uses: actions/setup-node@v5
with:
node-version: 22
cache: "pnpm"
- name: Install dependencies
run: pnpm install --filter website --frozen-lockfile
- name: Build the website
run: pnpm website:build
- name: Deploy
uses: ./.github/actions/deploy-to-cloudflare-pages
with:
project_name: "trilium-homepage"
comment_body: "📚 Website preview is ready"
production_url: "https://triliumnotes.org"
deploy_dir: "apps/website/dist"
cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
github_token: ${{ secrets.GITHUB_TOKEN }}

11
.gitignore vendored
View File

@@ -1,4 +1,5 @@
# See https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
/.cache
# compiled output
dist
@@ -32,14 +33,11 @@ testem.log
.DS_Store
Thumbs.db
.nx/cache
.nx/workspace-data
vite.config.*.timestamp*
vitest.config.*.timestamp*
test-output
apps/*/data
apps/*/data*
apps/*/out
upload
@@ -47,4 +45,7 @@ upload
*.tsbuildinfo
/result
.svelte-kit
.svelte-kit
# docs
site/

2
.nvmrc
View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -5,7 +5,6 @@
"lokalise.i18n-ally",
"ms-azuretools.vscode-docker",
"ms-playwright.playwright",
"nrwl.angular-console",
"redhat.vscode-yaml",
"tobermory.es6-string-html",
"vitest.explorer",

8
.vscode/mcp.json vendored
View File

@@ -1,8 +0,0 @@
{
"servers": {
"nx-mcp": {
"type": "http",
"url": "http://localhost:9461/mcp"
}
}
}

View File

@@ -35,6 +35,5 @@
"docs/**/*.png": true,
"apps/server/src/assets/doc_notes/**": true,
"apps/edit-docs/demo/**": true
},
"nxConsole.generateAiAgentRules": true
}
}

View File

@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## 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 NX, with multiple applications and shared packages.
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.
## Development Commands
@@ -14,12 +14,9 @@ Trilium Notes is a hierarchical note-taking application with advanced features l
### Running Applications
- `pnpm run server:start` - Start development server (http://localhost:8080)
- `pnpm nx run server:serve` - Alternative server start command
- `pnpm nx run desktop:serve` - Run desktop Electron app
- `pnpm run server:start-prod` - Run server in production mode
### Building
- `pnpm nx build <project>` - Build specific project (server, client, desktop, etc.)
- `pnpm run client:build` - Build client application
- `pnpm run server:build` - Build server application
- `pnpm run electron:build` - Build desktop application
@@ -28,13 +25,8 @@ Trilium Notes is a hierarchical note-taking application with advanced features l
- `pnpm test:all` - Run all tests (parallel + sequential)
- `pnpm test:parallel` - Run tests that can run in parallel
- `pnpm test:sequential` - Run tests that must run sequentially (server, ckeditor5-mermaid, ckeditor5-math)
- `pnpm nx test <project>` - Run tests for specific project
- `pnpm coverage` - Generate coverage reports
### Linting & Type Checking
- `pnpm nx run <project>:lint` - Lint specific project
- `pnpm nx run <project>:typecheck` - Type check specific project
## Architecture Overview
### Monorepo Structure
@@ -94,7 +86,6 @@ Frontend uses a widget system (`apps/client/src/widgets/`):
- `apps/server/src/assets/db/schema.sql` - Core database structure
4. **Configuration**:
- `nx.json` - NX workspace configuration
- `package.json` - Project dependencies and scripts
## Note Types and Features
@@ -154,7 +145,7 @@ Trilium provides powerful user scripting capabilities:
- Update schema in `apps/server/src/assets/db/schema.sql`
## Build System Notes
- Uses NX for monorepo management with build caching
- Uses pnpm for monorepo management
- Vite for fast development builds
- ESBuild for production optimization
- pnpm workspaces for dependency management

View File

@@ -5,7 +5,7 @@
![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/triliumnext/trilium/total)
[![RelativeCI](https://badges.relative-ci.com/badges/Di5q7dz9daNDZ9UXi0Bp?branch=develop)](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [![Translation status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted.weblate.org/engage/trilium/)
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | [Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README.ru.md) | [Japanese](./docs/README.ja.md) | [Italian](./docs/README.it.md) | [Spanish](./docs/README.es.md)
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | [Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md) | [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) | [Spanish](./docs/README-es.md)
Trilium Notes is a free and open-source, cross-platform hierarchical note taking application with focus on building large personal knowledge bases.
@@ -13,6 +13,23 @@ See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for q
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="./docs/app.png" alt="Trilium Screenshot" width="1000"></a>
## 📚 Documentation
**Visit our comprehensive documentation at [docs.triliumnotes.org](https://docs.triliumnotes.org/)**
Our documentation is available in multiple formats:
- **Online Documentation**: Browse the full documentation at [docs.triliumnotes.org](https://docs.triliumnotes.org/)
- **In-App Help**: Press `F1` within Trilium to access the same documentation directly in the application
- **GitHub**: Navigate through the [User Guide](./docs/User%20Guide/User%20Guide/) in this repository
### Quick Links
- [Getting Started Guide](https://docs.triliumnotes.org/)
- [Installation Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
- [Docker Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
- [Upgrading TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
- [Basic Concepts and Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
- [Patterns of Personal Knowledge Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
## 🎁 Features
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
@@ -56,19 +73,6 @@ There are no special migration steps to migrate from a zadam/Trilium instance to
Versions up to and including [v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are compatible with the latest zadam/trilium version of [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later versions of TriliumNext/Trilium have their sync versions incremented which prevents direct migration.
## 📖 Documentation
We're currently in the progress of moving the documentation to in-app (hit the `F1` key within Trilium). As a result, there may be some missing parts until we've completed the migration. If you'd prefer to navigate through the documentation within GitHub, you can navigate the [User Guide](./docs/User%20Guide/User%20Guide/) documentation.
Below are some quick links for your convenience to navigate the documentation:
- [Server installation](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
- [Docker installation](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
- [Upgrading TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
- [Concepts and Features - Note](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
- [Patterns of personal knowledge base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
Until we finish reorganizing the documentation, you may also want to [browse the old documentation](https://triliumnext.github.io/Docs).
## 💬 Discuss with us
Feel free to join our official conversations. We would love to hear what features, suggestions, or issues you may have!
@@ -142,7 +146,7 @@ Download the repository, install dependencies using `pnpm` and then run the envi
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
pnpm nx run edit-docs:edit-docs
pnpm edit-docs:edit-docs
```
### Building the Executable
@@ -151,7 +155,7 @@ Download the repository, install dependencies using `pnpm` and then build the de
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
pnpm nx --project=desktop electron-forge:make -- --arch=x64 --platform=win32
pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
```
For more details, see the [development docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
@@ -162,16 +166,34 @@ Please view the [documentation guide](https://github.com/TriliumNext/Trilium/blo
## 👏 Shoutouts
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
* [zadam](https://github.com/zadam) for the original concept and implementation of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon.
* [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight widget.
* [Dosu](https://dosu.dev/) for providing us with the automated responses to GitHub issues and discussions.
* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
Trilium would not be possible without the technologies behind it:
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind text notes. We are grateful for being offered a set of the premium features.
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages.
* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite whiteboard used in Canvas notes.
* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the mind map functionality.
* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical maps.
* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive table used in collections.
* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library without real competition.
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
## 🤝 Support
Support for the TriliumNext organization will be possible in the near future. For now, you can:
- Support continued development on TriliumNext by supporting our developers: [eliandoran](https://github.com/sponsors/eliandoran) (See the [repository insights]([developers]([url](https://github.com/TriliumNext/trilium/graphs/contributors))) for a full list)
- Show a token of gratitude to the original Trilium developer ([zadam](https://github.com/sponsors/zadam)) via [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
Trilium is built and maintained with [hundreds of hours of work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your support keeps it open-source, improves features, and covers costs such as hosting.
Consider supporting the main developer ([eliandoran](https://github.com/eliandoran)) of the application via:
- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
- [PayPal](https://paypal.me/eliandoran)
- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
## 🔑 License

View File

@@ -35,13 +35,13 @@
"chore:generate-openapi": "tsx bin/generate-openapi.js"
},
"devDependencies": {
"@playwright/test": "1.55.0",
"@stylistic/eslint-plugin": "5.3.1",
"@playwright/test": "1.55.1",
"@stylistic/eslint-plugin": "5.4.0",
"@types/express": "5.0.3",
"@types/node": "22.18.0",
"@types/node": "22.18.8",
"@types/yargs": "17.0.33",
"@vitest/coverage-v8": "3.2.4",
"eslint": "9.34.0",
"eslint": "9.37.0",
"eslint-plugin-simple-import-sort": "12.1.1",
"esm": "3.2.25",
"jsdoc": "4.0.4",
@@ -49,7 +49,7 @@
"rcedit": "4.0.1",
"rimraf": "6.0.1",
"tslib": "2.8.1",
"typedoc": "0.28.12",
"typedoc": "0.28.13",
"typedoc-plugin-missing-exports": "4.1.0"
},
"optionalDependencies": {

View File

@@ -1,5 +1,4 @@
# The development license key for premium CKEditor features.
# Note: This key must only be used for the Trilium Notes project.
# Expires on: 2025-09-13
VITE_CKEDITOR_KEY=eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE3NTc3MjE1OTksImp0aSI6ImFiN2E0NjZmLWJlZGMtNDNiYy1iMzU4LTk0NGQ0YWJhY2I3ZiIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOlsic2giLCJkcnVwYWwiXSwid2hpdGVMYWJlbCI6dHJ1ZSwiZmVhdHVyZXMiOlsiRFJVUCIsIkNNVCIsIkRPIiwiRlAiLCJTQyIsIlRPQyIsIlRQTCIsIlBPRSIsIkNDIiwiTUYiLCJTRUUiLCJFQ0giLCJFSVMiXSwidmMiOiI1MzlkOWY5YyJ9.2rvKPql4hmukyXhEtWPZ8MLxKvzPIwzCdykO653g7IxRRZy2QJpeRszElZx9DakKYZKXekVRAwQKgHxwkgbE_w
VITE_CKEDITOR_KEY=eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE3ODcyNzA0MDAsImp0aSI6IjkyMWE1MWNlLTliNDMtNGRlMC1iOTQwLTc5ZjM2MDBkYjg1NyIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOiJ0cmlsaXVtIiwiZmVhdHVyZXMiOlsiVFJJTElVTSJdLCJ2YyI6ImU4YzRhMjBkIn0.hny77p-U4-jTkoqbwPytrEar5ylGCWBN7Ez3SlB8i6_mJCBIeCSTOlVQk_JMiOEq3AGykUMHzWXzjdMFwgniOw
VITE_CKEDITOR_ENABLE_INSPECTOR=false

View File

@@ -1,16 +1,21 @@
{
"name": "@triliumnext/client",
"version": "0.98.1",
"version": "0.99.1",
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
"private": true,
"license": "AGPL-3.0-only",
"author": {
"name": "Trilium Notes Team",
"email": "contact@eliandoran.me",
"url": "https://github.com/TriliumNext/Notes"
"url": "https://github.com/TriliumNext/Trilium"
},
"scripts": {
"build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build",
"test": "vitest",
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
},
"dependencies": {
"@eslint/js": "9.34.0",
"@eslint/js": "9.37.0",
"@excalidraw/excalidraw": "0.18.0",
"@fullcalendar/core": "6.1.19",
"@fullcalendar/daygrid": "6.1.19",
@@ -19,7 +24,7 @@
"@fullcalendar/multimonth": "6.1.19",
"@fullcalendar/timegrid": "6.1.19",
"@maplibre/maplibre-gl-leaflet": "0.1.3",
"@mermaid-js/layout-elk": "0.1.9",
"@mermaid-js/layout-elk": "0.2.0",
"@mind-elixir/node-menu": "5.0.0",
"@popperjs/core": "2.11.8",
"@triliumnext/ckeditor5": "workspace:*",
@@ -34,25 +39,25 @@
"dayjs-plugin-utc": "0.1.2",
"debounce": "2.2.0",
"draggabilly": "3.0.0",
"force-graph": "1.50.1",
"globals": "16.3.0",
"i18next": "25.4.2",
"force-graph": "1.51.0",
"globals": "16.4.0",
"i18next": "25.5.3",
"i18next-http-backend": "3.0.2",
"jquery": "3.7.1",
"jquery.fancytree": "2.38.5",
"jsplumb": "2.15.6",
"katex": "0.16.22",
"katex": "0.16.23",
"knockout": "3.5.1",
"leaflet": "1.9.4",
"leaflet-gpx": "2.2.0",
"mark.js": "8.11.1",
"marked": "16.2.1",
"mermaid": "11.10.1",
"mind-elixir": "5.0.6",
"marked": "16.3.0",
"mermaid": "11.12.0",
"mind-elixir": "5.1.1",
"normalize.css": "8.0.1",
"panzoom": "9.4.3",
"preact": "10.27.1",
"react-i18next": "15.7.3",
"preact": "10.27.2",
"react-i18next": "16.0.0",
"split.js": "1.6.5",
"svg-pan-zoom": "3.6.2",
"tabulator-tables": "6.3.1",
@@ -64,25 +69,12 @@
"@types/bootstrap": "5.2.10",
"@types/jquery": "3.5.33",
"@types/leaflet": "1.9.20",
"@types/leaflet-gpx": "1.3.7",
"@types/leaflet-gpx": "1.3.8",
"@types/mark.js": "8.11.12",
"@types/tabulator-tables": "6.2.10",
"@types/tabulator-tables": "6.2.11",
"copy-webpack-plugin": "13.0.1",
"happy-dom": "18.0.1",
"happy-dom": "19.0.2",
"script-loader": "0.7.2",
"vite-plugin-static-copy": "3.1.2"
},
"nx": {
"name": "client",
"targets": {
"serve": {
"dependsOn": [
"^build"
]
},
"circular-deps": {
"command": "pnpx dpdm -T {projectRoot}/src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
}
}
"vite-plugin-static-copy": "3.1.3"
}
}

View File

@@ -7,6 +7,9 @@
"display": "standalone",
"scope": "/",
"start_url": "/",
"display_override": [
"window-controls-overlay"
],
"icons": [
{
"src": "icon.png",

View File

@@ -116,7 +116,7 @@ export type CommandMappings = {
openedFileUpdated: CommandData & {
entityType: string;
entityId: string;
lastModifiedMs: number;
lastModifiedMs?: number;
filePath: string;
};
focusAndSelectTitle: CommandData & {
@@ -650,7 +650,7 @@ export class AppContext extends Component {
}
getComponentByEl(el: HTMLElement) {
return $(el).closest(".component").prop("component");
return $(el).closest("[data-component-id]").prop("component");
}
addBeforeUnloadListener(obj: BeforeUploadListener | (() => boolean)) {

View File

@@ -433,6 +433,9 @@ export default class TabManager extends Component {
$autocompleteEl.autocomplete("close");
}
// close dangling tooltips
$("body > div.tooltip").remove();
const noteContextsToRemove = noteContextToRemove.getSubContexts();
const ntxIdsToRemove = noteContextsToRemove.map((nc) => nc.ntxId);
@@ -600,18 +603,18 @@ export default class TabManager extends Component {
}
async moveTabToNewWindowCommand({ ntxId }: { ntxId: string }) {
const { notePath, hoistedNoteId } = this.getNoteContextById(ntxId);
const { notePath, hoistedNoteId, viewScope } = this.getNoteContextById(ntxId);
const removed = await this.removeNoteContext(ntxId);
if (removed) {
this.triggerCommand("openInWindow", { notePath, hoistedNoteId });
this.triggerCommand("openInWindow", { notePath, hoistedNoteId, viewScope });
}
}
async copyTabToNewWindowCommand({ ntxId }: { ntxId: string }) {
const { notePath, hoistedNoteId } = this.getNoteContextById(ntxId);
this.triggerCommand("openInWindow", { notePath, hoistedNoteId });
const { notePath, hoistedNoteId, viewScope } = this.getNoteContextById(ntxId);
this.triggerCommand("openInWindow", { notePath, hoistedNoteId, viewScope });
}
async reopenLastTabCommand() {

View File

@@ -23,11 +23,11 @@ export default class TouchBarComponent extends Component {
this.$widget = $("<div>");
$(window).on("focusin", async (e) => {
const $target = $(e.target);
const focusedEl = e.target as unknown as HTMLElement;
const $target = $(focusedEl);
this.$activeModal = $target.closest(".modal-dialog");
const parentComponentEl = $target.closest(".component");
this.lastFocusedComponent = appContext.getComponentByEl(parentComponentEl[0]);
this.lastFocusedComponent = appContext.getComponentByEl(focusedEl);
this.#refreshTouchBar();
});
}

View File

@@ -10,7 +10,7 @@ import { t } from "./services/i18n.js";
import options from "./services/options.js";
import type ElectronRemote from "@electron/remote";
import type Electron from "electron";
import "./stylesheets/bootstrap.scss";
import "bootstrap/dist/css/bootstrap.min.css";
import "boxicons/css/boxicons.min.css";
import "autocomplete.js/index_jquery.js";
@@ -45,6 +45,10 @@ 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));
@@ -113,3 +117,20 @@ function initDarkOrLightMode(style: CSSStyleDeclaration) {
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();
}
}

View File

@@ -256,18 +256,20 @@ export default class FNote {
return this.children;
}
async getSubtreeNoteIds() {
async getSubtreeNoteIds(includeArchived = false) {
let noteIds: (string | string[])[] = [];
for (const child of await this.getChildNotes()) {
if (child.isArchived && !includeArchived) continue;
noteIds.push(child.noteId);
noteIds.push(await child.getSubtreeNoteIds());
noteIds.push(await child.getSubtreeNoteIds(includeArchived));
}
return noteIds.flat();
}
async getSubtreeNotes() {
const noteIds = await this.getSubtreeNoteIds();
return this.froca.getNotes(noteIds);
return (await this.froca.getNotes(noteIds));
}
async getChildNotes() {
@@ -905,8 +907,8 @@ export default class FNote {
return this.getBlob();
}
async getBlob() {
return await this.froca.getBlob("notes", this.noteId);
getBlob() {
return this.froca.getBlob("notes", this.noteId);
}
toString() {

View File

@@ -5,7 +5,6 @@ import NoteTreeWidget from "../widgets/note_tree.js";
import NoteTitleWidget from "../widgets/note_title.jsx";
import NoteDetailWidget from "../widgets/note_detail.js";
import PromotedAttributesWidget from "../widgets/promoted_attributes.js";
import NoteListWidget from "../widgets/note_list.js";
import NoteIconWidget from "../widgets/note_icon.jsx";
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
import RootContainer from "../widgets/containers/root_container.js";
@@ -42,6 +41,7 @@ import LeftPaneToggle from "../widgets/buttons/left_pane_toggle.js";
import ApiLog from "../widgets/api_log.jsx";
import CloseZenModeButton from "../widgets/close_zen_button.jsx";
import SharedInfo from "../widgets/shared_info.jsx";
import NoteList from "../widgets/collections/NoteList.jsx";
export default class DesktopLayout {
@@ -123,10 +123,10 @@ export default class DesktopLayout {
.child(<NoteIconWidget />)
.child(<NoteTitleWidget />)
.child(new SpacerWidget(0, 1))
.child(new MovePaneButton(true))
.child(new MovePaneButton(false))
.child(new ClosePaneButton())
.child(new CreatePaneButton())
.child(<MovePaneButton direction="left" />)
.child(<MovePaneButton direction="right" />)
.child(<ClosePaneButton />)
.child(<CreatePaneButton />)
)
.child(<Ribbon />)
.child(<SharedInfo />)
@@ -138,7 +138,7 @@ export default class DesktopLayout {
.child(new PromotedAttributesWidget())
.child(<SqlTableSchemas />)
.child(new NoteDetailWidget())
.child(new NoteListWidget(false))
.child(<NoteList />)
.child(<SearchResult />)
.child(<SqlResults />)
.child(<ScrollPadding />)

View File

@@ -27,10 +27,10 @@ import FlexContainer from "../widgets/containers/flex_container.js";
import NoteIconWidget from "../widgets/note_icon";
import PromotedAttributesWidget from "../widgets/promoted_attributes.js";
import NoteDetailWidget from "../widgets/note_detail.js";
import NoteListWidget from "../widgets/note_list.js";
import CallToActionDialog from "../widgets/dialogs/call_to_action.jsx";
import NoteTitleWidget from "../widgets/note_title.jsx";
import { PopupEditorFormattingToolbar } from "../widgets/ribbon/FormattingToolbar.js";
import NoteList from "../widgets/collections/NoteList.jsx";
export function applyModals(rootContainer: RootContainer) {
rootContainer
@@ -66,6 +66,6 @@ export function applyModals(rootContainer: RootContainer) {
.child(<PopupEditorFormattingToolbar />)
.child(new PromotedAttributesWidget())
.child(new NoteDetailWidget())
.child(new NoteListWidget(true)))
.child(<NoteList displayOnlyCollections />))
.child(<CallToActionDialog />);
}

View File

@@ -5,7 +5,6 @@ import QuickSearchWidget from "../widgets/quick_search.js";
import NoteTreeWidget from "../widgets/note_tree.js";
import ScreenContainer from "../widgets/mobile_widgets/screen_container.js";
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
import NoteListWidget from "../widgets/note_list.js";
import GlobalMenuWidget from "../widgets/buttons/global_menu.js";
import LauncherContainer from "../widgets/containers/launcher_container.js";
import RootContainer from "../widgets/containers/root_container.js";
@@ -22,7 +21,9 @@ import FloatingButtons from "../widgets/FloatingButtons.jsx";
import { MOBILE_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx";
import ToggleSidebarButton from "../widgets/mobile_widgets/toggle_sidebar_button.jsx";
import CloseZenModeButton from "../widgets/close_zen_button.js";
import NoteWrapperWidget from "../widgets/note_wrapper.js";
import MobileDetailMenu from "../widgets/mobile_widgets/mobile_detail_menu.js";
import NoteList from "../widgets/collections/NoteList.jsx";
const MOBILE_CSS = `
<style>
@@ -131,30 +132,33 @@ export default class MobileLayout {
.child(new FlexContainer("column").filling().id("mobile-sidebar-wrapper").child(new QuickSearchWidget()).child(new NoteTreeWidget().cssBlock(FANCYTREE_CSS)))
)
.child(
new ScreenContainer("detail", "column")
new ScreenContainer("detail", "row")
.id("detail-container")
.class("d-sm-flex d-md-flex d-lg-flex d-xl-flex col-12 col-sm-7 col-md-8 col-lg-9")
.child(
new FlexContainer("row")
.contentSized()
.css("font-size", "larger")
.css("align-items", "center")
.child(<ToggleSidebarButton />)
.child(<NoteTitleWidget />)
.child(<MobileDetailMenu />)
new NoteWrapperWidget()
.child(
new FlexContainer("row")
.contentSized()
.css("font-size", "larger")
.css("align-items", "center")
.child(<ToggleSidebarButton />)
.child(<NoteTitleWidget />)
.child(<MobileDetailMenu />)
)
.child(<SharedInfoWidget />)
.child(<FloatingButtons items={MOBILE_FLOATING_BUTTONS} />)
.child(new PromotedAttributesWidget())
.child(
new ScrollingContainer()
.filling()
.contentSized()
.child(new NoteDetailWidget())
.child(<NoteList />)
.child(<FilePropertiesWrapper />)
)
.child(<MobileEditorToolbar />)
)
.child(<SharedInfoWidget />)
.child(<FloatingButtons items={MOBILE_FLOATING_BUTTONS} />)
.child(new PromotedAttributesWidget())
.child(
new ScrollingContainer()
.filling()
.contentSized()
.child(new NoteDetailWidget())
.child(new NoteListWidget(false))
.child(<FilePropertiesWrapper />)
)
.child(<MobileEditorToolbar />)
)
)
.child(
@@ -183,4 +187,4 @@ function FilePropertiesWrapper() {
{note?.type === "file" && <FilePropertiesTab note={note} />}
</div>
);
}
}

View File

@@ -1,4 +1,4 @@
import "./stylesheets/bootstrap.scss";
import "bootstrap/dist/css/bootstrap.min.css";
// @ts-ignore - module = undefined
// Required for correct loading of scripts in Electron

View File

@@ -1,6 +1,8 @@
import keyboardActionService from "../services/keyboard_actions.js";
import { KeyboardActionNames } from "@triliumnext/commons";
import keyboardActionService, { getActionSync } from "../services/keyboard_actions.js";
import note_tooltip from "../services/note_tooltip.js";
import utils from "../services/utils.js";
import { should } from "vitest";
export interface ContextMenuOptions<T> {
x: number;
@@ -13,8 +15,13 @@ export interface ContextMenuOptions<T> {
onHide?: () => void;
}
interface MenuSeparatorItem {
title: "----";
export interface MenuSeparatorItem {
kind: "separator";
}
export interface MenuHeader {
title: string;
kind: "header";
}
export interface MenuItemBadge {
@@ -38,12 +45,13 @@ export interface MenuCommandItem<T> {
handler?: MenuHandler<T>;
items?: MenuItem<T>[] | null;
shortcut?: string;
keyboardShortcut?: KeyboardActionNames;
spellingSuggestion?: string;
checked?: boolean;
columns?: number;
}
export type MenuItem<T> = MenuCommandItem<T> | MenuSeparatorItem;
export type MenuItem<T> = MenuCommandItem<T> | MenuSeparatorItem | MenuHeader;
export type MenuHandler<T> = (item: MenuCommandItem<T>, e: JQuery.MouseDownEvent<HTMLElement, undefined, HTMLElement, HTMLElement>) => void;
export type ContextMenuEvent = PointerEvent | MouseEvent | JQuery.ContextMenuEvent;
@@ -148,14 +156,51 @@ class ContextMenu {
.addClass("show");
}
addItems($parent: JQuery<HTMLElement>, items: MenuItem<any>[]) {
for (const item of items) {
addItems($parent: JQuery<HTMLElement>, items: MenuItem<any>[], multicolumn = false) {
let $group = $parent; // The current group or parent element to which items are being appended
let shouldStartNewGroup = false; // If true, the next item will start a new group
let shouldResetGroup = false; // If true, the next item will be the last one from the group
for (let index = 0; index < items.length; index++) {
const item = items[index];
if (!item) {
continue;
}
if (item.title === "----") {
$parent.append($("<div>").addClass("dropdown-divider"));
// If the current item is a header, start a new group. This group will contain the
// header and the next item that follows the header.
if ("kind" in item && item.kind === "header") {
if (multicolumn && !shouldResetGroup) {
shouldStartNewGroup = true;
}
}
// If the next item is a separator, start a new group. This group will contain the
// current item, the separator, and the next item after the separator.
const nextItem = (index < items.length - 1) ? items[index + 1] : null;
if (multicolumn && nextItem && "kind" in nextItem && nextItem.kind === "separator") {
if (!shouldResetGroup) {
shouldStartNewGroup = true;
} else {
shouldResetGroup = true; // Continue the current group
}
}
// Create a new group to avoid column breaks before and after the seaparator / header.
// This is a workaround for Firefox not supporting break-before / break-after: avoid
// for columns.
if (shouldStartNewGroup) {
$group = $("<div class='dropdown-no-break'>");
$parent.append($group);
shouldStartNewGroup = false;
}
if ("kind" in item && item.kind === "separator") {
$group.append($("<div>").addClass("dropdown-divider"));
shouldResetGroup = true; // End the group after the next item
} else if ("kind" in item && item.kind === "header") {
$group.append($("<h6>").addClass("dropdown-header").text(item.title));
shouldResetGroup = true;
} else {
const $icon = $("<span>");
@@ -185,7 +230,23 @@ class ContextMenu {
}
}
if ("shortcut" in item && item.shortcut) {
if ("keyboardShortcut" in item && item.keyboardShortcut) {
const shortcuts = getActionSync(item.keyboardShortcut).effectiveShortcuts;
if (shortcuts) {
const allShortcuts: string[] = [];
for (const effectiveShortcut of shortcuts) {
allShortcuts.push(effectiveShortcut.split("+")
.map(key => `<kbd>${key}</kbd>`)
.join("+"));
}
if (allShortcuts.length) {
const container = $("<span>").addClass("keyboard-shortcut");
container.append($(allShortcuts.join(",")));
$link.append(container);
}
}
} else if ("shortcut" in item && item.shortcut) {
$link.append($("<kbd>").text(item.shortcut));
}
@@ -241,16 +302,24 @@ class ContextMenu {
$link.addClass("dropdown-toggle");
const $subMenu = $("<ul>").addClass("dropdown-menu");
if (!this.isMobile && item.columns) {
$subMenu.css("column-count", item.columns);
const hasColumns = !!item.columns && item.columns > 1;
if (!this.isMobile && hasColumns) {
$subMenu.css("column-count", item.columns!);
}
this.addItems($subMenu, item.items);
this.addItems($subMenu, item.items, hasColumns);
$item.append($subMenu);
}
$parent.append($item);
$group.append($item);
// After adding a menu item, if the previous item was a separator or header,
// reset the group so that the next item will be appended directly to the parent.
if (shouldResetGroup) {
$group = $parent;
shouldResetGroup = false;
};
}
}
}

View File

@@ -37,7 +37,7 @@ function setupContextMenu() {
handler: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord)
});
items.push({ title: `----` });
items.push({ kind: "separator" });
}
if (params.isEditable) {
@@ -112,7 +112,7 @@ function setupContextMenu() {
// Replace the placeholder with the real search keyword.
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
items.push({ title: "----" });
items.push({ kind: "separator" });
items.push({
title: t("electron_context_menu.search_online", { term: shortenedSelection, searchEngine: searchEngineName }),

View File

@@ -45,16 +45,16 @@ export default class LauncherContextMenu implements SelectMenuItemEventListener<
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-script-launcher"), command: "addScriptLauncher", uiIcon: "bx bx-code-curly" } : null,
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-custom-widget"), command: "addWidgetLauncher", uiIcon: "bx bx-customize" } : null,
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-spacer"), command: "addSpacerLauncher", uiIcon: "bx bx-dots-horizontal" } : null,
isVisibleRoot || isAvailableRoot ? { title: "----" } : null,
isVisibleRoot || isAvailableRoot ? { kind: "separator" } : null,
isAvailableItem ? { title: t("launcher_context_menu.move-to-visible-launchers"), command: "moveLauncherToVisible", uiIcon: "bx bx-show", enabled: true } : null,
isVisibleItem ? { title: t("launcher_context_menu.move-to-available-launchers"), command: "moveLauncherToAvailable", uiIcon: "bx bx-hide", enabled: true } : null,
isVisibleItem || isAvailableItem ? { title: "----" } : null,
isVisibleItem || isAvailableItem ? { kind: "separator" } : null,
{ title: `${t("launcher_context_menu.duplicate-launcher")}`, command: "duplicateSubtree", uiIcon: "bx bx-outline", enabled: isItem },
{ title: `${t("launcher_context_menu.delete")}`, command: "deleteNotes", uiIcon: "bx bx-trash destructive-action-icon", enabled: canBeDeleted },
{ title: "----" },
{ kind: "separator" },
{ title: t("launcher_context_menu.reset"), command: "resetLauncher", uiIcon: "bx bx-reset destructive-action-icon", enabled: canBeReset }
];

View File

@@ -13,6 +13,8 @@ import type NoteTreeWidget from "../widgets/note_tree.js";
import type FAttachment from "../entities/fattachment.js";
import type { SelectMenuItemEventListener } from "../components/events.js";
import utils from "../services/utils.js";
import attributes from "../services/attributes.js";
import { executeBulkActions } from "../services/bulk_action.js";
// TODO: Deduplicate once client/server is well split.
interface ConvertToAttachmentResponse {
@@ -61,6 +63,11 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
// the only exception is when the only selected note is the one that was right-clicked, then
// it's clear what the user meant to do.
const selNodes = this.treeWidget.getSelectedNodes();
const selectedNotes = await froca.getNotes(selNodes.map(node => node.data.noteId));
if (note && !selectedNotes.includes(note)) selectedNotes.push(note);
const isArchived = selectedNotes.every(note => note.isArchived);
const canToggleArchived = !selectedNotes.some(note => note.isArchived !== isArchived);
const noSelectedNotes = selNodes.length === 0 || (selNodes.length === 1 && selNodes[0] === this.node);
const notSearch = note?.type !== "search";
@@ -69,27 +76,29 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
const insertNoteAfterEnabled = isNotRoot && !isHoisted && parentNotSearch;
const items: (MenuItem<TreeCommandNames> | null)[] = [
{ title: `${t("tree-context-menu.open-in-a-new-tab")}`, command: "openInTab", uiIcon: "bx bx-link-external", enabled: noSelectedNotes },
{ 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-popup"), command: "openNoteInPopup", uiIcon: "bx bx-edit", enabled: noSelectedNotes },
isHoisted
? null
: {
title: `${t("tree-context-menu.hoist-note")} <kbd data-command="toggleNoteHoisting"></kbd>`,
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")} <kbd data-command="toggleNoteHoisting"></kbd>`, command: "toggleNoteHoisting", uiIcon: "bx bx-door-open" },
: { title: t("tree-context-menu.unhoist-note"), command: "toggleNoteHoisting", keyboardShortcut: "toggleNoteHoisting", uiIcon: "bx bx-door-open" },
{ title: "----" },
{ kind: "separator" },
{
title: `${t("tree-context-menu.insert-note-after")}<kbd data-command="createNoteAfter"></kbd>`,
title: t("tree-context-menu.insert-note-after"),
command: "insertNoteAfter",
keyboardShortcut: "createNoteAfter",
uiIcon: "bx bx-plus",
items: insertNoteAfterEnabled ? await noteTypesService.getNoteTypeItems("insertNoteAfter") : null,
enabled: insertNoteAfterEnabled && noSelectedNotes && notOptionsOrHelp,
@@ -97,21 +106,22 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
},
{
title: `${t("tree-context-menu.insert-child-note")}<kbd data-command="createNoteInto"></kbd>`,
title: t("tree-context-menu.insert-child-note"),
command: "insertChildNote",
keyboardShortcut: "createNoteInto",
uiIcon: "bx bx-plus",
items: notSearch ? await noteTypesService.getNoteTypeItems("insertChildNote") : null,
enabled: notSearch && noSelectedNotes && notOptionsOrHelp,
columns: 2
},
{ title: "----" },
{ kind: "separator" },
{ title: t("tree-context-menu.protect-subtree"), command: "protectSubtree", uiIcon: "bx bx-check-shield", enabled: noSelectedNotes },
{ title: t("tree-context-menu.unprotect-subtree"), command: "unprotectSubtree", uiIcon: "bx bx-shield", enabled: noSelectedNotes },
{ title: "----" },
{ kind: "separator" },
{
title: t("tree-context-menu.advanced"),
@@ -120,48 +130,52 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
items: [
{ title: t("tree-context-menu.apply-bulk-actions"), command: "openBulkActionsDialog", uiIcon: "bx bx-list-plus", enabled: true },
{ title: "----" },
{ kind: "separator" },
{
title: `${t("tree-context-menu.edit-branch-prefix")} <kbd data-command="editBranchPrefix"></kbd>`,
title: t("tree-context-menu.edit-branch-prefix"),
command: "editBranchPrefix",
keyboardShortcut: "editBranchPrefix",
uiIcon: "bx bx-rename",
enabled: isNotRoot && parentNotSearch && noSelectedNotes && notOptionsOrHelp
},
{ title: t("tree-context-menu.convert-to-attachment"), command: "convertNoteToAttachment", uiIcon: "bx bx-paperclip", enabled: isNotRoot && !isHoisted && notOptionsOrHelp },
{ title: "----" },
{ kind: "separator" },
{ title: `${t("tree-context-menu.expand-subtree")} <kbd data-command="expandSubtree"></kbd>`, command: "expandSubtree", uiIcon: "bx bx-expand", enabled: noSelectedNotes },
{ title: `${t("tree-context-menu.collapse-subtree")} <kbd data-command="collapseSubtree"></kbd>`, command: "collapseSubtree", uiIcon: "bx bx-collapse", enabled: noSelectedNotes },
{ 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 },
{
title: `${t("tree-context-menu.sort-by")} <kbd data-command="sortChildNotes"></kbd>`,
title: t("tree-context-menu.sort-by"),
command: "sortChildNotes",
keyboardShortcut: "sortChildNotes",
uiIcon: "bx bx-sort-down",
enabled: noSelectedNotes && notSearch
},
{ title: "----" },
{ kind: "separator" },
{ 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 }
]
},
{ title: "----" },
{ kind: "separator" },
{
title: `${t("tree-context-menu.cut")} <kbd data-command="cutNotesToClipboard"></kbd>`,
title: t("tree-context-menu.cut"),
command: "cutNotesToClipboard",
keyboardShortcut: "cutNotesToClipboard",
uiIcon: "bx bx-cut",
enabled: isNotRoot && !isHoisted && parentNotSearch
},
{ title: `${t("tree-context-menu.copy-clone")} <kbd data-command="copyNotesToClipboard"></kbd>`, command: "copyNotesToClipboard", uiIcon: "bx bx-copy", enabled: isNotRoot && !isHoisted },
{ title: t("tree-context-menu.copy-clone"), command: "copyNotesToClipboard", keyboardShortcut: "copyNotesToClipboard", uiIcon: "bx bx-copy", enabled: isNotRoot && !isHoisted },
{
title: `${t("tree-context-menu.paste-into")} <kbd data-command="pasteNotesFromClipboard"></kbd>`,
title: t("tree-context-menu.paste-into"),
command: "pasteNotesFromClipboard",
keyboardShortcut: "pasteNotesFromClipboard",
uiIcon: "bx bx-paste",
enabled: !clipboard.isClipboardEmpty() && notSearch && noSelectedNotes
},
@@ -174,39 +188,71 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
},
{
title: `${t("tree-context-menu.move-to")} <kbd data-command="moveNotesTo"></kbd>`,
title: t("tree-context-menu.move-to"),
command: "moveNotesTo",
keyboardShortcut: "moveNotesTo",
uiIcon: "bx bx-transfer",
enabled: isNotRoot && !isHoisted && parentNotSearch
},
{ title: `${t("tree-context-menu.clone-to")} <kbd data-command="cloneNotesTo"></kbd>`, command: "cloneNotesTo", uiIcon: "bx bx-duplicate", enabled: isNotRoot && !isHoisted },
{ title: t("tree-context-menu.clone-to"), command: "cloneNotesTo", keyboardShortcut: "cloneNotesTo", uiIcon: "bx bx-duplicate", enabled: isNotRoot && !isHoisted },
{
title: `${t("tree-context-menu.duplicate")} <kbd data-command="duplicateSubtree">`,
title: t("tree-context-menu.duplicate"),
command: "duplicateSubtree",
keyboardShortcut: "duplicateSubtree",
uiIcon: "bx bx-outline",
enabled: parentNotSearch && isNotRoot && !isHoisted && notOptionsOrHelp
},
{
title: `${t("tree-context-menu.delete")} <kbd data-command="deleteNotes"></kbd>`,
title: !isArchived ? t("tree-context-menu.archive") : t("tree-context-menu.unarchive"),
uiIcon: !isArchived ? "bx bx-archive" : "bx bx-archive-out",
enabled: canToggleArchived,
handler: () => {
if (!selectedNotes.length) return;
if (selectedNotes.length == 1) {
const note = selectedNotes[0];
if (!isArchived) {
attributes.addLabel(note.noteId, "archived");
} else {
attributes.removeOwnedLabelByName(note, "archived");
}
} else {
const noteIds = selectedNotes.map(note => note.noteId);
if (!isArchived) {
executeBulkActions(noteIds, [{
name: "addLabel", labelName: "archived"
}]);
} else {
executeBulkActions(noteIds, [{
name: "deleteLabel", labelName: "archived"
}]);
}
}
}
},
{
title: t("tree-context-menu.delete"),
command: "deleteNotes",
keyboardShortcut: "deleteNotes",
uiIcon: "bx bx-trash destructive-action-icon",
enabled: isNotRoot && !isHoisted && parentNotSearch && notOptionsOrHelp
},
{ title: "----" },
{ kind: "separator" },
{ title: t("tree-context-menu.import-into-note"), command: "importIntoNote", uiIcon: "bx bx-import", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
{ title: t("tree-context-menu.export"), command: "exportNote", uiIcon: "bx bx-export", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
{ title: "----" },
{ kind: "separator" },
{
title: `${t("tree-context-menu.search-in-subtree")} <kbd data-command="searchInSubtree"></kbd>`,
title: t("tree-context-menu.search-in-subtree"),
command: "searchInSubtree",
keyboardShortcut: "searchInSubtree",
uiIcon: "bx bx-search",
enabled: notSearch && noSelectedNotes
}

View File

@@ -1,7 +1,7 @@
import appContext from "./components/app_context.js";
import noteAutocompleteService from "./services/note_autocomplete.js";
import glob from "./services/glob.js";
import "./stylesheets/bootstrap.scss";
import "bootstrap/dist/css/bootstrap.min.css";
import "boxicons/css/boxicons.min.css";
import "autocomplete.js/index_jquery.js";

View File

@@ -210,7 +210,7 @@ function makeToast(id: string, message: string): ToastOptions {
}
ws.subscribeToMessages(async (message) => {
if (message.taskType !== "deleteNotes") {
if (!("taskType" in message) || message.taskType !== "deleteNotes") {
return;
}
@@ -228,7 +228,7 @@ ws.subscribeToMessages(async (message) => {
});
ws.subscribeToMessages(async (message) => {
if (message.taskType !== "undeleteNotes") {
if (!("taskType" in message) || message.taskType !== "undeleteNotes") {
return;
}

View File

@@ -256,8 +256,19 @@ function renderFile(entity: FNote | FAttachment, type: string, $renderedContent:
</button>
`);
$downloadButton.on("click", () => openService.downloadFileNote(entity.noteId));
$openButton.on("click", () => openService.openNoteExternally(entity.noteId, entity.mime));
$downloadButton.on("click", (e) => {
e.stopPropagation();
openService.downloadFileNote(entity.noteId)
});
$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)
iconEl.removeClass("bx bx-loader spin");
iconEl.addClass("bx bx-link-external");
});
// open doesn't work for protected notes since it works through a browser which isn't in protected session
$openButton.toggle(!entity.isProtected);

View File

@@ -60,7 +60,7 @@ async function confirmDeleteNoteBoxWithNote(title: string) {
return new Promise<ConfirmDialogResult | undefined>((res) => appContext.triggerCommand("showConfirmDeleteNoteBoxWithNoteDialog", { title, callback: res }));
}
async function prompt(props: PromptDialogOptions) {
export async function prompt(props: PromptDialogOptions) {
return new Promise<string | null>((res) => appContext.triggerCommand("showPromptDialog", { ...props, callback: res }));
}

View File

@@ -48,6 +48,6 @@ function getUrl(docNameValue: string, language: string) {
// Cannot have spaces in the URL due to how JQuery.load works.
docNameValue = docNameValue.replaceAll(" ", "%20");
const basePath = window.glob.isDev ? new URL(window.glob.assetPath).pathname : window.glob.assetPath;
const basePath = window.glob.isDev ? window.glob.assetPath + "/.." : window.glob.assetPath;
return `${basePath}/doc_notes/${language}/${docNameValue}.html`;
}

View File

@@ -1,16 +1,8 @@
import ws from "./ws.js";
import appContext from "../components/app_context.js";
import { OpenedFileUpdateStatus } from "@triliumnext/commons";
// TODO: Deduplicate
interface Message {
type: string;
entityType: string;
entityId: string;
lastModifiedMs: number;
filePath: string;
}
const fileModificationStatus: Record<string, Record<string, Message>> = {
const fileModificationStatus: Record<string, Record<string, OpenedFileUpdateStatus>> = {
notes: {},
attachments: {}
};
@@ -39,7 +31,7 @@ function ignoreModification(entityType: string, entityId: string) {
delete fileModificationStatus[entityType][entityId];
}
ws.subscribeToMessages(async (message: Message) => {
ws.subscribeToMessages(async message => {
if (message.type !== "openedFileUpdated") {
return;
}

View File

@@ -8,6 +8,7 @@ import FAttribute, { type FAttributeRow } from "../entities/fattribute.js";
import FAttachment, { type FAttachmentRow } from "../entities/fattachment.js";
import type { default as FNote, FNoteRow } from "../entities/fnote.js";
import type { EntityChange } from "../server_types.js";
import type { OptionNames } from "@triliumnext/commons";
async function processEntityChanges(entityChanges: EntityChange[]) {
const loadResults = new LoadResults(entityChanges);
@@ -30,9 +31,8 @@ async function processEntityChanges(entityChanges: EntityChange[]) {
continue; // only noise
}
options.set(attributeEntity.name, attributeEntity.value);
loadResults.addOption(attributeEntity.name);
options.set(attributeEntity.name as OptionNames, attributeEntity.value);
loadResults.addOption(attributeEntity.name as OptionNames);
} else if (ec.entityName === "attachments") {
processAttachment(loadResults, ec);
} else if (ec.entityName === "blobs") {

View File

@@ -21,6 +21,7 @@ import dayjs from "dayjs";
import type NoteContext from "../components/note_context.js";
import type NoteDetailWidget from "../widgets/note_detail.js";
import type Component from "../components/component.js";
import { formatLogMessage } from "@triliumnext/commons";
/**
* A whole number
@@ -455,7 +456,7 @@ export interface Api {
/**
* Log given message to the log pane in UI
*/
log(message: string): void;
log(message: string | object): void;
}
/**
@@ -696,7 +697,7 @@ function FrontendScriptApi(this: Api, startNote: FNote, currentNote: FNote, orig
this.log = (message) => {
const { noteId } = this.startNote;
message = `${utils.now()}: ${message}`;
message = `${utils.now()}: ${formatLogMessage(message)}`;
console.log(`Script ${noteId}: ${message}`);

View File

@@ -4,6 +4,7 @@ import ws from "./ws.js";
import utils from "./utils.js";
import appContext from "../components/app_context.js";
import { t } from "./i18n.js";
import { WebSocketMessage } from "@triliumnext/commons";
type BooleanLike = boolean | "true" | "false";
@@ -66,7 +67,7 @@ function makeToast(id: string, message: string): ToastOptions {
}
ws.subscribeToMessages(async (message) => {
if (message.taskType !== "importNotes") {
if (!("taskType" in message) || message.taskType !== "importNotes") {
return;
}
@@ -87,8 +88,8 @@ ws.subscribeToMessages(async (message) => {
}
});
ws.subscribeToMessages(async (message) => {
if (message.taskType !== "importAttachments") {
ws.subscribeToMessages(async (message: WebSocketMessage) => {
if (!("taskType" in message) || message.taskType !== "importAttachments") {
return;
}

View File

@@ -1,6 +1,6 @@
import { NoteType } from "@triliumnext/commons";
import { ViewTypeOptions } from "./note_list_renderer";
import FNote from "../entities/fnote";
import { ViewTypeOptions } from "../widgets/collections/interface";
export const byNoteType: Record<Exclude<NoteType, "book">, string | null> = {
canvas: null,

View File

@@ -35,8 +35,7 @@ async function getLinkIcon(noteId: string, viewMode: ViewMode | undefined) {
return icon;
}
// TODO: Remove `string` once all the view modes have been mapped.
type ViewMode = "default" | "source" | "attachments" | "contextual-help" | string;
export type ViewMode = "default" | "source" | "attachments" | "contextual-help";
export interface ViewScope {
/**

View File

@@ -1,4 +1,4 @@
import type { AttachmentRow, EtapiTokenRow } from "@triliumnext/commons";
import type { AttachmentRow, EtapiTokenRow, OptionNames } from "@triliumnext/commons";
import type { AttributeType } from "../entities/fattribute.js";
import type { EntityChange } from "../server_types.js";
@@ -67,7 +67,7 @@ export default class LoadResults {
private revisionRows: RevisionRow[];
private noteReorderings: string[];
private contentNoteIdToComponentId: ContentNoteIdToComponentIdRow[];
private optionNames: string[];
private optionNames: OptionNames[];
private attachmentRows: AttachmentRow[];
public hasEtapiTokenChanges: boolean = false;
@@ -180,11 +180,11 @@ export default class LoadResults {
return this.contentNoteIdToComponentId.find((l) => l.noteId === noteId && l.componentId !== componentId);
}
addOption(name: string) {
addOption(name: OptionNames) {
this.optionNames.push(name);
}
isOptionReloaded(name: string) {
isOptionReloaded(name: OptionNames) {
return this.optionNames.includes(name);
}

View File

@@ -1,71 +0,0 @@
import type FNote from "../entities/fnote.js";
import BoardView from "../widgets/view_widgets/board_view/index.js";
import CalendarView from "../widgets/view_widgets/calendar_view.js";
import GeoView from "../widgets/view_widgets/geo_view/index.js";
import ListOrGridView from "../widgets/view_widgets/list_or_grid_view.js";
import TableView from "../widgets/view_widgets/table_view/index.js";
import type { ViewModeArgs } from "../widgets/view_widgets/view_mode.js";
import type ViewMode from "../widgets/view_widgets/view_mode.js";
const allViewTypes = ["list", "grid", "calendar", "table", "geoMap", "board"] as const;
export type ArgsWithoutNoteId = Omit<ViewModeArgs, "noteIds">;
export type ViewTypeOptions = typeof allViewTypes[number];
export default class NoteListRenderer {
private viewType: ViewTypeOptions;
private args: ArgsWithoutNoteId;
public viewMode?: ViewMode<any>;
constructor(args: ArgsWithoutNoteId) {
this.args = args;
this.viewType = this.#getViewType(args.parentNote);
}
#getViewType(parentNote: FNote): ViewTypeOptions {
const viewType = parentNote.getLabelValue("viewType");
if (!(allViewTypes as readonly string[]).includes(viewType || "")) {
// when not explicitly set, decide based on the note type
return parentNote.type === "search" ? "list" : "grid";
} else {
return viewType as ViewTypeOptions;
}
}
get isFullHeight() {
switch (this.viewType) {
case "list":
case "grid":
return false;
default:
return true;
}
}
async renderList() {
const args = this.args;
const viewMode = this.#buildViewMode(args);
this.viewMode = viewMode;
await viewMode.beforeRender();
return await viewMode.renderList();
}
#buildViewMode(args: ViewModeArgs) {
switch (this.viewType) {
case "calendar":
return new CalendarView(args);
case "table":
return new TableView(args);
case "geoMap":
return new GeoView(args);
case "board":
return new BoardView(args);
case "list":
case "grid":
default:
return new ListOrGridView(this.viewType, args);
}
}
}

View File

@@ -1,7 +1,7 @@
import { t } from "./i18n.js";
import froca from "./froca.js";
import server from "./server.js";
import type { MenuCommandItem, MenuItem, MenuItemBadge } from "../menus/context_menu.js";
import type { MenuCommandItem, MenuItem, MenuItemBadge, MenuSeparatorItem } from "../menus/context_menu.js";
import type { NoteType } from "../entities/fnote.js";
import type { TreeCommandNames } from "../menus/tree_context_menu.js";
@@ -73,7 +73,7 @@ const BETA_BADGE = {
title: t("note_types.beta-feature")
};
const SEPARATOR = { title: "----" };
const SEPARATOR: MenuSeparatorItem = { kind: "separator" };
const creationDateCache = new Map<string, Date>();
let rootCreationDate: Date | undefined;
@@ -81,8 +81,8 @@ let rootCreationDate: Date | undefined;
async function getNoteTypeItems(command?: TreeCommandNames) {
const items: MenuItem<TreeCommandNames>[] = [
...getBlankNoteTypes(command),
...await getBuiltInTemplates(t("note_types.collections"), command, true),
...await getBuiltInTemplates(null, command, false),
...await getBuiltInTemplates(t("note_types.collections"), command, true),
...await getUserTemplates(command)
];
@@ -121,7 +121,10 @@ async function getUserTemplates(command?: TreeCommandNames) {
}
const items: MenuItem<TreeCommandNames>[] = [
SEPARATOR
{
title: t("note_type_chooser.templates"),
kind: "header"
}
];
for (const templateNote of templateNotes) {
@@ -158,8 +161,7 @@ async function getBuiltInTemplates(title: string | null, command: TreeCommandNam
if (title) {
items.push({
title: title,
enabled: false,
uiIcon: "bx bx-empty"
kind: "header"
});
} else {
items.push(SEPARATOR);

View File

@@ -20,7 +20,7 @@ class Options {
this.arr = arr;
}
get(key: string) {
get(key: OptionNames) {
return this.arr?.[key] as string;
}
@@ -40,7 +40,7 @@ class Options {
}
}
getInt(key: string) {
getInt(key: OptionNames) {
const value = this.arr?.[key];
if (typeof value === "number") {
return value;
@@ -52,7 +52,7 @@ class Options {
return null;
}
getFloat(key: string) {
getFloat(key: OptionNames) {
const value = this.arr?.[key];
if (typeof value !== "string") {
return null;
@@ -60,15 +60,15 @@ class Options {
return parseFloat(value);
}
is(key: string) {
is(key: OptionNames) {
return this.arr[key] === "true";
}
set(key: string, value: OptionValue) {
set(key: OptionNames, value: OptionValue) {
this.arr[key] = value;
}
async save(key: string, value: OptionValue) {
async save(key: OptionNames, value: OptionValue) {
this.set(key, value);
const payload: Record<string, OptionValue> = {};
@@ -85,7 +85,7 @@ class Options {
await server.put<void>("options", newValues);
}
async toggle(key: string) {
async toggle(key: OptionNames) {
await this.save(key, (!this.is(key)).toString());
}
}

View File

@@ -107,11 +107,11 @@ function makeToast(message: Message, title: string, text: string): ToastOptions
}
ws.subscribeToMessages(async (message) => {
if (message.taskType !== "protectNotes") {
if (!("taskType" in message) || message.taskType !== "protectNotes") {
return;
}
const isProtecting = message.data.protect;
const isProtecting = message.data?.protect;
const title = isProtecting ? t("protected_session.protecting-title") : t("protected_session.unprotecting-title");
if (message.type === "taskError") {

View File

@@ -10,6 +10,10 @@ let leftInstance: ReturnType<typeof Split> | null;
let rightPaneWidth: number;
let rightInstance: ReturnType<typeof Split> | null;
const noteSplitMap = new Map<string[], ReturnType<typeof Split> | undefined>(); // key: a group of ntxIds, value: the corresponding Split instance
const noteSplitRafMap = new Map<string[], number>();
let splitNoteContainer: HTMLElement | undefined;
function setupLeftPaneResizer(leftPaneVisible: boolean) {
if (leftInstance) {
leftInstance.destroy();
@@ -83,7 +87,86 @@ function setupRightPaneResizer() {
}
}
function findKeyByNtxId(ntxId: string): string[] | undefined {
// Find the corresponding key in noteSplitMap based on ntxId
for (const key of noteSplitMap.keys()) {
if (key.includes(ntxId)) return key;
}
return undefined;
}
function setupNoteSplitResizer(ntxIds: string[]) {
let targetNtxIds: string[] | undefined;
for (const ntxId of ntxIds) {
targetNtxIds = findKeyByNtxId(ntxId);
if (targetNtxIds) break;
}
if (targetNtxIds) {
noteSplitMap.get(targetNtxIds)?.destroy();
for (const id of ntxIds) {
if (!targetNtxIds.includes(id)) {
targetNtxIds.push(id)
};
}
} else {
targetNtxIds = [...ntxIds];
}
noteSplitMap.set(targetNtxIds, undefined);
createSplitInstance(targetNtxIds);
}
function delNoteSplitResizer(ntxIds: string[]) {
let targetNtxIds = findKeyByNtxId(ntxIds[0]);
if (!targetNtxIds) {
return;
}
noteSplitMap.get(targetNtxIds)?.destroy();
noteSplitMap.delete(targetNtxIds);
targetNtxIds = targetNtxIds.filter(id => !ntxIds.includes(id));
if (targetNtxIds.length >= 2) {
noteSplitMap.set(targetNtxIds, undefined);
createSplitInstance(targetNtxIds);
}
}
function moveNoteSplitResizer(ntxId: string) {
const targetNtxIds = findKeyByNtxId(ntxId);
if (!targetNtxIds) {
return;
}
noteSplitMap.get(targetNtxIds)?.destroy();
noteSplitMap.set(targetNtxIds, undefined);
createSplitInstance(targetNtxIds);
}
function createSplitInstance(targetNtxIds: string[]) {
const prevRafId = noteSplitRafMap.get(targetNtxIds);
if (prevRafId) {
cancelAnimationFrame(prevRafId);
}
const rafId = requestAnimationFrame(() => {
splitNoteContainer = splitNoteContainer ?? $("#center-pane").find(".split-note-container-widget")[0];
const splitPanels = [...splitNoteContainer.querySelectorAll<HTMLElement>(':scope > .note-split')]
.filter(el => targetNtxIds.includes(el.getAttribute('data-ntx-id') ?? ""));
const splitInstance = Split(splitPanels, {
gutterSize: DEFAULT_GUTTER_SIZE,
minSize: 150,
});
noteSplitMap.set(targetNtxIds, splitInstance);
noteSplitRafMap.delete(targetNtxIds);
});
noteSplitRafMap.set(targetNtxIds, rafId);
}
export default {
setupLeftPaneResizer,
setupRightPaneResizer
setupRightPaneResizer,
setupNoteSplitResizer,
delNoteSplitResizer,
moveNoteSplitResizer
};

View File

@@ -1,5 +1,5 @@
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
import shortcuts, { keyMatches, matchesShortcut } from "./shortcuts.js";
import shortcuts, { keyMatches, matchesShortcut, isIMEComposing } from "./shortcuts.js";
// Mock utils module
vi.mock("./utils.js", () => ({
@@ -119,11 +119,6 @@ describe("shortcuts", () => {
metaKey: options.metaKey || false
} as KeyboardEvent);
it("should match simple key shortcuts", () => {
const event = createKeyboardEvent({ key: "a", code: "KeyA" });
expect(matchesShortcut(event, "a")).toBe(true);
});
it("should match shortcuts with modifiers", () => {
const event = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
expect(matchesShortcut(event, "ctrl+a")).toBe(true);
@@ -148,6 +143,28 @@ describe("shortcuts", () => {
expect(matchesShortcut(event, "a")).toBe(false);
});
it("should not match when no modifiers are used", () => {
const event = createKeyboardEvent({ key: "a", code: "KeyA" });
expect(matchesShortcut(event, "a")).toBe(false);
});
it("should match some keys even with no modifiers", () => {
// Bare function keys
let event = createKeyboardEvent({ key: "F1", code: "F1" });
expect(matchesShortcut(event, "F1")).toBeTruthy();
expect(matchesShortcut(event, "f1")).toBeTruthy();
// Function keys with shift
event = createKeyboardEvent({ key: "F1", code: "F1", shiftKey: true });
expect(matchesShortcut(event, "Shift+F1")).toBeTruthy();
// Special keys
for (const keyCode of [ "Delete", "Enter" ]) {
event = createKeyboardEvent({ key: keyCode, code: keyCode });
expect(matchesShortcut(event, keyCode), `Key ${keyCode}`).toBeTruthy();
}
});
it("should handle alternative modifier names", () => {
const ctrlEvent = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
expect(matchesShortcut(ctrlEvent, "control+a")).toBe(true);
@@ -320,4 +337,36 @@ describe("shortcuts", () => {
expect(event.preventDefault).not.toHaveBeenCalled();
});
});
describe('isIMEComposing', () => {
it('should return true when event.isComposing is true', () => {
const event = { isComposing: true, keyCode: 65 } as KeyboardEvent;
expect(isIMEComposing(event)).toBe(true);
});
it('should return true when keyCode is 229', () => {
const event = { isComposing: false, keyCode: 229 } as KeyboardEvent;
expect(isIMEComposing(event)).toBe(true);
});
it('should return true when both isComposing is true and keyCode is 229', () => {
const event = { isComposing: true, keyCode: 229 } as KeyboardEvent;
expect(isIMEComposing(event)).toBe(true);
});
it('should return false for normal keys', () => {
const event = { isComposing: false, keyCode: 65 } as KeyboardEvent;
expect(isIMEComposing(event)).toBe(false);
});
it('should return false when isComposing is undefined and keyCode is not 229', () => {
const event = { keyCode: 13 } as KeyboardEvent;
expect(isIMEComposing(event)).toBe(false);
});
it('should handle null/undefined events gracefully', () => {
expect(isIMEComposing(null as any)).toBe(false);
expect(isIMEComposing(undefined as any)).toBe(false);
});
});
});

View File

@@ -36,8 +36,35 @@ const keyMap: { [key: string]: string[] } = {
};
// Function keys
const functionKeyCodes: string[] = [];
for (let i = 1; i <= 19; i++) {
keyMap[`f${i}`] = [`F${i}`];
const keyCode = `F${i}`;
functionKeyCodes.push(keyCode);
keyMap[`f${i}`] = [ keyCode ];
}
const KEYCODES_WITH_NO_MODIFIER = new Set([
"Delete",
"Enter",
...functionKeyCodes
]);
/**
* Check if IME (Input Method Editor) is composing
* This is used to prevent keyboard shortcuts from firing during IME composition
* @param e - The keyboard event to check
* @returns true if IME is currently composing, false otherwise
*/
export function isIMEComposing(e: KeyboardEvent): boolean {
// Handle null/undefined events gracefully
if (!e) {
return false;
}
// Standard check for composition state
// e.isComposing is true when IME is actively composing
// e.keyCode === 229 is a fallback for older browsers where 229 indicates IME processing
return e.isComposing || e.keyCode === 229;
}
function removeGlobalShortcut(namespace: string) {
@@ -68,6 +95,13 @@ function bindElShortcut($el: JQuery<ElementType | Element>, keyboardShortcut: st
}
const e = evt as KeyboardEvent;
// Skip processing if IME is composing to prevent shortcuts from
// interfering with text input in CJK languages
if (isIMEComposing(e)) {
return;
}
if (matchesShortcut(e, keyboardShortcut)) {
e.preventDefault();
e.stopPropagation();
@@ -137,6 +171,12 @@ export function matchesShortcut(e: KeyboardEvent, shortcut: string): boolean {
const expectedShift = modifiers.includes('shift');
const expectedMeta = modifiers.includes('meta') || modifiers.includes('cmd') || modifiers.includes('command');
// Refuse key combinations that don't include modifiers because they interfere with the normal usage of the application.
// Some keys such as function keys are an exception.
if (!(expectedCtrl || expectedAlt || expectedShift || expectedMeta) && !KEYCODES_WITH_NO_MODIFIER.has(e.code)) {
return false;
}
return e.ctrlKey === expectedCtrl &&
e.altKey === expectedAlt &&
e.shiftKey === expectedShift &&

View File

@@ -1,10 +1,9 @@
import ws from "./ws.js";
import utils from "./utils.js";
export interface ToastOptions {
id?: string;
icon: string;
title: string;
title?: string;
message: string;
delay?: number;
autohide?: boolean;
@@ -12,20 +11,32 @@ export interface ToastOptions {
}
function toast(options: ToastOptions) {
const $toast = $(
`<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<strong class="me-auto">
const $toast = $(options.title
? `\
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<strong class="me-auto">
<span class="bx bx-${options.icon}"></span>
<span class="toast-title"></span>
</strong>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body"></div>
</div>`
: `
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-icon">
<span class="bx bx-${options.icon}"></span>
<span class="toast-title"></span>
</strong>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body"></div>
</div>`
</div>
<div class="toast-body"></div>
<div class="toast-header">
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>`
);
$toast.find(".toast-title").text(options.title);
$toast.toggleClass("no-title", !options.title);
$toast.find(".toast-title").text(options.title ?? "");
$toast.find(".toast-body").html(options.message);
if (options.id) {
@@ -70,7 +81,6 @@ function showMessage(message: string, delay = 2000) {
console.debug(utils.now(), "message:", message);
toast({
title: "Info",
icon: "check",
message: message,
autohide: true,
@@ -82,7 +92,6 @@ export function showError(message: string, delay = 10000) {
console.log(utils.now(), "error: ", message);
toast({
title: "Error",
icon: "alert",
message: message,
autohide: true,

View File

@@ -47,27 +47,6 @@ function parseDate(str: string) {
}
}
// Source: https://stackoverflow.com/a/30465299/4898894
function getMonthsInDateRange(startDate: string, endDate: string) {
const start = startDate.split("-");
const end = endDate.split("-");
const startYear = parseInt(start[0]);
const endYear = parseInt(end[0]);
const dates: string[] = [];
for (let i = startYear; i <= endYear; i++) {
const endMonth = i != endYear ? 11 : parseInt(end[1]) - 1;
const startMon = i === startYear ? parseInt(start[1]) - 1 : 0;
for (let j = startMon; j <= endMonth; j = j > 12 ? j % 12 || 11 : j + 1) {
const month = j + 1;
const displayMonth = month < 10 ? "0" + month : month;
dates.push([i, displayMonth].join("-"));
}
}
return dates;
}
function padNum(num: number) {
return `${num <= 9 ? "0" : ""}${num}`;
}
@@ -149,6 +128,18 @@ export function isElectron() {
return !!(window && window.process && window.process.type);
}
/**
* Returns `true` if the client is running as a PWA, otherwise `false`.
*/
export function isPWA() {
return (
window.matchMedia('(display-mode: standalone)').matches
|| window.matchMedia('(display-mode: window-controls-overlay)').matches
|| window.navigator.standalone
|| window.navigator.windowControlsOverlay
);
}
export function isMac() {
return navigator.platform.indexOf("Mac") > -1;
}
@@ -297,6 +288,54 @@ function isHtmlEmpty(html: string) {
);
}
function formatHtml(html: string) {
let indent = "\n";
const tab = "\t";
let i = 0;
let pre: { indent: string; tag: string }[] = [];
html = html
.replace(new RegExp("<pre>([\\s\\S]+?)?</pre>"), function (x) {
pre.push({ indent: "", tag: x });
return "<--TEMPPRE" + i++ + "/-->";
})
.replace(new RegExp("<[^<>]+>[^<]?", "g"), function (x) {
let ret;
const tagRegEx = /<\/?([^\s/>]+)/.exec(x);
let tag = tagRegEx ? tagRegEx[1] : "";
let p = new RegExp("<--TEMPPRE(\\d+)/-->").exec(x);
if (p) {
const pInd = parseInt(p[1]);
pre[pInd].indent = indent;
}
if (["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source", "track", "wbr"].indexOf(tag) >= 0) {
// self closing tag
ret = indent + x;
} else {
if (x.indexOf("</") < 0) {
//open tag
if (x.charAt(x.length - 1) !== ">") ret = indent + x.substr(0, x.length - 1) + indent + tab + x.substr(x.length - 1, x.length);
else ret = indent + x;
!p && (indent += tab);
} else {
//close tag
indent = indent.substr(0, indent.length - 1);
if (x.charAt(x.length - 1) !== ">") ret = indent + x.substr(0, x.length - 1) + indent + x.substr(x.length - 1, x.length);
else ret = indent + x;
}
}
return ret;
});
for (i = pre.length; i--;) {
html = html.replace("<--TEMPPRE" + i + "/-->", pre[i].tag.replace("<pre>", "<pre>\n").replace("</pre>", pre[i].indent + "</pre>"));
}
return html.charAt(0) === "\n" ? html.substr(1, html.length - 1) : html;
}
export async function clearBrowserCache() {
if (isElectron()) {
const win = dynamicRequire("@electron/remote").getCurrentWindow();
@@ -448,7 +487,7 @@ function sleep(time_ms: number) {
});
}
function escapeRegExp(str: string) {
export function escapeRegExp(str: string) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
@@ -835,7 +874,6 @@ export default {
restartDesktopApp,
reloadTray,
parseDate,
getMonthsInDateRange,
formatDateISO,
formatDateTime,
formatTimeInterval,
@@ -843,6 +881,7 @@ export default {
localNowDateTime,
now,
isElectron,
isPWA,
isMac,
isCtrlKey,
assertArguments,
@@ -855,6 +894,7 @@ export default {
getNoteTypeClass,
getMimeTypeClass,
isHtmlEmpty,
formatHtml,
clearBrowserCache,
copySelectionToClipboard,
dynamicRequire,

View File

@@ -6,9 +6,11 @@ import frocaUpdater from "./froca_updater.js";
import appContext from "../components/app_context.js";
import { t } from "./i18n.js";
import type { EntityChange } from "../server_types.js";
import { WebSocketMessage } from "@triliumnext/commons";
import toast from "./toast.js";
type MessageHandler = (message: any) => void;
const messageHandlers: MessageHandler[] = [];
type MessageHandler = (message: WebSocketMessage) => void;
let messageHandlers: MessageHandler[] = [];
let ws: WebSocket;
let lastAcceptedEntityChangeId = window.glob.maxEntityChangeIdAtLoad;
@@ -47,10 +49,14 @@ function logInfo(message: string) {
window.logError = logError;
window.logInfo = logInfo;
function subscribeToMessages(messageHandler: MessageHandler) {
export function subscribeToMessages(messageHandler: MessageHandler) {
messageHandlers.push(messageHandler);
}
export function unsubscribeToMessage(messageHandler: MessageHandler) {
messageHandlers = messageHandlers.filter(handler => handler !== messageHandler);
}
// used to serialize frontend update operations
let consumeQueuePromise: Promise<void> | null = null;
@@ -273,13 +279,17 @@ function connectWebSocket() {
async function sendPing() {
if (Date.now() - lastPingTs > 30000) {
console.log(
utils.now(),
"Lost websocket connection to the backend. If you keep having this issue repeatedly, you might want to check your reverse proxy (nginx, apache) configuration and allow/unblock WebSocket."
);
console.warn(utils.now(), "Lost websocket connection to the backend");
toast.showPersistent({
id: "lost-websocket-connection",
title: t("ws.lost-websocket-connection-title"),
message: t("ws.lost-websocket-connection-message"),
icon: "no-signal"
});
}
if (ws.readyState === ws.OPEN) {
toast.closePersistent("lost-websocket-connection");
ws.send(
JSON.stringify({
type: "ping",

View File

@@ -1,4 +1,4 @@
import "./stylesheets/bootstrap.scss";
import "bootstrap/dist/css/bootstrap.min.css";
import "./stylesheets/auth.css";
// @TriliumNextTODO: is this even needed anymore?

View File

@@ -1,7 +1,7 @@
import "jquery";
import utils from "./services/utils.js";
import ko from "knockout";
import "./stylesheets/bootstrap.scss";
import "bootstrap/dist/css/bootstrap.min.css";
// TriliumNextTODO: properly make use of below types
// type SetupModelSetupType = "new-document" | "sync-from-desktop" | "sync-from-server" | "";

View File

@@ -1,6 +1,6 @@
import "normalize.css";
import "boxicons/css/boxicons.min.css";
import "@triliumnext/ckeditor5/content.css";
import "@triliumnext/ckeditor5/src/theme/ck-content.css";
import "@triliumnext/share-theme/styles/index.css";
import "@triliumnext/share-theme/scripts/index.js";

View File

@@ -1,2 +0,0 @@
/* Import all of Bootstrap's CSS */
@use "bootstrap/scss/bootstrap";

View File

@@ -31,7 +31,7 @@
#center-pane > *:not(.split-note-container-widget),
#right-pane,
.title-row .note-icon-widget,
.title-row .button-widget,
.title-row .icon-action,
.ribbon-container,
.promoted-attributes-widget,
.scroll-padding-widget,

View File

@@ -161,7 +161,8 @@ textarea,
color: var(--muted-text-color);
}
.form-group.disabled {
.form-group.disabled,
.form-checkbox.disabled {
opacity: 0.5;
pointer-events: none;
}
@@ -251,10 +252,6 @@ button.close:hover {
color: var(--main-text-color) !important;
}
.note-title[readonly] {
background: inherit;
}
.tdialog {
display: none;
}
@@ -293,6 +290,11 @@ button.close:hover {
pointer-events: none;
}
.icon-action.btn {
padding: 0 8px;
min-width: unset !important;
}
.ui-widget-content a:not(.ui-tabs-anchor) {
color: #337ab7 !important;
}
@@ -361,21 +363,17 @@ button kbd {
.tabulator-popup-container {
color: var(--menu-text-color) !important;
font-size: inherit;
background-color: var(--menu-background-color) !important;
background: var(--menu-background-color) !important;
user-select: none;
-webkit-user-select: none;
--bs-dropdown-zindex: 999;
--bs-dropdown-link-active-bg: var(--active-item-background-color) !important;
}
.dropdown-menu .dropdown-divider {
break-before: avoid;
break-after: avoid;
}
body.desktop .dropdown-menu,
body.desktop .tabulator-popup-container {
border: 1px solid var(--dropdown-border-color);
column-rule: 1px solid var(--dropdown-border-color);
box-shadow: 0px 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity));
animation: dropdown-menu-opening 100ms ease-in;
}
@@ -417,7 +415,7 @@ body.desktop .tabulator-popup-container {
}
.dropdown-menu a:hover:not(.disabled),
.dropdown-item:hover:not(.disabled, .dropdown-item-container),
.dropdown-item:hover:not(.disabled, .dropdown-container-item),
.tabulator-menu-item:hover {
color: var(--hover-item-text-color) !important;
background-color: var(--hover-item-background-color) !important;
@@ -425,9 +423,9 @@ body.desktop .tabulator-popup-container {
cursor: pointer;
}
.dropdown-item-container,
.dropdown-item-container:hover,
.dropdown-item-container:active {
.dropdown-container-item,
.dropdown-item.dropdown-container-item:hover,
.dropdown-container-item:active {
background: transparent;
cursor: default;
}
@@ -442,9 +440,11 @@ body #context-menu-container .dropdown-item > span {
align-items: center;
}
.dropdown-item span.keyboard-shortcut {
.dropdown-item span.keyboard-shortcut,
.dropdown-item *:not(.keyboard-shortcut) > kbd {
flex-grow: 1;
text-align: right;
padding-inline-start: 12px;
}
.dropdown-menu kbd {
@@ -454,8 +454,6 @@ body #context-menu-container .dropdown-item > span {
box-shadow: none;
padding-bottom: 0;
padding: 0;
flex-grow: 1;
text-align: right;
}
.dropdown-item,
@@ -464,6 +462,12 @@ body #context-menu-container .dropdown-item > span {
border: 1px solid transparent !important;
}
/* This is a workaround for Firefox not supporting break-before / break-after: avoid on columns.
* It usually wraps a menu item followed by a separator / header and another menu item. */
.dropdown-no-break {
break-inside: avoid;
}
.dropdown-item.disabled,
.dropdown-item.disabled kbd {
color: #aaa !important;
@@ -471,9 +475,9 @@ body #context-menu-container .dropdown-item > span {
.dropdown-item.active,
.dropdown-item:focus {
color: var(--active-item-text-color) !important;
background-color: var(--active-item-background-color) !important;
border-color: var(--active-item-border-color) !important;
color: var(--active-item-text-color);
background-color: var(--active-item-background-color);
border-color: var(--active-item-border-color);
outline: none;
}
@@ -1134,6 +1138,27 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
.toast-body {
white-space: preserve-breaks;
overflow: hidden;
}
.toast.no-title {
display: flex;
flex-direction: row;
}
.toast.no-title .toast-icon {
display: flex;
align-items: center;
padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);
}
.toast.no-title .toast-body {
padding-left: 0;
padding-right: 0;
}
.toast.no-title .toast-header {
background-color: unset !important;
}
.ck-mentions .ck-button {
@@ -1242,6 +1267,10 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
cursor: row-resize;
}
.hidden-ext.note-split + .gutter {
display: none;
}
#context-menu-cover.show {
position: fixed;
top: 0;
@@ -1771,7 +1800,6 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
}
.note-split {
flex-basis: 0; /* so that each split has same width */
margin-left: auto;
margin-right: auto;
}
@@ -1868,11 +1896,6 @@ textarea {
width: 100%;
}
.jump-to-note-results .aa-dropdown-menu .aa-suggestion:hover,
.jump-to-note-results .aa-dropdown-menu .aa-cursor {
background-color: var(--hover-item-background-color, #f8f9fa);
}
/* Command palette styling */
.jump-to-note-dialog .command-suggestion {
display: flex;
@@ -2002,12 +2025,16 @@ body.zen .ribbon-container:not(:has(.classic-toolbar-widget.visible)),
body.zen .ribbon-container:has(.classic-toolbar-widget.visible) .ribbon-top-row,
body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget.visible)),
body.zen .note-icon-widget,
body.zen .title-row .button-widget,
body.zen .title-row .icon-action,
body.zen .floating-buttons-children > *:not(.bx-edit-alt),
body.zen .action-button {
display: none !important;
}
body.zen .split-note-container-widget > .gutter {
display: unset !important;
}
body.zen #launcher-pane {
position: absolute !important;
top: 0 !important;
@@ -2374,4 +2401,13 @@ footer.webview-footer button {
max-width: 25vw;
overflow: hidden;
text-overflow: ellipsis;
}
.revision-diff-added {
background: rgba(100, 200, 100, 0.5);
}
.revision-diff-removed {
background: rgba(255, 100, 100, 0.5);
text-decoration: line-through;
}

View File

@@ -1,16 +1,16 @@
:root {
--theme-style: dark;
--main-font-family: Montserrat;
--main-font-family: Montserrat, sans-serif;
--main-font-size: normal;
--tree-font-family: Montserrat;
--tree-font-family: Montserrat, sans-serif;
--tree-font-size: normal;
--detail-font-family: Montserrat;
--detail-font-family: Montserrat, sans-serif;
--detail-font-size: normal;
--monospace-font-family: JetBrainsLight;
--monospace-font-family: JetBrainsLight, monospace;
--monospace-font-size: normal;
--main-background-color: #333;

View File

@@ -5,16 +5,16 @@ html {
/* either light or dark, colored theme with darker tones are also dark, used e.g. for note map node colors */
--theme-style: light;
--main-font-family: Montserrat;
--main-font-family: Montserrat, sans-serif;
--main-font-size: normal;
--tree-font-family: Montserrat;
--tree-font-family: Montserrat, sans-serif;
--tree-font-size: normal;
--detail-font-family: Montserrat;
--detail-font-family: Montserrat, sans-serif;
--detail-font-size: normal;
--monospace-font-family: JetBrainsLight;
--monospace-font-family: JetBrainsLight, monospace;
--monospace-font-size: normal;
--main-background-color: white;

View File

@@ -13,6 +13,7 @@
--theme-style: dark;
--native-titlebar-background: #00000000;
--window-background-color-bgfx: transparent; /* When background effects enabled */
--main-background-color: #272727;
--main-text-color: #ccc;
@@ -147,14 +148,17 @@
--launcher-pane-vert-button-hover-background: #ffffff1c;
--launcher-pane-vert-button-hover-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
--launcher-pane-vert-button-focus-outline-color: var(--input-focus-outline-color);
--launcher-pane-vert-background-color-bgfx: #00000026; /* When background effects enabled */
--launcher-pane-horiz-border-color: rgb(22, 22, 22);
--launcher-pane-horiz-background-color: #282828;
--launcher-pane-horiz-text-color: #909090;
--launcher-pane-horiz-text-color: #b8b8b8;
--launcher-pane-horiz-button-hover-color: #ffffff;
--launcher-pane-horiz-button-hover-background: #ffffff1c;
--launcher-pane-horiz-button-hover-shadow: unset;
--launcher-pane-horiz-button-focus-outline-color: var(--input-focus-outline-color);
--launcher-pane-horiz-background-color-bgfx: #ffffff17; /* When background effects enabled */
--launcher-pane-horiz-border-color-bgfx: #00000080; /* When background effects enabled */
--protected-session-active-icon-color: #8edd8e;
--sync-status-error-pulse-color: #f47871;
@@ -168,9 +172,10 @@
--tab-close-button-hover-background: #a45353;
--tab-close-button-hover-color: white;
--active-tab-background-color: #ffffff1c;
--active-tab-hover-background-color: var(--active-tab-background-color);
--active-tab-icon-color: #a9a9a9;
--active-tab-text-color: #ffffffcd;
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.2), -1px -1px 3px rgba(0, 0, 0, 0.4);
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.4);

View File

@@ -13,6 +13,7 @@
--theme-style: light;
--native-titlebar-background: #ffffff00;
--window-background-color-bgfx: transparent; /* When background effects enabled */
--main-background-color: white;
--main-text-color: black;
@@ -121,11 +122,11 @@
--left-pane-collapsed-border-color: #0000000d;
--left-pane-background-color: #f2f2f2;
--left-pane-text-color: #383838;
--left-pane-item-hover-background: #eaeaea;
--left-pane-item-hover-background: rgba(0, 0, 0, 0.032);
--left-pane-item-selected-background: white;
--left-pane-item-selected-color: black;
--left-pane-item-selected-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
--left-pane-item-action-button-background: #d7d7d7;
--left-pane-item-action-button-background: rgba(0, 0, 0, 0.11);
--left-pane-item-action-button-color: inherit;
--left-pane-item-action-button-hover-background: white;
--left-pane-item-action-button-hover-shadow: 2px 2px 3px rgba(0, 0, 0, 0.15);
@@ -141,6 +142,7 @@
--launcher-pane-vert-button-hover-background: white;
--launcher-pane-vert-button-hover-shadow: 4px 4px 4px rgba(0, 0, 0, 0.075);
--launcher-pane-vert-button-focus-outline-color: var(--input-focus-outline-color);
--launcher-pane-vert-background-color-bgfx: #00000009; /* When background effects enabled */
--launcher-pane-horiz-border-color: rgba(0, 0, 0, 0.1);
--launcher-pane-horiz-background-color: #fafafa;
@@ -148,6 +150,8 @@
--launcher-pane-horiz-button-hover-background: var(--icon-button-hover-background);
--launcher-pane-horiz-button-hover-shadow: unset;
--launcher-pane-horiz-button-focus-outline-color: var(--input-focus-outline-color);
--launcher-pane-horiz-background-color-bgfx: #ffffffb3; /* When background effects enabled */
--launcher-pane-horiz-border-color-bgfx: #00000026; /* When background effects enabled */
--protected-session-active-icon-color: #16b516;
--sync-status-error-pulse-color: #ff5528;
@@ -161,9 +165,10 @@
--tab-close-button-hover-background: #c95a5a;
--tab-close-button-hover-color: white;
--active-tab-background-color: white;
--active-tab-hover-background-color: var(--active-tab-background-color);
--active-tab-icon-color: gray;
--active-tab-text-color: black;
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.1), -1px -1px 3px rgba(0, 0, 0, 0.05);
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.1);

View File

@@ -26,7 +26,7 @@
--detail-font-family: var(--main-font-family);
--detail-font-size: normal;
--monospace-font-family: JetBrainsLight;
--monospace-font-family: JetBrainsLight, monospace;
--monospace-font-size: normal;
--left-pane-item-selected-shadow-size: 2px;
@@ -102,10 +102,6 @@ body.backdrop-effects-disabled {
font-size: 0.9rem !important;
}
.dropdown-menu {
--scrollbar-background-color: var(--menu-background-color);
}
body.mobile .dropdown-menu {
backdrop-filter: var(--dropdown-backdrop-filter);
border-radius: var(--dropdown-border-radius);
@@ -154,12 +150,22 @@ body.desktop .dropdown-submenu .dropdown-menu {
.dropdown-item,
body.mobile .dropdown-submenu .dropdown-toggle {
padding: 2px 2px 2px 8px !important;
padding-inline-end: 16px !important;
padding-inline-end: 22px !important;
/* Note: the right padding should also accommodate the submenu arrow. */
border-radius: 6px;
cursor: default !important;
}
:root .dropdown-item:focus-visible {
outline: 2px solid var(--input-focus-outline-color) !important;
background-color: transparent;
color: unset;
}
:root .dropdown-item:active {
background: unset;
}
body.mobile .dropdown-submenu {
padding: 0 !important;
}
@@ -289,6 +295,20 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
transform: rotate(270deg);
}
/* Dropdown item button (used in zoom buttons in global menu) */
li.dropdown-item a.dropdown-item-button {
border: unset;
}
li.dropdown-item a.dropdown-item-button.bx {
color: var(--menu-text-color) !important;
}
li.dropdown-item a.dropdown-item-button:focus-visible {
outline: 2px solid var(--input-focus-outline-color) !important;
}
/*
* TOASTS
*/
@@ -307,30 +327,49 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
--modal-control-button-color: var(--bs-toast-color);
display: flex;
flex-direction: row-reverse;
flex-direction: column;
backdrop-filter: blur(6px);
}
#toast-container .toast .toast-header {
padding: 0 !important;
background: transparent !important;
border-bottom: none;
color: var(--toast-text-color) !important;
}
#toast-container .toast .toast-header strong {
/* The title of the toast is no longer displayed */
display: none;
#toast-container .toast .toast-header strong > * {
vertical-align: middle;
}
#toast-container .toast .toast-header .btn-close {
margin: 0 var(--bs-toast-padding-x) 0 12px;
margin: 0 0 0 12px;
}
#toast-container .toast.no-title {
flex-direction: row;
}
#toast-container .toast .toast-body {
flex-grow: 1;
overflow: hidden;
text-overflow: ellipsis;
padding-top: 0;
}
#toast-container .toast:not(.no-title) .bx {
margin-right: 0.5em;
font-size: 1.1em;
opacity: 0.85;
}
#toast-container .toast.no-title .bx {
margin-right: 0;
font-size: 1.3em;
}
#toast-container .toast.no-title .toast-body {
padding-top: var(--bs-toast-padding-x);
color: var(--toast-text-color);
}
/*

View File

@@ -84,7 +84,7 @@ button.btn.btn-success kbd {
*/
:root .icon-action:not(.global-menu-button),
:root .btn.tn-tool-button,
:root .tn-tool-button,
:root .btn-group .tn-tool-button:not(:last-child),
:root .btn-group .tn-tool-button:last-child {
width: var(--icon-button-size);
@@ -96,6 +96,11 @@ button.btn.btn-success kbd {
color: var(--icon-button-color);
}
:root .btn-group .icon-action:last-child {
border-top-left-radius: unset !important;
border-bottom-left-radius: unset !important;
}
.btn-group .tn-tool-button + .tn-tool-button {
margin-left: 4px !important;
}
@@ -192,8 +197,8 @@ input[type="password"]:focus,
input[type="date"]:focus,
input[type="time"]:focus,
input[type="datetime-local"]:focus,
:root input.ck.ck-input-text:focus,
:root input.ck.ck-input-number:focus,
:root input.ck.ck-input-text:not([readonly="true"]):focus,
:root input.ck.ck-input-number:not([readonly="true"]):focus,
textarea.form-control:focus,
textarea:focus,
:root textarea.ck.ck-textarea:focus,

View File

@@ -109,6 +109,11 @@
* NOTE MAP
*/
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button,
.note-map-widget .fixnodes-type-switcher .tn-tool-button {
padding: unset;
}
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button.toggled {
color: var(--tab-close-button-hover-background);
}

View File

@@ -94,18 +94,17 @@ div.promoted-attributes-container {
/* Note type dropdown */
div.note-type-dropdown .check {
ul.note-type-dropdown .check {
margin-right: 6px;
}
ul.note-type-dropdown li.dropdown-item {
--menu-item-icon-vert-offset: 0;
}
/* Editability dropdown */
div.editability-dropdown a.dropdown-item {
padding: 4px 16px 4px 0;
align-items: start !important;
}
.editability-dropdown .dropdown-item .check {
ul.editability-dropdown li.dropdown-item > div {
margin-left: 4px;
}

View File

@@ -36,31 +36,23 @@ body.mobile {
/* #region Mica */
body.background-effects.platform-win32 {
--launcher-pane-horiz-border-color: rgba(0, 0, 0, 0.15);
--launcher-pane-horiz-background-color: rgba(255, 255, 255, 0.7);
--launcher-pane-vert-background-color: rgba(255, 255, 255, 0.055);
--tab-background-color: transparent;
--new-tab-button-background: transparent;
--active-tab-background-color: var(--launcher-pane-horiz-background-color);
--background-material: tabbed;
}
@media (prefers-color-scheme: dark) {
body.background-effects.platform-win32 {
--launcher-pane-horiz-border-color: rgba(0, 0, 0, 0.5);
--launcher-pane-horiz-background-color: rgba(255, 255, 255, 0.09);
}
--launcher-pane-horiz-border-color: var(--launcher-pane-horiz-border-color-bgfx);
--launcher-pane-horiz-background-color: var(--launcher-pane-horiz-background-color-bgfx);
--launcher-pane-vert-background-color: var(--launcher-pane-vert-background-color-bgfx);
--tab-background-color: var(--window-background-color-bgfx);
--new-tab-button-background: var(--window-background-color-bgfx);
--active-tab-background-color: var(--launcher-pane-horiz-background-color);
}
body.background-effects.platform-win32.layout-vertical {
--left-pane-background-color: transparent;
--left-pane-item-hover-background: rgba(127, 127, 127, 0.05);
--left-pane-background-color: var(--window-background-color-bgfx);
--background-material: mica;
}
body.background-effects.platform-win32,
body.background-effects.platform-win32 #root-widget {
background: transparent !important;
background: var(--window-background-color-bgfx) !important;
}
body.background-effects.platform-win32.layout-horizontal #horizontal-main-container,
@@ -89,7 +81,7 @@ body.background-effects.zen #root-widget {
* Gutter
*/
.gutter {
.gutter {
background: var(--gutter-color) !important;
transition: background 150ms ease-out;
}
@@ -231,7 +223,7 @@ body.layout-horizontal > .horizontal {
}
#launcher-pane .launcher-button:focus,
#launcher-pane .global-menu button:focus {
#launcher-pane .global-menu :focus {
outline: none;
}
@@ -312,18 +304,6 @@ body.layout-horizontal > .horizontal {
color: var(--tooltip-foreground-color) !important;
}
/*
* Global menu
*/
.global-menu div.zoom-buttons a {
border: unset;
}
.global-menu div.zoom-buttons a.bx {
color: var(--menu-text-color) !important;
}
/*
* Calendar
*/
@@ -356,6 +336,21 @@ body.layout-horizontal > .horizontal {
--select-arrow-svg: initial; /* Disable the dropdown arrow */
}
/* Week number column */
.calendar-dropdown-widget .calendar-week-number {
transform: rotate(270deg);
justify-content: center;
padding: 0;
opacity: 0.5;
font-size: 1em;
font-weight: 700;
letter-spacing: .5pt;
}
.calendar-dropdown-widget .calendar-week-number::after {
display: none;
}
@media (max-width: 992px) {
.calendar-dropdown-widget .calendar-header button {
margin: 0 !important;
@@ -570,15 +565,21 @@ div.quick-search .search-button.show {
transition: background-color 100ms ease-out !important;
}
/*
* Quick search results
*/
div.quick-search .dropdown-menu {
--quick-search-item-delimiter-color: transparent;
--menu-item-icon-vert-offset: -.065em;
}
/*
* TO FIX: The quick search results dropdown has a backdrop issue with the tree panel
* when background effects are enabled in Electron.
* As a temporary workaround, the backdrop and transparency are disabled for the
* vertical layout.
*/
body.layout-vertical.background-effects div.quick-search .dropdown-menu {
--menu-background-color: var(--menu-background-color-no-backdrop) !important;
}
/* Item */
.quick-search .dropdown-menu *.dropdown-item {
padding: 8px 12px !important;
@@ -874,7 +875,10 @@ body.mobile .fancytree-node > span {
}
.tab-row-container .toggle-button {
margin: 6px 10px !important;
--icon-button-size: 30px;
--icon-button-icon-ratio: .6;
margin: 3px 6px auto 8px !important;
}
.tab-row-container {
@@ -886,6 +890,80 @@ body.layout-horizontal .tab-row-container {
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
}
body.electron.background-effects.layout-horizontal .tab-row-container {
border-bottom: unset !important;
}
body.electron.background-effects.layout-horizontal .note-tab-wrapper {
top: 1px;
}
body.electron.background-effects.layout-horizontal .tab-row-container .toggle-button {
position: relative;
}
body.electron.background-effects.layout-horizontal .tab-row-container .toggle-button:after {
content: "";
position: absolute;
bottom: 0;
left: -10px;
right: -10px;
top: 32px;
height: 1px;
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
}
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-left,
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-right {
position: relative;
}
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-left:after,
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-right:after {
content: "";
position: absolute;
bottom: 0;
left: 0px;
right: 0px;
height: 1px;
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
}
body.electron.background-effects.layout-horizontal .tab-row-container .note-tab[active]:before {
content: "";
position: absolute;
bottom: 0;
left: -32768px;
top: var(--tab-height);
right: calc(100% - 1px);
height: 1px;
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
}
body.electron.background-effects.layout-horizontal .tab-row-container .note-tab[active]:after {
content: "";
position: absolute;
bottom: 0;
left: 100%;
top: var(--tab-height);
right: 0;
width: 100vw;
height: 1px;
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
}
body.electron.background-effects.layout-horizontal .tab-row-container .note-new-tab:before {
content: "";
position: absolute;
bottom: 0;
left: -4px;
top: calc(var(--tab-height), -1);
right: 0;
width: 100vw;
height: 1px;
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
}
body.layout-vertical.electron.platform-darwin .tab-row-container {
border-bottom: 1px solid var(--subtle-border-color);
}
@@ -977,6 +1055,14 @@ body.layout-horizontal .tab-row-widget .note-tab .note-tab-wrapper {
transform: translate3d(var(--tab-first-item-horiz-offset), 0, 0);
}
:root .tab-row-widget .note-tab .note-tab-icon {
padding-right: 5px; /* The gap between the icon and the title */
}
.tab-row-widget .note-tab[active] .note-tab-icon {
color: var(--active-tab-icon-color);
}
.tab-row-widget .note-tab .note-tab-title {
text-overflow: ellipsis;
}
@@ -1101,6 +1187,11 @@ body.layout-vertical .tab-row-widget-is-sorting .note-tab.note-tab-is-dragging .
/* will-change: opacity; -- causes some weird artifacts to the note menu in split view */
}
.split-note-container-widget > .gutter {
background: var(--root-background) !important;
transition: background 150ms ease-out;
}
/*
* Ribbon & note header
*/
@@ -1109,10 +1200,6 @@ body.layout-vertical .tab-row-widget-is-sorting .note-tab.note-tab-is-dragging .
margin-bottom: 0 !important;
}
.note-split:not(.hidden-ext) + .note-split:not(.hidden-ext) {
border-left: 4px solid var(--root-background);
}
@keyframes note-entrance {
from {
opacity: 0;
@@ -1323,6 +1410,13 @@ div.promoted-attribute-cell .multiplicity:has(span) {
margin-left: 8px;
margin-right: calc(var(--pa-card-padding-left) - var(--pa-card-padding-right));
font-size: 0; /* Prevent whitespaces creating a gap between buttons */
display: flex;
}
div.promoted-attribute-cell .multiplicity:has(span) span {
display: flex;
align-items: center;
justify-content: center;
}
/*

View File

@@ -0,0 +1,5 @@
{
"about": {
"title": "حول تريليوم للملاحظات"
}
}

View File

@@ -121,7 +121,7 @@
"sat": "Ds",
"sun": "Dg",
"january": "Gener",
"febuary": "Febrer",
"february": "Febrer",
"march": "Març",
"april": "Abril",
"may": "Maig",

View File

@@ -276,7 +276,12 @@
"mime": "MIME 类型: ",
"file_size": "文件大小:",
"preview": "预览:",
"preview_not_available": "无法预览此类型的笔记。"
"preview_not_available": "无法预览此类型的笔记。",
"diff_on": "显示差异",
"diff_off": "显示内容",
"diff_on_hint": "点击以显示笔记源代码差异",
"diff_off_hint": "点击以显示笔记内容",
"diff_not_available": "差异不可用。"
},
"sort_child_notes": {
"sort_children_by": "按...排序子笔记",
@@ -577,7 +582,7 @@
"cannot_find_day_note": "无法找到日记",
"cannot_find_week_note": "无法找到周记",
"january": "一月",
"febuary": "二月",
"february": "二月",
"march": "三月",
"april": "四月",
"may": "五月",
@@ -587,7 +592,18 @@
"september": "九月",
"october": "十月",
"november": "十一月",
"december": "十二月"
"december": "十二月",
"week_previous": "上周",
"week_next": "下周",
"month_previous": "上个月",
"month_next": "下个月",
"year": "年",
"year_previous": "上一年",
"year_next": "明年",
"today": "今天",
"week": "周",
"month": "月",
"list": "列表"
},
"close_pane_button": {
"close_this_pane": "关闭此面板"
@@ -748,7 +764,8 @@
"book_properties": "集合属性",
"table": "表格",
"geo-map": "地理地图",
"board": "看板"
"board": "看板",
"include_archived_notes": "展示归档笔记"
},
"edited_notes": {
"no_edited_notes_found": "今天还没有编辑过的笔记...",
@@ -949,7 +966,9 @@
"no_attachments": "此笔记没有附件。"
},
"book": {
"no_children_help": "此类型为书籍的笔记没有任何子笔记,因此没有内容显示。请参阅 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 了解详情。"
"no_children_help": "此类型为书籍的笔记没有任何子笔记,因此没有内容显示。请参阅 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 了解详情。",
"drag_locked_title": "锁定编辑",
"drag_locked_message": "无法拖拽,因为集合已被锁定编辑。"
},
"editable_code": {
"placeholder": "在这里输入您的代码笔记内容..."
@@ -1334,7 +1353,7 @@
"oauth_title": "OAuth/OpenID 认证",
"oauth_description": "OpenID 是一种标准化方式,允许您使用其他服务(如 Google的账号登录网站来验证您的身份。默认的身份提供者是 Google但您可以更改为任何其他 OpenID 提供者。点击<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">这里</a>了解更多信息。请参阅这些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指南</a> 通过 Google 设置 OpenID 服务。",
"oauth_description_warning": "要启用 OAuth/OpenID您需要设置 config.ini 文件中的 OAuth/OpenID 基础 URL、客户端 ID 和客户端密钥,并重新启动应用程序。如果要从环境变量设置,请设置 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 环境变量。",
"oauth_missing_vars": "缺少以下设置项:{{variables}}",
"oauth_missing_vars": "缺少以下设置项:{{-variables}}",
"oauth_user_account": "用户账号: ",
"oauth_user_email": "用户邮箱: ",
"oauth_user_not_logged_in": "未登录!"
@@ -1407,7 +1426,7 @@
"button-tree-map": "树形地图"
},
"tree-context-menu": {
"open-in-a-new-tab": "在新标签页中打开 <kbd>Ctrl+Click</kbd>",
"open-in-a-new-tab": "在新标签页中打开",
"open-in-a-new-split": "在新分栏中打开",
"insert-note-after": "在后面插入笔记",
"insert-child-note": "插入子笔记",
@@ -1437,7 +1456,9 @@
"converted-to-attachments": "{{count}} 个笔记已被转换为附件。",
"convert-to-attachment-confirm": "确定要将选中的笔记转换为其父笔记的附件吗?",
"duplicate": "复制",
"open-in-popup": "快速编辑"
"open-in-popup": "快速编辑",
"archive": "归档",
"unarchive": "解压"
},
"shared_info": {
"help_link": "访问 <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a> 获取帮助。",
@@ -1602,7 +1623,9 @@
"ws": {
"sync-check-failed": "同步检查失败!",
"consistency-checks-failed": "一致性检查失败!请查看日志了解详细信息。",
"encountered-error": "遇到错误 \"{{message}}\",请查看控制台。"
"encountered-error": "遇到错误 \"{{message}}\",请查看控制台。",
"lost-websocket-connection-title": "与服务器的连线中断",
"lost-websocket-connection-message": "检查您的反向代理(如 nginx 或 Apache设置以确保 Websocket 连线没有被阻挡。"
},
"hoisted_note": {
"confirm_unhoisting": "请求的笔记 '{{requestedNote}}' 位于聚焦的笔记 '{{hoistedNote}}' 的子树之外,您必须取消聚焦才能访问该笔记。是否继续取消聚焦?"
@@ -1678,7 +1701,7 @@
"native-title-bar": "原生标题栏",
"native-title-bar-description": "对于 Windows 和 macOS关闭原生标题栏可使应用程序看起来更紧凑。在 Linux 上,保留原生标题栏可以更好地与系统集成。",
"background-effects": "启用背景效果(仅适用于 Windows 11",
"background-effects-description": "Mica 效果为应用窗口添加模糊且时尚的背景,营造出深度感和现代外观。",
"background-effects-description": "Mica 效果为应用窗口添加模糊且时尚的背景,营造出深度感和现代外观。「原生标题栏」必須被禁用。",
"restart-app-button": "重启应用程序以查看更改",
"zoom-factor": "缩放系数"
},
@@ -1931,7 +1954,11 @@
"editorfeatures": {
"title": "功能",
"emoji_completion_enabled": "启用表情自动补全",
"note_completion_enabled": "启用笔记自动补全"
"note_completion_enabled": "启用笔记自动补全",
"emoji_completion_description": "如果启用,表情可以轻易地经由输入 `:` 加上表情名称来插入。",
"note_completion_description": "如果启用,导向笔记的链接可以经由输入 `@` 加上笔记标题来创建。",
"slash_commands_enabled": "启用斜杠命令",
"slash_commands_description": "如果启用,可以经由输入 `/` 来触发命令,如插入换行符或标题。"
},
"table_view": {
"new-row": "新增行",
@@ -1967,14 +1994,21 @@
"delete_row": "删除行"
},
"board_view": {
"delete-note": "删除笔记",
"delete-note": "删除笔记...",
"move-to": "移动到",
"insert-above": "在上方插入",
"insert-below": "在下方插入",
"delete-column": "删除列",
"delete-column-confirmation": "确定要删除此列吗?此列下所有笔记中对应的属性也将被删除。",
"new-item": "新增项目",
"add-column": "添加列"
"add-column": "添加列",
"archive-note": "存档笔记",
"unarchive-note": "解压笔记",
"new-item-placeholder": "输入笔记标题...",
"add-column-placeholder": "请输入列名...",
"edit-note-title": "点击编辑笔记标题",
"edit-column-title": "点击编辑列标题",
"remove-from-board": "从看板上移除"
},
"command_palette": {
"tree-action-name": "树形:{{name}}",
@@ -2021,6 +2055,15 @@
"title": "性能",
"enable-motion": "启用过渡和动画",
"enable-shadows": "启用阴影",
"enable-backdrop-effects": "启用菜单、弹窗和面板的背景效果"
"enable-backdrop-effects": "启用菜单、弹窗和面板的背景效果",
"enable-smooth-scroll": "启用平滑滚动",
"app-restart-required": "(需重启程序以应用更改)"
},
"pagination": {
"page_title": "第 {{startIndex}} 页 - 第 {{endIndex}} 页",
"total_notes": "{{count}} 笔记"
},
"collections": {
"rendering_error": "出现错误无法显示内容。"
}
}

View File

@@ -0,0 +1,41 @@
{
"about": {
"title": "O Trilium Notes",
"homepage": "Domovská stránka:",
"app_version": "Verze aplikace:",
"db_version": "Verze DB:",
"sync_version": "Verze sync:",
"build_date": "Datum sestavení:",
"build_revision": "Revize sestavení:",
"data_directory": "Datový adresář:"
},
"toast": {
"critical-error": {
"title": "Kritická chyba",
"message": "Nastala kritická chyba která aplikaci brání ve spuštění:\n\n{{message}}\n\nPravděpodobně neočekávaným způsobem selhal skript. Pokuste se restartovat aplikaci v safe módu a problém napravit."
},
"widget-error": {
"title": "Nepodařilo se inicializovat widget",
"message-custom": "Uživatelský widget z poznámky s ID \"{{id}}\" a názvem \"{{title}}\" nemohl být inicializován z důvodu: \n\n{{message}}",
"message-unknown": "Neznámý widget nemohl být inicializován z důvodu:\n\n{{message}}"
},
"bundle-error": {
"title": "Načtení uživatelského skriptu selhalo",
"message": "Uživatelský skript z poznámky s ID \"{{id}}\" a názvem \"{{title}}\" nemohl být spuštěn z důvodu: \n\n{{message}}"
}
},
"ai_llm": {
"n_notes_queued_0": "{{ count }} poznámka ve frontě k indexaci",
"n_notes_queued_1": "{{ count }} poznámky ve frontě k indexaci",
"n_notes_queued_2": "{{ count }} poznámek ve frontě k indexaci",
"notes_indexed_0": "{{ count }} poznámka indexována",
"notes_indexed_1": "{{ count }} poznámky indexovány",
"notes_indexed_2": "{{ count }} poznámek indexováno"
},
"add_link": {
"add_link": "Přidat odkaz",
"help_on_links": "Nápověda k odkazům",
"note": "Poznámka",
"search_note": "hledat poznámku podle názvu"
}
}

View File

@@ -276,7 +276,12 @@
"preview": "Vorschau:",
"preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar.",
"restore_button": "Wiederherstellen",
"delete_button": "Löschen"
"delete_button": "Löschen",
"diff_on": "Zeige Differenz",
"diff_off": "Zeige Inhalt",
"diff_on_hint": "Klicke, um die Differenz des Notiz-Quellcodes zu zeigen",
"diff_off_hint": "Klicke, um den Notizinhalt zu zeigen",
"diff_not_available": "Differenz-Abgleich ist nicht verfügbar."
},
"sort_child_notes": {
"sort_children_by": "Unternotizen sortieren nach...",
@@ -576,7 +581,7 @@
"sun": "So",
"cannot_find_day_note": "Tagesnotiz kann nicht gefunden werden",
"january": "Januar",
"febuary": "Februar",
"february": "Februar",
"march": "März",
"april": "April",
"may": "Mai",
@@ -587,7 +592,18 @@
"october": "Oktober",
"november": "November",
"december": "Dezember",
"cannot_find_week_note": "Wochennotiz kann nicht gefunden werden"
"cannot_find_week_note": "Wochennotiz kann nicht gefunden werden",
"week": "Woche",
"week_previous": "vorherige Woche",
"week_next": "nächste Woche",
"month": "Monat",
"month_previous": "vorheriger Monat",
"month_next": "nächster Monat",
"year": "Jahr",
"year_previous": "vorheriges Jahr",
"year_next": "nächstes Jahr",
"list": "Liste",
"today": "Heute"
},
"close_pane_button": {
"close_this_pane": "Schließe diesen Bereich"
@@ -745,7 +761,8 @@
"book_properties": "Sammlungseigenschaften",
"table": "Tabelle",
"geo-map": "Weltkarte",
"board": "Tafel"
"board": "Tafel",
"include_archived_notes": "Zeige archivierte Notizen"
},
"edited_notes": {
"no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...",
@@ -946,7 +963,9 @@
"no_attachments": "Diese Notiz enthält keine Anhänge."
},
"book": {
"no_children_help": "Diese Notiz mit dem Notiztyp Buch besitzt keine Unternotizen, deshalb ist nichts zum Anzeigen vorhanden. Siehe <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">Wiki</a> für mehr Details."
"no_children_help": "Diese Notiz mit dem Notiztyp Buch besitzt keine Unternotizen, deshalb ist nichts zum Anzeigen vorhanden. Siehe <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">Wiki</a> für mehr Details.",
"drag_locked_title": "Für Bearbeitung gesperrt",
"drag_locked_message": "Das Ziehen ist nicht möglich, da die Sammlung für die Bearbeitung gesperrt ist."
},
"editable_code": {
"placeholder": "Gebe hier den Inhalt deiner Codenotiz ein..."
@@ -1371,7 +1390,7 @@
"button-tree-map": "Baumkarte"
},
"tree-context-menu": {
"open-in-a-new-tab": "In neuem Tab öffnen <kbd>Strg+Klick</kbd>",
"open-in-a-new-tab": "In neuem Tab öffnen",
"open-in-a-new-split": "In neuem Split öffnen",
"insert-note-after": "Notiz dahinter einfügen",
"insert-child-note": "Unternotiz einfügen",
@@ -1401,7 +1420,9 @@
"apply-bulk-actions": "Massenaktionen anwenden",
"converted-to-attachments": "{{count}} Notizen wurden als Anhang konvertiert.",
"convert-to-attachment-confirm": "Bist du sicher, dass du die ausgewählten Notizen in Anhänge ihrer übergeordneten Notizen umwandeln möchtest?",
"open-in-popup": "Schnellbearbeitung"
"open-in-popup": "Schnellbearbeitung",
"archive": "Archiviere",
"unarchive": "Entarchivieren"
},
"shared_info": {
"shared_publicly": "Diese Notiz ist öffentlich geteilt auf {{- link}}.",
@@ -1566,7 +1587,9 @@
"ws": {
"sync-check-failed": "Synchronisationsprüfung fehlgeschlagen!",
"consistency-checks-failed": "Konsistenzprüfung fehlgeschlagen! Siehe Logs für Details.",
"encountered-error": "Fehler „{{message}}“ aufgetreten, siehe Konsole für Details."
"encountered-error": "Fehler „{{message}}“ aufgetreten, siehe Konsole für Details.",
"lost-websocket-connection-title": "Verbindung zum Server verloren",
"lost-websocket-connection-message": "Überprüfe die Konfiguration des Reverse-Proxys (z. B. nginx oder Apache), um sicherzustellen, dass WebSocket-Verbindungen zugelassen und nicht blockiert werden."
},
"hoisted_note": {
"confirm_unhoisting": "Die angeforderte Notiz {{requestedNote}} befindet sich außerhalb des hoisted Bereichs der Notiz {{hoistedNote}}. Du musst sie unhoisten, um auf die Notiz zuzugreifen. Möchtest du mit dem Unhoisting fortfahren?"
@@ -1642,7 +1665,7 @@
"native-title-bar": "Native Anwendungsleiste",
"native-title-bar-description": "In Windows und macOS, sorgt das Deaktivieren der nativen Anwendungsleiste für ein kompakteres Aussehen. Unter Linux, sorgt das Aktivieren der nativen Anwendungsleiste für eine bessere Integration mit anderen Teilen des Systems.",
"background-effects": "Hintergrundeffekte aktivieren (nur Windows 11)",
"background-effects-description": "Der Mica Effekt fügt einen unscharfen, stylischen Hintergrund in Anwendungsfenstern ein. Dieser erzeugt Tiefe und ein modernes Auftreten.",
"background-effects-description": "Der Mica Effekt fügt einen unscharfen, stylischen Hintergrund in Anwendungsfenstern ein. Dieser erzeugt Tiefe und ein modernes Auftreten. \"Native Titelleiste\" muss deaktiviert sein.",
"restart-app-button": "Anwendung neustarten um Änderungen anzuwenden",
"zoom-factor": "Zoomfaktor"
},
@@ -1839,7 +1862,9 @@
"title": "Leistung",
"enable-motion": "Aktiviere Übergänge und Animationen",
"enable-shadows": "Aktiviere Schatten",
"enable-backdrop-effects": "Aktiviere Hintergrundeffekte für Menüs, Pop-up Fenster und Panele"
"enable-backdrop-effects": "Aktiviere Hintergrundeffekte für Menüs, Pop-up Fenster und Panele",
"enable-smooth-scroll": "Aktiviere sanftes Scrollen",
"app-restart-required": "(Ein Neustart der Anwendung ist erforderlich, damit die Änderungen wirksam werden)"
},
"code-editor-options": {
"title": "Editor"
@@ -1878,7 +1903,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID ist ein standardisiertes Verfahren, mit dem Sie sich über ein Konto eines anderen Dienstes, beispielsweise Google, bei Websites anmelden können, um Ihre Identität zu bestätigen. Der Standardaussteller ist Google, Sie können jedoch jeden anderen OpenID-Anbieter auswählen. Weitere Informationen finden Sie <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">hier</a>. Befolgen Sie diese <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">Anweisungen</a>, um einen OpenID-Dienst über Google einzurichten.",
"oauth_description_warning": "Um OAuth/OpenID zu aktivieren, müssen Sie die OAuth/OpenID-Basis-URL, die Client-ID und den Client-Secret in der Datei config.ini festlegen und die Anwendung neu starten. Wenn Sie die Einstellungen über Umgebungsvariablen vornehmen möchten, legen Sie bitte TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID und TRILIUM_OAUTH_CLIENT_SECRET fest.",
"oauth_missing_vars": "Fehlende Einstellung: {{variables}}",
"oauth_missing_vars": "Fehlende Einstellung: {{-variables}}",
"oauth_user_account": "Benutzerkonto: ",
"oauth_user_email": "Benutzer E-Mail: ",
"oauth_user_not_logged_in": "Nicht eingeloggt!"
@@ -1943,7 +1968,11 @@
"editorfeatures": {
"title": "Funktionen",
"emoji_completion_enabled": "Emoji-Autovervollständigung aktivieren",
"note_completion_enabled": "Automatisches Vervollständigen von Notizen aktivieren"
"note_completion_enabled": "Automatisches Vervollständigen von Notizen aktivieren",
"emoji_completion_description": "Wenn aktiviert, können Emojis ganz einfach in den Text eingefügt werden, indem man \":\" gefolgt vom Namen eines Emojis eingibt.",
"note_completion_description": "Wenn aktiviert, können Links zu Notizen erstellt werden, indem man \"@\" gefolgt vom Titel einer Notiz eingibt.",
"slash_commands_enabled": "Aktiviere Slash-Befehle",
"slash_commands_description": "Wenn aktiviert, können Bearbeitungsbefehle wie das Einfügen von Zeilenumbrüchen oder Überschriften durch Eingabe von \"/\" aktiviert werden."
},
"table_view": {
"new-row": "Neue Zeile",
@@ -1979,14 +2008,21 @@
"delete_row": "Zeile entfernen"
},
"board_view": {
"delete-note": "Lösche Notiz",
"delete-note": "Lösche Notiz...",
"move-to": "Verschiebe zu",
"insert-above": "Oberhalb einfügen",
"insert-below": "Unterhalb einfügen",
"delete-column": "Spalte entfernen",
"delete-column-confirmation": "Soll die Spalte wirklich gelöscht werden? Abhängige Attribute werden auch in den Notizen unter dieser Spalte gelöscht.",
"new-item": "Neuer Artikel",
"add-column": "Spalte hinzufügen"
"add-column": "Spalte hinzufügen",
"remove-from-board": "Entferne von Tafel",
"archive-note": "archiviere Notiz",
"unarchive-note": "entarchiviere Notiz",
"new-item-placeholder": "Notiz Titel eingeben...",
"add-column-placeholder": "Spaltenname eingeben...",
"edit-note-title": "Klicke zum Editieren des Notiz-Titels",
"edit-column-title": "Klicke zum Editieren des Spalten-Titels"
},
"command_palette": {
"tree-action-name": "Struktur: {{name}}",
@@ -2024,5 +2060,12 @@
},
"units": {
"percentage": "%"
},
"pagination": {
"page_title": "Seite {{startIndex}} von {{endIndex}}",
"total_notes": "{{count}} Notizen"
},
"collections": {
"rendering_error": "Aufgrund eines Fehlers können keine Inhalte angezeigt werden."
}
}

View File

@@ -263,6 +263,11 @@
"confirm_delete_all": "Do you want to delete all revisions of this note?",
"no_revisions": "No revisions for this note yet...",
"restore_button": "Restore",
"diff_on": "Show diff",
"diff_off": "Show content",
"diff_on_hint": "Click to show note source diff",
"diff_off_hint": "Click to show note content",
"diff_not_available": "Diff isn't available.",
"confirm_restore": "Do you want to restore this revision? This will overwrite the current title and content of the note with this revision.",
"delete_button": "Delete",
"confirm_delete": "Do you want to delete this revision?",
@@ -577,7 +582,7 @@
"cannot_find_day_note": "Cannot find day note",
"cannot_find_week_note": "Cannot find week note",
"january": "January",
"febuary": "February",
"february": "February",
"march": "March",
"april": "April",
"may": "May",
@@ -587,7 +592,18 @@
"september": "September",
"october": "October",
"november": "November",
"december": "December"
"december": "December",
"week": "Week",
"week_previous": "Previous week",
"week_next": "Next week",
"month": "Month",
"month_previous": "Previous month",
"month_next": "Next month",
"year": "Year",
"year_previous": "Previous year",
"year_next": "Next year",
"list": "List",
"today": "Today"
},
"close_pane_button": {
"close_this_pane": "Close this pane"
@@ -748,7 +764,8 @@
"calendar": "Calendar",
"table": "Table",
"geo-map": "Geo Map",
"board": "Board"
"board": "Board",
"include_archived_notes": "Show archived notes"
},
"edited_notes": {
"no_edited_notes_found": "No edited notes on this day yet...",
@@ -949,7 +966,9 @@
"no_attachments": "This note has no attachments."
},
"book": {
"no_children_help": "This collection doesn't have any child notes so there's nothing to display. See <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> for details."
"no_children_help": "This collection doesn't have any child notes so there's nothing to display. See <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> for details.",
"drag_locked_title": "Locked for editing",
"drag_locked_message": "Dragging not allowed since the collection is locked for editing."
},
"editable_code": {
"placeholder": "Type the content of your code note here..."
@@ -1118,7 +1137,9 @@
"title": "Performance",
"enable-motion": "Enable transitions and animations",
"enable-shadows": "Enable shadows",
"enable-backdrop-effects": "Enable background effects for menus, popups and panels"
"enable-backdrop-effects": "Enable background effects for menus, popups and panels",
"enable-smooth-scroll": "Enable smooth scrolling",
"app-restart-required": "(a restart of the application is required for the change to take effect)"
},
"ai_llm": {
"not_started": "Not started",
@@ -1496,7 +1517,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. The default issuer is Google, but you can change it to any other OpenID provider. Check <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">here</a> for more information. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
"oauth_description_warning": "To enable OAuth/OpenID, you need to set the OAuth/OpenID base URL, client ID and client secret in the config.ini file and restart the application. If you want to set from environment variables, please set TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Missing settings: {{variables}}",
"oauth_missing_vars": "Missing settings: {{-variables}}",
"oauth_user_account": "User Account: ",
"oauth_user_email": "User Email: ",
"oauth_user_not_logged_in": "Not logged in!"
@@ -1569,10 +1590,12 @@
"button-tree-map": "Tree map"
},
"tree-context-menu": {
"open-in-a-new-tab": "Open in a new tab <kbd>Ctrl+Click</kbd>",
"open-in-a-new-tab": "Open in a new tab",
"open-in-a-new-split": "Open in a new split",
"insert-note-after": "Insert note after",
"insert-child-note": "Insert child note",
"archive": "Archive",
"unarchive": "Unarchive",
"delete": "Delete",
"search-in-subtree": "Search in subtree",
"hoist-note": "Hoist note",
@@ -1764,7 +1787,9 @@
"ws": {
"sync-check-failed": "Sync check failed!",
"consistency-checks-failed": "Consistency checks failed! See logs for details.",
"encountered-error": "Encountered error \"{{message}}\", check out the console."
"encountered-error": "Encountered error \"{{message}}\", check out the console.",
"lost-websocket-connection-title": "Lost connection to the server",
"lost-websocket-connection-message": "Check your reverse proxy (e.g. nginx or Apache) configuration to ensure WebSocket connections are properly allowed and not being blocked."
},
"hoisted_note": {
"confirm_unhoisting": "Requested note '{{requestedNote}}' is outside of hoisted note '{{hoistedNote}}' subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?"
@@ -1840,7 +1865,7 @@
"native-title-bar": "Native title bar",
"native-title-bar-description": "For Windows and macOS, keeping the native title bar off makes the application look more compact. On Linux, keeping the native title bar on integrates better with the rest of the system.",
"background-effects": "Enable background effects (Windows 11 only)",
"background-effects-description": "The Mica effect adds a blurred, stylish background to app windows, creating depth and a modern look.",
"background-effects-description": "The Mica effect adds a blurred, stylish background to app windows, creating depth and a modern look. \"Native title bar\" must be disabled.",
"restart-app-button": "Restart the application to view the changes",
"zoom-factor": "Zoom factor"
},
@@ -1939,7 +1964,11 @@
"editorfeatures": {
"title": "Features",
"emoji_completion_enabled": "Enable Emoji auto-completion",
"note_completion_enabled": "Enable note auto-completion"
"emoji_completion_description": "If enabled, emojis can be easily inserted into text by typing `:`, followed by the name of an emoji.",
"note_completion_enabled": "Enable note auto-completion",
"note_completion_description": "If enabled, links to notes can be created by typing `@` followed by the title of a note.",
"slash_commands_enabled": "Enable slash commands",
"slash_commands_description": "If enabled, editing commands such as inserting line breaks or headings can be toggled by typing `/`."
},
"table_view": {
"new-row": "New row",
@@ -1975,14 +2004,21 @@
"delete_row": "Delete row"
},
"board_view": {
"delete-note": "Delete Note",
"delete-note": "Delete note...",
"remove-from-board": "Remove from board",
"archive-note": "Archive note",
"unarchive-note": "Unarchive note",
"move-to": "Move to",
"insert-above": "Insert above",
"insert-below": "Insert below",
"delete-column": "Delete column",
"delete-column-confirmation": "Are you sure you want to delete this column? The corresponding attribute will be deleted in the notes under this column as well.",
"new-item": "New item",
"add-column": "Add Column"
"new-item-placeholder": "Enter note title...",
"add-column": "Add Column",
"add-column-placeholder": "Enter column name...",
"edit-note-title": "Click to edit note title",
"edit-column-title": "Click to edit column title"
},
"command_palette": {
"tree-action-name": "Tree: {{name}}",
@@ -2024,5 +2060,12 @@
},
"units": {
"percentage": "%"
},
"pagination": {
"page_title": "Page of {{startIndex}} - {{endIndex}}",
"total_notes": "{{count}} notes"
},
"collections": {
"rendering_error": "Unable to show content due to an error."
}
}

View File

@@ -276,7 +276,12 @@
"mime": "MIME: ",
"file_size": "Tamaño del archivo:",
"preview": "Vista previa:",
"preview_not_available": "La vista previa no está disponible para este tipo de notas."
"preview_not_available": "La vista previa no está disponible para este tipo de notas.",
"diff_off": "Mostrar contenido",
"diff_on": "Mostrar diferencia",
"diff_off_hint": "Haga clic para mostrar el contenido de la nota",
"diff_not_available": "Diferencias no disponibles.",
"diff_on_hint": "Haga clic para ver las diferencias"
},
"sort_child_notes": {
"sort_children_by": "Ordenar hijos por...",
@@ -577,7 +582,7 @@
"cannot_find_day_note": "No se puede encontrar la nota del día",
"cannot_find_week_note": "No se puede encontrar la nota de la semana",
"january": "Enero",
"febuary": "Febrero",
"february": "Febrero",
"march": "Marzo",
"april": "Abril",
"may": "Mayo",
@@ -587,7 +592,18 @@
"september": "Septiembre",
"october": "Octubre",
"november": "Noviembre",
"december": "Diciembre"
"december": "Diciembre",
"week": "Semana",
"week_previous": "Semana anterior",
"week_next": "Semana siguiente",
"month": "Mes",
"month_previous": "Mes anterior",
"month_next": "Mes siguiente",
"year": "Año",
"year_previous": "Año anterior",
"year_next": "Año siguiente",
"list": "Lista",
"today": "Hoy"
},
"close_pane_button": {
"close_this_pane": "Cerrar este panel"
@@ -748,7 +764,8 @@
"book_properties": "Propiedades de colección",
"table": "Tabla",
"geo-map": "Mapa Geo",
"board": "Tablero"
"board": "Tablero",
"include_archived_notes": "Mostrar notas archivadas"
},
"edited_notes": {
"no_edited_notes_found": "Aún no hay notas editadas en este día...",
@@ -949,7 +966,9 @@
"no_attachments": "Esta nota no tiene archivos adjuntos."
},
"book": {
"no_children_help": "Esta nota de tipo libro no tiene ninguna subnota así que no hay nada que mostrar. Véa la <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para más detalles."
"no_children_help": "Esta nota de tipo libro no tiene ninguna subnota así que no hay nada que mostrar. Véa la <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para más detalles.",
"drag_locked_title": "Bloqueado para edición",
"drag_locked_message": "No se permite Arrastrar pues la colección está bloqueada para edición."
},
"editable_code": {
"placeholder": "Escriba el contenido de su nota de código aquí..."
@@ -1490,7 +1509,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID es una forma estandarizada de permitirle iniciar sesión en sitios web utilizando una cuenta de otro servicio, como Google, para verificar su identidad. Siga estas <a href = \"https://developers.google.com/identity/openid-connect/openid-connect\">instrucciones</a> para configurar un servicio OpenID a través de Google.",
"oauth_description_warning": "Para habilitar OAuth/OpenID, necesita establecer la URL base de OAuth/OpenID, ID de cliente y secreto de cliente en el archivo config.ini y reiniciar la aplicación. Si desea establecerlas desde variables de ambiente, por favor establezca TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID y TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Ajustes faltantes: {{variables}}",
"oauth_missing_vars": "Ajustes faltantes: {{-variables}}",
"oauth_user_account": "Cuenta de usuario: ",
"oauth_user_email": "Correo electrónico de usuario: ",
"oauth_user_not_logged_in": "¡No ha iniciado sesión!"
@@ -1563,7 +1582,7 @@
"button-tree-map": "Mapa de Árbol"
},
"tree-context-menu": {
"open-in-a-new-tab": "Abrir en nueva pestaña <kbd>Ctrl+Click</kbd>",
"open-in-a-new-tab": "Abrir en nueva pestaña",
"open-in-a-new-split": "Abrir en nueva división",
"insert-note-after": "Insertar nota después de",
"insert-child-note": "Insertar subnota",
@@ -1593,7 +1612,9 @@
"apply-bulk-actions": "Aplicar acciones en lote",
"converted-to-attachments": "{{count}} notas han sido convertidas en archivos adjuntos.",
"convert-to-attachment-confirm": "¿Está seguro que desea convertir las notas seleccionadas en archivos adjuntos de sus notas padres?",
"open-in-popup": "Edición rápida"
"open-in-popup": "Edición rápida",
"archive": "Archivar",
"unarchive": "Desarchivar"
},
"shared_info": {
"shared_publicly": "Esta nota está compartida públicamente en {{- link}}",
@@ -1676,7 +1697,8 @@
"hoist-this-note-workspace": "Anclar esta nota (espacio de trabajo)",
"refresh-saved-search-results": "Refrescar resultados de búsqueda guardados",
"create-child-note": "Crear subnota",
"unhoist": "Desanclar"
"unhoist": "Desanclar",
"toggle-sidebar": "Alternar barra lateral"
},
"title_bar_buttons": {
"window-on-top": "Mantener esta ventana en la parte superior"
@@ -1751,13 +1773,15 @@
"undeleting-notes-finished-successfully": "La recuperación de notas finalizó exitosamente."
},
"frontend_script_api": {
"async_warning": "Está pasando una función asíncrona a `api.runOnBackend ()` que probablemente no funcionará como pretendía.",
"sync_warning": "Estás pasando una función sincrónica a `api.runasynconbackendwithmanualTransactionHandling ()`, \\ n while debería usar `api.runonbackend ()` en su lugar."
"async_warning": "Está pasando una función asíncrona a `api.runOnBackend ()` que probablemente no funcionará como pretendía.\\nO haga la función sincrónica (removiendo la palabra `async`), o use `api.runAsyncOnBackendWithManualTransactionHandling()`.",
"sync_warning": "Estás pasando una función sincrónica a `api.runasynconbackendwithmanualTransactionHandling ()`, \\n while debería usar `api.runonbackend ()` en su lugar."
},
"ws": {
"sync-check-failed": "¡La comprobación de sincronización falló!",
"consistency-checks-failed": "¡Las comprobaciones de consistencia fallaron! Vea los registros para más detalles.",
"encountered-error": "Error encontrado \"{{message}}\", compruebe la consola."
"encountered-error": "Error encontrado \"{{message}}\", compruebe la consola.",
"lost-websocket-connection-title": "Se ha perdido la conexión con el servidor",
"lost-websocket-connection-message": "Compruebe la configuración de su proxy inverso (por ejemplo, nginx o Apache) para asegurarse de que las conexiones WebSocket están correctamente permitidas y no están bloqueadas."
},
"hoisted_note": {
"confirm_unhoisting": "La nota requerida '{{requestedNote}}' está fuera del subárbol de la nota anclada '{{hoistedNote}}' y debe desanclarla para acceder a la nota. ¿Desea proceder con el desanclaje?"
@@ -1833,7 +1857,7 @@
"native-title-bar": "Barra de título nativa",
"native-title-bar-description": "Para Windows y macOS, quitar la barra de título nativa hace que la aplicación se vea más compacta. En Linux, mantener la barra de título nativa hace que se integre mejor con el resto del sistema.",
"background-effects": "Habilitar efectos de fondo (sólo en Windows 11)",
"background-effects-description": "El efecto Mica agrega un fondo borroso y elegante a las ventanas de aplicaciones, creando profundidad y un aspecto moderno.",
"background-effects-description": "El efecto Mica agrega un fondo borroso y elegante a las ventanas de la aplicación, creando profundidad y un aspecto moderno. \"Título nativo de la barra\" debe deshabilitarse.",
"restart-app-button": "Reiniciar la aplicación para ver los cambios",
"zoom-factor": "Factor de zoom"
},
@@ -1943,14 +1967,20 @@
"delete_row": "Eliminar fila"
},
"board_view": {
"delete-note": "Eliminar nota",
"delete-note": "Eliminar nota...",
"move-to": "Mover a",
"insert-above": "Insertar arriba",
"insert-below": "Insertar abajo",
"delete-column": "Eliminar columna",
"delete-column-confirmation": "¿Seguro que desea eliminar esta columna? El atributo correspondiente también se eliminará de las notas de esta columna.",
"add-column": "Añadir columna",
"new-item": "Nuevo elemento"
"new-item": "Nuevo elemento",
"archive-note": "Archivar nota",
"unarchive-note": "Desarchivar nota",
"new-item-placeholder": "Ingresar título de la nota...",
"add-column-placeholder": "Ingresar título de la columna...",
"edit-note-title": "Haga clic para editar el título de la nota",
"edit-column-title": "Haga clic para editar el título de la columna"
},
"content_renderer": {
"open_externally": "Abrir externamente"
@@ -1978,7 +2008,11 @@
"editorfeatures": {
"note_completion_enabled": "Activar autocompletado de notas",
"emoji_completion_enabled": "Activar autocompletado de emojis",
"title": "Funciones"
"title": "Funciones",
"emoji_completion_description": "Si está habilitado, los emojis pueden fácilmente insertarse en el texto escribiendo `:`, seguido del nombre de un emoji.",
"note_completion_description": "Si está habilitado, los vínculos a notas pueden crearse escribiendo `@` seguido del título de una nota.",
"slash_commands_enabled": "Habilitar comandos de barra",
"slash_commands_description": "Si está habilitado, editar comandos como insertar saltos de línea o títulos, puede alternarse escribiendo `/`."
},
"command_palette": {
"tree-action-name": "Árbol:{{name}}",
@@ -2012,7 +2046,9 @@
"title": "Rendimiento",
"enable-motion": "Habilitar transiciones y animaciones",
"enable-shadows": "Activar sombras",
"enable-backdrop-effects": "Habilitar efectos de fondo para menús, ventanas emergentes y paneles"
"enable-backdrop-effects": "Habilitar efectos de fondo para menús, ventanas emergentes y paneles",
"enable-smooth-scroll": "Habilitar desplazamiento suave",
"app-restart-required": "(es necesario reiniciar la aplicación para que el cambio surta efecto)"
},
"settings": {
"related_settings": "Configuración relacionada"
@@ -2023,5 +2059,9 @@
},
"units": {
"percentage": "%"
},
"pagination": {
"total_notes": "{{count}} notas",
"page_title": "Página de {{startIndex}} - {{endIndex}}"
}
}

View File

@@ -15,6 +15,9 @@
},
"widget-error": {
"title": "Widgetin luonti epäonnistui"
},
"bundle-error": {
"title": "Mukautetun skriptin lataus epäonnistui"
}
},
"add_link": {

View File

@@ -576,7 +576,7 @@
"sun": "Dim",
"cannot_find_day_note": "Note journalière introuvable",
"january": "Janvier",
"febuary": "Février",
"february": "Février",
"march": "Mars",
"april": "Avril",
"may": "Mai",
@@ -587,7 +587,18 @@
"october": "Octobre",
"november": "Novembre",
"december": "Décembre",
"cannot_find_week_note": "Impossible de trouver la note de la semaine"
"cannot_find_week_note": "Impossible de trouver la note de la semaine",
"week": "Semaine",
"week_previous": "Semaine précédente",
"week_next": "Semaine suivante",
"month": "Mois",
"month_previous": "Mois précédent",
"month_next": "Mois suivant",
"year": "Année",
"year_previous": "Année précédente",
"year_next": "Année suivante",
"list": "Liste",
"today": "Aujourd'hui"
},
"close_pane_button": {
"close_this_pane": "Fermer ce volet"
@@ -732,7 +743,8 @@
"note_type": "Type de note",
"editable": "Modifiable",
"basic_properties": "Propriétés de base",
"language": "Langage"
"language": "Langage",
"configure_code_notes": "Configurer les notes de code..."
},
"book_properties": {
"view_type": "Type d'affichage",
@@ -747,7 +759,8 @@
"book_properties": "Propriétés de la collection",
"table": "Tableau",
"geo-map": "Carte géographique",
"board": "Tableau de bord"
"board": "Tableau de bord",
"include_archived_notes": "Afficher les notes archivées"
},
"edited_notes": {
"no_edited_notes_found": "Aucune note modifiée ce jour-là...",
@@ -948,7 +961,9 @@
"no_attachments": "Cette note ne contient aucune pièce jointe."
},
"book": {
"no_children_help": "Cette note de type Livre n'a aucune note enfant, donc il n'y a rien à afficher. Consultez le <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pour plus de détails."
"no_children_help": "Cette note de type Livre n'a aucune note enfant, donc il n'y a rien à afficher. Consultez le <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pour plus de détails.",
"drag_locked_title": "Edition verrouillée",
"drag_locked_message": "Le glisser-déposer n'est pas autorisé car l'édition de cette collection est verrouillé."
},
"editable_code": {
"placeholder": "Saisir le contenu de votre note de code ici..."
@@ -1357,7 +1372,7 @@
"button-tree-map": "Carte de l'arborescence"
},
"tree-context-menu": {
"open-in-a-new-tab": "Ouvrir dans un nouvel onglet <kbd>Ctrl+Clic</kbd>",
"open-in-a-new-tab": "Ouvrir dans un nouvel onglet",
"open-in-a-new-split": "Ouvrir dans une nouvelle division",
"insert-note-after": "Insérer une note après",
"insert-child-note": "Insérer une note enfant",
@@ -1690,6 +1705,72 @@
"anthropic_configuration": "Configuration Anthropic",
"voyage_configuration": "Configuration IA Voyage",
"voyage_url_description": "Défaut: https://api.voyageai.com/v1",
"ollama_configuration": "Configuration Ollama"
"ollama_configuration": "Configuration Ollama",
"total_notes": "Notes totales",
"progress": "Progrès",
"queued_notes": "Notes dans la file d'attente",
"refresh_stats": "Rafraîchir les statistiques",
"enable_ai_features": "Activer les fonctionnalités IA/LLM",
"enable_ai_description": "Activer les fonctionnalités IA telles que le résumé des notes, la génération de contenu et autres fonctionnalités LLM",
"openai_tab": "OpenAI",
"anthropic_tab": "Anthropic",
"voyage_tab": "Voyage AI",
"ollama_tab": "Ollama",
"enable_ai": "Activer les fonctionnalités IA/LLM",
"enable_ai_desc": "Activer les fonctionnalités IA telles que le résumé des notes, la génération de contenu et autres fonctionnalités LLM",
"provider_configuration": "Configuration du fournisseur IA",
"provider_precedence_description": "Liste de fournisseurs séparés par virgule, par ordre de préférence (ex. 'openai,anthopic,ollama')",
"temperature": "Température",
"temperature_description": "Contrôle de l'aléatoirité dans les réponses (0 = déterministe, 2 = hasard maximum)",
"system_prompt": "Prompt système",
"system_prompt_description": "Prompt système par défaut pour toutes les intéractions IA",
"openai_configuration": "Configuration OpenAI",
"openai_settings": "Options OpenAI",
"api_key": "Clef API",
"url": "URL de base",
"model": "Modèle",
"openai_api_key_description": "Votre clef API OpenAI pour accéder à leurs services IA",
"anthropic_api_key_description": "Votre clef API Anthropic pour accéder aux modèles Claude",
"default_model": "Modèle par défaut",
"openai_model_description": "Exemples : gpt-4o, gpt-4-turbo, gpt-3.5-turbo",
"base_url": "URL de base",
"openai_url_description": "Défaut : https://api.openai.com/v1",
"anthropic_settings": "Réglages Anthropic",
"enable_ollama": "Activer Ollama",
"enable_ollama_description": "Activer Ollama comme modèle d'IA local",
"ollama_url": "URL Ollama",
"ollama_model": "Modèle Ollama",
"refresh_models": "Rafraîchir les modèles",
"refreshing_models": "Mise à jour...",
"enable_automatic_indexing": "Activer l'indexage automatique",
"rebuild_index": "Rafraîchir l'index",
"rebuild_index_error": "Erreur dans le démarrage du rafraichissement de l'index. Veuillez consulter les logs pour plus de détails.",
"note_title": "Titre de la note",
"error": "Erreur",
"last_attempt": "Dernier essai",
"actions": "Actions",
"retry": "Réessayer",
"partial": "Complété à {{ percentage }}%",
"retry_queued": "Note ajoutée à la file d'attente",
"retry_failed": "Echec de l'ajout de la note à la file d'attente",
"max_notes_per_llm_query": "Notes maximum par requête",
"max_notes_per_llm_query_description": "Nombre maximum de notes similaires à inclure dans le contexte IA",
"active_providers": "Fournisseurs actifs",
"disabled_providers": "Fournisseurs désactivés",
"remove_provider": "Retirer le fournisseur de la recherche",
"similarity_threshold": "Seuil de similarité",
"similarity_threshold_description": "Seuil de similarité minimum (0-1) pour que inclure les notes dans le contexte d'une requête IA",
"reprocess_index": "Rafraîchir l'index de recherche",
"reprocessing_index": "Mise à jour...",
"reprocess_index_started": "L'optimisation de l'indice de recherche à commencer en arrière-plan",
"reprocess_index_error": "Erreur dans le rafraichissement de l'indice de recherche"
},
"ui-performance": {
"title": "Performance",
"enable-motion": "Activer les transitions et animations",
"enable-shadows": "Activer les ombres",
"enable-backdrop-effects": "Activer les effets d'arrière plan pour les menus, popups et panneaux",
"enable-smooth-scroll": "Active le défilement fluide",
"app-restart-required": "(redémarrer l'application pour appliquer les changements)"
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -31,7 +31,7 @@
"link_title_mirrors": "il titolo del collegamento rispecchia il titolo della nota corrente",
"link_title_arbitrary": "il titolo del collegamento può essere modificato arbitrariamente",
"link_title": "Titolo del collegamento",
"button_add_link": "Aggiungi il collegamento <kbd>invio</kbd>",
"button_add_link": "Aggiungi il collegamento",
"help_on_links": "Aiuto sui collegamenti"
},
"branch_prefix": {
@@ -63,7 +63,7 @@
"search_for_note_by_its_name": "cerca una nota per nome",
"cloned_note_prefix_title": "Le note clonate saranno mostrate nell'albero delle note con il dato prefisso",
"prefix_optional": "Prefisso (opzionale)",
"clone_to_selected_note": "Clona sotto la nota selezionata <kbd>invio</kbd>",
"clone_to_selected_note": "Clona verso la nota selezionata <kbd>invio</kbd>",
"no_path_to_clone_to": "Nessun percorso per clonare dentro.",
"note_cloned": "La nota \"{{clonedTitle}}\" è stata clonata in \"{{targetTitle}}\""
},
@@ -79,7 +79,7 @@
"ok": "OK",
"close": "Chiudi",
"delete_notes_preview": "Anteprima di eliminazione delle note",
"delete_all_clones_description": "Elimina anche tutti i cloni (può essere disfatto tramite i cambiamenti recenti)",
"delete_all_clones_description": "Elimina anche tutti i cloni (può essere ripristinato nella sezione cambiamenti recenti)",
"erase_notes_description": "L'eliminazione normale (soft) marca le note come eliminate e potranno essere recuperate entro un certo lasso di tempo (dalla finestra dei cambiamenti recenti). Selezionando questa opzione le note si elimineranno immediatamente e non sarà possibile recuperarle.",
"erase_notes_warning": "Elimina le note in modo permanente (non potrà essere disfatto), compresi tutti i cloni. Ciò forzerà un nuovo caricamento dell'applicazione.",
"cancel": "Annulla",
@@ -105,7 +105,10 @@
"format_html": "HTML - raccomandato in quanto mantiene tutti i formati",
"format_html_zip": "HTML in archivio ZIP - questo è raccomandato in quanto conserva tutta la formattazione.",
"format_markdown": "MArkdown - questo conserva la maggior parte della formattazione.",
"export_type_single": "Solo questa nota, senza le sottostanti"
"export_type_single": "Solo questa nota, senza le sottostanti",
"format_opml": "OPML - formato per scambio informazioni outline. Formattazione, immagini e files non sono inclusi.",
"opml_version_1": "OPML v.1.0 - solo testo semplice",
"opml_version_2": "OPML v2.0 - supporta anche HTML"
},
"password_not_set": {
"body1": "Le note protette sono crittografate utilizzando una password utente, ma la password non è stata ancora impostata.",

File diff suppressed because it is too large Load Diff

View File

@@ -15,15 +15,39 @@
"message": "클라이언트 애플리케이션 시작 도중 심각한 오류가 발생했습니다:\n\n{{message}}\n\n이는 스크립트가 예기치 않게 실패하면서 발생한 것일 수 있습니다. 애플리케이션을 안전 모드로 시작한 뒤 문제를 해결해 보세요."
},
"widget-error": {
"title": "위젯 초기화 실패"
"title": "위젯 초기화 실패",
"message-custom": "ID가 \"{{id}}\"고 ,제목이 \"{{title}}\" 인 노트에서 사용자 지정 위젯을 초기화 하는데 실패했습니다:\n\n{{message}}",
"message-unknown": "알 수 없는 위젯이 초기화 하는데 실패했습니다:\n\n{{message}}"
},
"bundle-error": {
"title": "사용자 정의 스크립트를 불러오는데 실패했습니다",
"message": "ID가 \"{{id}}\"고, 제목이 \"{{title}}\"인 노트에서 스크립트가 실행되지 못했습니다:\n\n{{message}}"
}
},
"add_link": {
"add_link": "링크 추가",
"note": "노트",
"search_note": "이름으로 노트 검색하기"
"search_note": "이름으로 노트 검색하기",
"help_on_links": "링크 관련 도움말",
"link_title_mirrors": "링크 제목은 노트의 현재 제목을 반영합니다",
"link_title_arbitrary": "링크 제목은 임의로 변경될 수 있습니다",
"link_title": "링크 제목",
"button_add_link": "링크 추가"
},
"branch_prefix": {
"save": "저장"
"save": "저장",
"edit_branch_prefix": "브랜치 접두사 편집",
"help_on_tree_prefix": "트리 접두사에 대한 도움말",
"prefix": "접두사: ",
"branch_prefix_saved": "브랜치 접두사가 저장되었습니다."
},
"bulk_actions": {
"bulk_actions": "대량 작업",
"affected_notes": "영향을 받은 노트들",
"include_descendants": "선택한 노트의 자손 포함",
"available_actions": "가능한 액션들",
"chosen_actions": "선택한 액션들",
"execute_bulk_actions": "대량 액션들 실행",
"bulk_actions_executed": "대량 액션들이 성공적으로 실행되었습니다."
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -4,6 +4,67 @@
"homepage": "Homepagina:",
"app_version": "App versie:",
"db_version": "DB Versie:",
"sync_version": "Sync Versie:"
"sync_version": "Sync Versie:",
"build_date": "Build datum:",
"build_revision": "Build revisie:",
"data_directory": "Gegevensmap:"
},
"toast": {
"critical-error": {
"title": "Kritische Error",
"message": "Een kritieke fout heeft plaatsgevonden waardoor de cliënt zich aanmeldt vanaf het begin:\n\n84X\n\nDit is waarschijnlijk veroorzaakt door een script dat op een onverwachte manier faalt. Probeer de sollicitatie in veilige modus te starten en de kwestie aan te spreken."
}
},
"add_link": {
"add_link": "Voeg link toe",
"help_on_links": "Hulp bij links",
"note": "notitie",
"search_note": "zoek voor notitie op naam",
"link_title_mirrors": "De link titel is hetzelfde als de notitie's huidige titel",
"link_title": "Link titel",
"button_add_link": "Link toevoegen"
},
"branch_prefix": {
"edit_branch_prefix": "Bewerk branch prefix",
"save": "Opslaan",
"branch_prefix_saved": "Branch prefix is opgeslagen.",
"help_on_tree_prefix": "Help bij boomvoorvoegsel",
"prefix": "Voorvoegsel: "
},
"bulk_actions": {
"bulk_actions": "Bulk acties",
"affected_notes": "Getroffen notities",
"available_actions": "Beschikbare acties",
"chosen_actions": "Kies acties",
"execute_bulk_actions": "Bulk acties uitvoeren",
"bulk_actions_executed": "Bulk acties zijn succesvol uitgevoerd.",
"none_yet": "Nog niks... voeg een actie toe door een van de beschikbare bovenstaande opties te klikken.",
"labels": "Labels",
"relations": "Relaties",
"notes": "Notities",
"other": "Andere"
},
"calendar": {
"april": "April",
"may": "Mei",
"june": "Juni",
"july": "Juli",
"august": "Augustus",
"september": "September",
"october": "Oktober",
"november": "November",
"december": "December"
},
"close_pane_button": {
"close_this_pane": "Sluit dit paneel"
},
"create_pane_button": {
"create_new_split": "Maak nieuwe split"
},
"edit_button": {
"edit_this_note": "Notitie bewerken"
},
"show_toc_widget_button": {
"show_toc": "Laat Inhoudsopgave zien"
}
}

View File

@@ -30,13 +30,16 @@
"search_note": "Wyszukaj notatkę po nazwie",
"link_title_arbitrary": "Tytuł linku można dowolnie zmieniać",
"link_title": "Tytuł linku",
"button_add_link": "Dodaj link"
"button_add_link": "Dodaj link",
"help_on_links": "Pomoc dotycząca linków",
"link_title_mirrors": "tytuł linku odzwierciedla tytuł obecnej notatki"
},
"branch_prefix": {
"save": "Zapisz",
"edit_branch_prefix": "Edytuj prefiks gałęzi",
"prefix": "Prefiks: ",
"branch_prefix_saved": "Zapisano prefiks gałęzi."
"branch_prefix_saved": "Zapisano prefiks gałęzi.",
"help_on_tree_prefix": "Pomoc dotycząca prefiksu drzewa"
},
"bulk_actions": {
"labels": "Etykiety",
@@ -49,7 +52,8 @@
"chosen_actions": "Wybrane działania",
"execute_bulk_actions": "Wykonaj zbiór działań",
"bulk_actions_executed": "Zbiór działań został wykonany prawidłowo.",
"none_yet": "Brak zaznaczonych działań... dodaj działanie poprzez kliknięcie jednej z dostępnych opcji powyżej."
"none_yet": "Brak zaznaczonych działań... dodaj działanie poprzez kliknięcie jednej z dostępnych opcji powyżej.",
"affected_notes": "Dotyczy notatek"
},
"confirm": {
"ok": "OK",
@@ -98,7 +102,9 @@
"prefix_optional": "Prefiks (opcjonalne)",
"clone_to_selected_note": "Sklonuj do wybranej notatki",
"no_path_to_clone_to": "Brak ścieżki do sklonowania.",
"note_cloned": "Notatka \"{{clonedTitle}}\" została sklonowana do \"{{targetTitle}}\""
"note_cloned": "Notatka \"{{clonedTitle}}\" została sklonowana do \"{{targetTitle}}\"",
"help_on_links": "Pomoc dotycząca linków",
"target_parent_note": "Docelowa główna notatka"
},
"help": {
"title": "Ściągawka",
@@ -134,6 +140,495 @@
"cutNotes": "przytnij obecną notatkę (lub obecną sekcję) do schowka (zastosowanie dla przenoszenia notatek)",
"pasteNotes": "wklej notatkę jako podnotatka w obecnej notatce (rozumiane jako przenieś lub skopiuj, w zależności czy notatka była skopiowana czy wycięta)",
"deleteNotes": "usuń notatkę / gałąź",
"editingNotes": "Edytowanie notatek"
"editingNotes": "Edytowanie notatek",
"other": "Inne",
"editNoteTitle": "W panelu drzewa nastąpi przejście z panelu drzewa do tytułu notatki. Naciśnięcie klawisza Enter w tytule notatki spowoduje przejście do edytora tekstu. <kbd>Ctrl+.</kbd> spowoduje powrót z edytora do panelu drzewa.",
"createEditLink": "stwórz / edytuj zewnętrzny link",
"createInternalLink": "stwórz wewnętrzny link",
"followLink": "kliknij link pod kursorem",
"insertDateTime": "wstaw aktualną datę i godzinę w pozycji kursora",
"markdownAutoformat": "Autoformatowanie w stylu Markdown",
"headings": "<code>##</code>, <code>###</code>, <code>####</code> itd., po których następuje miejsce na nagłówki",
"bulletList": "<code>*</code> lub <code>-</code>, a następnie spacja, aby utworzyć listę",
"jumpToTreePane": "przejdź do panelu drzewa i przewiń do aktywnej notatki",
"numberedList": "<code>1.</code> or <code>1)</code> po którym następuje miejsce na listę numerowaną",
"blockQuote": "zacznij linijkę od <code></code> aby po kliknięciu spacji dodać blok cytatu",
"troubleshooting": "Rozwiązywanie błędów",
"reloadFrontend": "Załaduj ponownie Frontend Trilium",
"showDevTools": "pokaż narzędzia deweloperskie",
"showSQLConsole": "pokaż konsolę SQL",
"quickSearch": "skup się na szybkim wyszukiwaniu",
"inPageSearch": "wyszukiwanie wewnątrz strony"
},
"book_properties": {
"list": "Lista"
},
"board_view": {
"move-to": "Przenieś do",
"insert-above": "Umieść nad",
"insert-below": "Umieść pod",
"delete-column": "Usuń kolumnę",
"delete-column-confirmation": "Czy na pewno chcesz usunąć tę kolumnę? Odpowiedni atrybut zostanie również usunięty w notatkach pod tą kolumną.",
"new-item": "Nowy element",
"new-item-placeholder": "Wpisz tytuł notatki...",
"add-column": "Dodaj kolumnę",
"add-column-placeholder": "Wpisz tytuł kolumny...",
"edit-note-title": "Naciśnij aby edytować tytuł notatki",
"edit-column-title": "Naciśnij aby edytować tytuł kolumny",
"delete-note": "Usuń notatkę...",
"remove-from-board": "Usuń z tablicy",
"archive-note": "Archiwalna notatka",
"unarchive-note": "Usuń notatkę z archiwum"
},
"command_palette": {
"tree-action-name": "Drzewo: {{name}}",
"export_note_title": "Wyeksportuj notatkę",
"export_note_description": "Wyeksportuj aktualną notatkę",
"show_attachments_title": "Pokaż załączniki",
"show_attachments_description": "Zobacz załączniki notatki",
"search_notes_title": "Szukaj notatek",
"search_notes_description": "Otwórz zaawansowane wyszukiwanie",
"search_subtree_title": "Poszukaj w poddrzewie",
"search_subtree_description": "poszukaj wewnątrz poddrzewa",
"search_history_title": "Pokaż historię wyszukiwania",
"search_history_description": "Pokaż poprzednie wyszukiwania",
"configure_launch_bar_title": "Ustaw Launch Bar",
"configure_launch_bar_description": "Otwórz konfigurację Launch Bar, aby dodać lub usunąć elementy."
},
"content_renderer": {
"open_externally": "Otwórz zewnętrznie"
},
"modal": {
"close": "Zamknij",
"help_title": "Pokaż więcej informacji na temat tego ekranu"
},
"call_to_action": {
"next_theme_title": "Spróbuj nowy motyw Trilium",
"next_theme_message": "Obecnie używasz starszego motywu. Czy chcesz wypróbować nowy motyw?",
"next_theme_button": "Spróbuj nowego motywu",
"background_effects_title": "Efekty w tle są już stabilne",
"dismiss": "Odrzuć",
"background_effects_button": "Włącz efekty w tle"
},
"settings": {
"related_settings": "Powiązane ustawienia"
},
"settings_appearance": {
"related_code_blocks": "Schemat kolorów dla bloków kodu w notatkach tekstowych",
"related_code_notes": "Schemat kolorów dla kodu"
},
"units": {
"percentage": "%"
},
"pagination": {
"page_title": "Strony:{{startIndex}}-{{endIndex}}",
"total_notes": "{{count}}notatek"
},
"collections": {
"rendering_error": "Błąd - Nie można pokazać treści."
},
"add_label": {
"add_label": "Dodaj etykietę",
"label_name_placeholder": "Nazwa etykiety",
"label_name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.",
"to_value": "do wartości",
"new_value_placeholder": "nowa wartość",
"help_text": "We wszystkich dopasowanych notatkach:",
"help_text_item2": "albo zmień wartość istniejącej etykiety"
},
"attribute_detail": {
"delete": "Usuń",
"related_notes_title": "Inne notatki z tą etykietą",
"more_notes": "Więcej notatek",
"label": "Szczegóły etykiety",
"label_definition": "Szczegóły definicji etykiety",
"relation": "Szczegóły powiązania",
"relation_definition": "Szczegóły definicji powiązania",
"disable_versioning": "Wyłącza automatyczne wersjonowanie. Przydatne np. w przypadku dużych, ale nieistotnych notatek np. dużych bibliotek JS używanych do skryptów",
"precision": "Prezycja",
"digits": "znaki",
"inverse_relation_title": "Opcjonalne ustawienie definiujące, do której relacji jest ta relacja przeciwna. Przykład: Główna - podnotatka są relacjami odwrotnymi do siebie.",
"inverse_relation": "Odwrócone powiązanie"
},
"import": {
"importIntoNote": "Importuj do notatki",
"chooseImportFile": "Wybierz plik do zaimportowania",
"importDescription": "Zawartość wybranego pliku(ów) zostanie zaimportowana jako notatka(i) podrzędna(e) do",
"options": "Opcje",
"shrinkImages": "Zmniejsz obrazy",
"safeImport": "Bezpieczny import",
"import-status": "Status importu",
"in-progress": "Import w trakcie: {{progress}}",
"successful": "Importowanie zakończone sukcesem.",
"safeImportTooltip": "Pliki eksportu Trilium <code>.zip</code> mogą zawierać skrypty wykonywalne, które mogą powodować szkodliwe zachowania. Bezpieczny import dezaktywuje automatyczne wykonywanie wszystkich importowanych skryptów. Odznacz opcję „Bezpieczny import” tylko wtedy, gdy importowane archiwum ma zawierać skrypty wykonywalne i masz pełne zaufanie do zawartości importowanego pliku.",
"import": "Import",
"failed": "Błąd importu: {{message}}.",
"html_import_tags": {
"title": "Tagi importu HTML",
"description": "Skonfiguruj, które tagi HTML mają zostać zachowane podczas importowania notatek. Tagi spoza tej listy zostaną usunięte podczas importu. Niektóre tagi (np. „script”) są zawsze usuwane ze względów bezpieczeństwa.",
"placeholder": "Wpisz tagi HTML, jedna na linijkę",
"reset_button": "Zresetuj do domyślnej listy"
}
},
"image_properties": {
"title": "Obraz",
"original_file_name": "Oryginalna nazwa pliku",
"file_type": "Typ pliku",
"file_size": "Rozmiar pliku",
"download": "Pobierz",
"open": "Otwórz",
"copy_reference_to_clipboard": "Kopiuj odniesienie do schowka",
"upload_new_revision": "Wgraj nową wersję",
"upload_success": "Nowa wersja obrazu została wysłana.",
"upload_failed": "Wysyłanie nowej wersji obrazu nie powiodło się: {{message}}"
},
"inherited_attribute_list": {
"title": "Odziedziczone atrybuty",
"no_inherited_attributes": "Brak odziedziczonych atrybutów."
},
"note_info_widget": {
"note_id": "ID notatki",
"created": "Stworzona",
"modified": "Zmodyfikowano",
"type": "Typ",
"note_size": "Rozmiar notatki",
"note_size_info": "Rozmiar notatki pozwala oszacować przybliżoną ilość miejsca potrzebnego na przechowanie jej. Uwzględnia ona jej treść oraz treść jej poprawek.",
"calculate": "oblicz",
"subtree_size": "(rozmiar poddrzewa: {{size}} w {{count}} notatkach)",
"title": "Informacje o notatce"
},
"note_map": {
"open_full": "Pełne rozszerzenie",
"collapse": "Zmniejsz do normalnego rozmiaru",
"title": "Mapa notatki",
"fix-nodes": "Napraw węzły",
"link-distance": "Odległość linku"
},
"note_paths": {
"title": "Ścieżki notatki",
"clone_button": "Sklonuj notatkę do nowej lokalizacji...",
"intro_placed": "Ta notatka jest umieszczona w następujących lokalizacjach:",
"intro_not_placed": "Ta notatka nie została jeszcze umieszczona w drzewie.",
"outside_hoisted": "Ta ścieżka znajduje się poza podniesioną notatką i trzeba ją odwiesić.",
"archived": "Zarchiwizowane",
"search": "Szukaj"
},
"note_properties": {
"this_note_was_originally_taken_from": "Ta notatka oryginalnie została wzięta z:",
"info": "Info"
},
"owned_attribute_list": {
"owned_attributes": "Posiadane atrybuty"
},
"promoted_attributes": {
"promoted_attributes": "Promowane atrybuty",
"unset-field-placeholder": "nie ustawione",
"url_placeholder": "http://strona...",
"open_external_link": "Otwórz link zewnętrzny",
"unknown_label_type": "Nieznany typ etykiety \"{{type}}\"",
"unknown_attribute_type": "Nieznany typ atrybutu \"{{type}}\"",
"add_new_attribute": "Dodaj nowy atrybut",
"remove_this_attribute": "Usuń ten atrybut",
"remove_color": "Usuń ten kolor etykiety"
},
"script_executor": {
"query": "Zapytanie",
"script": "Skrypt",
"execute_query": "Wykonaj zapytanie",
"execute_script": "Wykonaj skrypt"
},
"search_definition": {
"add_search_option": "Dodaj opcje wyszukiwania:",
"search_string": "ciąg wyszukiwania",
"search_script": "skrypt wyszukiwania",
"ancestor": "przodek",
"fast_search": "szybkie wyszukiwanie",
"fast_search_description": "Opcja szybkiego wyszukiwania wyłącza pełno tekstowe przeszukiwanie zawartości notatek, co może przyspieszyć przeszukiwanie dużych baz danych.",
"include_archived": "dodaj zarchiwizowane",
"include_archived_notes_description": "Domyślnie zarchiwizowane notatki są wyłączone z wyszukiwania, z tą opcją zostaną dodane do wyszukiwania.",
"order_by": "sortuj",
"limit": "limituj",
"limit_description": "Limituj liczbę wyników",
"save_to_note": "Zapisz do notatki",
"search_parameters": "Parametry wyszukiwania",
"unknown_search_option": "Nieznana opcja wyszukiwania {{searchOptionName}}",
"search_note_saved": "Wyszukiwana notatka została zapisana do {{- notePathTitle}}",
"actions_executed": "Akcja została wykonana."
},
"similar_notes": {
"title": "Podobne notatki",
"no_similar_notes_found": "Nie znaleziono podobnych notatek."
},
"abstract_search_option": {
"remove_this_search_option": "Usuń tą opcję wyszukiwania",
"failed_rendering": "Nieudana opcja wyszukiwania: {{dto}} z błędem: {{error}} {{stack}}"
},
"ancestor": {
"label": "Przodek",
"placeholder": "szukaj notatki po jej nazwie",
"depth_label": "glębokość",
"depth_doesnt_matter": "nie ważne",
"depth_eq": "jest dokładnie {{count}}",
"direct_children": "bezpośrednie podnotatki",
"depth_gt": "jest więcej niż {{count}}",
"depth_lt": "jest mniej niż {{count}}"
},
"debug": {
"debug": "Debuguj",
"debug_info": "Debugowanie wyświetli dodatkowe informacje debugowania w konsoli, aby ułatwić debugowanie złożonych zapytań."
},
"fast_search": {
"fast_search": "Szybkie wyszukiwanie"
},
"file_properties": {
"download": "Pobierz",
"open": "Otwórz",
"upload_new_revision": "Wgraj nową wersję",
"upload_success": "Nowa wersja pliku nie została wysłana.",
"upload_failed": "Wysyłanie nowej wersji pliku się nie udało.",
"title": "Plik"
},
"include_note": {
"label_note": "Notatka",
"placeholder_search": "szukaj notatki po jej nazwie",
"dialog_title": "Dołącz notatkę",
"button_include": "Dołącz notatkę"
},
"info": {
"closeButton": "Zamknij",
"okButton": "OK",
"modalTitle": "Wiadomość"
},
"jump_to_note": {
"search_placeholder": "Szukaj notatki po jej nazwie albo typie > komendy...",
"search_button": "Wyszukiwanie pełno tekstowe"
},
"markdown_import": {
"dialog_title": "Zaimportuj Markdown",
"import_button": "Import",
"import_success": "Treść Markdown została zaimportowana do dokumentu."
},
"limit": {
"limit": "Limit"
},
"link_context_menu": {
"open_note_in_popup": "Szybka edycja",
"open_note_in_new_tab": "Otwórz notatkę w nowej karcie",
"open_note_in_new_split": "Otwórz notatkę w nowym podziale ekranu",
"open_note_in_new_window": "Otwórz notatkę w nowym oknie"
},
"electron_integration": {
"desktop-application": "Aplikacja desktopowa"
},
"electron_context_menu": {
"cut": "Wytnij",
"copy": "Kopiuj",
"copy-link": "Kopiuj link",
"paste": "Wklej",
"paste-as-plain-text": "Wklej jako plain text",
"search_online": "Szukaj \"{{term}}\" za pomocą {{searchEngine}}"
},
"image_context_menu": {
"copy_reference_to_clipboard": "Skopiuj odnośnik do schowka",
"copy_image_to_clipboard": "Skopiuj obraz do schowka"
},
"note_autocomplete": {
"clear-text-field": "Wyczyść pole tekstowe",
"show-recent-notes": "Pokaż ostatnie notatki",
"full-text-search": "Wyszukiwanie pełnotekstowe"
},
"note_tooltip": {
"note-has-been-deleted": "Notatka została usunięta.",
"quick-edit": "Szybka edycja"
},
"duration": {
"seconds": "sekundy",
"minutes": "minuty",
"hours": "godziny",
"days": "dni"
},
"share": {
"title": "Ustawienia udostępniania"
},
"tasks": {
"due": {
"today": "Dziś",
"tomorrow": "Jutro",
"yesterday": "Wczoraj"
}
},
"content_widget": {
"unknown_widget": "Nieznany widget dla \"{{id}}\"."
},
"note_language": {
"not_set": "Nie ustawione",
"configure-languages": "Konfiguracja języków..."
},
"content_language": {
"title": "Język treści",
"description": "Wybierz jeden lub więcej języków, które mają być wyświetlane w sekcji Właściwości Podstawowe Notatki Tekstowej tylko do odczytu lub edytowalnej. Umożliwi to korzystanie z takich funkcji, jak sprawdzanie pisowni czy obsługa pisania od prawej do lewej."
},
"switch_layout_button": {
"title_vertical": "Przesuń panel edycji na dół",
"title_horizontal": "Przesuń panel edycji do lewej"
},
"toggle_read_only_button": {
"unlock-editing": "Odblokuj edycję",
"lock-editing": "Zablokuj edycję"
},
"png_export_button": {
"button_title": "Wyeksportuj diagram jako PNG"
},
"svg": {
"export_to_png": "Diagram nie może zostać wyeksportowany jako PNG."
},
"code_theme": {
"title": "Wygląd",
"word_wrapping": "Zawijanie słów",
"color-scheme": "Schemat kolorów"
},
"cpu_arch_warning": {
"title": "Proszę o pobranie wersji ARM64",
"message_macos": "TriliumNext działa obecnie w oparciu o technologię Rosetta 2, co oznacza, że używasz wersji Intel (x64) na komputerze Mac z procesorem Apple Silicon. Będzie to miało znaczący wpływ na wydajność i czas pracy baterii.",
"message_windows": "TriliumNext działa obecnie w trybie emulacji, co oznacza, że używasz wersji Intel (x64) na urządzeniu z systemem Windows na procesorze ARM. Będzie to miało znaczący wpływ na wydajność i czas pracy baterii.",
"recommendation": "Aby uzyskać najlepsze wrażenia, pobierz natywną wersję ARM64 aplikacji TriliumNext ze strony poświęconej wydaniom.",
"download_link": "Pobierz wersję natywną",
"continue_anyway": "Kontynuuj mimo wszystko",
"dont_show_again": "Nie pokazuj więcej tego ostrzeżenia"
},
"editorfeatures": {
"title": "Cechy",
"emoji_completion_enabled": "Włącz autouzupełnianie Emoji",
"note_completion_enabled": "Włącz autouzupełnianie notatki"
},
"table_view": {
"new-row": "Nowy wiersz",
"new-column": "Nowa kolumna",
"sort-column-by": "Sotuj po \"{{title}}\"",
"sort-column-ascending": "Rosnąco",
"sort-column-descending": "Malejąco",
"sort-column-clear": "Wyczyść sortowanie",
"hide-column": "Ukryj kolumnę \"{{title}}\"",
"show-hide-columns": "Pokaż/ukryj kolumny",
"row-insert-above": "Wstaw wiersz nad",
"row-insert-below": "Wstaw wiersz pod",
"row-insert-child": "Wstaw podnotatkę",
"add-column-to-the-left": "Dodaj kolumnę po lewej",
"add-column-to-the-right": "Dodaj kolumnę po prawej",
"edit-column": "Edytuj kolumnę",
"delete_column_confirmation": "Czy na pewno chcesz usunąć tę kolumnę? Odpowiedni atrybut zostanie usunięty ze wszystkich notatek.",
"delete-column": "Usuń kolumnę",
"new-column-label": "Etykieta",
"new-column-relation": "Relacje"
},
"book_properties_config": {
"hide-weekends": "Ukryj weekendy",
"display-week-numbers": "Pokaż numery tygodni",
"map-style": "Styl mapy:",
"max-nesting-depth": "Maksymalna głębokość zagnieżdżenia:",
"raster": "Raster",
"vector_light": "Wektor (jasny)",
"vector_dark": "Wektor (ciemny)",
"show-scale": "Pokaż skalę"
},
"table_context_menu": {
"delete_row": "Usuń wiersz"
},
"move_to": {
"dialog_title": "Przenieś notatki do ...",
"notes_to_move": "Notatki do przeniesienia"
},
"note_type_chooser": {
"modal_title": "Wybierz typ notatki",
"modal_body": "Wybierz typ / szablon notatki dla nowej notatki:",
"templates": "Szablony",
"builtin_templates": "Wbudowane szablony"
},
"password_not_set": {
"title": "Hasło nie zostało ustawione"
},
"add_relation": {
"add_relation": "Dodaj powiązanie",
"relation_name": "nazwa powiązania",
"allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.",
"to": "do",
"target_note": "docelowa notatka"
},
"ai_llm": {
"actions": "Akcje",
"retry": "Spróbuj ponownie",
"partial": "{{ percentage }}% wykonania",
"retry_queued": "notatka dodana do kolejki",
"retry_failed": "Nieudana próba dodania notatki do kolejki",
"max_notes_per_llm_query": "Maksymalna ilość notatek w zapytaniu",
"index_all_notes": "Zindeksuj wszystkie notatki",
"index_status": "Status indeksowania",
"indexed_notes": "Zindeksowane notatki",
"indexing_stopped": "Indeksowanie zatrzymane",
"indexing_in_progress": "Indeksowanie w trakcie...",
"last_indexed": "Ostatnio zindeksowane",
"n_notes_queued_0": "{{ count }} notatka zakolejkowana do indeksowania",
"n_notes_queued_1": "{{ count }} notatek zakolejkowanych do indeksowania",
"n_notes_queued_2": "{{ count }} notatek zakolejkowanych do indeksowania",
"note_chat": "Czat notatki",
"note_title": "Tytuł notatki",
"error": "Błąd",
"last_attempt": "Ostatnia próba",
"queued_notes": "Zakolejkowane notatki",
"failed_notes": "Nieudane notatki",
"last_processed": "Ostatnio procesowane",
"refresh_stats": "Odśwież Statystyki",
"enable_ai_features": "Włącz funkcje AI/LLM",
"enable_ai_description": "Włącz funkcje AI, takie jak podsumowywanie notatek, generowanie treści i inne możliwości LLM",
"openai_tab": "OpenAI",
"anthropic_tab": "Anthropic",
"voyage_tab": "Voyage AI",
"ollama_tab": "Ollama",
"enable_ai": "Włącz funkcje AI/LLM",
"enable_ai_desc": "Włącz funkcje AI, takie jak podsumowywanie notatek, generowanie treści i inne możliwości LLM",
"provider_configuration": "Konfiguracja dostawcy AI",
"provider_precedence": "Pierwszeństwo dostawcy",
"provider_precedence_description": "Lista dostawców przedzielonych przecinkami w kolejności (np. „openai,anthropic,ollama”)",
"temperature": "Temperatura",
"temperature_description": "Kontroluje losowość odpowiedzi (0 = deterministyczna, 2 = maksymalna losowość)",
"system_prompt": "Monit systemowy",
"system_prompt_description": "Domyślny monit systemowy używany do wszystkich interakcji ze sztuczną inteligencją",
"openai_configuration": "Konfiguracja OpenAI",
"openai_settings": "Ustawienia OpenAI",
"api_key": "Klucz API",
"url": "Bazowy URL",
"model": "Model",
"openai_api_key_description": "Klucz API OpenAI umożliwiający dostęp do usług AI",
"anthropic_api_key_description": "Klucz API Anthropic umożliwiający dostęp do usług AI",
"default_model": "Domyślny Model",
"openai_model_description": "Przykłady: gpt-4o, gpt-4-turbo, gpt-3.5-turbo",
"base_url": "Bazowy URL",
"openai_url_description": "Domyślny: https://api.openai.com/v1",
"anthropic_settings": "Ustawienia Anthropic",
"anthropic_url_description": "Bazowy URL dla Anthropic API (domyślny: https://api.anthropic.com)",
"anthropic_model_description": "Modele Anthropic Claude'a do uzupełniania czatów",
"voyage_settings": "Ustawienia Voyage AI",
"ollama_settings": "Ustawienia Ollama",
"ollama_url_description": "URL dla Ollama API (domyślny: http://localhost:11434)",
"ollama_model_description": "Model Ollama używany do uzupełniania czatów",
"anthropic_configuration": "Konfiguracja Anthropic",
"voyage_configuration": "Konfiguracja Voyage AI",
"voyage_url_description": "Domyślny: https://api.voyageai.com/v1",
"ollama_configuration": "Konfiguracja Ollama",
"enable_ollama": "Włącz Ollama",
"enable_ollama_description": "Włącz Ollama dla lokalnego modelu AI",
"ollama_url": "Ollama URL",
"ollama_model": "Model Ollama",
"refresh_models": "Odśwież modele",
"refreshing_models": "Odświeżanie...",
"enable_automatic_indexing": "Włącz automatyczne indeksowanie",
"rebuild_index": "Odbuduj indeks",
"rebuild_index_error": "Błąd uruchomienia odbudowy indeksu. Sprawdź logi.",
"max_notes_per_llm_query_description": "Maksymalna liczba podobnych notatek do uwzględnienia w kontekście sztucznej inteligencji",
"active_providers": "Aktywni dostawcy",
"disabled_providers": "Wyłączeni dostawcy",
"remove_provider": "Usuń dostawcę z wyszukiwania",
"restore_provider": "Przywróć dostawcę do wyszukiwania",
"similarity_threshold": "Próg podobieństwa"
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -432,7 +432,12 @@
"mime": "MIME: ",
"file_size": "Tamanho do arquivo:",
"preview": "Visualizar:",
"preview_not_available": "A visualização não está disponível para este tipo de nota."
"preview_not_available": "A visualização não está disponível para este tipo de nota.",
"diff_on": "Exibir diferença",
"diff_off": "Exibir conteúdo",
"diff_on_hint": "Clique para exibir a diferença de fonte da nota",
"diff_off_hint": "Clique para exibir o conteúdo da nota",
"diff_not_available": "A diferença não está disponível."
},
"sort_child_notes": {
"sort_children_by": "Ordenar notas filhas por...",
@@ -744,7 +749,7 @@
"button-tree-map": "Mapa em Árvore"
},
"tree-context-menu": {
"open-in-a-new-tab": "Abrir em uma nova aba <kbd>Ctrl+Click</kbd>",
"open-in-a-new-tab": "Abrir em uma nova aba",
"open-in-a-new-split": "Abrir em um novo painel dividido",
"insert-note-after": "Inserir nota após",
"insert-child-note": "Inserir nota filha",
@@ -774,7 +779,9 @@
"apply-bulk-actions": "Aplicar ações em massa",
"converted-to-attachments": "{{count}} notas foram convertidas em anexos.",
"convert-to-attachment-confirm": "Tem certeza de que deseja converter as notas selecionadas em anexos de suas notas-pai?",
"open-in-popup": "Edição rápida"
"open-in-popup": "Edição rápida",
"archive": "Ficheiro",
"unarchive": "Desarquivar"
},
"command_palette": {
"search_subtree_title": "Buscar na Subárvore",
@@ -833,7 +840,7 @@
"cannot_find_day_note": "Nota do dia não encontrada",
"cannot_find_week_note": "Nota semanal não encontrada",
"january": "Janeiro",
"febuary": "Fevereiro",
"february": "Fevereiro",
"march": "Março",
"april": "Abril",
"may": "Maio",
@@ -843,7 +850,18 @@
"september": "Setembro",
"october": "Outubro",
"november": "Novembro",
"december": "Dezembro"
"december": "Dezembro",
"week": "Semana",
"week_previous": "Semana passada",
"week_next": "Próxima semana",
"month": "Mês",
"month_previous": "Mês passado",
"month_next": "Próximo mês",
"year": "Ano",
"year_previous": "Ano passado",
"year_next": "Próximo ano",
"list": "Lista",
"today": "Hoje"
},
"close_pane_button": {
"close_this_pane": "Fechar este painel"
@@ -995,7 +1013,8 @@
"calendar": "Calendário",
"table": "Tabela",
"geo-map": "Mapa geográfico",
"board": "Quadro"
"board": "Quadro",
"include_archived_notes": "Exibir notas arquivadas"
},
"edited_notes": {
"no_edited_notes_found": "Ainda não há nenhuma nota editada neste dia…",
@@ -1350,7 +1369,9 @@
"title": "Desempenho",
"enable-motion": "Habilitar transições e animações",
"enable-shadows": "Habilitar sombras",
"enable-backdrop-effects": "Habilitar efeitos de fundo para menus, popups e painéis"
"enable-backdrop-effects": "Habilitar efeitos de fundo para menus, popups e painéis",
"enable-smooth-scroll": "Habilitar rolagem suave",
"app-restart-required": "(é necessário reiniciar o programa para que a mudança tenha efeito)"
},
"zoom_factor": {
"title": "Fator do Zoom (apenas versão de área de trabalho)",
@@ -1730,7 +1751,7 @@
"native-title-bar": "Barra de título nativa",
"native-title-bar-description": "Para Windows e macOS, manter a barra de título nativa desabilitada faz a aplicação parecer mais compacta. No Linux, manter a barra de título nativa habilitada faz a aplicação se integrar melhor com o restante do sistema.",
"background-effects": "Habilitar efeitos de fundo (apenas Windows 11)",
"background-effects-description": "O efeito Mica adicionar um fundo borrado e estilizado às janelas da aplicação, criando profundidade e um visual moderno.",
"background-effects-description": "O efeito Mica adiciona um fundo borrado e estilizado às janelas da aplicação, criando profundidade e um visual moderno. \"Barra de título nativa\" precisa ser desativada.",
"restart-app-button": "Reiniciar a aplicação para ver as alterações",
"zoom-factor": "Fator de Zoom"
},
@@ -1865,14 +1886,21 @@
"delete_row": "Excluir linha"
},
"board_view": {
"delete-note": "Excluir Nota",
"delete-note": "Deletar nota...",
"move-to": "Mover para",
"insert-above": "Inserir acima",
"insert-below": "Inserir abaixo",
"delete-column": "Excluir coluna",
"delete-column-confirmation": "Tem certeza de que deseja excluir esta coluna? O atributo correspondente também será removido de todas as notas abaixo desta coluna.",
"new-item": "Novo item",
"add-column": "Adicionar Coluna"
"add-column": "Adicionar Coluna",
"remove-from-board": "Remover do quadro",
"archive-note": "Arquivar nota",
"unarchive-note": "Desarquivar nota",
"new-item-placeholder": "Escreva o título da nota...",
"add-column-placeholder": "Escreva o nome da coluna...",
"edit-note-title": "Clique para editar o título da nota",
"edit-column-title": "Clique para editar o título da coluna"
},
"call_to_action": {
"next_theme_title": "Testar no novo tema do Trilium",
@@ -1894,7 +1922,9 @@
"percentage": "%"
},
"book": {
"no_children_help": "Esta coleção não possui nenhum nota filha, então não há nada para exibir. Veja <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para detalhes."
"no_children_help": "Esta coleção não possui nenhum nota filha, então não há nada para exibir. Veja <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para detalhes.",
"drag_locked_title": "Bloqueado para edição",
"drag_locked_message": "Arrastar não é permitido pois a coleção está bloqueada para edição."
},
"render": {
"note_detail_render_help_1": "Esta nota de ajuda é mostrada porque esta nota do tipo Renderizar HTML não possui a relação necessária para funcionar corretamente.",
@@ -1978,7 +2008,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID é uma forma padronizada de permitir que você faça login em sites usando uma conta de outro serviço, como o Google, para verificar sua identidade. O emissor padrão é o Google, mas você pode alterá-lo para qualquer outro provedor OpenID. Consulte <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">aqui</a> para mais informações. Siga estas <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instruções</a> para configurar um serviço OpenID através do Google.",
"oauth_description_warning": "Para habilitar o OAuth/OpenID, você precisa definir a URL base do OAuth/OpenID, o client ID e o client secret no arquivo config.ini e reiniciar a aplicação. Se quiser configurar via variáveis de ambiente, defina TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID e TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Configurações ausentes: {{variables}}",
"oauth_missing_vars": "Configurações ausentes: {{-variables}}",
"oauth_user_account": "Conta do Usuário: ",
"oauth_user_email": "E-mail do Usuário: ",
"oauth_user_not_logged_in": "Não está logado!"
@@ -2026,5 +2056,12 @@
"help_link": "Para ajuda, visite a <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>.",
"shared_publicly": "Esta nota é compartilhada publicamente em {{- link}}.",
"shared_locally": "Esta nota é compartilhada localmente em {{- link}}."
},
"pagination": {
"page_title": "Página de {{startIndex}} - {{endIndex}}",
"total_notes": "{{count}} notas"
},
"collections": {
"rendering_error": "Não foi possível exibir o conteúdo devido a um erro."
}
}

View File

@@ -267,10 +267,13 @@
"basic_properties": "Proprietăți de bază",
"editable": "Editabil",
"note_type": "Tipul notiței",
"language": "Limbă"
"language": "Limbă",
"configure_code_notes": "Configurează notițele de tip cod..."
},
"book": {
"no_children_help": "Această notiță de tip Carte nu are nicio subnotiță așadar nu este nimic de afișat. Vedeți <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pentru detalii."
"no_children_help": "Această notiță de tip Carte nu are nicio subnotiță așadar nu este nimic de afișat. Vedeți <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pentru detalii.",
"drag_locked_title": "Blocat pentru editare",
"drag_locked_message": "Glisarea notițelor nu este permisă deoarece colecția este blocată pentru editare."
},
"book_properties": {
"collapse": "Minimizează",
@@ -285,7 +288,8 @@
"book_properties": "Proprietăți colecție",
"table": "Tabel",
"geo-map": "Hartă geografică",
"board": "Tablă Kanban"
"board": "Tablă Kanban",
"include_archived_notes": "Afișează notițele arhivate"
},
"bookmark_switch": {
"bookmark": "Semn de carte",
@@ -318,7 +322,7 @@
"august": "August",
"cannot_find_day_note": "Nu se poate găsi notița acelei zile",
"december": "Decembrie",
"febuary": "Februarie",
"february": "Februarie",
"fri": "Vin",
"january": "Ianuarie",
"july": "Iulie",
@@ -334,7 +338,18 @@
"thu": "Joi",
"tue": "Mar",
"wed": "Mie",
"cannot_find_week_note": "Nu s-a putut găsi notița săptămânală"
"cannot_find_week_note": "Nu s-a putut găsi notița săptămânală",
"week": "Săptămână",
"week_previous": "Săptămâna trecută",
"week_next": "Următoarea săptămână",
"month": "Lună",
"month_previous": "Luna anterioară",
"month_next": "Următoarea lună",
"year": "An",
"year_previous": "Anul trecut",
"year_next": "Anul următor",
"list": "Agendă",
"today": "Astăzi"
},
"clone_to": {
"clone_notes_to": "Clonează notițele către...",
@@ -1070,7 +1085,12 @@
"revisions_deleted": "Notița reviziei a fost ștearsă.",
"maximum_revisions": "Numărul maxim de revizii pentru notița curentă: {{number}}.",
"settings": "Setări revizii ale notițelor",
"snapshot_interval": "Intervalul de creare a reviziilor pentru notițe: {{seconds}}s."
"snapshot_interval": "Intervalul de creare a reviziilor pentru notițe: {{seconds}}s.",
"diff_on": "Evidențiază diferențele",
"diff_off": "Afișează conținutul",
"diff_on_hint": "Clic pentru a afișa diferențele față de revizia anterioară, la nivel de cod sursă",
"diff_off_hint": "Clic pentru a afișa întregul conținut al reviziei",
"diff_not_available": "Diferențele nu pot fi evidențiate."
},
"revisions_button": {
"note_revisions": "Revizii ale notiței"
@@ -1357,7 +1377,7 @@
"insert-note-after": "Inserează după notiță",
"move-to": "Mutare la...",
"open-in-a-new-split": "Deschide în lateral",
"open-in-a-new-tab": "Deschide în tab nou <kbd>Ctrl+Clic</kbd>",
"open-in-a-new-tab": "Deschide în tab nou",
"paste-after": "Lipește după notiță",
"paste-into": "Lipește în notiță",
"protect-subtree": "Protejează ierarhia",
@@ -1369,12 +1389,14 @@
"unhoist-note": "Defocalizează notița",
"converted-to-attachments": "{{count}} notițe au fost convertite în atașamente.",
"convert-to-attachment-confirm": "Doriți convertirea notițelor selectate în atașamente ale notiței părinte?",
"open-in-popup": "Editare rapidă"
"open-in-popup": "Editare rapidă",
"archive": "Arhivează",
"unarchive": "Dezarhivează"
},
"shared_info": {
"help_link": "Pentru informații vizitați <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki-ul</a>.",
"shared_locally": "Această notiță este partajată local la {{- link}}",
"shared_publicly": "Această notiță este partajată public la {{- link}}"
"shared_locally": "Această notiță este partajată local la {{- link}}.",
"shared_publicly": "Această notiță este partajată public la {{- link}}."
},
"note_types": {
"book": "Colecție",
@@ -1472,7 +1494,8 @@
"create-child-note": "Crează subnotiță",
"hoist-this-note-workspace": "Focalizează spațiul de lucru",
"refresh-saved-search-results": "Reîmprospătează căutarea salvată",
"unhoist": "Defocalizează notița"
"unhoist": "Defocalizează notița",
"toggle-sidebar": "Comută bara laterală"
},
"title_bar_buttons": {
"window-on-top": "Menține fereastra mereu vizibilă"
@@ -1564,7 +1587,9 @@
"ws": {
"consistency-checks-failed": "Au fost identificate erori de consistență! Vedeți mai multe detalii în loguri.",
"encountered-error": "A fost întâmpinată o eroare: „{{message}}”. Vedeți în loguri pentru mai multe detalii.",
"sync-check-failed": "Verificările de sincronizare au eșuat!"
"sync-check-failed": "Verificările de sincronizare au eșuat!",
"lost-websocket-connection-title": "S-a pierdut conexiunea la server",
"lost-websocket-connection-message": "Verificați configurația reverse proxy-ului (e.g. nginx sau Apache) astfel încât să permită comunicarea prin WebSocket."
},
"hoisted_note": {
"confirm_unhoisting": "Notița dorită „{{requestedNote}}” este în afara ierarhiei notiței focalizate „{{hoistedNote}}”. Doriți defocalizarea pentru a accesa notița?"
@@ -1645,7 +1670,7 @@
},
"electron_integration": {
"background-effects": "Activează efectele de fundal (doar pentru Windows 11)",
"background-effects-description": "Efectul Mica adaugă un fundal estompat și elegant ferestrelor aplicațiilor, creând profunzime și un aspect modern.",
"background-effects-description": "Efectul Mica adaugă un fundal estompat și elegant ferestrelor aplicațiilor, creând profunzime și un aspect modern. Opțiunea „Bară de titlu nativă” trebuie să fie dezactivată.",
"desktop-application": "Aplicația desktop",
"native-title-bar": "Bară de titlu nativă",
"native-title-bar-description": "Pentru Windows și macOS, dezactivarea bării de titlu native face aplicația să pară mai compactă. Pe Linux, păstrarea bării integrează mai bine aplicația cu restul sistemului de operare.",
@@ -1908,7 +1933,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID este o cale standardizată ce permite autentificarea într-un site folosind un cont dintr-un alt serviciu, precum Google, pentru a verifica identitatea. În mod implicit furnizorul este Google, dar se poate schimba cu orice furnizor OpenID. Pentru mai multe informații, consultați <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">ghidul</a>. Urmați <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">aceste instrucțiuni</a> pentru a putea configura OpenID prin Google.",
"oauth_description_warning": "Pentru a activa OAuth sau OpenID, trebuie să configurați URL-ul de bază, ID-ul de client și secretul de client în fișierul config.ini și să reporniți aplicația. Dacă doriți să utilizați variabile de environment, puteți seta TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID și TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Setări lipsă: {{variables}}",
"oauth_missing_vars": "Setări lipsă: {{-variables}}",
"oauth_user_account": "Cont: ",
"oauth_user_email": "Email: ",
"oauth_user_not_logged_in": "Neautentificat!"
@@ -1933,7 +1958,11 @@
"editorfeatures": {
"title": "Funcții",
"emoji_completion_enabled": "Activează auto-completarea pentru emoji-uri",
"note_completion_enabled": "Activează auto-completarea pentru notițe"
"note_completion_enabled": "Activează auto-completarea pentru notițe",
"emoji_completion_description": "Dacă această funcție este pornită, emoji-urile pot fi inserate rapid prin tastarea caracterului „:”, urmat de denumirea emoji-ului.",
"note_completion_description": "Dacă această funcție este pornită, se pot crea ușor legături către notițe prin tastarea „@”, urmată de titlul notiței dorite.",
"slash_commands_enabled": "Activează comenzi rapide prin tasta slash",
"slash_commands_description": "Dacă această funcție este pornită, se poate folosi tasta „/” pentru a rula rapid comenzi de editare precum inserarea de întreruperi de pagină sau titluri."
},
"table_view": {
"new-row": "Rând nou",
@@ -1969,14 +1998,21 @@
"delete_row": "Șterge rândul"
},
"board_view": {
"delete-note": "Șterge notița",
"delete-note": "Șterge notița...",
"move-to": "Mută la",
"insert-above": "Inserează deasupra",
"insert-below": "Inserează dedesubt",
"delete-column": "Șterge coloana",
"delete-column-confirmation": "Doriți ștergerea acestei coloane? Atributul corespunzător va fi șters din notițele din acest tabel.",
"new-item": "Intrare nouă",
"add-column": "Adaugă coloană"
"add-column": "Adaugă coloană",
"remove-from-board": "Înlătură de pe tablă",
"archive-note": "Arhivează notița",
"unarchive-note": "Dezarhivează notița",
"new-item-placeholder": "Introduceți titlul notiței...",
"add-column-placeholder": "Introduceți denumirea coloanei...",
"edit-note-title": "Clic pentru a edita titlul notiței",
"edit-column-title": "Clic pentru a edita titlul coloanei"
},
"command_palette": {
"tree-action-name": "Listă de notițe: {{name}}",
@@ -2013,7 +2049,9 @@
"title": "Setări de performanță",
"enable-motion": "Activează tranzițiile și animațiile",
"enable-shadows": "Activează umbrirea elementelor",
"enable-backdrop-effects": "Activează efectele de fundal pentru meniuri, popup-uri și panouri"
"enable-backdrop-effects": "Activează efectele de fundal pentru meniuri, popup-uri și panouri",
"enable-smooth-scroll": "Activează derularea lină",
"app-restart-required": "(este necesară repornirea aplicației pentru ca modificarea să aibă efect)"
},
"settings": {
"related_settings": "Setări similare"
@@ -2024,5 +2062,12 @@
},
"units": {
"percentage": "%"
},
"pagination": {
"page_title": "Pagina pentru {{startIndex}} - {{endIndex}}",
"total_notes": "{{count}} notițe"
},
"collections": {
"rendering_error": "Nu a putut fi afișat conținutul din cauza unei erori."
}
}

View File

@@ -282,13 +282,13 @@
"editBranchPrefix": "изменить <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/tree-concepts.html#prefix\">префикс</a> клона активной заметки",
"multiSelectNote": "множественный выбор заметки выше/ниже",
"selectNote": "выбрать заметку",
"copyNotes": "скопировать активную заметку (или выделение) в буфер обмер (используется для <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">клонирования</a>)",
"copyNotes": "скопировать активную заметку (или выделение) в буфер обмена (используется для <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">клонирования</a>)",
"createEditLink": "создать/редактировать внешнюю ссылку",
"headings": "<code>##</code>, <code>###</code>, <code>####</code> и т. д., за которыми следует пробел для заголовков",
"bulletList": "<code>*</code> или <code>-</code> с последующим пробелом для маркированного списка",
"numberedList": "<code>1.</code> или <code>1)</code> с последующим пробелом для нумерованного списка",
"blockQuote": "начните строку с <code>></code>, а затем пробела для блока цитаты",
"quickSearch": "сфокусироваться на полее ввода быстрого поиска",
"quickSearch": "сфокусироваться на поле ввода быстрого поиска",
"editNoteTitle": "в области дерева переключится с области дерева на заголовок заметки. Сочетание клавиш Enter из области заголовка заметки переключит фокус на текстовый редактор. <kbd>Ctrl+.</kbd> переключит обратно с редактора на область дерева.",
"title": "Справка"
},
@@ -301,7 +301,7 @@
"chooseImportFile": "Выберите файл импорта",
"safeImport": "Безопасный импорт",
"shrinkImages": "Уменьшить изображения",
"textImportedAsText": "Импортировать HTML, Markdown и TXT как текстовые заметки, если из метаданные не позволяют определить тип заметки",
"textImportedAsText": "Импортировать HTML, Markdown и TXT как текстовые заметки, если их метаданные не позволяют определить тип заметки",
"replaceUnderscoresWithSpaces": "Заменить подчеркивания пробелами в названиях импортированных заметок",
"import": "Импорт",
"failed": "Сбой при импорте: {{message}}.",
@@ -370,7 +370,7 @@
"confirm_delete": "Вы хотите удалить эту версию?",
"revisions_deleted": "Версии заметки были удалены.",
"revision_restored": "Версия заметки была восстановлена.",
"revision_deleted": "Версия заметки были удалены.",
"revision_deleted": "Версия заметки была удалена.",
"download_button": "Скачать",
"file_size": "Размер файла:",
"preview": "Предпросмотр:",
@@ -379,7 +379,12 @@
"settings": "Настройка версионирования заметок",
"no_revisions": "У этой заметки еще нет версий...",
"snapshot_interval": "Интервал создания версии заметки: {{seconds}} с.",
"maximum_revisions": "Максимальное количество версий заметки: {{number}}."
"maximum_revisions": "Максимальное количество версий заметки: {{number}}.",
"diff_on": "Сравнить",
"diff_off": "Показать содержимое",
"diff_on_hint": "Отобразить сравнение исходного кода заметки",
"diff_off_hint": "Отобразить контент заметки",
"diff_not_available": "Сравнение недоступно."
},
"sort_child_notes": {
"sort_children_by": "Сортировать дочерние заметки по...",
@@ -458,7 +463,7 @@
"run_at_hour": "В какой час это должно выполняться? Следует использовать вместе с <code>#run=hourly</code>. Можно задать несколько раз для большего количества запусков в течение дня.",
"disable_inclusion": "скрипты с этой меткой не будут включены в выполнение родительского скрипта.",
"sorted": "сохраняет алфавитную сортировку дочерних заметок",
"sort_direction": "ASC (по возрастани, по умолчанию) или DESC (по убыванию)",
"sort_direction": "ASC (по возрастанию, по умолчанию) или DESC (по убыванию)",
"sort_folders_first": "Папки (заметки, включая дочерние) должны быть отсортированы вверх",
"top": "закрепить заданную заметку наверху в ее родителе (применяется только к отсортированным родительским заметкам)",
"hide_promoted_attributes": "Скрыть продвигаемых атрибуты в этой заметке",
@@ -474,7 +479,7 @@
"workspace_search_home": "новые заметки поиска будут созданы как дочерние записи этой заметки при перемещении их к какому-либо предку этой заметки рабочей области",
"workspace_calendar_root": "Определяет корень календаря для каждого рабочего пространства",
"hide_highlight_widget": "Скрыть виджет «Выделенное»",
"is_owned_by_note": "принадлежит записке",
"is_owned_by_note": "принадлежит заметке",
"and_more": "... и ещё {{count}}.",
"app_theme": "отмечает заметки CSS, которые являются полноценными темами Trilium и, таким образом, доступны в опциях Trilium.",
"title_template": "Заголовок по умолчанию для заметок, создаваемых как дочерние элементы данной заметки. Значение вычисляется как строка JavaScript\n и, таким образом, может быть дополнено динамическим контентом с помощью внедренных переменных <code>now</code> и <code>parentNote</code>. Примеры:\n \n <ul>\n <li><code>Литературные произведения ${parentNote.getLabelValue('authorName')}</code></li>\n <li><code>Лог для ${now.format('YYYY-MM-DD HH:mm:ss')}</code></li>\n </ul>\n \n Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html\">вики</a>, документации API для <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> и <a href=\"https://day.js.org/docs/en/display/format\">now</a>.",
@@ -523,7 +528,7 @@
"run_on_note_deletion": "выполняется при удалении заметки",
"run_on_branch_creation": "выполняется при создании ветви. Ветвь — это связующее звено между родительской и дочерней заметками и создаётся, например, при клонировании или перемещении заметки.",
"run_on_branch_change": "выполняется при обновлении ветки.",
"run_on_attribute_creation": "выполняется, когда создается новый атрибут для заметка, определяющей это отношение",
"run_on_attribute_creation": "выполняется, когда создается новый атрибут для заметки, определяющей это отношение",
"run_on_attribute_change": " выполняется при изменении атрибута заметки, определяющей это отношение. Также срабатывает при удалении атрибута",
"relation_template": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. Содержимое заметки и её поддерево будут добавлены к экземпляру заметки, если оно пустое. Подробности см. в документации.",
"inherit": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. См. описание шаблонных отношений для получения аналогичной информации. См. раздел «Наследование атрибутов» в документации.",
@@ -555,7 +560,14 @@
"insert-below": "Вставить ниже",
"insert-above": "Вставить выше",
"move-to": "Переместить",
"delete-note": "Удалить заметку"
"delete-note": "Удалить заметку...",
"remove-from-board": "Удалить из доски",
"archive-note": "Архивировать заметку",
"unarchive-note": "Разархивировать заметку",
"edit-column-title": "Нажмите, чтобы изменить заголовок столбца",
"edit-note-title": "Нажмите, чтобы изменить название заметки",
"add-column-placeholder": "Введите имя столбца...",
"new-item-placeholder": "Введите название заметки..."
},
"table_context_menu": {
"delete_row": "Удалить строку"
@@ -573,7 +585,11 @@
"editorfeatures": {
"note_completion_enabled": "Включить автодополнение",
"emoji_completion_enabled": "Включить автодополнение эмодзи",
"title": "Особенности"
"title": "Особенности",
"slash_commands_description": "Если эта опция включена, команды редактирования, такие как вставка переносов строк или заголовков, можно переключать, вводя `/`.",
"slash_commands_enabled": "Включить слэш-команды",
"note_completion_description": "Если эта опция включена, ссылки на заметки можно создавать, вводя `@`, а затем название заметки.",
"emoji_completion_description": "Если эта функция включена, эмодзи можно легко вставлять в текст, набрав `:`, а затем название эмодзи."
},
"cpu_arch_warning": {
"dont_show_again": "Больше не показывать это предупреждение",
@@ -653,10 +669,10 @@
"electron_integration": {
"zoom-factor": "Коэффициент масштабирования",
"restart-app-button": "Применить изменения и перезапустить приложение",
"background-effects-description": "Эффект Mica добавляет размытый, стильный фон окнам приложений, создавая глубину и современный вид.",
"background-effects-description": "Эффект Mica добавляет размытый, стильный фон окнам приложений, создавая глубину и современный вид. Опция \"Системная строка заголовка\" должна быть отключена.",
"background-effects": "Включить фоновые эффекты (только Windows 11)",
"native-title-bar-description": "В Windows и macOS отключение нативной строки заголовка делает приложение более компактным. В Linux включение нативной строки заголовка улучшает интеграцию с остальной частью системы.",
"native-title-bar": "Нативная панель заголовка",
"native-title-bar-description": "В Windows и macOS отключение системной строки заголовка делает приложение более компактным. В Linux включение системной строки заголовка улучшает интеграцию с остальной частью системы.",
"native-title-bar": "Системная панель заголовка",
"desktop-application": "Десктопное приложение"
},
"link_context_menu": {
@@ -700,7 +716,7 @@
},
"code_block": {
"copy_title": "Копировать в буфер обмена",
"theme_group_dark": "Темныце темы",
"theme_group_dark": "Темные темы",
"theme_group_light": "Светлые темы",
"theme_none": "Нет подсветки синтаксиса",
"word_wrapping": "Перенос слов"
@@ -771,7 +787,7 @@
"beta-feature": "Бета",
"widget": "Виджет",
"image": "Изображение",
"file": "Файд",
"file": "Файл",
"canvas": "Холст",
"mermaid-diagram": "Диаграмма Mermaid",
"book": "Коллекция",
@@ -797,9 +813,9 @@
"cut": "Вырезать",
"duplicate": "Создать дубликат",
"export": "Экспорт",
"open-in-a-new-tab": "Открыть в новой вкладке <kbd>Ctrl+Click</kbd>",
"open-in-a-new-tab": "Открыть в новой вкладке",
"open-in-a-new-split": "Открыть в новой панели",
"unhoist-note": "Отрепить заметку",
"unhoist-note": "Открепить заметку",
"hoist-note": "Закрепить заметку",
"protect-subtree": "Защитить поддерево",
"unprotect-subtree": "Снять защиту с поддерева",
@@ -812,7 +828,7 @@
"expand-subtree": "Развернуть поддерево",
"collapse-subtree": "Свернуть поддерево",
"sort-by": "Сортировать по...",
"insert-note-after": "Вставить замтку после",
"insert-note-after": "Вставить заметку после",
"insert-child-note": "Вставить дочернюю заметку",
"search-in-subtree": "Поиск в поддереве",
"edit-branch-prefix": "Изменить префикс ветки",
@@ -821,7 +837,9 @@
"recent-changes-in-subtree": "Последние изменения в поддереве",
"copy-note-path-to-clipboard": "Копировать путь к заметке в буфер обмена",
"convert-to-attachment-confirm": "Вы уверены, что хотите преобразовать выбранные заметки во вложения их родительских заметок?",
"converted-to-attachments": "{{count}} заметок были преобразованы во вложения."
"converted-to-attachments": "{{count}} заметок были преобразованы во вложения.",
"archive": "Архивировать",
"unarchive": "Разархивировать"
},
"info": {
"closeButton": "Закрыть",
@@ -850,7 +868,7 @@
"to": "в",
"move_note": "Переместить заметку",
"target_parent_note": "целевая версии заметки",
"on_all_matched_notes": "На всех совпадающих нотах",
"on_all_matched_notes": "На всех совпадающих заметках",
"move_note_new_parent": "переместить заметку в новый родительский элемент, если у заметки есть только один родительский элемент (т. е. старая ветвь удаляется и создается новая ветвь в новом родительском элементе)",
"clone_note_new_parent": "клонировать заметку в новый родительский элемент, если у заметки есть несколько клонов/ветвей (неясно, какую ветвь следует удалить)",
"nothing_will_happen": "ничего не произойдет, если эту заметку невозможно переместить в целевую заметку (т.е. это создаст цикл дерева)"
@@ -888,7 +906,7 @@
"delete_attachment": "Удалить вложение",
"upload_new_revision": "Загрузить новую версию",
"open_custom": "Открыть как...",
"open_custom_client_only": "Иной способ открытие вложений возможен только из десктопного приложения.",
"open_custom_client_only": "Открытие вложений другим способом возможно только в десктопном приложении.",
"open_externally_detail_page": "Открытие вложения извне доступно только из детальной страницы. Для этого сначала нажмите на сведения о вложении и повторите действие.",
"open_custom_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
"open_externally_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
@@ -911,7 +929,7 @@
"sat": "Сбт",
"sun": "Вс",
"january": "Январь",
"febuary": "Февраль",
"february": "Февраль",
"march": "Март",
"april": "Апрель",
"may": "Май",
@@ -923,7 +941,18 @@
"november": "Ноябрь",
"december": "Декабрь",
"cannot_find_week_note": "Не удалось найти заметку недели",
"cannot_find_day_note": "Не удалось найти заметку дня"
"cannot_find_day_note": "Не удалось найти заметку дня",
"week": "Неделя",
"week_previous": "Прошлая неделя",
"week_next": "Следующая неделя",
"month": "Месяц",
"month_previous": "Предыдущий месяц",
"month_next": "Следующий месяц",
"year": "Год",
"year_previous": "Предыдущий год",
"year_next": "Следующий год",
"list": "Список",
"today": "Сегодня"
},
"global_menu": {
"menu": "Меню",
@@ -984,7 +1013,8 @@
"geo-map": "Карта",
"invalid_view_type": "Недопустимый тип представления '{{type}}'",
"expand_all_children": "Развернуть все дочерние элементы",
"collapse_all_notes": "Свернуть все заметки"
"collapse_all_notes": "Свернуть все заметки",
"include_archived_notes": "Показать заархивированные заметки"
},
"edited_notes": {
"deleted": "(удалено)",
@@ -994,8 +1024,8 @@
"file_properties": {
"download": "Скачать",
"open": "Открыть",
"title": "Файд",
"upload_success": "Загрузка новой версии файла не удалась.",
"title": "Файл",
"upload_success": "Новая версия файла успешно загружена.",
"upload_new_revision": "Загрузить новую версию",
"file_size": "Размер файла",
"file_type": "Тип файла",
@@ -1127,7 +1157,7 @@
"label_abc": "возвращает заметки с меткой abc",
"label_year": "ищет заметки с меткой year, имеющей значение 2019",
"label_rock_pop": "соответствует заметкам с метками как rock, так и pop",
"label_rock_or_pop": "должна присутствовать только одна из vtnjr",
"label_rock_or_pop": "должна присутствовать только одна из меток",
"label_year_comparison": "числовое сравнение (также >, >=, <).",
"label_date_created": "заметки, созданные за последний месяц",
"error": "Ошибка поиска: {{error}}",
@@ -1181,7 +1211,7 @@
"native_title_bar": {
"enabled": "включено",
"disabled": "выключено",
"title": "Нативная панель заголовка (требует перезапуска приложения)"
"title": "Системная панель заголовка (требует перезапуска приложения)"
},
"ai_llm": {
"progress": "Прогресс",
@@ -1387,7 +1417,7 @@
"first-week-contains-first-day": "Первая неделя содержит первый день года",
"first-week-contains-first-thursday": "Первая неделя содержит первый четверг года",
"first-week-has-minimum-days": "Первая неделя имеет минимальное количество дней",
"min-days-in-first-week": "Минимальное количество дней в первую неделю",
"min-days-in-first-week": "Минимальное количество дней в первой неделе",
"first-week-info": "Первая неделя содержит первый четверг года в соответствии со стандартом <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
"first-week-warning": "Изменение параметров первой недели может привести к дублированию существующих недельных заметок, и существующие недельные заметки не будут обновлены соответствующим образом.",
"formatting-locale": "Формат даты и числа"
@@ -1449,7 +1479,7 @@
"totp_secret_generated": "Создан секрет TOTP",
"recovery_keys_generate": "Генерация кодов восстановления",
"recovery_keys_regenerate": "Регенерация кодов восстановления",
"oauth_missing_vars": "Отсутствуют настройки: {{variables}}",
"oauth_missing_vars": "Отсутствуют настройки: {{-variables}}",
"oauth_user_not_logged_in": "Не выполнен вход!",
"totp_title": "Одноразовый пароль с ограничением по времени (TOTP)",
"recovery_keys_title": "Ключи восстановления единого входа",
@@ -1693,7 +1723,7 @@
"database_vacuumed": "База данных была сжата"
},
"vim_key_bindings": {
"use_vim_keybindings_in_code_notes": "Раскладка клавиш VIM",
"use_vim_keybindings_in_code_notes": "Сочетания клавиш Vim",
"enable_vim_keybindings": "Включить сочетания клавиш Vim в заметках кода (без режима ex)"
},
"network_connections": {
@@ -1776,7 +1806,7 @@
"button_title": "Экспортировать диаграмму как SVG"
},
"copy_image_reference_button": {
"button_title": "Скопировать ссылку на изображение в буфер обмена, можент быть вставлена в текстовую заметку."
"button_title": "Скопировать ссылку на изображение в буфер обмена, может быть вставлена в текстовую заметку."
},
"note_launcher": {
"this_launcher_doesnt_define_target_note": "Этот лаунчер не определяет целевую заметку."
@@ -1947,7 +1977,9 @@
"ws": {
"sync-check-failed": "Проверка синхронизации не удалась!",
"encountered-error": "Обнаружена ошибка \"{{message}}\", проверьте консоль.",
"consistency-checks-failed": "Проверка целостности не пройдена! Подробности смотрите в логах."
"consistency-checks-failed": "Проверка целостности не пройдена! Подробности смотрите в логах.",
"lost-websocket-connection-title": "Потеряно соединение с сервером",
"lost-websocket-connection-message": "Проверьте конфигурацию обратного прокси (например, nginx или Apache), чтобы убедиться, что соединения WebSocket должным образом разрешены и не заблокированы."
},
"attachment_detail_2": {
"role_and_size": "Роль: {{role}}, Размер: {{size}}",
@@ -2019,12 +2051,23 @@
"could_not_find_typewidget": "Не удалось найти typeWidget для типа '{{type}}'"
},
"book": {
"no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. на <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>."
"no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>.",
"drag_locked_title": "Защищено от изменения",
"drag_locked_message": "Перетаскивание не допускается, так как коллекция защищена от редактирования."
},
"ui-performance": {
"title": "Производительность",
"enable-motion": "Включить визуальные эффекты и анимации",
"enable-shadows": "Включить тени",
"enable-backdrop-effects": "Включить эффекты размытия фона меню, всплывающих окон и панелей"
"enable-backdrop-effects": "Включить эффекты размытия фона меню, всплывающих окон и панелей",
"enable-smooth-scroll": "Включить плавную прокрутку",
"app-restart-required": "(для вступления изменений в силу требуется перезапуск приложения)"
},
"collections": {
"rendering_error": "Невозможно отобразить содержимое из-за ошибки."
},
"pagination": {
"total_notes": "{{count}} заметок",
"page_title": "Страница {{startIndex}} - {{endIndex}}"
}
}

View File

@@ -1,26 +1,96 @@
{
"about": {
"homepage": "Giriş sayfası:",
"app_version": "Uygulama versiyonu:",
"db_version": "Veritabanı versiyonu:"
"about": {
"homepage": "Anasayfa:",
"app_version": "Uygulama versiyonu:",
"db_version": "Veritabanı versiyonu:",
"title": "Trilium Notes Hakkında",
"sync_version": "Eşleştirme versiyonu:",
"data_directory": "Veri dizini:"
},
"branch_prefix": {
"save": "Kaydet",
"edit_branch_prefix": "Dalın önekini düzenle",
"prefix": "Önek: ",
"branch_prefix_saved": "Dal öneki kaydedildi."
},
"delete_notes": {
"close": "Kapat",
"delete_notes_preview": "Not önizlemesini sil",
"delete_all_clones_description": "Tüm klonları da sil (son değişikliklerden geri alınabilir)"
},
"export": {
"close": "Kapat"
},
"import": {
"chooseImportFile": "İçe aktarım dosyası",
"importDescription": "Seçilen dosya(lar) alt not olarak içe aktarılacaktır"
},
"info": {
"closeButton": "Kapat"
},
"protected_session_password": {
"close_label": "Kapat"
},
"toast": {
"critical-error": {
"title": "Kritik hata",
"message": "İstemci uygulamasının başlatılmasını engelleyen kritik bir hata meydana geldi\n\n{{message}}\n\nBu muhtemelen bir betiğin beklenmedik şekilde başarısız olmasından kaynaklanıyor. Uygulamayı güvenli modda başlatarak sorunu ele almayı deneyin."
},
"branch_prefix": {
"save": "Kaydet"
"widget-error": {
"title": "Bir widget başlatılamadı",
"message-unknown": "Bilinmeyen widget aşağıdaki sebeple başlatılamadı\n\n{{message}}"
},
"delete_notes": {
"close": "Kapat"
},
"export": {
"close": "Kapat"
},
"import": {
"chooseImportFile": "İçe aktarım dosyası",
"importDescription": "Seçilen dosya(lar) alt not olarak içe aktarılacaktır"
},
"info": {
"closeButton": "Kapat"
},
"protected_session_password": {
"close_label": "Kapat"
"bundle-error": {
"title": "Özel bir betik yüklenemedi"
}
},
"add_link": {
"add_link": "Bağlantı ekle",
"help_on_links": "Bağlantılar konusunda yardım",
"note": "Not",
"search_note": "isimle not ara",
"link_title_mirrors": "bağlantı adı notun şu anki adıyla aynı",
"link_title_arbitrary": "bağlantı adı isteğe bağlı olarak değiştirilebilir",
"link_title": "Bağlantı adı",
"button_add_link": "Bağlantı ekle"
},
"bulk_actions": {
"bulk_actions": "Toplu eylemler",
"affected_notes": "Etkilenen notlar",
"include_descendants": "Seçili notların alt notlarını da ekle",
"available_actions": "Mevcut eylemler",
"chosen_actions": "Seçili eylemler",
"execute_bulk_actions": "Toplu eylemleri uygula",
"bulk_actions_executed": "Toplu eylemler başarıyla uygulandı.",
"none_yet": "Henüz yok... yukarıda mevcut eylemler arasından birine tıklayarak eylem ekle.",
"labels": "Etiketler",
"relations": "İlişkiler",
"notes": "Notlar",
"other": "Diğer"
},
"clone_to": {
"clone_notes_to": "Notları klonla...",
"help_on_links": "Bağlantılar konusunda yardım",
"notes_to_clone": "Klonlanacak notlar",
"target_parent_note": "Hedef üst not",
"search_for_note_by_its_name": "isme göre not ara",
"cloned_note_prefix_title": "Klonlanan not, not ağacında belirtilen önek ile gösterilecektir",
"prefix_optional": "önek (opsiyonel)",
"clone_to_selected_note": "Seçili nota klonla",
"no_path_to_clone_to": "Klonlanacak bir yol yok.",
"note_cloned": "\"{{clonedTitle}}\" notu \"{{targetTitle}}\"'a klonlandı"
},
"confirm": {
"confirmation": "Onay",
"cancel": "İptal",
"ok": "OK",
"are_you_sure_remove_note": "\"{{title}}\" notunu ilişki haritasından kaldırmak istediğinize emin misiniz?. ",
"also_delete_note": "Notu da sil"
},
"ai_llm": {
"n_notes_queued": "{{ count }} not dizinleme için sıraya alındı",
"n_notes_queued_plural": "{{ count }} not dizinleme için sıraya alındı",
"notes_indexed": "{{ count }} not dizinlendi",
"notes_indexed_plural": "{{ count }} not dizinlendi"
}
}

View File

@@ -276,7 +276,12 @@
"preview": "預覽:",
"preview_not_available": "無法預覽此類型的筆記。",
"restore_button": "還原",
"delete_button": "刪除"
"delete_button": "刪除",
"diff_on": "顯示差異",
"diff_off": "顯示內容",
"diff_on_hint": "點擊以顯示筆記原始碼差異",
"diff_off_hint": "點擊以顯示筆記內容",
"diff_not_available": "差異不可用。"
},
"sort_child_notes": {
"sort_children_by": "依…排序子筆記",
@@ -576,7 +581,7 @@
"sun": "日",
"cannot_find_day_note": "無法找到日記",
"january": "一月",
"febuary": "二月",
"february": "二月",
"march": "三月",
"april": "四月",
"may": "五月",
@@ -587,7 +592,18 @@
"october": "十月",
"november": "十一月",
"december": "十二月",
"cannot_find_week_note": "無法找到週記"
"cannot_find_week_note": "無法找到週記",
"week": "週",
"week_previous": "上週",
"week_next": "下週",
"month": "月",
"month_previous": "上個月",
"month_next": "下個月",
"year": "年",
"year_previous": "前一年",
"year_next": "後一年",
"list": "列表",
"today": "今天"
},
"close_pane_button": {
"close_this_pane": "關閉此面板"
@@ -745,7 +761,8 @@
"calendar": "日曆",
"table": "表格",
"geo-map": "地理地圖",
"board": "看板"
"board": "看板",
"include_archived_notes": "顯示已封存筆記"
},
"edited_notes": {
"no_edited_notes_found": "今天還沒有編輯過的筆記...",
@@ -946,7 +963,9 @@
"no_attachments": "此筆記沒有附件。"
},
"book": {
"no_children_help": "此類型為書籍的筆記沒有任何子筆記,因此沒有內容可顯示。請參閱 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 以了解詳情。"
"no_children_help": "此類型為書籍的筆記沒有任何子筆記,因此沒有內容可顯示。請參閱 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 以了解詳情。",
"drag_locked_title": "鎖定編輯",
"drag_locked_message": "無法拖曳,因為此集合已被鎖定編輯。"
},
"editable_code": {
"placeholder": "在這裡輸入您的程式碼筆記內容…"
@@ -1366,7 +1385,7 @@
"button-tree-map": "樹狀地圖"
},
"tree-context-menu": {
"open-in-a-new-tab": "在新分頁中打開 <kbd>Ctrl+Click</kbd>",
"open-in-a-new-tab": "在新分頁中打開",
"open-in-a-new-split": "在新頁面分割中打開",
"insert-note-after": "在後面插入筆記",
"insert-child-note": "插入子筆記",
@@ -1396,7 +1415,9 @@
"converted-to-attachments": "{{count}} 個筆記已被轉換為附件。",
"convert-to-attachment-confirm": "確定要將所選的筆記轉換為其父級筆記的附件嗎?",
"duplicate": "複製副本",
"open-in-popup": "快速編輯"
"open-in-popup": "快速編輯",
"archive": "封存",
"unarchive": "解除封存"
},
"shared_info": {
"help_link": "如需幫助,請訪問 <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>。",
@@ -1561,7 +1582,9 @@
"ws": {
"sync-check-failed": "同步檢查失敗!",
"consistency-checks-failed": "一致性檢查失敗!請查看日誌以了解詳細資訊。",
"encountered-error": "遇到錯誤 \"{{message}}\",請查看控制台。"
"encountered-error": "遇到錯誤 \"{{message}}\",請查看控制台。",
"lost-websocket-connection-title": "與伺服器的連線中斷",
"lost-websocket-connection-message": "檢查您的反向代理(如 nginx 或 Apache設定以確保 Websocket 連線沒有被阻擋。"
},
"hoisted_note": {
"confirm_unhoisting": "請求的筆記 '{{requestedNote}}' 位於聚焦的筆記 '{{hoistedNote}}' 的子階層之外,您必須取消聚焦才能訪問該筆記。是否繼續取消聚焦?"
@@ -1822,7 +1845,7 @@
"oauth_title": "OAuth / OpenID 驗證",
"oauth_description": "OpenID 是一種標準化的方式,可讓您使用其他服務(如 Google的帳號登入網站以驗證您的身份。預設的提供者是 Google但您可以將其變更為任何其他 OpenID 提供者。查看<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">此處</a>以瞭解更多資訊。依照這些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指示</a>以透過 Google 設定 OpenID 服務。",
"oauth_description_warning": "要啟用 OAuth / OpenID您需要設定 config.ini 文件中的 OAuth / OpenID 基礎 URL、客戶端 ID 和客戶端金鑰,並重新啟動應用程式。如果要從環境變數設置,請設定 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 環境變數。",
"oauth_missing_vars": "缺少以下設定:{{variables}}",
"oauth_missing_vars": "缺少以下設定:{{-variables}}",
"oauth_user_account": "用戶帳號: ",
"oauth_user_email": "用戶信箱: ",
"oauth_user_not_logged_in": "尚未登入!"
@@ -1832,7 +1855,7 @@
"native-title-bar": "原生標題列",
"native-title-bar-description": "對於 Windows 和 macOS關閉原生標題列會讓應用程式看起來更緊湊。在 Linux 上,開啟原生標題列可以與系統的其他部分整合得更好。",
"background-effects": "啟用背景效果(僅適用於 Windows 11",
"background-effects-description": "Mica 效果為程式視窗新增模糊且時尚的背景,營造出深度感和現代化外觀。",
"background-effects-description": "Mica 效果為程式視窗新增模糊且時尚的背景,營造出深度感和現代化外觀。「原生標題列」必須被禁用。",
"restart-app-button": "重新啟動應用程式以查看更改",
"zoom-factor": "縮放係數"
},
@@ -1931,7 +1954,11 @@
"editorfeatures": {
"title": "功能",
"emoji_completion_enabled": "啟用 Emoji 自動完成",
"note_completion_enabled": "啟用筆記自動完成"
"note_completion_enabled": "啟用筆記自動完成",
"emoji_completion_description": "如果啟用emoji 可以輕易地經由輸入 `:` 加上 emoji 名稱來插入。",
"note_completion_description": "如果啟用,導向筆記的連結可以經由輸入 `@` 加上筆記標題來建立。",
"slash_commands_enabled": "啟用斜線命令",
"slash_commands_description": "如果啟用,可以經由輸入 `/` 來觸發命令,如插入換行符或標題。"
},
"table_view": {
"new-row": "新增列",
@@ -1967,14 +1994,21 @@
"delete_row": "刪除列"
},
"board_view": {
"delete-note": "刪除筆記",
"delete-note": "刪除筆記",
"move-to": "移動至",
"insert-above": "在上方插入",
"insert-below": "在下方插入",
"delete-column": "刪除行",
"delete-column-confirmation": "您確定要刪除此行嗎?此行中所有筆記對應的屬性也將被移除。",
"new-item": "新增項目",
"add-column": "新增行"
"add-column": "新增行",
"remove-from-board": "從看板上移除",
"archive-note": "封存筆記",
"unarchive-note": "解除封存筆記",
"new-item-placeholder": "輸入筆記標題…",
"add-column-placeholder": "輸入行名…",
"edit-note-title": "點擊以編輯筆記標題",
"edit-column-title": "點擊以編輯行標題"
},
"command_palette": {
"tree-action-name": "樹:{{name}}",
@@ -2021,6 +2055,15 @@
"title": "效能",
"enable-motion": "啟用轉場與動畫",
"enable-shadows": "啟用陰影",
"enable-backdrop-effects": "啟用選單、彈出視窗和面板的背景特效"
"enable-backdrop-effects": "啟用選單、彈出視窗和面板的背景特效",
"enable-smooth-scroll": "啟用平滑滾動",
"app-restart-required": "(需要重啟程式以套用更改)"
},
"pagination": {
"page_title": "第 {{startIndex}} - {{endIndex}} 頁",
"total_notes": "{{count}} 筆記"
},
"collections": {
"rendering_error": "發現錯誤,無法顯示內容。"
}
}

View File

@@ -326,7 +326,12 @@
"mime": "МІМЕ: ",
"file_size": "Розмір файлу:",
"preview": "Попередній перегляд:",
"preview_not_available": "Попередній перегляд недоступний для цього типу нотатки."
"preview_not_available": "Попередній перегляд недоступний для цього типу нотатки.",
"diff_on": "Показати різницю",
"diff_off": "Показати вміст",
"diff_on_hint": "Натисніть, щоб показати різницю в джерелі нотатки",
"diff_off_hint": "Натисніть, щоб показати вміст нотатки",
"diff_not_available": "Різниця недоступна."
},
"include_note": {
"dialog_title": "Включити нотатку",
@@ -555,7 +560,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID це стандартизований спосіб входу на веб-сайти за допомогою облікового запису з іншого сервісу, такого як Google, для підтвердження вашої особи. Емітентом за замовчуванням є Google, але ви можете змінити його на будь-якого іншого постачальника OpenID. Перегляньте <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">тут</a> для отримання додаткової інформації. Дотримуйтесь цих <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">інструкцій</a>, щоб налаштувати сервіс OpenID через Google.",
"oauth_description_warning": "Щоб увімкнути OAuth/OpenID, потрібно встановити базову URL-адресу OAuth/OpenID, ідентифікатор клієнта та секрет клієнта у файлі config.ini та перезапустити програму. Якщо ви хочете встановити зі змінних середовища, встановіть TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID та TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Відсутні налаштування: {{variables}}",
"oauth_missing_vars": "Відсутні налаштування: {{-variables}}",
"oauth_user_account": "Обліковий запис користувача: ",
"oauth_user_email": "Електронна пошта користувача: ",
"oauth_user_not_logged_in": "Ви не ввійшли в систему!"
@@ -717,7 +722,7 @@
"cannot_find_day_note": "Не вдається знайти денну нотатку",
"cannot_find_week_note": "Не вдається знайти тижневу нотатку",
"january": "Січень",
"febuary": "Лютий",
"february": "Лютий",
"march": "Березень",
"april": "Квітень",
"may": "Травень",
@@ -727,7 +732,18 @@
"september": "Вересень",
"october": "Жовтень",
"november": "Листопад",
"december": "Грудень"
"december": "Грудень",
"week": "Тиждень",
"week_previous": "Попередній тиждень",
"week_next": "Наступний тиждень",
"month": "Місяць",
"month_previous": "Попередній місяць",
"month_next": "Наступний місяць",
"year": "Рік",
"year_previous": "Попередній рік",
"year_next": "Наступний рік",
"list": "Список",
"today": "Сьогодні"
},
"close_pane_button": {
"close_this_pane": "Закрити цю панель"
@@ -860,7 +876,8 @@
"calendar": "Календар",
"table": "Таблиця",
"geo-map": "Географічна карта",
"board": "Дошка"
"board": "Дошка",
"include_archived_notes": "Показати архівовані нотатки"
},
"edited_notes": {
"no_edited_notes_found": "Цього дня ще немає редагованих нотаток...",
@@ -1052,7 +1069,9 @@
"no_attachments": "Ця нотатка не має вкладень."
},
"book": {
"no_children_help": "Ця колекція не має дочірніх нотаток, тому нічого відображати. Див. <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">вікі</a> для отримання детальної інформації."
"no_children_help": "Ця колекція не має дочірніх нотаток, тому нічого відображати. Див. <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">вікі</a> для отримання детальної інформації.",
"drag_locked_title": "Заблоковано для редагування",
"drag_locked_message": "Перетягування заборонено, оскільки колекцію заблоковано для редагування."
},
"editable_code": {
"placeholder": "Введіть тут вміст вашої нотатки з кодом..."
@@ -1650,7 +1669,9 @@
"ws": {
"sync-check-failed": "Перевірка синхронізації не вдалася!",
"consistency-checks-failed": "Перевірка узгодженості не вдалася! Див. logs для отримання інформації.",
"encountered-error": "Виникла помилка \"{{message}}\", перевірте консоль."
"encountered-error": "Виникла помилка \"{{message}}\", перевірте консоль.",
"lost-websocket-connection-title": "Втрачено з'єднання із сервером",
"lost-websocket-connection-message": "Перевірте конфігурацію вашого зворотного проксі-сервера (наприклад, nginx або Apache), щоб переконатися, що з’єднання WebSocket належним чином дозволені та не блокуються."
},
"hoisted_note": {
"confirm_unhoisting": "Запитана нотатка '{{requestedNote}}' знаходиться поза піддеревом закріплених нотаток '{{hoistedNote}}', і вам потрібно відкріпити нотатку, щоб отримати до неї доступ. Ви хочете продовжити відкріплення?"
@@ -1679,7 +1700,7 @@
"native-title-bar": "Нативний рядок заголовка",
"native-title-bar-description": "У Windows та macOS вимкнення рядка заголовка робить програму компактнішою. У Linux увімкнення рядка заголовка краще інтегрується з рештою системи.",
"background-effects": "Увімкнення фонових ефектів (лише для Windows 11)",
"background-effects-description": "Ефект слюди додає розмитий, стильний фон вікнам програм, створюючи глибину та сучасний вигляд.",
"background-effects-description": "Ефект слюди додає розмитий, стильний фон вікнам програм, створюючи глибину та сучасний вигляд. \"Нативний рядок заголовка\" має бути вимкнено.",
"restart-app-button": "Перезапустіть програму, щоб переглянути зміни",
"zoom-factor": "Коефіцієнт масштабування"
},
@@ -1778,7 +1799,11 @@
"editorfeatures": {
"title": "Особливості",
"emoji_completion_enabled": "Увімкнути автозаповнення емодзі",
"note_completion_enabled": "Увімкнути автозаповнення нотаток"
"note_completion_enabled": "Увімкнути автозаповнення нотаток",
"emoji_completion_description": "Якщо цю функцію ввімкнено, емодзі можна легко вставляти в текст, ввівши `:`, а потім назву емодзі.",
"note_completion_description": "Якщо ввімкнено, посилання на нотатки можна створювати, вводячи `@`, а потім назву нотатки.",
"slash_commands_enabled": "Увімкнути команди зі слеш",
"slash_commands_description": "Якщо ввімкнено, команди редагування, такі як вставка розривів рядків або заголовків, можна перемикати, натискаючи `/`."
},
"table_view": {
"new-row": "Новий рядок",
@@ -1878,7 +1903,7 @@
"button-tree-map": "Карта дерева"
},
"tree-context-menu": {
"open-in-a-new-tab": "Відкрити в новій вкладці <kbd>Ctrl+Клік</kbd>",
"open-in-a-new-tab": "Відкрити в новій вкладці",
"open-in-a-new-split": "Відкрити в новому розділі",
"insert-note-after": "Вставити нотатку після",
"insert-child-note": "Вставити дочірню нотатку",
@@ -1908,7 +1933,9 @@
"apply-bulk-actions": "Застосувати масові дії",
"converted-to-attachments": "({{count}}) нотаток перетворено на вкладення.",
"convert-to-attachment-confirm": "Ви впевнені, що хочете конвертувати вибрані нотатки у вкладення до їхніх батьківських нотаток?",
"open-in-popup": "Швидке редагування"
"open-in-popup": "Швидке редагування",
"archive": "Архівувати",
"unarchive": "Розархівувати"
},
"shared_info": {
"shared_publicly": "Ця нотатка опублікована на {{- link}}.",
@@ -1975,14 +2002,21 @@
"delete_row": "Видалити рядок"
},
"board_view": {
"delete-note": "Видалити нотатку",
"delete-note": "Видалити нотатку...",
"move-to": "Перемістити до",
"insert-above": "Вставити вище",
"insert-below": "Вставити нижче",
"delete-column": "Видалити стовпець",
"delete-column-confirmation": "Ви впевнені, що хочете видалити цей стовпець? Відповідний атрибут також буде видалено в нотатках під цим стовпцем.",
"new-item": "Новий елемент",
"add-column": "Додати стовпець"
"add-column": "Додати стовпець",
"remove-from-board": "Видалити з дошки",
"archive-note": "Архівувати нотатка",
"unarchive-note": "Розархівувати нотатку",
"new-item-placeholder": "Введіть заголовок нотатки...",
"add-column-placeholder": "Введіть назву стовпця...",
"edit-note-title": "Натисніть, щоб редагувати заголовок нотатки",
"edit-column-title": "Натисніть, щоб редагувати заголовок стовпця"
},
"command_palette": {
"tree-action-name": "Дерево: {{name}}",
@@ -2025,6 +2059,15 @@
"title": "Продуктивність",
"enable-motion": "Увімкнути переходи та анімацію",
"enable-shadows": "Увімкнути тіні",
"enable-backdrop-effects": "Увімкнути фонові ефекти для меню, спливаючих вікон та панелей"
"enable-backdrop-effects": "Увімкнути фонові ефекти для меню, спливаючих вікон та панелей",
"enable-smooth-scroll": "Увімкнути плавне прокручування",
"app-restart-required": "(щоб зміни набули чинності, потрібен перезапуск програми)"
},
"pagination": {
"page_title": "Сторінка {{startIndex}} - {{endIndex}}",
"total_notes": "{{count}} нотаток"
},
"collections": {
"rendering_error": "Не вдалося показати вміст через помилку."
}
}

View File

@@ -51,3 +51,12 @@ declare module "leaflet" {
markers?: GPXMarker | undefined;
}
}
declare global {
interface Navigator {
/** Returns a boolean indicating whether the browser is running in standalone mode. Available on Apple's iOS Safari only. */
standalone?: boolean;
/** Returns the WindowControlsOverlay interface which exposes information about the geometry of the title bar in desktop Progressive Web Apps, and an event to know whenever it changes. */
windowControlsOverlay?: unknown;
}
}

View File

@@ -6,8 +6,8 @@
.floating-buttons-children,
.show-floating-buttons {
position: absolute;
top: 10px;
right: 10px;
top: var(--floating-buttons-vert-offset, 10px);
right: var(--floating-buttons-horiz-offset, 10px);
display: flex;
flex-direction: row;
z-index: 100;
@@ -28,8 +28,8 @@
transform: rotate(180deg);
}
.type-canvas .floating-buttons-children {
top: 70px;
.type-canvas {
--floating-buttons-vert-offset: 70px;
}
.type-canvas .floating-buttons-children > * {

View File

@@ -6,7 +6,7 @@ import { ParentComponent } from "./react/react_utils";
import { EventData, EventNames } from "../components/app_context";
import { type FloatingButtonsList, type FloatingButtonContext } from "./FloatingButtonsDefinitions";
import ActionButton from "./react/ActionButton";
import { ViewTypeOptions } from "../services/note_list_renderer";
import { ViewTypeOptions } from "./collections/interface";
interface FloatingButtonsProps {
items: FloatingButtonsList;

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