Compare commits

..

486 Commits

Author SHA1 Message Date
Elian Doran
63c54010eb docs(guide): update html docs with sharing 2025-10-06 19:30:01 +03:00
Elian Doran
cec868459a Merge remote-tracking branch 'origin/main' into kev/share-html 2025-10-06 19:26:54 +03:00
Elian Doran
6c106300d4 chore(client): launch bar background affecting custom icons (closes #7147) 2025-10-06 19:18:47 +03:00
Elian Doran
69a59f0935 fix(collections/list): not reacting to expand/collapse button (closes #7209) 2025-10-06 18:55:02 +03:00
Elian Doran
fa7575ed00 fix(collections/table): react to tree state changes (closes #7204) 2025-10-06 18:49:11 +03:00
Elian Doran
b2174549c7 chore(collections/table): avoid rendering if rows didn't load yet 2025-10-06 18:48:13 +03:00
Elian Doran
19f16274ab Merge branch 'main' of https://github.com/TriliumNext/Trilium 2025-10-06 18:29:20 +03:00
Elian Doran
7f88ae5494 fix(mobile): formatting toolbar appears cut off (closes #7206) 2025-10-06 18:29:17 +03:00
Elian Doran
c820b5caa4 feat(collections/board): keep title of the column always visible 2025-10-06 18:10:54 +03:00
Elian Doran
b1638e1ffc docs(collections/board): keyboard shortcuts 2025-10-06 18:02:45 +03:00
Elian Doran
f2e60f52d2 feat(collections/board): restore focus 2025-10-06 17:54:52 +03:00
Elian Doran
d845343e97 feat(collections/board): basic keyboard interaction 2025-10-06 17:48:08 +03:00
Elian Doran
ee2edc92e7 Translations update from Hosted Weblate (#7205) 2025-10-06 12:28:17 +03:00
green
332216f5f5 Translated using Weblate (Japanese)
Currently translated at 100.0% (115 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ja/
2025-10-06 11:27:05 +02:00
Elian Doran
4d4cd7d130 Translations update from Hosted Weblate (#7200) 2025-10-05 21:51:04 +03:00
AndreR
b3cc51ce63 Translated using Weblate (German)
Currently translated at 5.2% (6 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/de/
2025-10-05 20:32:49 +02:00
Elian Doran
05645d93ef Translated using Weblate (Russian)
Currently translated at 21.7% (25 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ru/
2025-10-05 20:32:49 +02:00
green
a2d09efca4 Translated using Weblate (Japanese)
Currently translated at 60.0% (69 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ja/
2025-10-05 20:32:48 +02:00
Elian Doran
1212f9a9e9 Translated using Weblate (Italian)
Currently translated at 7.8% (9 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/it/
2025-10-05 20:32:48 +02:00
Elian Doran
75f7986e36 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 63.4% (73 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/zh_Hans/
2025-10-05 20:32:48 +02:00
Francis C
2447a6fc8d Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 77.3% (89 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/zh_Hant/
2025-10-05 17:43:01 +02:00
green
38a4a3e7b6 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-05 17:43:00 +02:00
green
28240d549d 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-10-05 17:42:59 +02:00
Languages add-on
5da46a1678 Added translation using Weblate (md (generated) (md)) 2025-10-05 17:42:59 +02:00
Languages add-on
e592a37799 Added translation using Weblate (Norwegian Bokmål) 2025-10-05 17:42:58 +02:00
Languages add-on
15d00b61dd Added translation using Weblate (Slovenian) 2025-10-05 17:42:57 +02:00
Languages add-on
5d0b6f9fad Added translation using Weblate (Korean) 2025-10-05 17:42:57 +02:00
Languages add-on
2a40ffd164 Added translation using Weblate (Serbian) 2025-10-05 17:42:56 +02:00
Languages add-on
8c687de3c6 Added translation using Weblate (Finnish) 2025-10-05 17:42:56 +02:00
Languages add-on
27415b4e16 Added translation using Weblate (Persian) 2025-10-05 17:42:55 +02:00
Languages add-on
ce0b39765e Added translation using Weblate (French) 2025-10-05 17:42:55 +02:00
Languages add-on
fafc4af237 Added translation using Weblate (Dutch) 2025-10-05 17:42:54 +02:00
Languages add-on
76a283ed77 Added translation using Weblate (Arabic) 2025-10-05 17:42:54 +02:00
Languages add-on
99500bca8f Added translation using Weblate (Polish) 2025-10-05 17:42:53 +02:00
Languages add-on
a982fc326f Added translation using Weblate (Hungarian) 2025-10-05 17:42:53 +02:00
Languages add-on
b16309d01a Added translation using Weblate (Croatian) 2025-10-05 17:42:52 +02:00
Languages add-on
1bfc3d450f Added translation using Weblate (Vietnamese) 2025-10-05 17:42:52 +02:00
Languages add-on
37b63d4ea9 Added translation using Weblate (Portuguese) 2025-10-05 17:42:51 +02:00
Languages add-on
e7315e7d35 Added translation using Weblate (Czech) 2025-10-05 17:42:50 +02:00
Languages add-on
718dffa672 Added translation using Weblate (Catalan) 2025-10-05 17:42:50 +02:00
Languages add-on
c3dd9865e7 Added translation using Weblate (Ukrainian) 2025-10-05 17:42:49 +02:00
Languages add-on
1702ec5644 Added translation using Weblate (Greek) 2025-10-05 17:42:49 +02:00
Languages add-on
dfddf044cf Added translation using Weblate (German) 2025-10-05 17:42:48 +02:00
Languages add-on
24a632056a Added translation using Weblate (Portuguese (Brazil)) 2025-10-05 17:42:47 +02:00
Languages add-on
dc7f4a6cf3 Added translation using Weblate (Turkish) 2025-10-05 17:42:47 +02:00
Languages add-on
cd100f37fe Added translation using Weblate (md (generated) (md)) 2025-10-05 17:42:46 +02:00
Languages add-on
984e8bbba0 Added translation using Weblate (md (generated) (md)) 2025-10-05 17:42:46 +02:00
Elian Doran
fcc22cc212 Translated using Weblate (Romanian)
Currently translated at 96.5% (111 of 115 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ro/
2025-10-05 17:42:45 +02:00
Hosted Weblate
4101acc2e3 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-05 17:42:44 +02:00
Elian Doran
f30bdd54b1 fix(relation_map): floating buttons stuck when showing source 2025-10-05 18:38:40 +03:00
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
Kevin Leutzinger
b8851565eb docs: clarify shareHtmlLocation goes on snippet note 2025-10-01 03:53:40 -04:00
Kevin Leutzinger
888d0d1084 add docs about shareHtml and shareHtmlLocation 2025-10-01 03:47:49 -04:00
Kevin Leutzinger
0a25d4db0d shareHTML to shareHtml 2025-10-01 03:30:16 -04: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
Kevin Leutzinger
d483b6e840 add shareHTML relation 2025-09-30 23:06:20 -04: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
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
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
327 changed files with 30686 additions and 19533 deletions

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

@@ -16,10 +16,10 @@ on:
- '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:
@@ -38,55 +38,55 @@ jobs:
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
@@ -115,74 +115,14 @@ jobs:
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"
# Install wrangler globally to avoid workspace issues
- name: Install Wrangler
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
- name: Deploy
uses: ./.github/actions/deploy-to-cloudflare-pages
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy site --project-name=trilium-docs --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: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy site --project-name=trilium-docs --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
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const prNumber = context.issue.number;
// Construct preview URL based on Cloudflare Pages pattern
const previewUrl = `https://pr-${prNumber}.trilium-docs.pages.dev`;
const mainUrl = 'https://docs.triliumnotes.org';
// Check if we already commented
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber
});
const botComment = comments.data.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('Documentation preview is ready')
);
const commentBody = `📚 Documentation preview is ready!\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
});
}
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,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:
@@ -78,7 +77,7 @@ jobs:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
- name: Publish release
uses: softprops/action-gh-release@v2.3.3
uses: softprops/action-gh-release@v2.3.4
if: ${{ github.event_name != 'pull_request' }}
with:
make_latest: false
@@ -119,7 +118,7 @@ jobs:
arch: ${{ matrix.arch }}
- name: Publish release
uses: softprops/action-gh-release@v2.3.3
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:

View File

@@ -127,7 +127,7 @@ jobs:
path: upload
- name: Publish stable release
uses: softprops/action-gh-release@v2.3.3
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 }}

2
.nvmrc
View File

@@ -1 +1 @@
22.19.0
22.20.0

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.
@@ -166,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",
"@playwright/test": "1.55.1",
"@stylistic/eslint-plugin": "5.4.0",
"@types/express": "5.0.3",
"@types/node": "22.18.6",
"@types/node": "22.18.8",
"@types/yargs": "17.0.33",
"@vitest/coverage-v8": "3.2.4",
"eslint": "9.36.0",
"eslint": "9.37.0",
"eslint-plugin-simple-import-sort": "12.1.1",
"esm": "3.2.25",
"jsdoc": "4.0.4",

View File

@@ -1,13 +1,13 @@
{
"name": "@triliumnext/client",
"version": "0.99.0",
"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",
@@ -15,7 +15,7 @@
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
},
"dependencies": {
"@eslint/js": "9.36.0",
"@eslint/js": "9.37.0",
"@excalidraw/excalidraw": "0.18.0",
"@fullcalendar/core": "6.1.19",
"@fullcalendar/daygrid": "6.1.19",
@@ -41,23 +41,23 @@
"draggabilly": "3.0.0",
"force-graph": "1.51.0",
"globals": "16.4.0",
"i18next": "25.5.2",
"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.3.0",
"mermaid": "11.12.0",
"mind-elixir": "5.2.0",
"mind-elixir": "5.1.1",
"normalize.css": "8.0.1",
"panzoom": "9.4.3",
"preact": "10.27.2",
"react-i18next": "15.7.3",
"react-i18next": "16.0.0",
"split.js": "1.6.5",
"svg-pan-zoom": "3.6.2",
"tabulator-tables": "6.3.1",
@@ -73,8 +73,8 @@
"@types/mark.js": "8.11.12",
"@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"
"vite-plugin-static-copy": "3.1.3"
}
}

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

@@ -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

@@ -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);

View File

@@ -36,10 +36,19 @@ 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
@@ -51,7 +60,7 @@ export function isIMEComposing(e: KeyboardEvent): boolean {
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
@@ -86,13 +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();
@@ -162,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

@@ -7,6 +7,7 @@ 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: WebSocketMessage) => void;
let messageHandlers: MessageHandler[] = [];
@@ -278,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

@@ -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

@@ -1141,6 +1141,26 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
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 {
font-size: var(--detail-font-size) !important;
padding: 5px;
@@ -1472,7 +1492,7 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
cursor: pointer;
border: none;
color: var(--launcher-pane-text-color);
background: transparent;
background-color: transparent;
flex-shrink: 0;
}
@@ -2005,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;

View File

@@ -327,30 +327,49 @@ li.dropdown-item a.dropdown-item-button:focus-visible {
--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

@@ -1410,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

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

View File

@@ -582,7 +582,7 @@
"cannot_find_day_note": "无法找到日记",
"cannot_find_week_note": "无法找到周记",
"january": "一月",
"febuary": "二月",
"february": "二月",
"march": "三月",
"april": "四月",
"may": "五月",
@@ -1353,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": "未登录!"
@@ -1623,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}}' 的子树之外,您必须取消聚焦才能访问该笔记。是否继续取消聚焦?"
@@ -1952,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": "新增行",

View File

@@ -1 +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

@@ -581,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",
@@ -1587,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?"
@@ -1901,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!"
@@ -1966,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",

View File

@@ -582,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",
@@ -1517,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!"
@@ -1787,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?"

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!"
@@ -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..."
@@ -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": {

View File

@@ -38,12 +38,12 @@
"save": "保存",
"edit_branch_prefix": "ブランチ接頭辞の編集",
"help_on_tree_prefix": "ツリー接頭辞に関するヘルプ",
"prefix": "接頭辞 ",
"branch_prefix_saved": "ブランチ接頭辞が保存されました。"
"prefix": "接頭辞: ",
"branch_prefix_saved": "ブランチ接頭辞が保存されました。"
},
"global_menu": {
"menu": "メニュー",
"options": "オプション",
"options": "設定",
"open_new_window": "新しいウィンドウを開く",
"zoom": "ズーム",
"toggle_fullscreen": "フルスクリーンの切り替え",
@@ -86,7 +86,7 @@
"clone_to_selected_note": "選択したノートにクローン",
"no_path_to_clone_to": "クローン先のパスが存在しません。",
"note_cloned": "ノート \"{{clonedTitle}}\" は \"{{targetTitle}}\" にクローンされました",
"clone_notes_to": "ノートをクローンして...",
"clone_notes_to": "ノートをクローン...",
"help_on_links": "ヘルプへのリンク"
},
"delete_notes": {
@@ -111,7 +111,7 @@
"sat": "土",
"sun": "日",
"january": "1月",
"febuary": "2月",
"february": "2月",
"march": "3月",
"april": "4月",
"may": "5月",
@@ -123,7 +123,18 @@
"november": "11月",
"december": "12月",
"cannot_find_day_note": "dayートが見つかりません",
"cannot_find_week_note": "weekートが見つかりません"
"cannot_find_week_note": "weekートが見つかりません",
"week": "週",
"week_previous": "前の週",
"week_next": "次の週",
"month": "月",
"month_previous": "前の月",
"month_next": "次の月",
"year": "年",
"year_previous": "前の年",
"year_next": "次の年",
"list": "リスト",
"today": "今日"
},
"note_icon": {
"change_note_icon": "ノートアイコンの変更",
@@ -135,7 +146,8 @@
"note_type": "ノートタイプ",
"editable": "編集可能",
"basic_properties": "基本プロパティ",
"language": "言語"
"language": "言語",
"configure_code_notes": "コードノートを設定しています..."
},
"i18n": {
"title": "ローカライゼーション",
@@ -324,8 +336,8 @@
},
"recent_changes": {
"title": "最近の変更",
"erase_notes_button": "削除したメモを今すぐ消去する",
"deleted_notes_message": "削除されたメモは完全に消去されました。",
"erase_notes_button": "削除したノートを今すぐ消去",
"deleted_notes_message": "削除されたノートは完全に消去されました。",
"no_changes_message": "変更はまだありません...",
"undelete_link": "削除を取り消す",
"confirm_undelete": "このノートとサブノートを復元しますか?"
@@ -384,9 +396,9 @@
"protect-subtree": "サブツリーを保護",
"unprotect-subtree": "サブツリーの保護を解除",
"copy-clone": "コピー/クローン",
"clone-to": "クローンして...",
"clone-to": "クローン...",
"cut": "カット",
"move-to": "移動して...",
"move-to": "移動...",
"paste-into": "貼り付け",
"paste-after": "後ろに貼り付け",
"duplicate": "複製",
@@ -399,7 +411,9 @@
"open-in-popup": "クイックエディット",
"hoist-note": "ホイストノート",
"unhoist-note": "ノートをホイストしない",
"edit-branch-prefix": "ブランチの接頭辞を編集"
"edit-branch-prefix": "ブランチの接頭辞を編集",
"archive": "アーカイブ",
"unarchive": "アーカイブ解除"
},
"zen_mode": {
"button_exit": "禅モードを退出"
@@ -449,10 +463,12 @@
"delete_note": {
"delete_note": "ノートを削除",
"delete_matched_notes": "一致したノートを削除",
"delete_matched_notes_description": "これにより、一致したノートが削除されます。"
"delete_matched_notes_description": "これにより、一致したノートが削除されます。",
"undelete_notes_instruction": "削除後、「最近の変更」ダイアログから削除を取り消すことができます。",
"erase_notes_instruction": "ノートを完全に消去するには、削除後に「設定」->「その他」に移動し、「削除したノートを今すぐ消去」ボタンをクリックします。"
},
"board_view": {
"delete-note": "ノートを削除",
"delete-note": "ノートを削除...",
"insert-above": "上に挿入",
"insert-below": "下に挿入",
"delete-column": "列を削除",
@@ -478,7 +494,8 @@
"execute_script": {
"execute_script": "スクリプトを実行",
"help_text": "一致したノートに対して簡単なスクリプトを実行できます。",
"example_2": "より複雑な例としては、一致したノートの属性をすべて削除することが挙げられます:"
"example_2": "より複雑な例としては、一致したノートの属性をすべて削除することが挙げられます:",
"example_1": "例えば、ノートのタイトルに文字列を追加するには、この小さなスクリプトを使用します:"
},
"script_executor": {
"execute_script": "スクリプトを実行",
@@ -533,11 +550,11 @@
"beta-feature": "Beta",
"ai-chat": "AI チャット",
"task-list": "タスクリスト",
"new-feature": "新しい",
"new-feature": "New",
"collections": "コレクション"
},
"edited_notes": {
"no_edited_notes_found": "この日の編集されたメモはまだありません...",
"no_edited_notes_found": "この日の編集されたノートはまだありません...",
"title": "編集されたノート",
"deleted": "(削除済み)"
},
@@ -548,7 +565,10 @@
"download": "ダウンロード",
"open": "開く",
"title": "ファイル",
"upload_new_revision": "編集履歴をアップロード"
"upload_new_revision": "編集履歴をアップロード",
"original_file_name": "元のファイル名",
"upload_success": "新しいファイルの変更がアップロードされました。",
"upload_failed": "新しいファイルの変更のアップロードに失敗しました。"
},
"note_info_widget": {
"note_id": "ノート ID",
@@ -567,7 +587,11 @@
"download": "ダウンロード",
"open": "開く",
"title": "画像",
"upload_new_revision": "編集履歴をアップロード"
"upload_new_revision": "編集履歴をアップロード",
"original_file_name": "元のファイル名",
"copy_reference_to_clipboard": "参照をクリップボードにコピー",
"upload_success": "新しい画像の変更がアップロードされました。",
"upload_failed": "新しい画像の変更のアップロードに失敗しました: {{message}}"
},
"revisions": {
"download_button": "ダウンロード",
@@ -595,7 +619,8 @@
"diff_off_hint": "クリックしてノートの内容を表示",
"diff_not_available": "差分は利用できません。",
"snapshot_interval": "ノートの変更履歴の記録間隔: {{seconds}} 秒。",
"maximum_revisions": "ノートの変更履歴の記録制限: {{number}}."
"maximum_revisions": "ノートの変更履歴の記録制限: {{number}}.",
"mime": "MIME: "
},
"attachments_actions": {
"download": "ダウンロード",
@@ -612,7 +637,11 @@
"delete_confirm": "本当に添付ファイル '{{title}}' を削除しますか?",
"delete_success": "添付ファイル '{{title}}' は削除されました。",
"enter_new_name": "新しい添付ファイルの名前を入力してください",
"upload_new_revision": "編集履歴をアップロード"
"upload_new_revision": "編集履歴をアップロード",
"upload_success": "新しい添付ファイルの変更がアップロードされました。",
"upload_failed": "新しい添付ファイルの変更のアップロードに失敗しました。",
"convert_confirm": "添付ファイル「{{title}}」を別のノートに変換してもよろしいですか?",
"convert_success": "添付ファイル「{{title}}」がノートに変換されました。"
},
"etapi": {
"created": "作成日時",
@@ -642,21 +671,23 @@
"note_paths": {
"title": "ノートパス",
"clone_button": "ノートを新しい場所にクローン...",
"intro_placed": "このノートは以下のパスに置かれ:",
"intro_placed": "このノートは以下のパスに置かれています:",
"intro_not_placed": "このノートはまだノートツリーに配置されていません。",
"archived": "アーカイブされた",
"search": "検索",
"outside_hoisted": "このパスはホイストされたノートの外側にあるため、ホイストを解除する必要があります。"
},
"note_properties": {
"info": "情報"
"info": "情報",
"this_note_was_originally_taken_from": "このノートは元々以下から引用したものです:"
},
"similar_notes": {
"title": "類似ノート",
"no_similar_notes_found": "類似したノートが見つかりません。"
},
"abstract_search_option": {
"remove_this_search_option": "この検索オプションを削除"
"remove_this_search_option": "この検索オプションを削除",
"failed_rendering": "検索オプションのレンダリングに失敗しました: {{dto}} エラー: {{error}}{{stack}}"
},
"debug": {
"debug": "デバッグ",
@@ -690,7 +721,8 @@
"content_and_attachments_and_revisions_size": "添付ファイルと編集履歴を含むノート内容のサイズ",
"revision_count": "編集履歴の回数",
"owned_label_count": "ラベルの数",
"owned_relation_count": "関係の数"
"owned_relation_count": "リレーションの数",
"target_relation_count": "ノートを対象とするリレーションの数"
},
"table_view": {
"sort-column-descending": "降順",
@@ -710,7 +742,7 @@
"delete_column_confirmation": "この列を本当に削除してもよろしいですか?対応する属性はすべてのノートから削除されます。",
"delete-column": "列を削除",
"new-column-label": "ラベル",
"new-column-relation": "関係"
"new-column-relation": "リレーション"
},
"search_script": {
"title": "検索スクリプト:",
@@ -735,7 +767,7 @@
"placeholder": "ノート名で検索",
"label": "祖先",
"depth_label": "深さ",
"depth_doesnt_matter": "関係な",
"depth_doesnt_matter": "関係な",
"depth_eq": "ちょうど {{count}} つ下の階層",
"direct_children": "直接の子",
"depth_gt": "{{count}} より下の階層",
@@ -759,7 +791,14 @@
"refresh": "リフレッシュ"
},
"sync": {
"title": "同期"
"title": "同期",
"force_full_sync_button": "完全同期を強制する",
"fill_entity_changes_button": "エンティティ変更レコードを入力",
"full_sync_triggered": "完全同期がトリガーされました",
"filling_entity_changes": "エンティティ変更行を入力中...",
"sync_rows_filled_successfully": "同期行が正常に入力されました",
"finished-successfully": "同期が正常に完了しました。",
"failed": "同期に失敗しました: {{message}}"
},
"fonts": {
"fonts": "フォント",
@@ -781,7 +820,8 @@
"serif": "セリフ",
"sans-serif": "サンセリフ",
"monospace": "等幅",
"system-default": "システムのデフォルト"
"system-default": "システムのデフォルト",
"theme_defined": "テーマが定義されました"
},
"max_content_width": {
"reload_button": "フロントエンドをリロード",
@@ -790,7 +830,7 @@
"max_width_label": "最大コンテンツ幅",
"max_width_unit": "ピクセル",
"apply_changes_description": "コンテンツ幅の変更を適用するには、クリックしてください",
"reload_description": "外観オプションから変更"
"reload_description": "外観設定から変更"
},
"theme": {
"title": "アプリのテーマ",
@@ -859,14 +899,14 @@
"bg_color": "背景色付きテキスト",
"visibility_title": "ハイライトリスト表示",
"visibility_description": "#hideHighlightWidget ラベルを追加することで、ノートごとにハイライトウィジェットを非表示にできます。",
"shortcut_info": "オプション -> ショートカット('右ペイン切り替え')で、右ペイン(ハイライトを含む)を素早く切り替えるキーボードショートカットを設定できます。"
"shortcut_info": "設定 -> ショートカット(右ペイン切り替え)で、右ペイン(ハイライトを含む)を素早く切り替えるキーボードショートカットを設定できます。"
},
"table_of_contents": {
"title": "目次",
"description": "ノートに定義された数以上の見出しがある場合、テキストノートに目次が表示されます。この数はカスタマイズできます:",
"unit": "見出し",
"disable_info": "このオプションに非常に大きな数値を設定することで、目次を効果的に無効にすることもでき。",
"shortcut_info": "オプション -> ショートカット('右ペイン切り替え')で、右ペイン(目次を含む)を素早く切り替えるキーボードショートカットを設定できます。"
"disable_info": "このオプションに非常に大きな数値を設定することで、目次を効果的に無効にすることもできます。",
"shortcut_info": "設定 -> ショートカット(右ペイン切り替え)で、右ペイン(目次を含む)を素早く切り替えるキーボードショートカットを設定できます。"
},
"toc": {
"table_of_contents": "目次",
@@ -1033,7 +1073,7 @@
"read_only": "エディターは読み取り専用モードです。テキストとコードノートのみ機能します。",
"auto_read_only_disabled": "テキスト/コードノートは、サイズが大きすぎる場合、自動的に読み取りモードに設定されます。このラベルをノートに追加することで、ノートごとにこの動作を無効にすることができます",
"app_css": "Trilium アプリケーションに読み込まれ、Trilium の外観を変更するために使用できる CSS ノートをマークします。",
"app_theme": "Trilium のフルテーマである CSS ートをマークし、Trilium オプションで利用できるようにします。",
"app_theme": "Trilium のフルテーマである CSS ートをマークし、Trilium の設定で利用できるようにします。",
"app_theme_base": "「next」、「next-light」、または「next-dark」に設定すると、従来のテーマではなく、対応する TriliumNext テーマ (auto、light、または dark) がカスタム テーマのベースとして使用されます。",
"css_class": "このラベルの値は、ツリー内の特定のートを表すードにCSSクラスとして追加されます。これは高度なテーマ設定に役立ちます。テンプレートートで使用できます。",
"icon_class": "このラベルの値は、ツリー上のアイコンにCSSクラスとして追加され、ツリー内のートを視覚的に区別するのに役立ちます。例えば、bx bx-home のように、アイコンは boxicons から取得されます。テンプレートノートで使用できます。",
@@ -1064,7 +1104,7 @@
"display_relations": "表示するリレーション名をカンマで区切って指定します。それ以外のリレーション名は非表示になります。",
"hide_relations": "非表示にするリレーション名をカンマで区切って指定します。それ以外のリレーションは表示されます。",
"template": "このノートは、新しいノートを作成するときに利用可能なテンプレートの選択肢に表示されます",
"toc": "<code>#toc</code> または <code>#toc=show</code><code> は目次を強制的に表示し、<code>#toc=hide</code> は目次を強制的に非表示にします。ラベルが存在しない場合は、グローバル設定が適用されます",
"toc": "<code>#toc</code> または <code>#toc=show</code> は目次を強制的に表示し、<code>#toc=hide</code> は目次を強制的に非表示にします。ラベルが存在しない場合は、グローバル設定が適用されます",
"color": "ノートツリー、リンクなどのノートの色を定義します。 'red' や #a13d5f などの有効な CSS カラー値を使用します",
"keyboard_shortcut": "このノートにすぐにジャンプするキーボードショートカットを定義します。例: 「ctrl+alt+e」。変更を有効にするには、フロントエンドをリロードする必要があります。",
"keep_current_hoisting": "このリンクを開いても、ノートが現在のホイストされたサブツリーに表示できない場合でも、ホイストは変更されません。",
@@ -1077,7 +1117,29 @@
"run_on_child_note_creation": "このリレーションが定義されているノートの下に新しいノートが作成されたときに実行されます",
"render_note": "「HTMLートをレンダリング」タイプのートは、コードートHTMLまたはスクリプトを使用してレンダリングされます。このリレーションを使用して、どのートをレンダリングするかを指定する必要があります",
"other_notes_with_name": "{{attributeType}} の名前が「{{attributeName}}」であるその他のノート",
"color_type": "色"
"color_type": "色",
"share_description": "説明用にHTMLメタタグに追加するテキストを定義します",
"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\"> Wiki の詳細 </a> 、および <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> の API ドキュメントを参照してください。",
"run_on_note_title_change": "ノートのタイトルが変更されたときに実行されます(ノートの作成も含む)",
"run_on_note_content_change": "ノートの内容が変更されたときに実行されます(ノートの作成も含む)。",
"run_on_note_change": "ノートが変更されたときに実行されます(ノートの作成も含む)。内容の変更は含まれません",
"run_on_note_deletion": "ノートが削除されたときに実行されます",
"run_on_branch_creation": "ブランチが作成されたときに実行されます。ブランチは親ノートと子ノート間のリンクであり、例えばノートの複製や移動の際に作成されます。",
"run_on_branch_change": "ブランチが更新されたときに実行されます。",
"run_on_branch_deletion": "ブランチが削除されたときに実行されます。ブランチは親ノートと子ノート間のリンクであり、ノートを移動した場合などに削除されます(古いブランチ/リンクは削除されます)。",
"run_on_attribute_creation": "このリレーションを定義するノートに新しい属性が作成された場合に実行されます",
"run_on_attribute_change": " このリレーションを定義するノートの属性が変更されたときに実行されます。属性が削除された場合にも実行されます",
"relation_template": "ノートの属性は親子関係がなくても継承されます。ノートの内容とサブツリーは、空の場合はインスタンスノートに追加されます。詳細はドキュメントをご覧ください。",
"inherit": "親子関係がなくても、ノートの属性は継承されます。同様の概念については、テンプレートリレーションを参照してください。ドキュメントの属性継承を参照してください。",
"widget_relation": "このリレーションのターゲットが実行され、サイドバーのウィジェットとしてレンダリングされます",
"share_css": "共有ページに挿入されるCSSートです。CSSートは共有サブツリーにも含まれている必要があります。「share_hidden_from_tree」と「share_omit_default_css」の使用も検討してください。",
"share_js": "共有ページに挿入されるJavaScriptートです。JavaScriptートは共有サブツリー内にも存在する必要があります。「share_hidden_from_tree」の使用を検討してください。",
"share_template": "共有ートを表示するためのテンプレートとして使用される埋め込みJavaScriptートです。デフォルトのテンプレートにフォールバックします。「share_hidden_from_tree」の使用を検討してください。",
"share_favicon": "共有ページに設定するファビコンのートです。通常は共有ルートに設定し、継承可能にします。ファビコンのートは共有サブツリーにも設定する必要があります。「share_hidden_from_tree」の使用を検討してください。",
"is_owned_by_note": "ノートによって所有されています",
"and_more": "...その他 {{count}} 件。",
"print_landscape": "PDF にエクスポートするときに、ページの向きを縦向きではなく横向きに変更します。",
"print_page_size": "PDF にエクスポートするときに、ページのサイズを変更します。サポートされる値: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>。"
},
"link_context_menu": {
"open_note_in_popup": "クイックエディット",
@@ -1104,11 +1166,14 @@
},
"template_switch": {
"template": "テンプレート",
"toggle-on-hint": "ノートをテンプレート化する"
"toggle-on-hint": "ノートをテンプレート化する",
"toggle-off-hint": "テンプレートとしてのノートを削除する"
},
"open-help-page": "ヘルプページを開く",
"shared_info": {
"help_link": "ヘルプについては、<a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>をご覧ください。"
"help_link": "ヘルプについては、<a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>をご覧ください。",
"shared_locally": "このノートは {{- link}} でローカルに共有されています。",
"shared_publicly": "このノートは {{- link}} で一般公開されています。"
},
"highlights_list_2": {
"title": "ハイライトリスト",
@@ -1132,7 +1197,10 @@
"auto-collapsing-notes-after-inactivity": "非アクティブ状態が続いたためノートが自動で折りたたまれます...",
"create-child-note": "子ノートを作成",
"hoist-this-note-workspace": "このノートをホイストする(ワークスペース)",
"unhoist": "ホイスト解除"
"unhoist": "ホイスト解除",
"saved-search-note-refreshed": "保存した検索ノートが更新されました。",
"refresh-saved-search-results": "保存した検索結果を更新",
"toggle-sidebar": "サイドバーを切り替え"
},
"bulk_actions": {
"bulk_actions": "一括操作",
@@ -1143,7 +1211,7 @@
"execute_bulk_actions": "一括操作を実行",
"bulk_actions_executed": "一括操作が成功に実行されました。",
"labels": "ラベル",
"relations": "関係",
"relations": "リレーション",
"notes": "ノート",
"other": "その他",
"none_yet": "アクションを上のリストからクリックして追加。"
@@ -1207,7 +1275,7 @@
"editor_type": {
"label": "書式設定ツールバー",
"floating": {
"description": "編集ツールがカーソル付近に表示されます;",
"description": "編集ツールがカーソル付近に表示されます",
"title": "フローティング"
},
"fixed": {
@@ -1272,11 +1340,17 @@
"continue_anyway": "とにかく続ける",
"message_windows": "TriliumNext は現在エミュレーションを実行しています。つまり、ARM版WindowsデバイスでIntelx64版を使用していることになります。これはパフォーマンスとバッテリー寿命に重大な影響を及ぼします。",
"recommendation": "最適なエクスペリエンスを得るには、リリース ページから TriliumNext のネイティブ ARM64 バージョンをダウンロードしてください。",
"download_link": "ネイティブ版をダウンロード"
"download_link": "ネイティブ版をダウンロード",
"message_macos": "TriliumNext は現在、Rosetta 2による翻訳環境で実行されています。つまり、Apple Silicon MacではIntel (x64)バージョンを使用していることになります。これはパフォーマンスとバッテリー寿命に重大な影響を及ぼします。"
},
"editorfeatures": {
"emoji_completion_enabled": "絵文字のオートコンプリートを有効",
"note_completion_enabled": "ノートのオートコンプリートを有効"
"note_completion_enabled": "ノートのオートコンプリートを有効",
"emoji_completion_description": "有効にすると、「:」に続けて絵文字の名前を入力することで、テキストに絵文字を簡単に挿入できます。",
"note_completion_description": "有効にすると、「@」 に続けてノートのタイトルを入力することで、ノートへのリンクを作成できます。",
"slash_commands_enabled": "スラッシュコマンドを有効",
"slash_commands_description": "有効にすると、改行や見出しの挿入などの編集コマンドは、「/」 と入力して切り替えることができます。",
"title": "機能"
},
"table_context_menu": {
"delete_row": "行を削除"
@@ -1344,7 +1418,8 @@
"agent": {
"processing": "処理中...",
"loading": "読み込み中...",
"generating": "生成中..."
"generating": "生成中...",
"thinking": "考え中..."
},
"name": "AI",
"openai": "OpenAI",
@@ -1352,7 +1427,7 @@
"ollama_no_url": "Ollamaは設定されていません。有効なURLを入力してください。",
"chat": {
"root_note_title": "AIチャット",
"root_note_content": "このメモには、保存されたAIチャットの会話が含まれています。",
"root_note_content": "このノートには、保存されたAIチャットの会話が含まれています。",
"new_chat_title": "新しいチャット",
"create_new_ai_chat": "新しいAIチャットを作成"
},
@@ -1362,7 +1437,71 @@
"selected_provider_description": "チャットおよび補完機能のAIプロバイダーを選択する",
"selected_provider": "プロバイダーを選択",
"select_model": "モデルを選択...",
"select_provider": "プロバイダーを選択..."
"select_provider": "プロバイダーを選択...",
"not_started": "開始されていません",
"processed_notes": "処理済みノート",
"total_notes": "ノートの総数",
"progress": "進行状況",
"queued_notes": "キューに登録されたノート",
"failed_notes": "失敗したノート",
"last_processed": "最終処理日時",
"refresh_stats": "統計情報を更新",
"temperature": "Temperature温度",
"url": "ベースURL",
"base_url": "ベースURL",
"enable_automatic_indexing": "自動インデックス作成を有効にする",
"rebuild_index": "インデックスの再構築",
"rebuild_index_error": "インデックスの再構築開始時にエラーが発生しました。詳細はログをご確認ください。",
"note_title": "ノートのタイトル",
"last_attempt": "最終試行日時",
"actions": "アクション",
"retry_queued": "ノートが再試行キューに追加されました",
"retry_failed": "ノートを再試行キューに追加できませんでした",
"max_notes_per_llm_query": "クエリあたりの最大ノート数",
"max_notes_per_llm_query_description": "AIコンテキストに含める類似ートの最大数",
"active_providers": "アクティブなプロバイダー",
"disabled_providers": "無効なプロバイダー",
"remove_provider": "検索からプロバイダーを削除",
"restore_provider": "検索にプロバイダーを復元",
"similarity_threshold": "類似度のしきい値",
"similarity_threshold_description": "LLMクエリのコンテキストに含めるートの最小類似度スコア01",
"reprocess_index": "検索インデックスを再構築",
"reprocessing_index": "再構築中...",
"reprocess_index_started": "検索インデックスの最適化がバックグラウンドで開始されました",
"reprocess_index_error": "検索インデックスの再構築中にエラーが発生しました",
"index_rebuild_progress": "インデックスの再構築の進行状況",
"index_rebuilding": "インデックスの最適化中({{percentage}}%",
"index_rebuild_complete": "インデックスの最適化が完了しました",
"index_rebuild_status_error": "インデックスの再構築ステータスの確認中にエラーが発生しました",
"never": "なし",
"incomplete": "未完了 ({{percentage}}%)",
"note_queued_for_retry": "ノートが再試行キューに追加されました",
"failed_to_retry_note": "ノートの再試行に失敗しました",
"all_notes_queued_for_retry": "失敗したすべてのノートは再試行のためにキューに入れられました",
"failed_to_retry_all": "ノートの再試行に失敗しました",
"use_enhanced_context": "拡張されたコンテキストを使用する",
"enhanced_context_description": "ートとその関連ートからより多くのコンテキストをAIに提供し、より良い応答を実現します",
"show_thinking": "思考を表示",
"show_thinking_description": "AIの思考プロセスをチェーン表示",
"enter_message": "メッセージを入力...",
"error_generating_response": "AI応答の生成中にエラーが発生しました",
"index_all_notes": "すべてのノートをインデックスに登録",
"index_status": "インデックスのステータス",
"indexed_notes": "インデックス登録済みのノート",
"indexing_stopped": "インデックス登録を停止しました",
"indexing_in_progress": "インデックス登録中です...",
"last_indexed": "最終インデックス作成日時",
"n_notes_queued_0": "{{ count }} 件のノートがインデックス作成待ちです",
"note_chat": "ノートチャット",
"notes_indexed_0": "{{ count }} 件のノートをインデックスしました",
"sources": "ソース",
"start_indexing": "インデックス作成を開始",
"use_advanced_context": "高度なコンテキストを使用",
"ai_enabled": "AI 機能が有効",
"ai_disabled": "AI 機能が無効",
"no_models_found_online": "モデルが見つかりません。API キーと設定を確認してください。",
"no_models_found_ollama": "Ollama モデルが見つかりません。Ollama が実行中かどうかを確認してください。",
"error_fetching": "モデルの取得エラー: {{error}}"
},
"add_label": {
"add_label": "ラベルを追加",
@@ -1370,7 +1509,10 @@
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
"new_value_placeholder": "新しい値",
"help_text": "一致したすべてのノートに:",
"help_text_note": "このメソッドを値なしで呼び出すこともできます。その場合、ラベルは値なしでノートに割り当てられます。"
"help_text_note": "このメソッドを値なしで呼び出すこともできます。その場合、ラベルは値なしでノートに割り当てられます。",
"to_value": "値",
"help_text_item1": "ノートにまだラベルがない場合は、指定されたラベルを作成します",
"help_text_item2": "または既存のラベルの値を変更する"
},
"delete_label": {
"delete_label": "ラベルを削除",
@@ -1391,32 +1533,39 @@
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
"new_value_placeholder": "新しい値",
"help_text_note": "このメソッドは値なしで呼び出すこともできます。その場合、値なしでラベルがノートに割り当てられます。",
"help_text": "一致したすべてのノートで、既存のラベルの値を変更する。"
"help_text": "一致したすべてのノートで、既存のラベルの値を変更する。",
"to_value": "値"
},
"add_relation": {
"add_relation": "関係を追加",
"relation_name": "関係の名前",
"add_relation": "リレーションを追加",
"relation_name": "リレーションの名前",
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
"create_relation_on_all_matched_notes": "一致したすべてのノートに対して、指定されたリレーションを作成します。"
"create_relation_on_all_matched_notes": "一致したすべてのノートに対して、指定されたリレーションを作成します。",
"target_note": "対象のノート",
"to": "を"
},
"delete_relation": {
"delete_relation": "関係を削除",
"relation_name": "関係の名前",
"delete_relation": "リレーションを削除",
"relation_name": "リレーションの名前",
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
},
"rename_relation": {
"rename_relation": "関係の名前を変更",
"rename_relation_from": "関係の名前を",
"rename_relation": "リレーションの名前を変更",
"rename_relation_from": "リレーションの名前を",
"old_name": "古い名前",
"to": "から",
"new_name": "新しい名前",
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
},
"update_relation_target": {
"update_relation": "関係の更新",
"relation_name": "関係の名前",
"update_relation": "リレーションの更新",
"relation_name": "リレーションの名前",
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
"on_all_matched_notes": "一致したすべてのノートに"
"on_all_matched_notes": "一致したすべてのノートに",
"target_note": "対象のノート",
"change_target_note": "既存のリレーション対象のノートを変更する",
"update_relation_target": "リレーション対象の更新",
"to": "を"
},
"revisions_button": {
"note_revisions": "ノートの変更履歴"
@@ -1427,21 +1576,24 @@
"zpetne_odkazy": {
"backlink": "{{count}} バックリンク",
"backlinks": "{{count}} バックリンク",
"relation": "関係"
"relation": "リレーション"
},
"mobile_detail_menu": {
"delete_this_note": "このノートを削除",
"error_unrecognized_command": "認識されないコマンド {{command}}"
"error_unrecognized_command": "認識されないコマンド {{command}}",
"insert_child_note": "子ノートを挿入",
"error_cannot_get_branch_id": "ノートパス 「{{notePath}} のbranchIdを取得できません"
},
"inherited_attribute_list": {
"title": "継承属性",
"no_inherited_attributes": "継承属性はありません。"
"no_inherited_attributes": "継承属性はありません。"
},
"note_map": {
"open_full": "拡大表示",
"collapse": "通常サイズに折りたたむ",
"title": "ノートマップ",
"link-distance": "リンク距離"
"link-distance": "リンク距離",
"fix-nodes": "ノードを修正"
},
"owned_attribute_list": {
"owned_attributes": "所有属性"
@@ -1453,7 +1605,9 @@
"unknown_attribute_type": "不明な属性タイプ '{{type}}'",
"add_new_attribute": "新しい属性を追加",
"remove_this_attribute": "この属性を削除",
"remove_color": "このカラーラベルを削除"
"remove_color": "このカラーラベルを削除",
"promoted_attributes": "プロモート属性",
"url_placeholder": "http://ウェブサイト..."
},
"relation_map": {
"open_in_new_tab": "新しいタブで開く",
@@ -1461,14 +1615,17 @@
"edit_title": "タイトルを編集",
"rename_note": "ノート名を変更",
"enter_new_title": "新しいノート名を入力:",
"remove_relation": "関係を削除",
"confirm_remove_relation": "本当にこの関係を削除しますか?",
"specify_new_relation_name": "新しい関係の名前(使用可能な文字: 英数字、コロン、アンダースコア)を指定:",
"remove_relation": "リレーションを削除",
"confirm_remove_relation": "本当にこのリレーションを削除しますか?",
"specify_new_relation_name": "新しいリレーションの名前(使用可能な文字: 英数字、コロン、アンダースコア)を指定:",
"note_not_found": "ノート {{noteId}} が見つかりません!",
"enter_title_of_new_note": "新しいノートのタイトルを入力",
"default_new_note_title": "新しいノート",
"cannot_match_transform": "変換を一致させることができません: {{transform}}",
"click_on_canvas_to_place_new_note": "キャンバスをクリックして新しいノートを配置"
"click_on_canvas_to_place_new_note": "キャンバスをクリックして新しいノートを配置",
"connection_exists": "これらのノート間の接続 '{{name}}' は既に存在します。",
"start_dragging_relations": "ここからリレーションをドラッグして、別のノートにドロップします。",
"note_already_in_diagram": "ノート「{{title}}」はすでに図に含まれています。"
},
"database_anonymization": {
"title": "データベースの匿名化",
@@ -1534,7 +1691,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": "ズーム倍率"
},
@@ -1577,10 +1734,23 @@
"attribute_editor": {
"help_text_body1": "ラベルを追加するには、例 <code>#rock</code> と入力します。値も追加したい場合は、例 <code>#year = 2020</code> と入力します",
"help_text_body2": "リレーションについては、<code>~author = @</code> と入力すると、オートコンプリートが表示され、目的のノートを検索できるようになります。",
"placeholder": "ここにラベルとリレーションを入力"
"placeholder": "ここにラベルとリレーションを入力",
"help_text_body3": "代わりに、右側の <code>+</code> ボタンを使用してラベルとリレーションを追加することもできます。",
"save_attributes": "属性を保存 <enter>",
"add_a_new_attribute": "新しい属性を追加",
"add_new_label": "新しいラベルを追加 <kbd data-command=\"addNewLabel\"></kbd>",
"add_new_relation": "新しいリレーションを追加 <kbd data-command=\"addNewRelation\"></kbd>",
"add_new_label_definition": "新しいラベル定義を追加",
"add_new_relation_definition": "新しいリレーション定義を追加"
},
"move_note": {
"on_all_matched_notes": "一致したすべてのノートに"
"on_all_matched_notes": "一致したすべてのノートに",
"move_note": "ノートを移動",
"target_parent_note": "対象の親ノート",
"move_note_new_parent": "ノートに親が 1 つしかない場合は、ノートを新しい親に移動します (つまり、古いブランチが削除され、新しい親に新しいブランチが作成されます)",
"clone_note_new_parent": "ノートに複数のクローン/ブランチがある場合、ノートを新しい親にクローンします(どのブランチを削除すべきか不明なため)",
"nothing_will_happen": "ノートをターゲットノートに移動できない場合は何も起こりません(つまり、ツリーサイクルが生じるため)",
"to": "次へ"
},
"onclick_button": {
"no_click_handler": "ボタン ウィジェット '{{componentId}}' にはクリック ハンドラーが定義されていません"
@@ -1596,20 +1766,35 @@
"placeholder": "ここにノートの内容を入力..."
},
"empty": {
"open_note_instruction": "以下の入力欄にノートのタイトルを入力するか、ツリー内のノートを選択してノートを開きます。"
"open_note_instruction": "以下の入力欄にノートのタイトルを入力するか、ツリー内のノートを選択してノートを開きます。",
"search_placeholder": "名前でノートを検索",
"enter_workspace": "ワークスペース {{title}} に入る"
},
"file": {
"too_big": "パフォーマンス上の理由により、プレビューではファイルの最初の {{maxNumChars}} 文字のみが表示されます。ファイル全体を表示するには、ファイルをダウンロードして外部で開いてください。"
"too_big": "パフォーマンス上の理由により、プレビューではファイルの最初の {{maxNumChars}} 文字のみが表示されます。ファイル全体を表示するには、ファイルをダウンロードして外部で開いてください。",
"file_preview_not_available": "このファイル形式ではファイルプレビューは利用できません。"
},
"protected_session": {
"enter_password_instruction": "保護されたノートを表示するにはパスワードを入力する必要があります:"
"enter_password_instruction": "保護されたノートを表示するにはパスワードを入力する必要があります:",
"start_session_button": "保護されたセッションを開始 <kbd>enter</kbd>",
"started": "保護されたセッションが開始されました。",
"wrong_password": "パスワードが間違っています。",
"protecting-finished-successfully": "保護が正常に完了しました。",
"unprotecting-finished-successfully": "保護の解除が正常に完了しました。",
"protecting-in-progress": "保護中: {{count}}",
"unprotecting-in-progress-count": "保護解除中: {{count}}",
"protecting-title": "保護の状態",
"unprotecting-title": "保護解除の状態"
},
"render": {
"note_detail_render_help_1": "このヘルプートが表示されるのは、このートの「HTML のレンダリング」タイプには、正常に機能するために必要なリレーションがないためです。"
"note_detail_render_help_1": "このヘルプートが表示されるのは、このートの「HTML のレンダリング」タイプには、正常に機能するために必要なリレーションがないためです。",
"note_detail_render_help_2": "レンダリングHTMLートタイプは、<a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/scripts.html\">スクリプティング</a>に使用されます。簡単に言うと、HTMLコードートオプションでJavaScriptを含むがあり、このートがそれをレンダリングします。これを動作させるには、レンダリングするHTMLートを指す「renderNote」という<a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/attributes.html\">リレーション</a>を定義する必要があります。"
},
"consistency_checks": {
"find_and_fix_button": "一貫性の問題を見つけて修正する",
"finding_and_fixing_message": "一貫性の問題を見つけて修正中…"
"finding_and_fixing_message": "一貫性の問題を見つけて修正中…",
"title": "一貫性をチェック",
"issues_fixed_message": "発見された可能性のある一貫性の問題はすべて修正されました。"
},
"vacuum_database": {
"title": "データベースのバキューム",
@@ -1620,12 +1805,16 @@
},
"ribbon": {
"promoted_attributes_message": "プロモート属性がノートに存在する場合、プロモート属性のリボンタブが自動的に開きます",
"edited_notes_message": "編集したートのリボンタブは、dayートで自動的に開きます"
"edited_notes_message": "編集したートのリボンタブは、dayートで自動的に開きます",
"widgets": "リボンウィジェット"
},
"ui-performance": {
"enable-motion": "トランジションとアニメーションを有効にする",
"enable-shadows": "影を有効にする",
"enable-backdrop-effects": "メニュー、ポップアップ、パネルの背景効果を有効にする"
"enable-backdrop-effects": "メニュー、ポップアップ、パネルの背景効果を有効にする",
"title": "パフォーマンス",
"enable-smooth-scroll": "スムーズスクロールを有効にする",
"app-restart-required": "(変更を有効にするにはアプリケーションの再起動が必要です)"
},
"code_mime_types": {
"title": "ドロップダウンで利用可能なMIMEタイプ"
@@ -1664,7 +1853,12 @@
"erase_excess_revision_snapshots_prompt": "余分な変更履歴が消去されました。"
},
"editability_select": {
"note_is_read_only": "ノートは読み取り専用ですが、ボタンをクリックすると編集できます。"
"note_is_read_only": "ノートは読み取り専用ですが、ボタンをクリックすると編集できます。",
"auto": "自動",
"read_only": "読み取り専用",
"always_editable": "常に編集可能",
"note_is_editable": "ノートは長すぎなければ編集可能です。",
"note_is_always_editable": "ノートは長さに関係なく常に編集可能です。"
},
"find": {
"case_sensitive": "大文字と小文字を区別",
@@ -1681,7 +1875,9 @@
"could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした"
},
"watched_file_update_status": {
"ignore_this_change": "この変更を無視する"
"ignore_this_change": "この変更を無視する",
"file_last_modified": "ファイル <code class=\"file-path\"></code> は <span class=\"file-last-modified\"></span> に最後に変更されました。",
"upload_modified_file": "変更したファイルをアップロード"
},
"image": {
"copied-to-clipboard": "画像への参照がクリップボードにコピーされました。これは任意のテキストノートに貼り付けることができます。",
@@ -1689,7 +1885,8 @@
},
"entrypoints": {
"note-revision-created": "ノートの改訂版が作成されました。",
"sql-error": "SQL クエリの実行中にエラーが発生しました: {{message}}"
"sql-error": "SQL クエリの実行中にエラーが発生しました: {{message}}",
"note-executed": "ノートが実行されました。"
},
"branches": {
"cannot-move-notes-here": "ここにノートを移動することはできません。",
@@ -1706,7 +1903,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}}」サブツリーの外部にあるため、ノートにアクセスするにはホイストを解除する必要があります。ホイスト解除を続行しますか?"
@@ -1752,7 +1951,10 @@
"display-week-numbers": "週番号を表示",
"map-style": "マップスタイル:",
"max-nesting-depth": "最大階層の深さ:",
"show-scale": "スケールを表示"
"show-scale": "スケールを表示",
"raster": "Raster",
"vector_light": "Vectorライト",
"vector_dark": "Vector (ダーク)"
},
"call_to_action": {
"next_theme_title": "新しいTriliumテーマをお試しください",
@@ -1779,5 +1981,89 @@
},
"collections": {
"rendering_error": "エラーのためコンテンツを表示できません。"
},
"abstract_bulk_action": {
"remove_this_search_action": "この検索アクションを削除"
},
"update_available": {
"update_available": "アップデートが利用可能"
},
"copy_image_reference_button": {
"button_title": "画像参照をクリップボードにコピーし、テキストノートに貼り付けることができます。"
},
"attachment_detail": {
"open_help_page": "添付ファイルのヘルプページを開く",
"owning_note": "所有ノート: ",
"you_can_also_open": "、開くこともできます ",
"list_of_all_attachments": "すべての添付ファイルのリスト",
"attachment_deleted": "この添付ファイルは削除されました。"
},
"attachment_list": {
"open_help_page": "添付ファイルのヘルプページを開く",
"owning_note": "所有ノート: ",
"upload_attachments": "添付ファイルをアップロード",
"no_attachments": "このノートには添付ファイルはありません。"
},
"book": {
"no_children_help": "このコレクションには子ノートがないため、表示するものがありません。詳細は<a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>をご覧ください。",
"drag_locked_title": "編集をロック中",
"drag_locked_message": "コレクションは編集がロックされているため、ドラッグは許可されていません。"
},
"native_title_bar": {
"title": "ネイティブタイトルバー(アプリの再起動が必要です)",
"enabled": "有効",
"disabled": "無効"
},
"options_widget": {
"options_change_saved": "オプションの変更が保存されました。",
"options_status": "オプションステータス"
},
"multi_factor_authentication": {
"title": "多要素認証",
"description": "多要素認証MFAは、アカウントのセキュリティをさらに強化します。ログイン時にパスワードを入力するだけでなく、MFAでは本人確認のために1つ以上の追加情報の入力を求められます。これにより、たとえ誰かがパスワードを入手したとしても、2つ目の情報がなければアカウントにアクセスできません。まるでドアに鍵を追加したようなもので、他人が侵入するのがはるかに困難になります。<br><br>MFAを有効にするには、以下の手順に従ってください。正しく設定しないと、ログインはパスワードのみで行われます。",
"mfa_enabled": "多要素認証を有効にする",
"mfa_method": "MFAメソッド",
"electron_disabled": "現在、デスクトップ ビルドでは多要素認証はサポートされていません。",
"totp_title": "時間ベースのワンタイムパスワード (TOTP)",
"totp_description": "TOTP時間ベースのワンタイムパスワードは、30秒ごとに変化する一意の一時的なコードを生成するセキュリティ機能です。このコードとパスワードを使用してアカウントにログインすることで、他人がアクセスするのを大幅に困難にします。",
"totp_secret_title": "TOTPシークレットを生成する",
"totp_secret_generate": "TOTPシークレットを生成する",
"totp_secret_regenerate": "TOTPシークレットを再生成する",
"no_totp_secret_warning": "TOTP を有効にするには、まず TOTP シークレットを生成する必要があります。",
"totp_secret_description_warning": "新しい TOTP シークレットを生成したら、新しい TOTP シークレットを使用して再度ログインする必要があります。",
"totp_secret_generated": "TOTPシークレットが生成されました",
"totp_secret_warning": "生成されたシークレットは安全な場所に保存してください。再度表示されることはありません。",
"totp_secret_regenerate_confirm": "OTP シークレットを再生成してもよろしいですか?これにより、以前の TOTP シークレットと既存のすべての回復コードが無効になります。",
"recovery_keys_title": "シングルサインオン回復キー",
"recovery_keys_description": "シングル サインオン回復キーは、認証コードにアクセスできない場合でもログインするために使用されます。",
"recovery_keys_description_warning": "回復キーはページを離れた後は再度表示されませんので、安全な場所に保管してください。<br>回復キーは一度使用すると再度使用できなくなります。",
"recovery_keys_error": "回復コードの生成中にエラーが発生しました",
"recovery_keys_no_key_set": "回復コードが設定されていません",
"recovery_keys_generate": "回復コードを生成する",
"recovery_keys_regenerate": "回復コードの再生成",
"recovery_keys_used": "使用日: {{date}}",
"recovery_keys_unused": "回復コード {{index}} は未使用です",
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenIDは、Googleなどの他のサービスのアカウントを使用してウェブサイトにログインし、本人確認を行うための標準化された方法です。デフォルトの発行者はGoogleですが、他のOpenIDプロバイダに変更できます。詳しくは<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">こちら</a>をご覧ください。Google経由でOpenIDサービスを設定するには、<a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">こちらの手順</a>に従ってください。",
"oauth_description_warning": "OAuth/OpenIDを有効にするには、config.iniファイルにOAuth/OpenIDのベースURL、クライアントID、クライアントシークレットを設定し、アプリケーションを再起動する必要があります。環境変数から設定する場合は、TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET を設定してください。",
"oauth_missing_vars": "設定がありません: {{-variables}}",
"oauth_user_account": "ユーザーアカウント: ",
"oauth_user_email": "ユーザーEメール: ",
"oauth_user_not_logged_in": "ログインしていません!"
},
"note-map": {
"button-link-map": "リンクマップ",
"button-tree-map": "ツリーマップ"
},
"spacer": {
"configure_launchbar": "ランチャーバーを設定"
},
"attachment_detail_2": {
"will_be_deleted_in": "この添付ファイルは {{time}} 後に自動的に削除されます",
"will_be_deleted_soon": "この添付ファイルはすぐに自動的に削除されます",
"deletion_reason": "、添付ファイルがノートのコンテンツにリンクされていないためです。削除されないようにするには、添付ファイルのリンクをコンテンツに再度追加するか、添付ファイルをノートに変換してください。",
"role_and_size": "ロール: {{role}},サイズ: {{size}}",
"link_copied": "添付ファイルのリンクをクリップボードにコピーしました。",
"unrecognized_role": "添付ファイルのロール「{{role}}」は認識されません。"
}
}

View File

@@ -29,9 +29,25 @@
"note": "노트",
"search_note": "이름으로 노트 검색하기",
"help_on_links": "링크 관련 도움말",
"link_title_mirrors": "링크 제목은 노트의 현재 제목을 반영합니다"
"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

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

View File

@@ -840,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",
@@ -2008,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!"

View File

@@ -322,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",
@@ -1587,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?"
@@ -1668,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.",
@@ -1931,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!"
@@ -1956,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",

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": "Справка"
},
@@ -370,7 +370,7 @@
"confirm_delete": "Вы хотите удалить эту версию?",
"revisions_deleted": "Версии заметки были удалены.",
"revision_restored": "Версия заметки была восстановлена.",
"revision_deleted": "Версия заметки были удалены.",
"revision_deleted": "Версия заметки была удалена.",
"download_button": "Скачать",
"file_size": "Размер файла:",
"preview": "Предпросмотр:",
@@ -463,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": "Скрыть продвигаемых атрибуты в этой заметке",
@@ -479,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>.",
@@ -528,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": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. См. описание шаблонных отношений для получения аналогичной информации. См. раздел «Наследование атрибутов» в документации.",
@@ -585,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": "Больше не показывать это предупреждение",
@@ -712,7 +716,7 @@
},
"code_block": {
"copy_title": "Копировать в буфер обмена",
"theme_group_dark": "Темныце темы",
"theme_group_dark": "Темные темы",
"theme_group_light": "Светлые темы",
"theme_none": "Нет подсветки синтаксиса",
"word_wrapping": "Перенос слов"
@@ -783,7 +787,7 @@
"beta-feature": "Бета",
"widget": "Виджет",
"image": "Изображение",
"file": "Файд",
"file": "Файл",
"canvas": "Холст",
"mermaid-diagram": "Диаграмма Mermaid",
"book": "Коллекция",
@@ -811,7 +815,7 @@
"export": "Экспорт",
"open-in-a-new-tab": "Открыть в новой вкладке",
"open-in-a-new-split": "Открыть в новой панели",
"unhoist-note": "Отрепить заметку",
"unhoist-note": "Открепить заметку",
"hoist-note": "Закрепить заметку",
"protect-subtree": "Защитить поддерево",
"unprotect-subtree": "Снять защиту с поддерева",
@@ -864,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": "ничего не произойдет, если эту заметку невозможно переместить в целевую заметку (т.е. это создаст цикл дерева)"
@@ -902,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.",
@@ -925,7 +929,7 @@
"sat": "Сбт",
"sun": "Вс",
"january": "Январь",
"febuary": "Февраль",
"february": "Февраль",
"march": "Март",
"april": "Апрель",
"may": "Май",
@@ -1020,8 +1024,8 @@
"file_properties": {
"download": "Скачать",
"open": "Открыть",
"title": "Файд",
"upload_success": "Загрузка новой версии файла не удалась.",
"title": "Файл",
"upload_success": "Новая версия файла успешно загружена.",
"upload_new_revision": "Загрузить новую версию",
"file_size": "Размер файла",
"file_type": "Тип файла",
@@ -1153,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}}",
@@ -1413,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": "Формат даты и числа"
@@ -1475,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": "Ключи восстановления единого входа",
@@ -1719,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": {
@@ -1802,7 +1806,7 @@
"button_title": "Экспортировать диаграмму как SVG"
},
"copy_image_reference_button": {
"button_title": "Скопировать ссылку на изображение в буфер обмена, можент быть вставлена в текстовую заметку."
"button_title": "Скопировать ссылку на изображение в буфер обмена, может быть вставлена в текстовую заметку."
},
"note_launcher": {
"this_launcher_doesnt_define_target_note": "Этот лаунчер не определяет целевую заметку."
@@ -1973,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}}",
@@ -2045,7 +2051,7 @@
"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": "Перетаскивание не допускается, так как коллекция защищена от редактирования."
},

View File

@@ -581,7 +581,7 @@
"sun": "日",
"cannot_find_day_note": "無法找到日記",
"january": "一月",
"febuary": "二月",
"february": "二月",
"march": "三月",
"april": "四月",
"may": "五月",
@@ -1582,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}}' 的子階層之外,您必須取消聚焦才能訪問該筆記。是否繼續取消聚焦?"
@@ -1843,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": "尚未登入!"
@@ -1952,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": "新增列",

View File

@@ -560,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": "Ви не ввійшли в систему!"
@@ -722,7 +722,7 @@
"cannot_find_day_note": "Не вдається знайти денну нотатку",
"cannot_find_week_note": "Не вдається знайти тижневу нотатку",
"january": "Січень",
"febuary": "Лютий",
"february": "Лютий",
"march": "Березень",
"april": "Квітень",
"may": "Травень",
@@ -1669,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}}', і вам потрібно відкріпити нотатку, щоб отримати до неї доступ. Ви хочете продовжити відкріплення?"
@@ -1797,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": "Новий рядок",

View File

@@ -218,8 +218,8 @@ function SaveToNoteButton({ note }: FloatingButtonContext) {
/>
}
function RelationMapButtons({ note, triggerEvent }: FloatingButtonContext) {
const isEnabled = (note.type === "relationMap");
function RelationMapButtons({ note, isDefaultViewMode, triggerEvent }: FloatingButtonContext) {
const isEnabled = (note.type === "relationMap" && isDefaultViewMode);
return isEnabled && (
<>
<FloatingButton

View File

@@ -18,7 +18,7 @@ dayjs.extend(isSameOrAfter);
const MONTHS = [
t("calendar.january"),
t("calendar.febuary"),
t("calendar.february"),
t("calendar.march"),
t("calendar.april"),
t("calendar.may"),

View File

@@ -189,6 +189,7 @@ function useViewModeConfig<T extends object>(note: FNote | null | undefined, vie
useEffect(() => {
if (!note || !viewType) return;
setViewConfig(undefined);
const viewStorage = new ViewModeStorage<T>(note, viewType);
viewStorage.restore().then(config => {
const storeFn = (config: T) => {

View File

@@ -63,6 +63,14 @@ export default function Card({
setBranchIdToEdit?.(branch.branchId);
}, [ setBranchIdToEdit, branch ]);
const handleKeyDown = useCallback((e: KeyboardEvent) => {
if (e.key === "Enter") {
api.openNote(note.noteId);
} else if (e.key === "F2") {
setBranchIdToEdit?.(branch.branchId);
}
}, [ setBranchIdToEdit, note ]);
useEffect(() => {
editorRef.current?.focus();
}, [ isEditing ]);
@@ -83,9 +91,11 @@ export default function Card({
onDragEnd={handleDragEnd}
onContextMenu={handleContextMenu}
onClick={!isEditing ? handleOpen : undefined}
onKeyDown={handleKeyDown}
style={{
display: !isVisible ? "none" : undefined
}}
tabIndex={300}
>
{!isEditing ? (
<>

View File

@@ -50,6 +50,12 @@ export default function Column({
openColumnContextMenu(api, e, column);
}, [ api, column ]);
const handleTitleKeyDown = useCallback((e: KeyboardEvent) => {
if (e.key === "F2") {
setColumnNameToEdit?.(column);
}
}, [ column ]);
/** Allow using mouse wheel to scroll inside card, while also maintaining column horizontal scrolling. */
const handleScroll = useCallback((event: JSX.TargetedWheelEvent<HTMLDivElement>) => {
const el = event.currentTarget;
@@ -82,7 +88,6 @@ export default function Column({
onDragOver={isAnyColumnDragging ? handleColumnDragOver : handleDragOver}
onDragLeave={handleDragLeave}
onDrop={handleDrop}
onWheel={handleScroll}
style={{
display: !isVisible ? "none" : undefined
}}
@@ -93,6 +98,8 @@ export default function Column({
onDragStart={handleColumnDragStart}
onDragEnd={handleColumnDragEnd}
onContextMenu={handleContextMenu}
onKeyDown={handleTitleKeyDown}
tabIndex={300}
>
{!isEditing ? (
<>
@@ -112,33 +119,35 @@ export default function Column({
)}
</h3>
{(columnItems ?? []).map(({ note, branch }, index) => {
const showIndicatorBefore = dropPosition?.column === column &&
dropPosition.index === index &&
draggedCard?.noteId !== note.noteId;
<div className="board-column-content" onWheel={handleScroll}>
{(columnItems ?? []).map(({ note, branch }, index) => {
const showIndicatorBefore = dropPosition?.column === column &&
dropPosition.index === index &&
draggedCard?.noteId !== note.noteId;
return (
<>
{showIndicatorBefore && (
<div className="board-drop-placeholder show" />
)}
<Card
key={note.noteId}
api={api}
note={note}
branch={branch}
column={column}
index={index}
isDragging={draggedCard?.noteId === note.noteId}
/>
</>
);
})}
{dropPosition?.column === column && dropPosition.index === (columnItems?.length ?? 0) && (
<div className="board-drop-placeholder show" />
)}
return (
<>
{showIndicatorBefore && (
<div className="board-drop-placeholder show" />
)}
<Card
key={note.noteId}
api={api}
note={note}
branch={branch}
column={column}
index={index}
isDragging={draggedCard?.noteId === note.noteId}
/>
</>
);
})}
{dropPosition?.column === column && dropPosition.index === (columnItems?.length ?? 0) && (
<div className="board-drop-placeholder show" />
)}
<AddNewItem api={api} column={column} />
<AddNewItem api={api} column={column} />
</div>
</div>
)
}
@@ -146,11 +155,18 @@ export default function Column({
function AddNewItem({ column, api }: { column: string, api: BoardApi }) {
const [ isCreatingNewItem, setIsCreatingNewItem ] = useState(false);
const addItemCallback = useCallback(() => setIsCreatingNewItem(true), []);
const handleKeyDown = useCallback((e: KeyboardEvent) => {
if (!isCreatingNewItem && e.key === "Enter") {
setIsCreatingNewItem(true);
}
}, []);
return (
<div
className={`board-new-item ${isCreatingNewItem ? "editing" : ""}`}
onClick={addItemCallback}
onKeyDown={handleKeyDown}
tabIndex={300}
>
{!isCreatingNewItem ? (
<>

View File

@@ -24,10 +24,13 @@
border: 2px solid transparent;
border-radius: 8px;
padding: 0.5em;
padding-bottom: 0;
background-color: var(--accented-background-color);
transition: border-color 0.2s ease;
overflow-y: auto;
max-height: 100%;
display: flex;
flex-direction: column;
}
.board-view-container .board-column.drag-over {
@@ -37,7 +40,7 @@
.board-view-container .board-column h3 {
font-size: 1em;
margin-bottom: 0.75em;
margin: 0;
padding: 0.5em 0.5em 0.5em 0.5em;
border-bottom: 1px solid var(--main-border-color);
cursor: grab;
@@ -98,6 +101,12 @@
cursor: pointer;
}
.board-view-container .board-column > .board-column-content {
flex-grow: 1;
overflow: scroll;
padding-bottom: 0.5em;
}
.board-view-container .board-column h3:hover .edit-icon,
.board-view-container .board-note:hover .edit-icon {
opacity: 1;
@@ -121,6 +130,11 @@
font-size: var(--card-font-size);
}
.board-view-container :focus {
outline: 3px solid var(--input-focus-outline-color);
outline-offset: 0;
}
.board-view-container .board-note {
transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.15s ease, margin-top 0.2s ease;
}

View File

@@ -227,10 +227,12 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, multilin
isNewItem?: boolean;
}) {
const inputRef = useRef<any>(null);
const focusElRef = useRef<Element>(null);
const dismissOnNextRefreshRef = useRef(false);
const shouldDismiss = useRef(false);
useEffect(() => {
focusElRef.current = document.activeElement;
inputRef.current?.focus();
inputRef.current?.select();
}, [ inputRef ]);
@@ -254,8 +256,11 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, multilin
onKeyDown={(e: TargetedKeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {
if (e.key === "Enter" || e.key === "Escape") {
e.preventDefault();
e.stopPropagation();
shouldDismiss.current = (e.key === "Escape");
e.currentTarget.blur();
if (focusElRef.current instanceof HTMLElement) {
focusElRef.current.focus();
}
}
}}
onBlur={(newValue) => {

View File

@@ -59,8 +59,8 @@ function ListNoteCard({ note, parentNote, expand, highlightedTokens }: { note: F
const [ isExpanded, setExpanded ] = useState(expand);
const notePath = getNotePath(parentNote, note);
// Reset expand state if switching to another note.
useEffect(() => setExpanded(expand), [ note ]);
// Reset expand state if switching to another note, or if user manually toggled expansion state.
useEffect(() => setExpanded(expand), [ note, expand ]);
return (
<div

View File

@@ -30,7 +30,8 @@ const labelTypeMappings: Record<ColumnType, Partial<ColumnDefinition>> = {
editor: "datetime"
},
number: {
editor: "number"
editor: "number",
sorter: "number"
},
time: {
editor: "input"

View File

@@ -16,9 +16,10 @@ import useColTableEditing from "./col_editing";
import AttributeDetailWidget from "../../attribute_widgets/attribute_detail";
import attributes from "../../../services/attributes";
import { RefObject } from "preact";
import SpacedUpdate from "../../../services/spaced_update";
interface TableConfig {
tableData?: {
tableData: {
columns?: ColumnDefinition[];
};
}
@@ -53,12 +54,12 @@ export default function TableView({ note, noteIds, notePath, viewConfig, saveCon
return (
<div className="table-view">
{columnDefs && (
{rowData !== undefined && persistenceProps && (
<>
<Tabulator
tabulatorRef={tabulatorRef}
className="table-view-container"
columns={columnDefs}
columns={columnDefs ?? []}
data={rowData}
modules={[ SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MoveRowsModule, DataTreeModule ]}
footerElement={<TableFooter note={note} />}
@@ -94,23 +95,31 @@ function TableFooter({ note }: { note: FNote }) {
)
}
function usePersistence(initialConfig: TableConfig | null | undefined, saveConfig: (newConfig: TableConfig) => void) {
const config = useRef<TableConfig | null | undefined>(initialConfig);
const spacedUpdate = useSpacedUpdate(() => {
if (config.current) {
saveConfig(config.current);
}
}, 5_000);
const persistenceWriterFunc = useCallback((_id, type: string, data: object) => {
if (!config.current) config.current = {};
if (!config.current.tableData) config.current.tableData = {};
(config.current.tableData as Record<string, {}>)[type] = data;
spacedUpdate.scheduleUpdate();
}, []);
const persistenceReaderFunc = useCallback((_id, type: string) => {
return config.current?.tableData?.[type];
}, []);
return { persistenceReaderFunc, persistenceWriterFunc };
function usePersistence(viewConfig: TableConfig | null | undefined, saveConfig: (newConfig: TableConfig) => void) {
const [ persistenceProps, setPersistenceProps ] = useState<Pick<Options, "persistenceReaderFunc" | "persistenceWriterFunc">>();
useEffect(() => {
const viewConfigLocal = viewConfig ?? { tableData: {} };
const spacedUpdate = new SpacedUpdate(() => {
saveConfig(viewConfigLocal);
}, 5_000);
setPersistenceProps({
persistenceReaderFunc(_, type) {
return viewConfigLocal.tableData?.[type];
},
persistenceWriterFunc(_, type, data) {
(viewConfigLocal.tableData as Record<string, {}>)[type] = data;
spacedUpdate.scheduleUpdate();
},
});
return () => {
spacedUpdate.updateNowIfNecessary();
};
}, [ viewConfig, saveConfig ])
return persistenceProps;
}
function useData(note: FNote, noteIds: string[], viewConfig: TableConfig | undefined, newAttributePosition: RefObject<number | undefined>, resetNewAttributePosition: () => void) {
@@ -125,6 +134,7 @@ function useData(note: FNote, noteIds: string[], viewConfig: TableConfig | undef
function refresh() {
const info = getAttributeDefinitionInformation(note);
buildRowDefinitions(note, info, includeArchived, maxDepth).then(({ definitions: rowData, hasSubtree: hasChildren, rowNumber }) => {
const columnDefs = buildColumnDefinitions({
info,

View File

@@ -16,7 +16,7 @@ interface TableProps<T> extends Omit<Options, "data" | "footerElement" | "index"
footerElement?: string | HTMLElement | JSX.Element;
}
export default function Tabulator<T>({ className, columns, data, modules, tabulatorRef: externalTabulatorRef, footerElement, events, index, ...restProps }: TableProps<T>) {
export default function Tabulator<T>({ className, columns, data, modules, tabulatorRef: externalTabulatorRef, footerElement, events, index, dataTree, ...restProps }: TableProps<T>) {
const parentComponent = useContext(ParentComponent);
const containerRef = useRef<HTMLDivElement>(null);
const tabulatorRef = useRef<VanillaTabulator>(null);
@@ -36,6 +36,7 @@ export default function Tabulator<T>({ className, columns, data, modules, tabula
data,
footerElement: (parentComponent && isValidElement(footerElement) ? renderReactWidget(parentComponent, footerElement)[0] : undefined),
index: index as string | number | undefined,
dataTree,
...restProps
});
@@ -45,7 +46,7 @@ export default function Tabulator<T>({ className, columns, data, modules, tabula
});
return () => tabulator.destroy();
}, []);
}, [ dataTree ] );
useEffect(() => {
const tabulator = tabulatorRef.current;

View File

@@ -22,6 +22,7 @@ export default function AddLinkDialog() {
const [ linkType, setLinkType ] = useState<LinkType>(hasSelection ? "hyper-link" : "reference-link");
const [ suggestion, setSuggestion ] = useState<Suggestion | null>(null);
const [ shown, setShown ] = useState(false);
const hasSubmittedRef = useRef(false);
useTriliumEvent("showAddLinkDialog", ( { textTypeWidget, text }) => {
setTextTypeWidget(textTypeWidget);
@@ -83,14 +84,11 @@ export default function AddLinkDialog() {
}
function onSubmit() {
if (suggestion?.notePath) {
// Handle note link
hasSubmittedRef.current = true;
if (suggestion) {
// Insertion logic in onHidden because it needs focus.
setShown(false);
textTypeWidget?.addLink(suggestion.notePath, linkType === "reference-link" ? null : linkTitle);
} else if (suggestion?.externalLink) {
// Handle external link
setShown(false);
textTypeWidget?.addLink(suggestion.externalLink, linkTitle, true);
} else {
logError("No link to add.");
}
@@ -109,6 +107,19 @@ export default function AddLinkDialog() {
onSubmit={onSubmit}
onShown={onShown}
onHidden={() => {
// Insert the link.
if (hasSubmittedRef.current && suggestion && textTypeWidget) {
hasSubmittedRef.current = false;
if (suggestion.notePath) {
// Handle note link
textTypeWidget.addLink(suggestion.notePath, linkType === "reference-link" ? null : linkTitle);
} else if (suggestion.externalLink) {
// Handle external link
textTypeWidget.addLink(suggestion.externalLink, linkTitle, true);
}
}
setSuggestion(null);
setShown(false);
}}

View File

@@ -136,7 +136,7 @@ ws.subscribeToMessages(async (message) => {
id: id,
title: t("export.export_status"),
message: message,
icon: "arrow-square-up-right"
icon: "export"
};
}

View File

@@ -195,7 +195,7 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
// https://github.com/zadam/trilium/issues/2522
const isBackendNote = this.noteContext?.noteId === "_backendLog";
const isSqlNote = this.mime === "text/x-sqlite;schema=trilium";
const isFullHeightNoteType = ["canvas", "webView", "noteMap", "mindMap", "mermaid", "file"].includes(this.type ?? "");
const isFullHeightNoteType = ["canvas", "webView", "noteMap", "mindMap", "mermaid", "file", "aiChat"].includes(this.type ?? "");
const isFullHeight = (!this.noteContext?.hasNoteList() && isFullHeightNoteType && !isSqlNote)
|| this.noteContext?.viewScope?.viewMode === "attachments"
|| isBackendNote;

View File

@@ -14,17 +14,20 @@ export default function HelpRemoveButtons({ help, removeText, onRemove }: HelpRe
{help && <>
<Dropdown
className="help-dropdown"
buttonClassName="bx bx-help-circle icon-action"
buttonClassName="bx bx-help-circle icon-action"
hideToggleArrow
>{help}</Dropdown>
{" "}
</>}
</>}
<ActionButton
icon="bx bx-x"
className="search-option-del"
text={removeText ?? ""}
onClick={onRemove}
onClick={(e) => {
e.preventDefault();
onRemove?.();
}}
/>
</td>
);
}
}

View File

@@ -36,9 +36,9 @@ interface ModalProps {
onSubmit?: () => void;
/** Called when the modal is shown. */
onShown?: () => void;
/**
/**
* Called when the modal is hidden, either via close button, backdrop click or submit.
*
*
* Here it's generally a good idea to set `show` to false to reflect the actual state of the modal.
*/
onHidden: () => void;
@@ -71,23 +71,25 @@ export default function Modal({ children, className, size, title, header, footer
useEffect(() => {
const modalElement = modalRef.current;
if (!modalElement) {
return;
}
if (!modalElement) return;
if (onShown) {
modalElement.addEventListener("shown.bs.modal", onShown);
}
modalElement.addEventListener("hidden.bs.modal", () => {
function onModalHidden() {
onHidden();
if (elementToFocus.current && "focus" in elementToFocus.current) {
(elementToFocus.current as HTMLElement).focus();
}
});
}
modalElement.addEventListener("hidden.bs.modal", onModalHidden);
return () => {
if (onShown) {
modalElement.removeEventListener("shown.bs.modal", onShown);
}
modalElement.removeEventListener("hidden.bs.modal", onHidden);
modalElement.removeEventListener("hidden.bs.modal", onModalHidden);
};
}, [ onShown, onHidden ]);
@@ -180,4 +182,4 @@ const ModalInner = memo(({ children, footer, footerAlignment, bodyStyle, footerS
)}
</>
);
});
});

View File

@@ -19,6 +19,7 @@ import Mark from "mark.js";
import { DragData } from "../note_tree";
import Component from "../../components/component";
import toast, { ToastOptions } from "../../services/toast";
import { ViewMode } from "../../services/link";
export function useTriliumEvent<T extends EventNames>(eventName: T, handler: (data: EventData<T>) => void) {
const parentComponent = useContext(ParentComponent);
@@ -196,6 +197,7 @@ export function useNoteContext() {
const [ noteContext, setNoteContext ] = useState<NoteContext>();
const [ notePath, setNotePath ] = useState<string | null | undefined>();
const [ note, setNote ] = useState<FNote | null | undefined>();
const [ , setViewMode ] = useState<ViewMode>();
const [ refreshCounter, setRefreshCounter ] = useState(0);
useEffect(() => {
@@ -205,6 +207,7 @@ export function useNoteContext() {
useTriliumEvents([ "setNoteContext", "activeContextChanged", "noteSwitchedAndActivated", "noteSwitched" ], ({ noteContext }) => {
setNoteContext(noteContext);
setNotePath(noteContext.notePath);
setViewMode(noteContext.viewScope?.viewMode);
});
useTriliumEvent("frocaReloaded", () => {
setNote(noteContext?.note);

View File

@@ -51,6 +51,7 @@ const TAB_CONFIGURATION = numberObjectsInPlace<TabConfiguration>([
show: ({ note }) => note?.type === "text" && options.get("textNoteEditorType") === "ckeditor-classic",
toggleCommand: "toggleRibbonTabClassicEditor",
content: FormattingToolbar,
activate: true,
stayInDom: true
},
{

View File

@@ -1,7 +1,7 @@
import TypeWidget from "./type_widget.js";
import appContext, { type EventData } from "../../components/app_context.js";
import froca from "../../services/froca.js";
import linkService from "../../services/link.js";
import linkService, { type ViewScope } from "../../services/link.js";
import contentRenderer from "../../services/content_renderer.js";
import utils from "../../services/utils.js";
import options from "../../services/options.js";
@@ -44,14 +44,14 @@ export default class AbstractTextTypeWidget extends TypeWidget {
async openImageInNewTab($img: JQuery<HTMLElement>, activate: boolean = false) {
const parsedImage = await this.parseFromImage($img);
if (parsedImage) {
if (parsedImage?.noteId) {
appContext.tabManager.openTabWithNoteWithHoisting(parsedImage.noteId, { activate, viewScope: parsedImage.viewScope });
} else {
window.open($img.prop("src"), "_blank");
}
}
async parseFromImage($img: JQuery<HTMLElement>) {
async parseFromImage($img: JQuery<HTMLElement>): Promise<{ noteId?: string, viewScope: ViewScope } | null> {
const imgSrc = $img.prop("src");
const imageNoteMatch = imgSrc.match(/\/api\/images\/([A-Za-z0-9_]+)\//);

View File

@@ -27,11 +27,11 @@
display: flex;
align-items: flex-end;
user-select: none;
scrollbar-width: 0 !important;
}
.classic-toolbar-widget::-webkit-scrollbar {
.classic-toolbar-widget::-webkit-scrollbar:horizontal {
height: 0 !important;
width: 0 !important;
}
.classic-toolbar-widget.dropdown-active {

View File

@@ -90,6 +90,7 @@ export default function AppearanceSettings() {
{isElectron() && <ElectronIntegration /> }
<Performance />
<MaxContentWidth />
<RibbonOptions />
<RelatedSettings items={[
{
title: t("settings_appearance.related_code_blocks"),
@@ -305,3 +306,16 @@ function MaxContentWidth() {
</OptionsSection>
)
}
function RibbonOptions() {
const [ editedNotesOpenInRibbon, setEditedNotesOpenInRibbon ] = useTriliumOptionBool("editedNotesOpenInRibbon");
return (
<OptionsSection title={t('ribbon.widgets')}>
<FormCheckbox
label={t('ribbon.edited_notes_message')}
currentValue={editedNotesOpenInRibbon} onChange={setEditedNotesOpenInRibbon}
/>
</OptionsSection>
)
}

View File

@@ -45,14 +45,4 @@ export default class ReadOnlyCodeTypeWidget extends AbstractCodeTypeWidget {
readOnly: true
};
}
async executeWithContentElementEvent({ resolve, ntxId }: EventData<"executeWithContentElement">) {
if (!this.isNoteContext(ntxId)) {
return;
}
await this.initialized;
resolve(this.$editor);
}
}

View File

@@ -7,6 +7,12 @@ import utils from "../../services/utils.js";
const TPL = /*html*/`
<div class="note-detail-web-view note-detail-printable" style="height: 100%">
<style>
.note-detail-web-view-content {
height: 100%;
width: 100%;
}
</style>
<div class="note-detail-web-view-help alert alert-warning" style="margin: 50px; padding: 20px 20px 0px 20px;">
<h4>${t("web_view.web_view")}</h4>
@@ -40,8 +46,6 @@ export default class WebViewTypeWidget extends TypeWidget {
this.$noteDetailWebViewHelp = this.$widget.find(".note-detail-web-view-help");
this.$noteDetailWebViewContent = this.$widget.find(".note-detail-web-view-content");
window.addEventListener("resize", () => this.setDimensions(), false);
super.doRender();
}
@@ -62,24 +66,12 @@ export default class WebViewTypeWidget extends TypeWidget {
this.$noteDetailWebViewContent.hide();
this.$noteDetailWebViewHelp.show();
}
this.setDimensions();
setTimeout(() => this.setDimensions(), 1000);
}
cleanup() {
this.$noteDetailWebViewContent.removeAttr("src");
}
setDimensions() {
const $parent = this.$widget;
this.$noteDetailWebViewContent
.height($parent.height() ?? 0)
.width($parent.width() ?? 0);
}
entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) {
if (loadResults.getAttributeRows().find((attr) => attr.name === "webViewSrc" && attributeService.isAffecting(attr, this.noteContext?.note))) {
this.refresh();

View File

@@ -1,7 +1,7 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"lib": [ "ESNext" ],
"lib": [ "ESNext", "DOM.Iterable" ],
"outDir": "dist",
"types": [
"node",

View File

@@ -114,7 +114,7 @@ const config: ForgeConfig = {
config: {
name: EXECUTABLE_NAME,
productName: PRODUCT_NAME,
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Notes/develop/images/app-icons/icon.ico",
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/icon.ico",
setupIcon: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup.ico"),
loadingGif: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup-banner.gif"),
windowsSign: windowsSignConfiguration
@@ -130,7 +130,7 @@ const config: ForgeConfig = {
name: "@electron-forge/maker-zip",
config: {
options: {
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Notes/develop/images/app-icons/icon.ico",
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/icon.ico",
icon: path.join(APP_ICON_PATH, "icon.ico")
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@triliumnext/desktop",
"version": "0.99.0",
"version": "0.99.1",
"description": "Build your personal knowledge base with Trilium Notes",
"private": true,
"main": "src/main.ts",
@@ -8,7 +8,7 @@
"author": {
"name": "Trilium Notes Team",
"email": "contact@eliandoran.me",
"url": "https://github.com/TriliumNext/Notes"
"url": "https://triliumnotes.org"
},
"scripts": {
"dev": "cross-env TRILIUM_PORT=37742 TRILIUM_DATA_DIR=data tsx ../../scripts/electron-start.mts src/main.ts",
@@ -22,7 +22,7 @@
},
"dependencies": {
"@electron/remote": "2.1.3",
"better-sqlite3": "^12.0.0",
"better-sqlite3": "12.4.1",
"electron-debug": "4.1.0",
"electron-dl": "4.0.0",
"electron-squirrel-startup": "1.0.1",
@@ -34,7 +34,7 @@
"@triliumnext/commons": "workspace:*",
"@triliumnext/server": "workspace:*",
"copy-webpack-plugin": "13.0.1",
"electron": "37.5.1",
"electron": "38.2.1",
"@electron-forge/cli": "7.9.0",
"@electron-forge/maker-deb": "7.9.0",
"@electron-forge/maker-dmg": "7.9.0",
@@ -43,6 +43,6 @@
"@electron-forge/maker-squirrel": "7.9.0",
"@electron-forge/maker-zip": "7.9.0",
"@electron-forge/plugin-auto-unpack-natives": "7.9.0",
"prebuild-install": "^7.1.1"
"prebuild-install": "7.1.3"
}
}

View File

@@ -15,7 +15,6 @@ async function main() {
// Copy node modules dependencies
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path", "@electron/remote" ]);
build.copy("/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js");
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
// Integrate the client.

View File

@@ -1,7 +1,7 @@
{
"extends": "../../tsconfig.base.json",
"files": [],
"include": [],
"include": [],
"references": [
{
"path": "../server"

View File

@@ -4,16 +4,16 @@
"description": "Standalone tool to dump contents of Trilium document.db file into a directory tree of notes",
"private": true,
"dependencies": {
"better-sqlite3": "^12.0.0",
"mime-types": "^3.0.0",
"sanitize-filename": "^1.6.3",
"tsx": "^4.19.3",
"yargs": "^18.0.0"
"better-sqlite3": "12.4.1",
"mime-types": "3.0.1",
"sanitize-filename": "1.6.3",
"tsx": "4.20.6",
"yargs": "18.0.0"
},
"devDependencies": {
"@types/better-sqlite3": "^7.6.11",
"@types/mime-types": "^3.0.0",
"@types/yargs": "^17.0.33"
"@types/better-sqlite3": "7.6.13",
"@types/mime-types": "3.0.1",
"@types/yargs": "17.0.33"
},
"scripts": {
"dev": "tsx src/main.ts",

View File

@@ -5,14 +5,14 @@
"description": "Desktop version of Trilium which imports the demo database (presented to new users at start-up) or the user guide and other documentation and saves the modifications for committing.",
"dependencies": {
"archiver": "7.0.1",
"better-sqlite3": "^12.0.0"
"better-sqlite3": "12.4.1"
},
"devDependencies": {
"@triliumnext/client": "workspace:*",
"@triliumnext/desktop": "workspace:*",
"@types/fs-extra": "11.0.4",
"copy-webpack-plugin": "13.0.1",
"electron": "37.5.1",
"electron": "38.2.1",
"fs-extra": "11.3.2"
},
"scripts": {

View File

@@ -6,6 +6,6 @@
"e2e": "playwright test"
},
"devDependencies": {
"dotenv": "17.2.2"
"dotenv": "17.2.3"
}
}

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-bullseye-slim AS builder
FROM node:22.20.0-bullseye-slim AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-bullseye-slim
FROM node:22.20.0-bullseye-slim
# Install only runtime dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-alpine AS builder
FROM node:22.20.0-alpine AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-alpine
FROM node:22.20.0-alpine
# Install runtime dependencies
RUN apk add --no-cache su-exec shadow

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-alpine AS builder
FROM node:22.20.0-alpine AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-alpine
FROM node:22.20.0-alpine
# Create a non-root user with configurable UID/GID
ARG USER=trilium
ARG UID=1001

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-bullseye-slim AS builder
FROM node:22.20.0-bullseye-slim AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-bullseye-slim
FROM node:22.20.0-bullseye-slim
# Create a non-root user with configurable UID/GID
ARG USER=trilium
ARG UID=1001

View File

@@ -1,5 +1,5 @@
{
"dependencies": {
"better-sqlite3": "12.2.0"
"better-sqlite3": "12.4.1"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@triliumnext/server",
"version": "0.99.0",
"version": "0.99.1",
"description": "The server-side component of TriliumNext, which exposes the client via the web, allows for sync and provides a REST API for both internal and external use.",
"private": true,
"main": "./src/main.ts",
@@ -25,10 +25,11 @@
"docker-start-rootless-alpine": "pnpm docker-build-rootless-alpine && docker run -p 8081:8080 triliumnext-rootless-alpine"
},
"dependencies": {
"better-sqlite3": "12.2.0"
"better-sqlite3": "12.4.1",
"node-html-parser": "7.0.1"
},
"devDependencies": {
"@anthropic-ai/sdk": "0.63.0",
"@anthropic-ai/sdk": "0.65.0",
"@braintree/sanitize-url": "7.1.1",
"@electron/remote": "2.1.3",
"@preact/preset-vite": "2.10.2",
@@ -49,14 +50,13 @@
"@types/html": "1.0.4",
"@types/ini": "4.1.1",
"@types/js-yaml": "4.0.9",
"@types/jsdom": "21.1.7",
"@types/mime-types": "3.0.1",
"@types/multer": "2.0.0",
"@types/safe-compare": "1.1.2",
"@types/sanitize-html": "2.16.0",
"@types/sax": "1.2.7",
"@types/serve-favicon": "2.5.7",
"@types/serve-static": "1.15.8",
"@types/serve-static": "1.15.9",
"@types/session-file-store": "1.2.5",
"@types/stream-throttle": "0.1.4",
"@types/supertest": "6.0.3",
@@ -81,13 +81,13 @@
"debounce": "2.2.0",
"debug": "4.4.3",
"ejs": "3.1.10",
"electron": "37.5.1",
"electron": "38.2.1",
"electron-debug": "4.1.0",
"electron-window-state": "5.0.3",
"escape-html": "1.0.3",
"express": "5.1.0",
"express-http-proxy": "2.1.2",
"express-openid-connect": "^2.17.1",
"express-openid-connect": "2.19.2",
"express-rate-limit": "8.1.0",
"express-session": "1.18.2",
"file-uri-to-path": "2.0.0",
@@ -97,7 +97,7 @@
"html2plaintext": "2.1.4",
"http-proxy-agent": "7.0.2",
"https-proxy-agent": "7.0.6",
"i18next": "25.5.2",
"i18next": "25.5.3",
"i18next-fs-backend": "2.6.0",
"image-type": "6.0.0",
"ini": "5.0.0",
@@ -105,13 +105,12 @@
"is-svg": "6.1.0",
"jimp": "1.6.0",
"js-yaml": "4.1.0",
"jsdom": "26.1.0",
"marked": "16.3.0",
"mime-types": "3.0.1",
"multer": "2.0.2",
"normalize-strings": "1.1.1",
"ollama": "0.5.18",
"openai": "5.12.0",
"ollama": "0.6.0",
"openai": "6.1.0",
"rand-token": "1.0.1",
"safe-compare": "1.1.4",
"sanitize-filename": "1.6.3",
@@ -124,11 +123,11 @@
"supertest": "7.1.4",
"swagger-jsdoc": "6.2.8",
"swagger-ui-express": "5.0.1",
"time2fa": "^1.3.0",
"time2fa": "1.4.2",
"tmp": "0.2.5",
"turndown": "7.2.1",
"unescape": "1.0.1",
"vite": "^7.1.3",
"vite": "7.1.9",
"ws": "8.18.3",
"xml2js": "0.6.2",
"yauzl": "3.2.0"

View File

@@ -11,7 +11,6 @@ async function main() {
// Copy node modules dependencies
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path" ]);
build.copy("/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js");
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
// Integrate the client.

File diff suppressed because one or more lines are too long

View File

@@ -116,6 +116,13 @@ class="admonition tip">
<td>JavaScript note which will be injected into the share page. JS note must
be in the shared sub-tree as well. Consider using <code>share_hidden_from_tree</code>.</td>
</tr>
<tr>
<td><code>shareHtml</code>
</td>
<td>HTML note which will be injected into the share page at locations specified
by the <code>shareHtmlLocation</code> label. HTML note must be in the shared
sub-tree as well. Consider using <code>share_hidden_from_tree</code>.</td>
</tr>
<tr>
<td><code>shareTemplate</code>
</td>

View File

@@ -1,6 +1,11 @@
<p>Trilium supports configuration via a file named <code>config.ini</code> and
environment variables. This document provides a comprehensive reference
for all configuration options.</p>
<h2>Location of the configuration file</h2>
<p>The configuration file is not located in the same directory as the application.
Instead, the <code>config.ini</code> is located in the&nbsp;<a class="reference-link"
href="#root/_help_tAassRL4RSQL">Data directory</a>. As such, the configuration
file is only available after starting the application and creating a database.</p>
<h2>Configuration Precedence</h2>
<p>Configuration values are loaded in the following order of precedence (highest
to lowest):</p>

View File

@@ -38,16 +38,17 @@ class="image">
</th>
<td>
<ul>
<li>Table of contents.</li>
<li>Syntax highlight of code blocks, provided a language is selected (does
<li data-list-item-id="e26b4ce9ba4e9dfe224d04e0f341925ed">Table of contents.</li>
<li data-list-item-id="e9707fdfa2c92d66690cf932f7e647253">Syntax highlight of code blocks, provided a language is selected (does
not work if “Auto-detected” is enabled).</li>
<li>Rendering for math equations.</li>
<li data-list-item-id="e84420a10c6d64bd107edb6e867c91d4b">Rendering for math equations.</li>
<li data-list-item-id="e10834dcd0619d77ae2e94d3695bedf58"><a href="#root/_help_nBAXQFj20hS1">Including notes</a> (only if the included
notes are also shared).</li>
</ul>
</td>
<td>
<ul>
<li>Including notes is not supported.</li>
<li>Inline Mermaid diagrams are not rendered.</li>
<li data-list-item-id="e41cc4139377f9f88d653d1eb8ca47bb4">Inline Mermaid diagrams are not rendered.</li>
</ul>
</td>
</tr>
@@ -56,12 +57,12 @@ class="image">
</th>
<td>
<ul>
<li>Basic support (displaying the contents of the note in a monospace font).</li>
<li data-list-item-id="e291ae6d5130677b4c99f7c3bdbe974b4">Basic support (displaying the contents of the note in a monospace font).</li>
</ul>
</td>
<td>
<ul>
<li>No syntax highlight.</li>
<li data-list-item-id="e0270680bbdd7a129306e61e11691e36d">No syntax highlight.</li>
</ul>
</td>
</tr>
@@ -94,12 +95,12 @@ class="image">
</th>
<td>
<ul>
<li>The child notes are displayed in a fixed format.&nbsp;</li>
<li data-list-item-id="ea031e1d4149eb443ace756234490c5a4">The child notes are displayed in a fixed format.&nbsp;</li>
</ul>
</td>
<td>
<ul>
<li>More advanced view types such as the calendar view are not supported.</li>
<li data-list-item-id="ea4a9d424aec2afbaecc07bbf64b7bebd">More advanced view types such as the calendar view are not supported.</li>
</ul>
</td>
</tr>
@@ -108,12 +109,12 @@ class="image">
</th>
<td>
<ul>
<li>The diagram is displayed as a vector image.</li>
<li data-list-item-id="e582d283f2b1b30cbe5ae35d8e01b2bf2">The diagram is displayed as a vector image.</li>
</ul>
</td>
<td>
<ul>
<li>No further interaction supported.</li>
<li data-list-item-id="e33268686446e3c217077201bb5964364">No further interaction supported.</li>
</ul>
</td>
</tr>
@@ -122,12 +123,12 @@ class="image">
</th>
<td>
<ul>
<li>The diagram is displayed as a vector image.</li>
<li data-list-item-id="e443dd0e97c30cb12c77e8906a71569ea">The diagram is displayed as a vector image.</li>
</ul>
</td>
<td>
<ul>
<li>No further interaction supported.</li>
<li data-list-item-id="efe151ef3f3826c825416417525fb5fb2">No further interaction supported.</li>
</ul>
</td>
</tr>
@@ -143,7 +144,7 @@ class="image">
<td>The diagram is displayed as a vector image.</td>
<td>
<ul>
<li>No further interaction supported.</li>
<li data-list-item-id="ed3b4fb473042f6e32b4502d4fa11a767">No further interaction supported.</li>
</ul>
</td>
</tr>
@@ -159,7 +160,7 @@ class="image">
<td>Basic interaction (downloading the file).</td>
<td>
<ul>
<li>No further interaction supported.</li>
<li data-list-item-id="ed87e836a39d127ebcbb33e9e59045afb">No further interaction supported.</li>
</ul>
</td>
</tr>
@@ -178,7 +179,7 @@ class="image">
<p>To use the sharing feature, you must have a&nbsp;<a class="reference-link"
href="#root/_help_WOcw2SLH6tbX">Server Installation</a>&nbsp;of Trilium.
This is necessary because the notes will be hosted from the server.</p>
<h2>How to Share a Note</h2>
<h2>Sharing a note</h2>
<ol>
<li>
<p><strong>Enable Sharing</strong>: To share a note, toggle the <code>Shared</code> switch
@@ -194,26 +195,27 @@ class="image">
the URL will refer to <code>localhost (127.0.0.1)</code>.</p>
</li>
</ol>
<h2>Sharing a Note Subtree</h2>
<h2>Sharing a note subtree</h2>
<p>When you share a note, you actually share the entire subtree of notes
beneath it. If the note has child notes, they will also be included in
the shared content. For example, sharing the "Formatting" subtree will
display a page with basic navigation for exploring all the notes within
that subtree.</p>
<h2>Viewing All Shared Notes</h2>
<h2>Viewing and managing shared notes</h2>
<p>You can view a list of all shared notes by clicking on "Show Shared Notes
Subtree." This allows you to manage and navigate through all the notes
you have made public.</p>
<h2>Security Considerations</h2>
Subtree" in the&nbsp;<a class="reference-link" href="#root/_help_x3i7MxGccDuM">Global menu</a>.
This allows you to manage and navigate through all the notes you have made
public.</p>
<h2>Security considerations</h2>
<p>Shared notes are published on the open internet and can be accessed by
anyone with the URL. The URL's randomness does not provide security, so
it is crucial not to share sensitive information through this feature.</p>
<h3>Password Protection</h3>
<h3>Password protection</h3>
<p>To protect shared notes with a username and password, you can use the <code>#shareCredentials</code> attribute.
Add this label to the note with the format <code>#shareCredentials="username:password"</code>.
To protect an entire subtree, make sure the label is <a href="#root/_help_bwZpz2ajCEwO">inheritable</a>.</p>
<h2>Advanced Sharing Options</h2>
<h3>Customizing the Appearance of Shared Notes</h3>
<h2>Advanced sharing options</h2>
<h3>Customizing the appearance of shared notes</h3>
<p>The default design should be a good starting point, but you can customize
it using your own CSS:</p>
<ul>
@@ -232,13 +234,41 @@ class="image">
This allows you to access note attributes or traverse the note tree using
the <code>fetchNote()</code> API, which retrieves note data based on its
ID.</p>
<h3>Adding custom HTML</h3>
<p>You can inject custom HTML snippets into specific locations of the shared
page using the <code>~shareHtml</code> relation. The HTML note should contain
the raw HTML content you want to inject, and you can control where it appears
by adding the <code>#shareHtmlLocation</code> label to the HTML snippet note
itself.</p>
<p>The <code>#shareHtmlLocation</code> label accepts values in the format <code>location:position</code>:</p>
<ul>
<li><strong>Locations</strong>: <code>head</code>, <code>body</code>, <code>content</code>
</li>
<li><strong>Positions</strong>: <code>start</code>, <code>end</code>
</li>
</ul>
<p>For example:</p>
<ul>
<li><code>#shareHtmlLocation=head:start</code> - Injects HTML at the beginning
of the <code>&lt;head&gt;</code> section</li>
<li><code>#shareHtmlLocation=head:end</code> - Injects HTML at the end of the <code>&lt;head&gt;</code> section
(default)</li>
<li><code>#shareHtmlLocation=body:start</code> - Injects HTML at the beginning
of the <code>&lt;body&gt;</code> section</li>
<li><code>#shareHtmlLocation=content:start</code> - Injects HTML at the beginning
of the content area</li>
<li><code>#shareHtmlLocation=content:end</code> - Injects HTML at the end of
the content area</li>
</ul>
<p>If no location is specified, the HTML will be injected at <code>content:end</code> by
default.</p>
<p>Example:</p><pre><code class="language-application-javascript-env-backend">const currentNote = await fetchNote();
const parentNote = await fetchNote(currentNote.parentNoteIds[0]);
for (const attr of parentNote.attributes) {
console.log(attr.type, attr.name, attr.value);
}</code></pre>
<h3>Creating Human-Readable URL Aliases</h3>
<h3>Creating human-readable URL aliases</h3>
<p>Shared notes typically have URLs like <code>http://domain.tld/share/knvU8aJy4dJ7</code>,
where the last part is the note's ID. You can make these URLs more user-friendly
by adding the <code>#shareAlias</code> label to individual notes (e.g., <code>#shareAlias=highlighting</code>).
@@ -249,23 +279,25 @@ for (const attr of parentNote.attributes) {
<li>Using slashes (<code>/</code>) within aliases to create subpaths is not
supported.</li>
</ol>
<h3>Viewing and Managing Shared Notes</h3>
<p>All shared notes are grouped under an automatically managed "Shared Notes"
section. From here, you can view, share, or unshare notes by moving or
cloning them within this section.</p>
<p>
<img src="Sharing_shared-list.png" alt="Shared Notes List">
</p>
<h3>Setting a Custom Favicon</h3>
<h3>Setting a custom favicon</h3>
<p>To customize the favicon for your shared pages, create a relation <code>~shareFavicon</code> pointing
to a file note containing the favicon (e.g., in <code>.ico</code> format).</p>
<h3>Sharing a Note as the Root</h3>
<h3>Sharing a note as the root</h3>
<p>You can designate a specific note or folder as the root of your shared
content by adding the <code>#shareRoot</code> label. This note will be linked
when visiting <code>[http://domain.tld/share](http://domain/share)</code>,
making it easier to use Trilium as a fully-fledged website. Consider combining
this with the <code>#shareIndex</code> label, which will display a list of
all shared notes.</p>
making it easier to use Trilium as a fully-fledged website.</p>
<aside class="admonition tip">
<p>Consider combining this with the <code>#shareIndex</code> label, which will
display a list of all shared notes.</p>
</aside>
<h3>Displaying an index of shared notes</h3>
<p>When accessing a share, the sub-notes will be displayed in a tree on the
left. But since multiple note trees can be shared, it might be useful to
display a list of all the different share trees.</p>
<p>To do so, create a shared text note and apply the <code>shareIndex</code> label.
When viewed, the list of shared roots will be displayed at the bottom of
the note.</p>
<h2>Attribute reference</h2>
<table>
<thead>
@@ -323,8 +355,8 @@ for (const attr of parentNote.attributes) {
<p>Indicates to web crawlers that the page should not be indexed of this
note by:</p>
<ul>
<li>Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li>
<li>Setting the <code>noindex, follow</code> meta tag.</li>
<li data-list-item-id="e6baa9f60bf59d085fd31aa2cce07a0e7">Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li>
<li data-list-item-id="ec0d067db136ef9794e4f1033405880b7">Setting the <code>noindex, follow</code> meta tag.</li>
</ul>
</td>
</tr>
@@ -340,6 +372,14 @@ for (const attr of parentNote.attributes) {
</td>
<td>Note with this label will list all roots of shared notes.</td>
</tr>
<tr>
<td><code>shareHtmlLocation</code>
</td>
<td>defines where custom HTML injected via <code>~shareHtml</code> relation
should be placed. Applied to the HTML snippet note itself. Format: <code>location:position</code> where
location is <code>head</code>, <code>body</code>, or <code>content</code> and
position is <code>start</code> or <code>end</code>. Defaults to <code>content:end</code>.</td>
</tr>
</tbody>
</table>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

View File

@@ -15,61 +15,74 @@
in a hierarchy.</p>
<h2>Interaction with columns</h2>
<ul>
<li>Create a new column by pressing <em>Add Column</em> near the last column.
<li data-list-item-id="e53cd56f64ad0a087af5c123894261ff1">Create a new column by pressing <em>Add Column</em> near the last column.
<ul>
<li>Once pressed, a text box will be displayed to set the name of the column.
<li data-list-item-id="eaf5a55c795e0cfe57a2a05d6b9f89761">Once pressed, a text box will be displayed to set the name of the column.
Press <kbd>Enter</kbd> to confirm, or <kbd>Escape</kbd> to dismiss.</li>
</ul>
</li>
<li>To reorder a column, simply hold the mouse over the title and drag it
<li data-list-item-id="e2d7f17b56a6a8027d26e5d30f16bd7f6">To reorder a column, simply hold the mouse over the title and drag it
to the desired position.</li>
<li>To delete a column, right click on its title and select <em>Delete column</em>.</li>
<li>To rename a column, click on the note title.
<li data-list-item-id="ef0f57de87814bf725cf846cecca01899">To delete a column, right click on its title and select <em>Delete column</em>.</li>
<li
data-list-item-id="e00cb99d9b34dbf63523f053a57f28fe8">To rename a column, click on the note title.
<ul>
<li>Press Enter to confirm.</li>
<li>Upon renaming a column, the corresponding status attribute of all its
<li data-list-item-id="ea86b1d902db4bbab1fe85bcf669c595c">Press Enter to confirm.</li>
<li data-list-item-id="e6d1bc52b0a8b3d554fd4be0f1f009b04">Upon renaming a column, the corresponding status attribute of all its
notes will be changed in bulk.</li>
</ul>
</li>
<li>If there are many columns, use the mouse wheel to scroll.</li>
</li>
<li data-list-item-id="ea1dd557786a534468e61f445aaea665f">If there are many columns, use the mouse wheel to scroll.</li>
</ul>
<h2>Interaction with notes</h2>
<ul>
<li>Create a new note in any column by pressing <em>New item</em>
<li data-list-item-id="ec25f6e597c61e1f56422d72a91777cb8">Create a new note in any column by pressing <em>New item</em>
<ul>
<li>Enter the name of the note and press <kbd>Enter</kbd> or click away. To
<li data-list-item-id="e3027de7ac16543b3a3be526c6700f22e">Enter the name of the note and press <kbd>Enter</kbd> or click away. To
dismiss the creation of a new note, simply press <kbd>Escape</kbd> or leave
the name empty.</li>
<li>Once created, the new note will have an attribute (<code>status</code> label
<li data-list-item-id="ef97c736e327952225517534711a8e329">Once created, the new note will have an attribute (<code>status</code> label
by default) set to the name of the column.</li>
</ul>
</li>
<li>To open the note, simply click on it.</li>
<li>To change the title of the note directly from the board, hover the mouse
<li data-list-item-id="e0558241e1901ee6a5b765644c115f95c">To open the note, simply click on it.</li>
<li data-list-item-id="e1580878e9963e2039332f9c3ff40dc9d">To change the title of the note directly from the board, hover the mouse
over its card and press the edit button on the right.</li>
<li>To change the state of a note, simply drag a note from one column to the
<li data-list-item-id="e817b2e5103fd08622477663a5a8b9683">To change the state of a note, simply drag a note from one column to the
other to change its state.</li>
<li>The order of the notes in each column corresponds to their position in
<li data-list-item-id="e5f86d7f2f545470451040860ca3e8890">The order of the notes in each column corresponds to their position in
the tree.
<ul>
<li>It's possible to reorder notes simply by dragging them to the desired
<li data-list-item-id="e0b47ff4af56dc7cd21a118fbc9b1808a">It's possible to reorder notes simply by dragging them to the desired
position within the same columns.</li>
<li>It's also possible to drag notes across columns, at the desired position.</li>
<li data-list-item-id="e9eb4fa22b9ed927a24aee3e94d5a1b5d">It's also possible to drag notes across columns, at the desired position.</li>
</ul>
</li>
<li>For more options, right click on a note to display a context menu with
<li data-list-item-id="e94ebbbe060ccfe7fbb1c67616e272b35">For more options, right click on a note to display a context menu with
the following options:
<ul>
<li>Open the note in a new tab/split/window or quick edit.</li>
<li>Move the note to any column.</li>
<li>Insert a new note above/below the current one.</li>
<li>Archive/unarchive the current note.</li>
<li>Delete the current note.</li>
<li data-list-item-id="e5516bb20b5c4534580854c6422107b1d">Open the note in a new tab/split/window or quick edit.</li>
<li data-list-item-id="e8419784dbd01baae6c1e1e8875baa84a">Move the note to any column.</li>
<li data-list-item-id="e6ab7181ef973bbd96e3bbbfed5e302d1">Insert a new note above/below the current one.</li>
<li data-list-item-id="e8aae7a4c6ddb5f191d6dcd914f0c3b78">Archive/unarchive the current note.</li>
<li data-list-item-id="e0bf5bc2c60b27a7fd0078001816d8ca4">Delete the current note.</li>
</ul>
</li>
<li>If there are many notes within the column, move the mouse over the column
<li data-list-item-id="ec32b9f786e2c612fb63677c8c5089365">If there are many notes within the column, move the mouse over the column
and use the mouse wheel to scroll.</li>
</ul>
<h2>Keyboard interaction</h2>
<p>The board view has mild support for keyboard-based navigation:</p>
<ul>
<li data-list-item-id="e0c992a7fdac57768851c53137a2cfa64">Use <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> to navigate between
column titles, notes and the “New item” button for each of the columns,
in sequential order.</li>
<li data-list-item-id="e4c143d1ec92d0fc5b75e850cf10f4377">To rename a column or a note, press <kbd>F2</kbd> while it is focused.</li>
<li
data-list-item-id="ee3008937bdfd14e06c308a5f0846addf">To open a specific note or create a new item, press <kbd>Enter</kbd> while
it is focused.</li>
<li data-list-item-id="e70ceff80dcd5422e2361c4fbcd805773">To dismiss a rename of a note or a column, press <kbd>Escape</kbd>.</li>
</ul>
<h2>Configuration</h2>
<h3>Grouping by another attribute</h3>
<p>By default, the label used to group the notes is <code>#status</code>.
@@ -83,5 +96,5 @@ class="admonition note">
<h2>Interaction</h2>
<h2>Limitations</h2>
<ul>
<li>It is not possible yet to use group by a relation, only by label.</li>
<li data-list-item-id="e61ec93de3282934fd37d302933d208b8">It is not possible yet to use group by a relation, only by label.</li>
</ul>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 B

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 B

After

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 B

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 B

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 B

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -25,6 +25,19 @@
</ul>
</li>
</ul>
<h2>Exiting out of the code block</h2>
<ul>
<li>To exit out of a code block and enter a normal paragraph, move the cursor
at the end of the code block and press <kbd>Enter</kbd> twice.</li>
<li>Similarly, to insert a paragraph above the note block, move the cursor
at the beginning of the code block and press <kbd>Enter</kbd> twice.</li>
</ul>
<aside class="admonition note">
<p>If you've pasted a code block with a more complex HTML structure, exiting
out of the code block by pressing <kbd>Enter</kbd> multiple times might not
work. In that case the best approach is to delete the code block entirely
and use <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>V</kbd> (paste as plain text).</p>
</aside>
<h2>Syntax highlighting &amp; color schemes</h2>
<p>Since TriliumNext v0.90.12, Trilium will try to offer syntax highlighting
to the code block. Note that the syntax highlighting mechanism is slightly

View File

@@ -5,4 +5,11 @@
<p>In the&nbsp;<a class="reference-link" href="#root/_help_nRhnJkTT8cPs">Formatting toolbar</a>,
look for the
<img src="Include Note_image.png">button. There is also a keyboard shortcut defined for it but it is not
allocated by default.</p>
allocated by default.</p>
<h2>Included notes in the share functionality</h2>
<p>If a <a href="#root/_help_R9pX4DGra2Vt">shared note</a> contains one or
more included notes, they will be displayed in the content of the note
as if they were part of the note itself.</p>
<p>For this to work, the included notes must also be shared, otherwise they
will not be shown. However, the included notes can still be hidden from
the note tree via <code>#shareHiddenFromTree</code>.</p>

View File

@@ -1,15 +1,15 @@
<p>There are three types of lists supported by text notes:</p>
<ul>
<li>
<img src="7_Lists_image.png" width="17" height="13">Bulleted lists (also known as unordered lists).</li>
<img src="4_Lists_image.png" width="17" height="13">Bulleted lists (also known as unordered lists).</li>
<li>
<img src="8_Lists_image.png" width="18" height="16">Numbered lists (or ordered lists).</li>
<img src="1_Lists_image.png" width="18" height="16">Numbered lists (or ordered lists).</li>
<li>
<img src="10_Lists_image.png" width="19" height="13">To-do lists</li>
<img src="Lists_image.png" width="19" height="13">To-do lists</li>
</ul>
<p>For bulleted and numbered lists, it's possible to configure an alternative
marker such as squares or Roman numbering by pressing the
<img src="9_Lists_image.png"
<img src="2_Lists_image.png"
width="10" height="6">icon. For numbered lists, it's also possible to specify the number to
start at or whether to count in reverse order.</p>
<h2>Keyboard interaction</h2>
@@ -20,7 +20,7 @@
by a space;</li>
<li>Numbered list: Start a line with <code>1.</code> or <code>1)</code> followed
by a space;</li>
<li>To-do list: Start a line with <code>[ ]</code> for an unchecked item or <code>[x]</code> for
<li>To-do list: Start a line with <code>- [ ]</code> for an unchecked item or <code>[x]</code> for
a checked item.</li>
</ul>
</li>
@@ -29,7 +29,7 @@
<li>To exit out of the list, press <kbd>Enter</kbd> twice.</li>
<li>To merge two lists, simply delete the gap between them.</li>
<li>To create nested lists, simply use the
<img src="2_Lists_image.png" width="17"
<img src="7_Lists_image.png" width="17"
height="14">button (see <em>Indentation</em> in&nbsp;<a class="reference-link" href="#root/_help_dEHYtoWWi8ct">Other features</a>)
or the <kbd>Tab</kbd> key. To decrease the nesting level for the current
element, press <kbd>Shift</kbd>+<kbd>Tab</kbd>.</li>
@@ -56,7 +56,7 @@
<tr>
<td>2</td>
<td>
<img src="4_Lists_image.png">
<img src="9_Lists_image.png">
</td>
<td>Press Enter to create a new list item.</td>
</tr>
@@ -71,7 +71,7 @@
<td>4</td>
<td>
<img class="image_resized" style="aspect-ratio:676/112;width:98.29%;"
src="1_Lists_image.png" width="676" height="112">
src="10_Lists_image.png" width="676" height="112">
</td>
<td>At this point, insert any desired block-level item such as a code block.</td>
</tr>
@@ -79,7 +79,7 @@
<td>5</td>
<td>
<img class="image_resized" style="aspect-ratio:675/129;width:94.22%;"
src="Lists_image.png" width="675" height="129">
src="8_Lists_image.png" width="675" height="129">
</td>
<td>To continue with a new bullet point, press Enter until the cursor moves
to a new blank position.</td>
@@ -95,4 +95,11 @@
</tbody>
</table>
<p>The same principle applies to all three list types (bullet, numbered and
to-do).</p>
to-do).</p>
<h2>To-do lists</h2>
<ul>
<li>To insert a to-do list from the keyboard, type <code>- [ ]</code> for an
unchecked item or <code>[x]</code> for a checked item while on an empty paragraph.</li>
<li>To reorder the item under the cursor, press <kbd>Alt</kbd>+<kbd>Up</kbd> or <kbd>Alt</kbd>+<kbd>Down</kbd>.
To reorder multiple items, select them first.</li>
</ul>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 160 B

View File

@@ -6,12 +6,6 @@
the
<img src="1_Math Equations_image.png" width="20" height="15">button from the&nbsp;<a class="reference-link" href="#root/_help_nRhnJkTT8cPs">Formatting toolbar</a>&nbsp;(generally
found under the&nbsp;<a class="reference-link" href="#root/_help_CohkqWQC1iBv">Insert buttons</a>).</p>
<p>If inserting equations frequently, using the <kbd>Ctrl</kbd>+<kbd>M</kbd> keyboard
shortcut can be more comfortable. Alternatively, type <code>$$</code> or <code>\[</code> to
trigger the popup directly.</p>
<p>There is currently no quick way to insert an equation, such as surrounding
it with <code>$</code> or pressing <kbd>Ctrl</kbd>+<kbd>M</kbd> on an already
typed-out equation.</p>
<p>The mathematical expression must be written in the TeX format. There is
no visual editor for the math equations, only a preview.&nbsp;</p>
<p>Enabling <em>Display mode</em> will render the equation slightly bigger
@@ -19,6 +13,12 @@
center it. Display mode equations will act as blocks (i.e. like paragraphs,
or tables) and can be inserted for example in lists. Non-display equations
can be part of the text.</p>
<h2>Keyboard shortcuts</h2>
<p>If inserting equations frequently, using the <kbd>Ctrl</kbd>+<kbd>M</kbd> keyboard
shortcut can be more comfortable. Alternatively, type <code>$$</code> or <code>\[</code> to
trigger the popup directly.</p>
<p>There is currently no quick way to turn an already typed-out equation,
such as surrounding it with <code>$</code> or pressing <kbd>Ctrl</kbd>+<kbd>M</kbd>.</p>
<h2>Supported math features</h2>
<p>Technically we are using the KaTeX library which allows for a subset of
the TeX format. To see the full list of supported features, consult the
@@ -27,8 +27,12 @@
the official documentation.</p>
<h2>Markdown support</h2>
<p>Math equations will be preserved when exporting to or importing from Markdown,
surrounded by <code>\(</code> characters for inline math expressions, and <code>$\)</code> for
surrounded by <code>$</code> characters for inline math expressions, and <code>$$</code> for
display mode.</p>
<p>If you notice any issue with the Markdown import/export for equations,
feel free to <a href="#root/_help_wy8So3yZZlH9">report</a> it while providing
the equation that causes issues.</p>
the equation that causes issues.</p>
<h2>Formatting the equation</h2>
<p>It is possible to customize the font size and foreground color for both
inline and display-mode equations, just like any other text. For inline
equations, the background color/highlight can also be adjusted.</p>

View File

@@ -0,0 +1,24 @@
<p>Both front-end and back-end notes can log messages for debugging.</p>
<h2>UI logging via <code>api.log</code></h2>
<figure class="image image_resized image-style-align-center" style="width:57.74%;">
<img style="aspect-ratio:749/545;" src="Logging_image.png" width="749"
height="545">
</figure>
<p>The API log feature integrates with the script editor and it displays
all the messages logged via <code>api.log</code>. This works for both back-end
and front-end scripts.</p>
<p>The API log panel will appear after executing a script that uses <code>api.log</code> and
it can be dismissed temporarily by pressing the close button in the top-right
of the panel.</p>
<p>Apart from strings, an object can be passed as well in which case it will
be pretty-formatted if possible (e.g. recursive objects are not supported).</p>
<h2>Console logging</h2>
<p>For logs that are not directly visible to the user, the standard <code>console.log</code> can
be used as well.</p>
<ul>
<li>For front-end scripts, the log will be shown in the Developer Tools (also
known as Inspect).</li>
<li>For back-end scripts, the log will be shown in the server output while
running but <strong>will not</strong> be visible in the&nbsp;<a class="reference-link"
href="#root/_help_bnyigUA2UK7s">Backend (server) logs</a>.</li>
</ul>

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

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