diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json
index 855af79c3..5a7869843 100644
--- a/apps/build-docs/package.json
+++ b/apps/build-docs/package.json
@@ -11,7 +11,7 @@
"license": "AGPL-3.0-only",
"packageManager": "pnpm@10.26.2",
"devDependencies": {
- "@redocly/cli": "2.14.0",
+ "@redocly/cli": "2.14.1",
"archiver": "7.0.1",
"fs-extra": "11.3.3",
"react": "19.2.3",
diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css
index 3c20cc400..d3a4deeda 100644
--- a/apps/client/src/stylesheets/style.css
+++ b/apps/client/src/stylesheets/style.css
@@ -458,6 +458,7 @@ body.desktop .tabulator-popup-container,
}
body.desktop .dropdown-menu:not(#context-menu-container) .dropdown-item,
+body.desktop .dropdown-menu .dropdown-toggle,
body #context-menu-container .dropdown-item > span,
body.mobile .dropdown .dropdown-submenu > span {
display: flex;
@@ -2195,8 +2196,9 @@ body.zen.experimental-feature-new-layout {
border-radius: 8px;
border: 1px solid var(--main-border-color);
padding: 4px;
- background: var(--menu-background-color);
+ background: var(--menu-background-color) !important;
transform: translateX(-50%);
+ backdrop-filter: blur(6px);
}
#root-widget:has(.note-split.type-text:focus-within) .classic-toolbar-widget,
diff --git a/apps/client/src/stylesheets/theme-next-dark.css b/apps/client/src/stylesheets/theme-next-dark.css
index 59e2cb9a1..d7865d757 100644
--- a/apps/client/src/stylesheets/theme-next-dark.css
+++ b/apps/client/src/stylesheets/theme-next-dark.css
@@ -21,7 +21,7 @@
--subtle-border-color: #313131;
--dropdown-border-color: #404040;
--dropdown-shadow-opacity: 0.6;
- --dropdown-item-icon-destructive-color: #de6e5b;
+ --dropdown-item-icon-destructive-color: #d58477;
--contextual-help-icon-color: #7fd2ef;
--accented-background-color: #555;
@@ -77,6 +77,7 @@
--link-color: #95c3d9;
--link-hover-background: #75c2e324;
--link-hover-color: var(--link-color);
+ --link-selection-outline-color: #75c2e385;
--hover-item-text-color: #efefef;
--hover-item-background-color: #ffffff16;
@@ -236,7 +237,9 @@
--bottom-panel-background-color: #11111180;
--bottom-panel-title-bar-background-color: #3F3F3F80;
-
+
+ --status-bar-border-color: var(--main-border-color);
+
--scrollbar-thumb-color: #fdfdfd5c;
--scrollbar-thumb-hover-color: #ffffff7d;
--scrollbar-background-color: transparent;
diff --git a/apps/client/src/stylesheets/theme-next-light.css b/apps/client/src/stylesheets/theme-next-light.css
index 6ae0119cf..fb3991761 100644
--- a/apps/client/src/stylesheets/theme-next-light.css
+++ b/apps/client/src/stylesheets/theme-next-light.css
@@ -21,7 +21,7 @@
--subtle-border-color: rgba(0, 0, 0, 0.1);
--dropdown-border-color: #ccc;
--dropdown-shadow-opacity: 0.2;
- --dropdown-item-icon-destructive-color: #ec5138;
+ --dropdown-item-icon-destructive-color: #de4027;
--contextual-help-icon-color: #004382;
--accented-background-color: #f5f5f5;
@@ -77,6 +77,7 @@
--link-color: #0076af;
--link-hover-background: #3c7fa017;
--link-hover-color: var(--link-color);
+ --link-selection-outline-color: #95c3d9db;
--hover-item-text-color: black;
--hover-item-background-color: #0000001a;
@@ -232,8 +233,10 @@
--right-pane-item-hover-background: #00000013;
--right-pane-item-hover-color: inherit;
- --bottom-panel-background-color: #0000000a;
- --bottom-panel-title-bar-background-color: #00000017;
+ --bottom-panel-background-color: #ffffff8c;
+ --bottom-panel-title-bar-background-color: #94949414;
+
+ --status-bar-border-color: #0000003a;
--scrollbar-thumb-color: #0000005c;
--scrollbar-thumb-hover-color: #00000066;
diff --git a/apps/client/src/stylesheets/theme-next/base.css b/apps/client/src/stylesheets/theme-next/base.css
index 7f152e3c9..d76bd1a49 100644
--- a/apps/client/src/stylesheets/theme-next/base.css
+++ b/apps/client/src/stylesheets/theme-next/base.css
@@ -128,10 +128,20 @@ body.backdrop-effects-disabled {
font-size: 0.9rem !important;
}
+/* Use this class for non-legacy menus */
+.dropdown-menu.tn-dropdown-menu {
+ --menu-item-icon-vert-offset: 0;
+ white-space-collapse: discard;
+}
+
+.dropdown-menu.tn-dropdown-menu .bx {
+ margin-inline-end: 6px;
+}
+
.dropdown-menu.tn-dropdown-menu-scrollable {
/* Note: scrollable dropdowns does not support submenus */
max-height: 90vh;
- overflow: auto;
+ overflow-y: auto;
}
body.desktop .dropdown-menu::before,
@@ -153,14 +163,14 @@ body.desktop .dropdown-menu.tn-dropdown-list {
backdrop-filter: var(--dropdown-backdrop-filter);
}
-body.desktop .dropdown-menu.tn-dropdown-list::before {
- display: none;
-}
-
body.desktop .dropdown-submenu .dropdown-menu::before {
content: unset;
}
+body.desktop .dropdown-menu.tn-dropdown-list::before {
+ display: none;
+}
+
body.desktop .dropdown-submenu .dropdown-menu {
backdrop-filter: var(--dropdown-backdrop-filter);
background: transparent;
@@ -224,6 +234,10 @@ html body .dropdown-item[disabled] {
opacity: var(--menu-item-disabled-opacity);
}
+.dropdown-item:not(.disabled) .destructive-action-icon,
+.dropdown-item:not(.disabled) .bx-trash {
+ --menu-item-icon-color: var(--dropdown-item-icon-destructive-color);
+}
/* Badges */
:root .badge {
--bs-badge-color: var(--badge-text-color);
diff --git a/apps/client/src/stylesheets/theme-next/forms.css b/apps/client/src/stylesheets/theme-next/forms.css
index 6c4799da3..6de90a963 100644
--- a/apps/client/src/stylesheets/theme-next/forms.css
+++ b/apps/client/src/stylesheets/theme-next/forms.css
@@ -353,6 +353,11 @@ label.input-group.tn-number-unit-pair input {
padding-inline-end: 0;
}
+:root .input-group > pre[aria-hidden="true"] {
+ margin: 0;
+ padding: 0;
+}
+
/* Combo box-like dropdown buttons */
.select-button.dropdown-toggle::after {
diff --git a/apps/client/src/stylesheets/theme-next/notes/text.css b/apps/client/src/stylesheets/theme-next/notes/text.css
index d31acc280..222dab7a9 100644
--- a/apps/client/src/stylesheets/theme-next/notes/text.css
+++ b/apps/client/src/stylesheets/theme-next/notes/text.css
@@ -678,8 +678,8 @@ html .note-detail-editable-text :not(figure, .include-note, hr):first-child {
.ck-content a.ck-widget.ck-widget_selected,
.ck-content a.ck-link_selected {
- outline: 2px solid var(--input-focus-outline-color);
- outline-offset: 2px;
+ outline: none;
+ box-shadow: 0 0 0 2px var(--link-selection-outline-color);
background: var(--link-hover-background);
}
@@ -692,7 +692,7 @@ html .note-detail-editable-text :not(figure, .include-note, hr):first-child {
text-decoration: none;
}
-.ck-content a.reference-link.use-note-color > span {
+.ck-content a.reference-link > span.use-note-color {
color: var(--custom-color, inherit);
}
diff --git a/apps/client/src/stylesheets/theme-next/pages.css b/apps/client/src/stylesheets/theme-next/pages.css
index cf5bf0fe1..c9a34789b 100644
--- a/apps/client/src/stylesheets/theme-next/pages.css
+++ b/apps/client/src/stylesheets/theme-next/pages.css
@@ -172,6 +172,10 @@
height: 0;
}
+body.experimental-feature-new-layout .note-detail-content-widget-content.options {
+ padding-inline: 25px;
+}
+
.options-section:not(.tn-no-card) {
margin-bottom: calc(var(--options-title-offset) + 26px) !important;
box-shadow: var(--card-box-shadow);
diff --git a/apps/client/src/stylesheets/theme-next/shell.css b/apps/client/src/stylesheets/theme-next/shell.css
index 78ccc9455..bf4e88f3d 100644
--- a/apps/client/src/stylesheets/theme-next/shell.css
+++ b/apps/client/src/stylesheets/theme-next/shell.css
@@ -1085,7 +1085,7 @@ body.desktop:not(.background-effects.platform-win32) #root-widget.horizontal-lay
margin-top: calc((var(--tab-bar-height) - var(--tab-height)) * -1);
}
-body.layout-horizontal .tab-row-widget .note-tab .note-tab-wrapper {
+body.layout-horizontal div.tab-row-widget div.note-tab div.note-tab-wrapper {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
@@ -1374,6 +1374,10 @@ body.mobile .note-title {
border-bottom: 2px solid #0000001c !important;
}
+body.experimental-feature-new-layout #center-pane .note-split > div.alert {
+ margin-top: 0;
+}
+
/*
* Promoted attributes
*/
@@ -1799,6 +1803,10 @@ div.find-replace-widget div.find-widget-found-wrapper > span {
background: var(--right-pane-background-color);
}
+#right-pane > * {
+ animation: fade-in 200ms ease-in;
+}
+
#right-pane div.card-header {
align-items: center;
border: 0;
diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json
index 0d335fdcd..7a618514f 100644
--- a/apps/client/src/translations/cn/translation.json
+++ b/apps/client/src/translations/cn/translation.json
@@ -21,8 +21,17 @@
},
"bundle-error": {
"title": "加载自定义脚本失败",
- "message": "来自 ID 为 \"{{id}}\"、标题为 \"{{title}}\" 的笔记的脚本因以下原因无法执行:\n\n{{message}}"
- }
+ "message": "脚本因以下原因无法执行:\n\n{{message}}"
+ },
+ "widget-list-error": {
+ "title": "无法从服务器取得小部件清单"
+ },
+ "widget-render-error": {
+ "title": "渲染自定义 React 小部件失败"
+ },
+ "widget-missing-parent": "自定义小部件未定义强制性的 \"{{property}}\" 属性。",
+ "open-script-note": "打开脚本笔记",
+ "scripting-error": "自定义脚本错误:{{title}}"
},
"add_link": {
"add_link": "添加链接",
@@ -1598,7 +1607,8 @@
"note_type_switcher_others": "其他笔记类型",
"note_type_switcher_templates": "模板",
"note_type_switcher_collection": "集合",
- "edited_notes": "编辑过的笔记"
+ "edited_notes": "今天编辑过的笔记",
+ "promoted_attributes": "升级属性"
},
"search_result": {
"no_notes_found": "没有找到符合搜索条件的笔记。",
diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json
index 3e553ac1c..7b4caea59 100644
--- a/apps/client/src/translations/ja/translation.json
+++ b/apps/client/src/translations/ja/translation.json
@@ -21,8 +21,17 @@
},
"bundle-error": {
"title": "カスタムスクリプトの読み込みに失敗しました",
- "message": "ノートID”{{id}}”, ノートタイトル “{{title}}” のスクリプトを実行できませんでした。理由は以下の通りです:\n\n{{message}}"
- }
+ "message": "次の理由によりスクリプトを実行できませんでした:\n\n{{message}}"
+ },
+ "widget-list-error": {
+ "title": "サーバーからウィジェットのリストを取得できませんでした"
+ },
+ "widget-render-error": {
+ "title": "カスタム React ウィジェットのレンダリングに失敗しました"
+ },
+ "widget-missing-parent": "カスタムウィジェットに必須の '{{property}}' プロパティが定義されていません。",
+ "open-script-note": "スクリプトノートを開く",
+ "scripting-error": "カスタムスクリプトエラー: {{title}}"
},
"add_link": {
"add_link": "リンクを追加",
@@ -1254,7 +1263,8 @@
"note_type_switcher_others": "その他のノートタイプ",
"note_type_switcher_templates": "テンプレート",
"note_type_switcher_collection": "コレクション",
- "edited_notes": "編集済みノート"
+ "edited_notes": "この日に編集されたノート",
+ "promoted_attributes": "プロモート属性"
},
"search_result": {
"no_notes_found": "指定された検索パラメータに該当するノートは見つかりませんでした。",
diff --git a/apps/client/src/translations/pl/translation.json b/apps/client/src/translations/pl/translation.json
index 9eab5ddac..40cdd80fc 100644
--- a/apps/client/src/translations/pl/translation.json
+++ b/apps/client/src/translations/pl/translation.json
@@ -22,7 +22,15 @@
"bundle-error": {
"title": "Nie udało się załadować niestandardowego skryptu",
"message": "Skrypt z notatki o ID \"{{id}}\", zatytułowany \"{{title}}\", nie mógł zostać wykonany z powodu:\n\n{{message}}"
- }
+ },
+ "widget-list-error": {
+ "title": "Nie udało się pobrać listy widżetów z serwera"
+ },
+ "widget-render-error": {
+ "title": "Nie udało się wyrenderować niestandardowego widżetu React"
+ },
+ "widget-missing-parent": "Niestandardowy widżet nie ma zdefiniowanej obowiązkowej właściwości „{{property}}”.",
+ "open-script-note": "Otwórz notatkę ze skryptem"
},
"add_link": {
"add_link": "Dodaj link",
@@ -434,7 +442,8 @@
},
"inherited_attribute_list": {
"title": "Dziedziczone atrybuty",
- "no_inherited_attributes": "Brak dziedziczonych atrybutów."
+ "no_inherited_attributes": "Brak dziedziczonych atrybutów.",
+ "none": "brak"
},
"note_info_widget": {
"note_id": "ID notatki",
@@ -1937,7 +1946,10 @@
"options": "Opcje",
"modal_title": "Konfiguracja listy wyróżnień",
"menu_configure": "Konfiguracja listy wyróżnień...",
- "no_highlights": "Nie znaleziono wyróżnień."
+ "no_highlights": "Nie znaleziono wyróżnień.",
+ "title_with_count_one": "{{count}} podświetlenie",
+ "title_with_count_few": "{{count}} podświetlenia",
+ "title_with_count_many": "{{count}} podświetleń"
},
"quick-search": {
"placeholder": "Szybkie wyszukiwanie",
@@ -2008,7 +2020,8 @@
},
"toc": {
"table_of_contents": "Spis treści",
- "options": "Opcje"
+ "options": "Opcje",
+ "no_headings": "Brak nagłówków."
},
"watched_file_update_status": {
"file_last_modified": "Plik został ostatnio zmodyfikowany .",
@@ -2206,5 +2219,14 @@
"scroll_to_top_title": "Przejdź na początek notatki",
"create_new_note": "Utwórz nową notatkę podrzędną",
"empty_hide_archived_notes": "Ukryj zarchiwizowane notatki"
+ },
+ "attributes_panel": {
+ "title": "Atrybuty notatki"
+ },
+ "right_pane": {
+ "empty_message": "Brak elementów do wyświetlenia dla tej notatki",
+ "empty_button": "Ukryj panel",
+ "toggle": "Pokaż/ukryj prawy panel",
+ "custom_widget_go_to_source": "Przejdź do kodu źródłowego"
}
}
diff --git a/apps/client/src/translations/pt_br/translation.json b/apps/client/src/translations/pt_br/translation.json
index c9524896c..665171c84 100644
--- a/apps/client/src/translations/pt_br/translation.json
+++ b/apps/client/src/translations/pt_br/translation.json
@@ -29,7 +29,15 @@
"bundle-error": {
"title": "Falha para carregar o script customizado",
"message": "O script da nota com ID \"{{id}}\", intitulada \"{{title}}\", não pôde ser executado devido a:\n\n{{message}}"
- }
+ },
+ "widget-list-error": {
+ "title": "Falha ao obter a lista de widgets do servidor"
+ },
+ "widget-render-error": {
+ "title": "Falha ao renderizar um widget React personalizado"
+ },
+ "widget-missing-parent": "O widget personalizado não possui a propriedade obrigatória '{{property}}' definida.",
+ "open-script-note": "Abrir nota de script"
},
"add_link": {
"add_link": "Adicionar link",
diff --git a/apps/client/src/translations/ru/translation.json b/apps/client/src/translations/ru/translation.json
index ac36cfe04..a88c00149 100644
--- a/apps/client/src/translations/ru/translation.json
+++ b/apps/client/src/translations/ru/translation.json
@@ -21,8 +21,17 @@
},
"bundle-error": {
"title": "Не удалось загрузить пользовательский скрипт",
- "message": "Скрипт из заметки с идентификатором \"{{id}}\" и названием \"{{title}}\" не может быть выполнен по следующим причинам:\n\n{{message}}"
- }
+ "message": "Скрипт не может быть выполнен. Причина:\n\n{{message}}"
+ },
+ "widget-list-error": {
+ "title": "Не удалось получить список виджетов с сервера"
+ },
+ "widget-render-error": {
+ "title": "Не удалось отобразить пользовательский React виджет"
+ },
+ "widget-missing-parent": "В пользовательском виджете не определено обязательное свойство '{{property}}'.",
+ "open-script-note": "Открыть заметку со скриптом",
+ "scripting-error": "Ошибка пользовательского скрипта: {{title}}"
},
"add_link": {
"add_link": "Добавить ссылку",
@@ -2026,13 +2035,14 @@
},
"note_title": {
"placeholder": "введите здесь название заметки...",
- "edited_notes": "Измененные заметки",
+ "edited_notes": "Измененные в этот день заметки",
"note_type_switcher_collection": "Коллекция",
"note_type_switcher_templates": "Шаблон",
"note_type_switcher_others": "Другой тип заметки",
"note_type_switcher_label": "Переключить с {{type}} на:",
"last_modified": "Изменена