diff --git a/apps/client/package.json b/apps/client/package.json index e5996a36a..3604c236b 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -75,7 +75,7 @@ "@types/leaflet-gpx": "1.3.8", "@types/mark.js": "8.11.12", "@types/reveal.js": "5.2.2", - "@types/tabulator-tables": "6.3.0", + "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", "happy-dom": "20.0.11", "script-loader": "0.7.2", diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 5ea6776ff..5a7d4d923 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -2012,8 +2012,10 @@ body.zen .shared-info-widget, body.zen .ribbon-container:not(:has(.classic-toolbar-widget)), body.zen .ribbon-container:has(.classic-toolbar-widget) .ribbon-top-row, body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget)), -body.zen .note-icon-widget, body.zen .title-row .icon-action, +body.zen .note-badges > *:not(.read-only-badge), +body.zen .ribbon-button-container, +body.zen .inline-title, body.zen .promoted-attributes-widget, body.zen .floating-buttons-children > *:not(.bx-edit-alt), body.zen .action-button, @@ -2036,11 +2038,11 @@ body.zen #launcher-pane { } body.zen .title-row { - display: block !important; height: unset !important; -webkit-app-region: drag; padding-inline-start: env(titlebar-area-x); padding-inline-end: calc(100vw - env(titlebar-area-width, 100vw) + 2.5em); + border-bottom: none !important; } body.zen .floating-buttons { @@ -2060,8 +2062,6 @@ body.zen .floating-buttons-children .button-widget { body.zen .note-title-widget, body.zen .note-title-widget input { font-size: 1rem !important; - background: transparent !important; - pointer-events: none; } body.zen #detail-container { diff --git a/apps/client/src/stylesheets/theme-next-dark.css b/apps/client/src/stylesheets/theme-next-dark.css index 150a3ffc6..59e2cb9a1 100644 --- a/apps/client/src/stylesheets/theme-next-dark.css +++ b/apps/client/src/stylesheets/theme-next-dark.css @@ -234,6 +234,9 @@ --right-pane-item-hover-background: #ffffff26; --right-pane-item-hover-color: white; + --bottom-panel-background-color: #11111180; + --bottom-panel-title-bar-background-color: #3F3F3F80; + --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 c5828ab17..6ae0119cf 100644 --- a/apps/client/src/stylesheets/theme-next-light.css +++ b/apps/client/src/stylesheets/theme-next-light.css @@ -232,6 +232,9 @@ --right-pane-item-hover-background: #00000013; --right-pane-item-hover-color: inherit; + --bottom-panel-background-color: #0000000a; + --bottom-panel-title-bar-background-color: #00000017; + --scrollbar-thumb-color: #0000005c; --scrollbar-thumb-hover-color: #00000066; --scrollbar-background-color: transparent; diff --git a/apps/client/src/stylesheets/theme-next/base.css b/apps/client/src/stylesheets/theme-next/base.css index f77696dc0..b896d4e56 100644 --- a/apps/client/src/stylesheets/theme-next/base.css +++ b/apps/client/src/stylesheets/theme-next/base.css @@ -128,6 +128,12 @@ body.backdrop-effects-disabled { font-size: 0.9rem !important; } +.dropdown-menu.tn-dropdown-menu-scrollable { + /* Note: scrollable dropdowns does not support submenus */ + max-height: 90vh; + overflow: scroll; +} + body.desktop .dropdown-menu::before, :root .ck.ck-dropdown__panel::before, :root .excalidraw .popover::before, diff --git a/apps/client/src/stylesheets/theme-next/forms.css b/apps/client/src/stylesheets/theme-next/forms.css index abe65e911..6c4799da3 100644 --- a/apps/client/src/stylesheets/theme-next/forms.css +++ b/apps/client/src/stylesheets/theme-next/forms.css @@ -653,7 +653,8 @@ body a.tn-link:focus-visible, } body a.tn-link:hover, -.use-tn-links a:hover { +.use-tn-links a:hover, +.use-tn-links a.ck-widget_selected { box-shadow: 0 0 0 4px var(--link-hover-background); --background: var(--link-hover-background); color: var(--link-hover-color); diff --git a/apps/client/src/stylesheets/theme-next/notes/text.css b/apps/client/src/stylesheets/theme-next/notes/text.css index deedf02da..d31acc280 100644 --- a/apps/client/src/stylesheets/theme-next/notes/text.css +++ b/apps/client/src/stylesheets/theme-next/notes/text.css @@ -670,16 +670,33 @@ html .note-detail-editable-text :not(figure, .include-note, hr):first-child { color: var(--main-text-color); } +/* Links */ + +.ck-content a.ck-widget { + outline: none; +} + +.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; + background: var(--link-hover-background); +} + /* Reference link */ .ck-content a.reference-link, .ck-content a.reference-link:hover { /* Apply underline only to the span inside the link so it can follow the * target note's user defined color */ - text-decoration: none; + text-decoration: none; } -.ck-content a.reference-link > span { +.ck-content a.reference-link.use-note-color > span { + color: var(--custom-color, inherit); +} + +.ck-content a.reference-link:hover > span { text-decoration: underline; } diff --git a/apps/client/src/stylesheets/theme-next/shell.css b/apps/client/src/stylesheets/theme-next/shell.css index a9707ed53..78ccc9455 100644 --- a/apps/client/src/stylesheets/theme-next/shell.css +++ b/apps/client/src/stylesheets/theme-next/shell.css @@ -1230,7 +1230,7 @@ body.layout-vertical .tab-row-widget-is-sorting .note-tab.note-tab-is-dragging . margin-bottom: 2px; } -body.vertical-layout #rest-pane > .classic-toolbar-widget { +body.layout-vertical #rest-pane > .classic-toolbar-widget { border-start-start-radius: var(--center-pane-border-radius); } diff --git a/apps/client/src/translations/bg/translation.json b/apps/client/src/translations/bg/translation.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/apps/client/src/translations/bg/translation.json @@ -0,0 +1 @@ +{} diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 22c6acda9..75e116753 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -826,7 +826,8 @@ }, "inherited_attribute_list": { "title": "Inherited Attributes", - "no_inherited_attributes": "No inherited attributes." + "no_inherited_attributes": "No inherited attributes.", + "none": "none" }, "note_info_widget": { "note_id": "Note ID", @@ -2211,6 +2212,9 @@ "note_paths_title": "Note paths", "code_note_switcher": "Change language mode" }, + "attributes_panel": { + "title": "Note Attributes" + }, "right_pane": { "empty_message": "Nothing to show for this note", "empty_button": "Hide the panel", diff --git a/apps/client/src/translations/pl/translation.json b/apps/client/src/translations/pl/translation.json index 79d6687a5..9eab5ddac 100644 --- a/apps/client/src/translations/pl/translation.json +++ b/apps/client/src/translations/pl/translation.json @@ -1934,7 +1934,10 @@ }, "highlights_list_2": { "title": "Lista wyróżnień", - "options": "Opcje" + "options": "Opcje", + "modal_title": "Konfiguracja listy wyróżnień", + "menu_configure": "Konfiguracja listy wyróżnień...", + "no_highlights": "Nie znaleziono wyróżnień." }, "quick-search": { "placeholder": "Szybkie wyszukiwanie", diff --git a/apps/client/src/translations/ru/translation.json b/apps/client/src/translations/ru/translation.json index e030abbb3..ddbf23a8f 100644 --- a/apps/client/src/translations/ru/translation.json +++ b/apps/client/src/translations/ru/translation.json @@ -483,7 +483,7 @@ "workspace_template": "Эта заметка появится в списке доступных шаблонов при создании новой заметки, но только если будет установлен фокус на рабочую область с этим шаблоном", "workspace_search_home": "новые заметки поиска будут созданы как дочерние записи этой заметки, когда установлен фокус на какую-либо родительскую заметку этого рабочего пространство", "workspace_calendar_root": "Определяет корень календаря для каждого рабочего пространства", - "hide_highlight_widget": "Скрыть виджет «Выделенное»", + "hide_highlight_widget": "Скрыть виджет «Акценты»", "is_owned_by_note": "принадлежит заметке", "and_more": "... и ещё {{count}}.", "app_theme": "отмечает заметки CSS, которые являются полноценными темами Trilium и, таким образом, доступны в опциях Trilium.", @@ -750,7 +750,8 @@ }, "toc": { "table_of_contents": "Оглавление", - "options": "Параметры" + "options": "Параметры", + "no_headings": "Заголовки не найдены." }, "note_tree": { "hide-archived-notes": "Скрыть архивные заметки", @@ -1562,7 +1563,13 @@ }, "highlights_list_2": { "options": "Параметры", - "title": "Список выделенного" + "title": "Акценты", + "modal_title": "Настроить акценты", + "menu_configure": "Настроить акценты...", + "no_highlights": "Акценты в тексте не найдены.", + "title_with_count_one": "{{count}} акцент", + "title_with_count_few": "{{count}} акцента", + "title_with_count_many": "{{count}} акцентов" }, "include_note": { "dialog_title": "Вставить заметку", @@ -1755,15 +1762,15 @@ "enable_tray": "Включить отображение иконки в системном трее (чтобы изменения вступили в силу, необходимо перезапустить Trilium)" }, "highlights_list": { - "title": "Список выделенного", + "title": "Акценты", "bold": "Жирный текст", "italic": "Наклонный текст", "underline": "Подчеркнутый текст", "color": "Цветной текст", - "description": "Вы можете настроить список выделенного, отображаемый на правой панели:", + "description": "Вы можете настроить список акцентов, отображаемый на правой панели:", "bg_color": "Текст с заливкой фона", - "visibility_title": "Видимость списка выделений", - "visibility_description": "Вы можете скрыть виджет списка выделенного, добавив атрибут #hideHighlightWidget к заметке.", + "visibility_title": "Видимость списка акцентов", + "visibility_description": "Вы можете скрыть виджет списка акцентов, добавив атрибут #hideHighlightWidget к заметке.", "shortcut_info": "Вы можете настроить сочетание клавиш для быстрого переключения правой панели (включая список выделенного) в меню Параметры -> Сочетания клавиш (название \"toggleRightPane\")." }, "custom_date_time_format": { @@ -1808,7 +1815,7 @@ "edit_this_note": "Редактировать заметку" }, "show_highlights_list_widget_button": { - "show_highlights_list": "Показать список выделенного" + "show_highlights_list": "Показать список акцентов" }, "zen_mode": { "button_exit": "Покинуть режим \"дзен\"" @@ -2203,5 +2210,11 @@ }, "popup-editor": { "maximize": "Переключить на полный редактор" + }, + "right_pane": { + "custom_widget_go_to_source": "Исходный код", + "toggle": "Переключить панель справа", + "empty_button": "Скрыть панель", + "empty_message": "Нечего отобразить для текущей заметки" } } diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index 43aa33dfa..f09fce30c 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -691,7 +691,12 @@ "convert_into_attachment_prompt": "確定要將筆記 '{{title}}' 轉換為父級筆記的附件嗎?", "print_pdf": "匯出為 PDF…", "open_note_on_server": "在伺服器上開啟筆記", - "view_revisions": "筆記歷史版本..." + "view_revisions": "筆記歷史版本...", + "advanced": "進階", + "export_as_image": "匯出為圖片", + "export_as_image_png": "PNG (點陣)", + "export_as_image_svg": "SVG (向量)", + "note_map": "筆記地圖" }, "onclick_button": { "no_click_handler": "按鈕元件'{{componentId}}'沒有定義點擊時的處理方式" @@ -790,7 +795,7 @@ "file_type": "檔案類型", "file_size": "檔案大小", "download": "下載", - "open": "打開", + "open": "以外部程式打開", "upload_new_revision": "上傳新版本", "upload_success": "已上傳新檔案版本。", "upload_failed": "新檔案版本上傳失敗。", @@ -821,7 +826,9 @@ "note_size_info": "筆記大小提供了該筆記儲存需求的粗略估計。它考慮了筆記及其歷史的內容。", "calculate": "計算", "subtree_size": "(子階層大小: {{size}}, 共計 {{count}} 個筆記)", - "title": "筆記資訊" + "title": "筆記資訊", + "mime": "MIME 類型", + "show_similar_notes": "顯示相似筆記" }, "note_map": { "open_full": "展開顯示", @@ -884,7 +891,8 @@ "search_parameters": "搜尋參數", "unknown_search_option": "未知的搜尋選項 {{searchOptionName}}", "search_note_saved": "搜尋筆記已儲存至 {{- notePathTitle}}", - "actions_executed": "已執行操作。" + "actions_executed": "已執行操作。", + "view_options": "查看選項:" }, "similar_notes": { "title": "相似筆記", @@ -1503,7 +1511,11 @@ }, "highlights_list_2": { "title": "高亮列表", - "options": "選項" + "options": "選項", + "title_with_count_one": "{{count}} 處高亮", + "modal_title": "設定高亮列表", + "menu_configure": "設定高亮列表…", + "no_highlights": "未找到高亮內容。" }, "quick-search": { "placeholder": "快速搜尋", @@ -1539,8 +1551,13 @@ }, "note_title": { "placeholder": "請輸入筆記標題...", - "created_on": "建立於 {{date}}", - "last_modified": "最後修改於 {{date}}" + "created_on": "建立於 ", + "last_modified": "修改於 ", + "note_type_switcher_label": "從 {{type}} 切換至:", + "note_type_switcher_others": "其他筆記類型", + "note_type_switcher_templates": "模板", + "note_type_switcher_collection": "集合", + "edited_notes": "編輯過的筆記" }, "search_result": { "no_notes_found": "沒有找到符合搜尋條件的筆記。", @@ -1569,7 +1586,8 @@ }, "toc": { "table_of_contents": "目錄", - "options": "選項" + "options": "選項", + "no_headings": "無標題。" }, "watched_file_update_status": { "file_last_modified": "檔案 最後修改時間為 。", @@ -1943,8 +1961,9 @@ "unknown_widget": "未知元件:\"{{id}}\"。" }, "note_language": { - "not_set": "不設定", - "configure-languages": "設定語言…" + "not_set": "未設定語言", + "configure-languages": "設定語言…", + "help-on-languages": "設定內容語言說明…" }, "content_language": { "title": "內文語言", @@ -2011,7 +2030,7 @@ "book_properties_config": { "hide-weekends": "隱藏週末", "display-week-numbers": "顯示週數", - "map-style": "地圖樣式:", + "map-style": "地圖樣式", "max-nesting-depth": "最大嵌套深度:", "raster": "柵格", "vector_light": "向量(淺色)", @@ -2068,14 +2087,19 @@ "next_theme_title": "試用新 Trilium 主題", "next_theme_message": "您正在使用舊版主題,要試用新主題嗎?", "next_theme_button": "試用新主題", - "dismiss": "關閉" + "dismiss": "關閉", + "new_layout_title": "新版面配置", + "new_layout_button": "更多資訊" }, "settings": { "related_settings": "相關設定" }, "settings_appearance": { "related_code_blocks": "文字筆記中程式碼區塊的配色方案", - "related_code_notes": "程式碼筆記的配色方案" + "related_code_notes": "程式碼筆記的配色方案", + "ui": "使用者介面", + "ui_old_layout": "舊版面配置", + "ui_new_layout": "新版面配置" }, "units": { "percentage": "%" @@ -2135,6 +2159,40 @@ "read_only_explicit": "唯讀", "read_only_auto": "自動唯讀", "shared_publicly": "公開分享", - "shared_locally": "本地分享" + "shared_locally": "本地分享", + "read_only_explicit_description": "此筆記已被手動設定為唯讀。\n點擊以臨時編輯。", + "read_only_temporarily_disabled": "臨時編輯", + "shared_copy_to_clipboard": "複製連結至剪貼簿", + "shared_open_in_browser": "在瀏覽器中打開連結", + "shared_unshare": "取消分享", + "clipped_note": "網頁擷取", + "execute_script": "運行腳本", + "execute_sql": "運行 SQL" + }, + "breadcrumb": { + "hoisted_badge": "聚焦", + "hoisted_badge_title": "取消聚焦", + "workspace_badge": "工作空間", + "scroll_to_top_title": "跳轉至筆記開頭", + "create_new_note": "新增子筆記", + "empty_hide_archived_notes": "隱藏已歸檔的筆記" + }, + "status_bar": { + "language_title": "更改內容語言", + "note_info_title": "查看筆記資訊(如日期、筆記大小)", + "backlinks_one": "{{count}} 個反連結", + "backlinks_title_one": "查看反連結", + "attachments_one": "{{count}} 個附件", + "attachments_title_one": "在新分頁中查看附件", + "attributes_one": "{{count}} 個屬性", + "attributes_title": "自有屬性及繼承屬性", + "note_paths_one": "{{count}} 條路徑", + "note_paths_title": "筆記路徑", + "code_note_switcher": "更改語言模式" + }, + "right_pane": { + "empty_button": "隱藏面板", + "toggle": "切換右側面板", + "custom_widget_go_to_source": "跳轉至原始碼" } } diff --git a/apps/client/src/widgets/layout/Breadcrumb.css b/apps/client/src/widgets/layout/Breadcrumb.css index 947f8266e..572392757 100644 --- a/apps/client/src/widgets/layout/Breadcrumb.css +++ b/apps/client/src/widgets/layout/Breadcrumb.css @@ -16,6 +16,8 @@ } a.tn-link { + --link-hover-background: var(--icon-button-hover-background); + color: var(--custom-color, inherit); &:hover { @@ -46,6 +48,19 @@ overflow: hidden; display: block; flex-shrink: 2; + font-weight: normal; + } + } + + .icon-action { + font-size: .9rem !important; + + .bxs-chevron-right { + transform: translateY(8%); + + &::before { + opacity: .75; + } } } @@ -72,6 +87,15 @@ color: var(--custom-color, inherit) !important; } + .dropdown .breadcrumb-child-list { + /* Icon */ + li > span:first-child { + opacity: .75; + padding-inline-end: 4px; + translate: none; + }; + } + a.breadcrumb-last-item, a.breadcrumb-last-item:visited { text-decoration: none; diff --git a/apps/client/src/widgets/layout/Breadcrumb.tsx b/apps/client/src/widgets/layout/Breadcrumb.tsx index 350b52999..bc1494d3d 100644 --- a/apps/client/src/widgets/layout/Breadcrumb.tsx +++ b/apps/client/src/widgets/layout/Breadcrumb.tsx @@ -189,10 +189,11 @@ interface BreadcrumbSeparatorProps { function BreadcrumbSeparator(props: BreadcrumbSeparatorProps) { return ( } + text={} noSelectButtonStyle buttonClassName="icon-action" hideToggleArrow + dropdownContainerClassName="tn-dropdown-menu-scrollable" dropdownOptions={{ popperConfig: { strategy: "fixed", placement: "top" } }} > diff --git a/apps/client/src/widgets/layout/StatusBar.css b/apps/client/src/widgets/layout/StatusBar.css index 506d60afd..c5129223b 100644 --- a/apps/client/src/widgets/layout/StatusBar.css +++ b/apps/client/src/widgets/layout/StatusBar.css @@ -1,15 +1,15 @@ .component.status-bar { contain: none; border-top: 1px solid var(--main-border-color); - background-color: var(--left-pane-background-color); > .status-bar-main-row { min-height: 28px; display: flex; align-items: center; + background-color: var(--left-pane-background-color); padding-inline: 0.25em; font-size: 0.85em; - + > .breadcrumb { flex-grow: 1; --icon-button-size: 23px; @@ -155,11 +155,6 @@ } } - .dropdown-code-note-switcher { - max-height: 90vh; - overflow: scroll; - } - .backlinks-widget > .dropdown-menu { --menu-padding-size: .9em; @@ -248,16 +243,82 @@ > .attribute-list { font-size: 0.9em; - padding: 0.5em 0.75em; - .inherited-attributes-widget > div { - padding: 0; - font-size: 0.9em; + .attributes-panel-label { + opacity: .5; + margin-inline-end: 4px; + font-weight: 600; } - .attribute-list-editor { - padding: 0 !important; - } + .inherited-attributes-widget { + display: inline; + + > div { + display: inline; + padding: 0; + } + } + + .attribute-list-editor-wrapper { + display: flex; + flex-direction: column-reverse; + padding-bottom: 0 !important; + + .attribute-list-editor { + padding-block: 0 !important; + padding-inline: 0 100px !important ; + } + + .attribute-errors { + padding: 4px 0; + color: var(--dropdown-item-icon-destructive-color); + font-style: italic; + } + + .ck.ck-editor__editable::after { + /* Remove a hidden spinner that causes overflow */ + display: none; + } + } + + + } + + div.similar-notes-widget div.similar-notes-wrapper { + max-height: unset; + } + + button.select-button:not(:focus-visible) { + outline: none; } } + +.bottom-panel { + margin: 0 !important; + padding: 0; + + .bottom-panel-title-bar { + display: flex; + padding: 6px 12px; + background: var(--bottom-panel-title-bar-background-color); + justify-content: space-between; + align-items: center; + + .bottom-panel-title-bar-caption { + text-transform: uppercase; + letter-spacing: .3pt; + font-weight: 600; + font-size: .85em; + } + } + + .bottom-panel-content { + border-bottom: 1px solid var(--main-border-color); + background: var(--bottom-panel-background-color); + padding: 8px 12px; + max-height: 40vh; + overflow-y: auto; + } +} + diff --git a/apps/client/src/widgets/layout/StatusBar.tsx b/apps/client/src/widgets/layout/StatusBar.tsx index 6f8e5cdcc..250aeaad1 100644 --- a/apps/client/src/widgets/layout/StatusBar.tsx +++ b/apps/client/src/widgets/layout/StatusBar.tsx @@ -266,11 +266,15 @@ function NoteInfoValue({ text, title, value }: { text: string; title?: string, v ); } -function SimilarNotesPane({ note, similarNotesShown }: NoteInfoContext) { +function SimilarNotesPane({ note, similarNotesShown, setSimilarNotesShown }: NoteInfoContext) { return (similarNotesShown && -
+ -
+ ); } //#endregion @@ -367,15 +371,20 @@ function AttributesPane({ note, noteContext, attributesShown, setAttributesShown }), [ api ])); return (context && -
- + + + {t("inherited_attribute_list.title")} + -
+ ); } //#endregion @@ -422,7 +431,7 @@ function CodeNoteSwitcher({ note }: StatusBarContext) { icon="bx bx-code-curly" text={correspondingMimeType?.title} title={t("status_bar.code_note_switcher")} - dropdownContainerClassName="dropdown-code-note-switcher" + dropdownContainerClassName="dropdown-code-note-switcher tn-dropdown-menu-scrollable" > void; + className?: string; +} + +function BottomPanel({ children, title, visible, setVisible, className }: BottomPanelParams) { + return
+
+ {title} +
+
+ {children} +
+
; +} +//#endregion diff --git a/apps/client/src/widgets/ribbon/InheritedAttributesTab.tsx b/apps/client/src/widgets/ribbon/InheritedAttributesTab.tsx index 9e7ff4288..ee8b87c6b 100644 --- a/apps/client/src/widgets/ribbon/InheritedAttributesTab.tsx +++ b/apps/client/src/widgets/ribbon/InheritedAttributesTab.tsx @@ -9,7 +9,11 @@ import RawHtml from "../react/RawHtml"; import { joinElements } from "../react/react_utils"; import AttributeDetailWidget from "../attribute_widgets/attribute_detail"; -export default function InheritedAttributesTab({ note, componentId }: Pick) { +type InheritedAttributesTabArgs = Pick & { + emptyListString?: string; +} + +export default function InheritedAttributesTab({ note, componentId, emptyListString }: InheritedAttributesTabArgs) { const [ inheritedAttributes, setInheritedAttributes ] = useState(); const [ attributeDetailWidgetEl, attributeDetailWidget ] = useLegacyWidget(() => new AttributeDetailWidget()); @@ -63,7 +67,7 @@ export default function InheritedAttributesTab({ note, componentId }: Pick )), " ") ) : ( - <>{t("inherited_attribute_list.no_inherited_attributes")} + <>{t(emptyListString ?? "inherited_attribute_list.no_inherited_attributes")} )} diff --git a/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx b/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx index ee9129bbd..3871e0790 100644 --- a/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx +++ b/apps/client/src/widgets/ribbon/components/AttributeEditor.tsx @@ -283,6 +283,7 @@ export default function AttributeEditor({ api, note, componentId, notePath, ntxI return ( <> {!hidden &&
{ @@ -296,106 +297,107 @@ export default function AttributeEditor({ api, note, componentId, notePath, ntxI setTimeout(() => save(), 100); } }} - > - { - currentValueRef.current = currentValue ?? ""; - - const oldValue = getPreprocessedData(lastSavedContent.current ?? "").trimEnd(); - const newValue = getPreprocessedData(currentValue ?? "").trimEnd(); - setNeedsSaving(oldValue !== newValue); - setError(undefined); - }} - onClick={(e, pos) => { - if (pos && pos.textNode && pos.textNode.data) { - const clickIndex = getClickIndex(pos); - - let parsedAttrs: Attribute[]; - - try { - parsedAttrs = attribute_parser.lexAndParse(getPreprocessedData(currentValueRef.current), true); - } catch (e: unknown) { - // the input is incorrect because the user messed up with it and now needs to fix it manually - console.log(e); - return null; - } - - let matchedAttr: Attribute | null = null; - - for (const attr of parsedAttrs) { - if (attr.startIndex && clickIndex > attr.startIndex && attr.endIndex && clickIndex <= attr.endIndex) { - matchedAttr = attr; - break; - } - } - - setTimeout(() => { - if (matchedAttr) { - attributeDetailWidget.showAttributeDetail({ - allAttributes: parsedAttrs, - attribute: matchedAttr, - isOwned: true, - x: e.pageX, - y: e.pageY - }); - setState("showAttributeDetail"); - } else { - setState("showHelpTooltip"); - } - }, 100); - } else { - setState("showHelpTooltip"); - } - }} - onKeyDown={() => attributeDetailWidget.hide()} - onBlur={() => save()} - onInitialized={() => editorRef.current?.focus()} - disableNewlines disableSpellcheck - /> - -
- { needsSaving && } - - { - // Prevent automatic hiding of the context menu due to the button being clicked. - e.stopPropagation(); - - contextMenu.show({ - x: e.pageX, - y: e.pageY, - orientation: "left", - items: [ - { title: t("attribute_editor.add_new_label"), command: "addNewLabel", uiIcon: "bx bx-hash" }, - { title: t("attribute_editor.add_new_relation"), command: "addNewRelation", uiIcon: "bx bx-transfer" }, - { kind: "separator" }, - { title: t("attribute_editor.add_new_label_definition"), command: "addNewLabelDefinition", uiIcon: "bx bx-empty" }, - { title: t("attribute_editor.add_new_relation_definition"), command: "addNewRelationDefinition", uiIcon: "bx bx-empty" } - ], - selectMenuItemHandler: (item) => handleAddNewAttributeCommand(item.command) - }); + >
+ { + currentValueRef.current = currentValue ?? ""; + + const oldValue = getPreprocessedData(lastSavedContent.current ?? "").trimEnd(); + const newValue = getPreprocessedData(currentValue ?? "").trimEnd(); + setNeedsSaving(oldValue !== newValue); + setError(undefined); + }} + onClick={(e, pos) => { + if (pos && pos.textNode && pos.textNode.data) { + const clickIndex = getClickIndex(pos); + + let parsedAttrs: Attribute[]; + + try { + parsedAttrs = attribute_parser.lexAndParse(getPreprocessedData(currentValueRef.current), true); + } catch (e: unknown) { + // the input is incorrect because the user messed up with it and now needs to fix it manually + console.log(e); + return null; + } + + let matchedAttr: Attribute | null = null; + + for (const attr of parsedAttrs) { + if (attr.startIndex && clickIndex > attr.startIndex && attr.endIndex && clickIndex <= attr.endIndex) { + matchedAttr = attr; + break; + } + } + + setTimeout(() => { + if (matchedAttr) { + attributeDetailWidget.showAttributeDetail({ + allAttributes: parsedAttrs, + attribute: matchedAttr, + isOwned: true, + x: e.pageX, + y: e.pageY + }); + setState("showAttributeDetail"); + } else { + setState("showHelpTooltip"); + } + }, 100); + } else { + setState("showHelpTooltip"); + } + }} + onKeyDown={() => attributeDetailWidget.hide()} + onBlur={() => save()} + onInitialized={() => editorRef.current?.focus()} + disableNewlines disableSpellcheck /> + +
+ { needsSaving && } + + { + // Prevent automatic hiding of the context menu due to the button being clicked. + e.stopPropagation(); + + contextMenu.show({ + x: e.pageX, + y: e.pageY, + orientation: "left", + items: [ + { title: t("attribute_editor.add_new_label"), command: "addNewLabel", uiIcon: "bx bx-hash" }, + { title: t("attribute_editor.add_new_relation"), command: "addNewRelation", uiIcon: "bx bx-transfer" }, + { kind: "separator" }, + { title: t("attribute_editor.add_new_label_definition"), command: "addNewLabelDefinition", uiIcon: "bx bx-empty" }, + { title: t("attribute_editor.add_new_relation_definition"), command: "addNewRelationDefinition", uiIcon: "bx bx-empty" } + ], + selectMenuItemHandler: (item) => handleAddNewAttributeCommand(item.command) + }); + }} + /> +
{ error && ( diff --git a/apps/server/src/assets/db/demo.zip b/apps/server/src/assets/db/demo.zip index c4cbc6058..d01018a1e 100644 Binary files a/apps/server/src/assets/db/demo.zip and b/apps/server/src/assets/db/demo.zip differ diff --git a/apps/server/src/assets/translations/bg/server.json b/apps/server/src/assets/translations/bg/server.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/apps/server/src/assets/translations/bg/server.json @@ -0,0 +1 @@ +{} diff --git a/apps/server/src/assets/translations/ru/server.json b/apps/server/src/assets/translations/ru/server.json index d6a52f501..f524c6933 100644 --- a/apps/server/src/assets/translations/ru/server.json +++ b/apps/server/src/assets/translations/ru/server.json @@ -82,7 +82,7 @@ "toggle-note-paths": "Перейти к путям заметки", "toggle-similar-notes": "Перейти к похожим заметкам", "other": "Прочее", - "toggle-right-pane": "Включить/выключить отображение правой панели, которая включает оглавление и выделенные фрагменты", + "toggle-right-pane": "Включить/выключить отображение правой панели, которая включает оглавление и акценты", "print-active-note": "Распечатать активную заметку", "open-note-externally": "Открыть заметку как файл с помощью приложения по умолчанию", "render-active-note": "Отрендерить (повторно отрендерить) активную заметку", diff --git a/apps/website/src/translations/bg/translation.json b/apps/website/src/translations/bg/translation.json new file mode 100644 index 000000000..e61d41820 --- /dev/null +++ b/apps/website/src/translations/bg/translation.json @@ -0,0 +1,35 @@ +{ + "get-started": { + "title": "Започнете тук", + "desktop_title": "Свалете десктоп апликацията (v{{version}})", + "architecture": "Архитектура:", + "older_releases": "Вижте по-стари версии", + "server_title": "Конфигурирайте сървър за достъп от различни устройства" + }, + "hero_section": { + "title": "Организирайте Вашите идеи. Създайте Вашата лична база от знания.", + "subtitle": "Trilium е решение с отворен код за създаване на бележки и организация на лична база от знания. Изполвайте приложението на Вашия десктоп, или го синхоранизирайте чрез сървар хостнат от Вас за да имате дотъп до бележките си навсякъде.", + "get_started": "Започнете тук", + "github": "GitHub", + "screenshot_alt": "Скриншот от Trilium Notes десктоп програмата" + }, + "organization_benefits": { + "title": "Организация", + "note_structure_title": "Структура на бележката", + "note_structure_description": "Бележките може да бъдат подредени йерархично. Няма нужа от папки, понеже всяка бележка може да съдържа под-бележка. Една бележка може да бъде добавена на няколко места в йерархията.", + "attributes_title": "Етикети и връзки на бележката", + "attributes_description": "Използвайте връзки между бележките или добавете етикети за по-лесна кетегоризация. Изплозвайте избрани атрибуте за да въведете стуктурирана информация, която може да бъде използвана в таблици, табла.", + "hoisting_title": "Работни плотове", + "hoisting_description": "Лесно разделяйте лични от работни бележки като ги групирате в работен плот, който ще накара дървото от бележки да показва само специфичен сет от бележки." + }, + "productivity_benefits": { + "title": "Продуктивност и безопасност", + "revisions_title": "Ревизии на бележката", + "revisions_content": "Бележките периодично се запазват и ревизиите може да се ползват за ревю или за да се отмени нежелана промяна. Ревизиите също могат да бъдат създавани ръчно.", + "sync_title": "Синхронизация", + "sync_content": "Използвайте лично хостната или качена в клауда инстанция за да синхронизирате Вашите бележки на няколко устройства, и за да ги достъпите от мобилно устройство използвайки ПУА(Прогресивен Уеб Апп).", + "protected_notes_title": "Защитени бележки", + "protected_notes_content": "Защитете чуствителна лична информация като криптирате съобщенията и ги заключите с парола.", + "jump_to_title": "Бързо търсене и команди" + } +} diff --git a/apps/website/src/translations/ko/translation.json b/apps/website/src/translations/ko/translation.json index 5b9c0bf32..d8d5c861d 100644 --- a/apps/website/src/translations/ko/translation.json +++ b/apps/website/src/translations/ko/translation.json @@ -125,5 +125,11 @@ "geomap_description": "커스터마이징이 가능한 마커로 휴가를 계획하거나 관심 지점을 지도에 직접 표시하세요. 기록된 GPX 트랙을 표시하여 여정을 추적할 수도 있습니다.", "presentation_title": "프레젠테이션", "presentation_description": "슬라이드에 정보를 정리하고, 매끄러운 전환 효과와 함께 전체 화면으로 발표하세요. 슬라이드를 PDF로 내보내 간편하게 공유할 수도 있습니다." + }, + "faq": { + "mobile_question": "모바일 앱이 있나요?", + "mobile_answer": "현재 공식적인 모바일 앱은 없습니다. 하지만, 서버 인스턴스를 가지고 있다면 웹 브라우저를 이용해 접근하거나 PWA로 설치할 수 있습니다. 안드로이드에는 (데스크탑 클라이언트처럼)오프라인에서도 작동하는 TriliumDroid라는 비공식 앱이 있습니다.", + "database_question": "어디에 데이터가 저장되나요?", + "server_question": "Trilium을 사용하기 위해 서버가 필요한가요?" } } diff --git a/docs/README-bg.md b/docs/README-bg.md new file mode 100644 index 000000000..0da3a37bf --- /dev/null +++ b/docs/README-bg.md @@ -0,0 +1,337 @@ +
+ Special thanks to:
+ + Warp sponsorship
+ Warp, built for coding with multiple AI agents
+
+ Available for macOS, Linux and Windows +
+ +
+ +# Trilium Notes + +![GitHub Sponsors](https://img.shields.io/github/sponsors/eliandoran) +![LiberaPay patrons](https://img.shields.io/liberapay/patrons/ElianDoran)\ +![Docker Pulls](https://img.shields.io/docker/pulls/triliumnext/trilium) +![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/) + + + +[Chinese (Simplified Han script)](./README-ZH_CN.md) | [Chinese (Traditional Han +script)](./README-ZH_TW.md) | [English](../README.md) | [French](./README-fr.md) +| [German](./README-de.md) | [Greek](./README-el.md) | [Italian](./README-it.md) +| [Japanese](./README-ja.md) | [Romanian](./README-ro.md) | +[Spanish](./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. + +Trilium Screenshot + +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + +## 📚 Documentation + +**Visit our comprehensive documentation at +[docs.triliumnotes.org](https://docs.triliumnotes.org/)** + +Our documentation is available in multiple formats: +- **Online Documentation**: Browse the full documentation at + [docs.triliumnotes.org](https://docs.triliumnotes.org/) +- **In-App Help**: Press `F1` within Trilium to access the same documentation + directly in the application +- **GitHub**: Navigate through the [User Guide](./User%20Guide/User%20Guide/) in + this repository + +### Quick Links +- [Getting Started Guide](https://docs.triliumnotes.org/) +- [Installation Instructions](https://docs.triliumnotes.org/user-guide/setup) +- [Docker + Setup](https://docs.triliumnotes.org/user-guide/setup/server/installation/docker) +- [Upgrading + TriliumNext](https://docs.triliumnotes.org/user-guide/setup/upgrading) +- [Basic Concepts and + Features](https://docs.triliumnotes.org/user-guide/concepts/notes) +- [Patterns of Personal Knowledge + Base](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge) + +## 🎁 Features + +* Notes can be arranged into arbitrarily deep tree. Single note can be placed + into multiple places in the tree (see + [cloning](https://docs.triliumnotes.org/user-guide/concepts/notes/cloning)) +* Rich WYSIWYG note editor including e.g. tables, images and + [math](https://docs.triliumnotes.org/user-guide/note-types/text) with markdown + [autoformat](https://docs.triliumnotes.org/user-guide/note-types/text/markdown-formatting) +* Support for editing [notes with source + code](https://docs.triliumnotes.org/user-guide/note-types/code), including + syntax highlighting +* Fast and easy [navigation between + notes](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-navigation), + full text search and [note + hoisting](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-hoisting) +* Seamless [note + versioning](https://docs.triliumnotes.org/user-guide/concepts/notes/note-revisions) +* Note + [attributes](https://docs.triliumnotes.org/user-guide/advanced-usage/attributes) + can be used for note organization, querying and advanced + [scripting](https://docs.triliumnotes.org/user-guide/scripts) +* UI available in English, German, Spanish, French, Romanian, and Chinese + (simplified and traditional) +* Direct [OpenID and TOTP + integration](https://docs.triliumnotes.org/user-guide/setup/server/mfa) for + more secure login +* [Synchronization](https://docs.triliumnotes.org/user-guide/setup/synchronization) + with self-hosted sync server + * there are [3rd party services for hosting synchronisation + server](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting) +* [Sharing](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing) + (publishing) notes to public internet +* Strong [note + encryption](https://docs.triliumnotes.org/user-guide/concepts/notes/protected-notes) + with per-note granularity +* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type + "canvas") +* [Relation + maps](https://docs.triliumnotes.org/user-guide/note-types/relation-map) and + [note/link maps](https://docs.triliumnotes.org/user-guide/note-types/note-map) + for visualizing notes and their relations +* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/) +* [Geo maps](https://docs.triliumnotes.org/user-guide/collections/geomap) with + location pins and GPX tracks +* [Scripting](https://docs.triliumnotes.org/user-guide/scripts) - see [Advanced + showcases](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) +* [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) for + automation +* Scales well in both usability and performance upwards of 100 000 notes +* Touch optimized [mobile + frontend](https://docs.triliumnotes.org/user-guide/setup/mobile-frontend) for + smartphones and tablets +* Built-in [dark + theme](https://docs.triliumnotes.org/user-guide/concepts/themes), support for + user themes +* [Evernote](https://docs.triliumnotes.org/user-guide/concepts/import-export/evernote) + and [Markdown import & + export](https://docs.triliumnotes.org/user-guide/concepts/import-export/markdown) +* [Web Clipper](https://docs.triliumnotes.org/user-guide/setup/web-clipper) for + easy saving of web content +* Customizable UI (sidebar buttons, user-defined widgets, ...) +* [Metrics](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics), + along with a Grafana Dashboard. + +✨ Check out the following third-party resources/communities for more TriliumNext +related goodies: + +- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party + themes, scripts, plugins and more. +- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more. + +## ❓Why TriliumNext? + +The original Trilium developer ([Zadam](https://github.com/zadam)) has +graciously given the Trilium repository to the community project which resides +at https://github.com/TriliumNext + +### ⬆️Migrating from Zadam/Trilium? + +There are no special migration steps to migrate from a zadam/Trilium instance to +a TriliumNext/Trilium instance. Simply [install +TriliumNext/Trilium](#-installation) as usual and it will use your existing +database. + +Versions up to and including +[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are +compatible with the latest zadam/trilium version of +[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later +versions of TriliumNext/Trilium have their sync versions incremented which +prevents direct migration. + +## 💬 Discuss with us + +Feel free to join our official conversations. We would love to hear what +features, suggestions, or issues you may have! + +- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous + discussions.) + - The `General` Matrix room is also bridged to + [XMPP](xmpp:discuss@trilium.thisgreat.party?join) +- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For + asynchronous discussions.) +- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug + reports and feature requests.) + +## 🏗 Installation + +### Windows / MacOS + +Download the binary release for your platform from the [latest release +page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package +and run the `trilium` executable. + +### Linux + +If your distribution is listed in the table below, use your distribution's +package. + +[![Packaging +status](https://repology.org/badge/vertical-allrepos/triliumnext.svg)](https://repology.org/project/triliumnext/versions) + +You may also download the binary release for your platform from the [latest +release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the +package and run the `trilium` executable. + +TriliumNext is also provided as a Flatpak, but not yet published on FlatHub. + +### Browser (any OS) + +If you use a server installation (see below), you can directly access the web +interface (which is almost identical to the desktop app). + +Currently only the latest versions of Chrome & Firefox are supported (and +tested). + +### Mobile + +To use TriliumNext on a mobile device, you can use a mobile web browser to +access the mobile interface of a server installation (see below). + +See issue https://github.com/TriliumNext/Trilium/issues/4962 for more +information on mobile app support. + +If you prefer a native Android app, you can use +[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid). +Report bugs and missing features at [their +repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to +disable automatic updates on your server installation (see below) when using +TriliumDroid since the sync version must match between Trilium and TriliumDroid. + +### Server + +To install TriliumNext on your own server (including via Docker from +[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server +installation docs](https://docs.triliumnotes.org/user-guide/setup/server). + + +## 💻 Contribute + +### Translations + +If you are a native speaker, help us translate Trilium by heading over to our +[Weblate page](https://hosted.weblate.org/engage/trilium/). + +Here's the language coverage we have so far: + +[![Translation +status](https://hosted.weblate.org/widget/trilium/multi-auto.svg)](https://hosted.weblate.org/engage/trilium/) + +### Code + +Download the repository, install dependencies using `pnpm` and then run the +server (available at http://localhost:8080): +```shell +git clone https://github.com/TriliumNext/Trilium.git +cd Trilium +pnpm install +pnpm run server:start +``` + +### Documentation + +Download the repository, install dependencies using `pnpm` and then run the +environment required to edit the documentation: +```shell +git clone https://github.com/TriliumNext/Trilium.git +cd Trilium +pnpm install +pnpm edit-docs:edit-docs +``` + +### Building the Executable +Download the repository, install dependencies using `pnpm` and then build the +desktop app for Windows: +```shell +git clone https://github.com/TriliumNext/Trilium.git +cd Trilium +pnpm install +pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32 +``` + +For more details, see the [development +docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide). + +### Developer Documentation + +Please view the [documentation +guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md) +for details. If you have more questions, feel free to reach out via the links +described in the "Discuss with us" section above. + +## 👏 Shoutouts + +* [zadam](https://github.com/zadam) for the original concept and implementation + of the application. +* [Sarah Hussein](https://github.com/Sarah-Hussein) 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://docs.triliumnotes.org/user-guide/note-types/relation-map) and + [link + maps](https://docs.triliumnotes.org/user-guide/advanced-usage/note-map#link-map) + +## 🤝 Support + +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 + +Copyright 2017-2025 zadam, Elian Doran, and other contributors + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28f1f7127..e54bed168 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -330,8 +330,8 @@ importers: specifier: 5.2.2 version: 5.2.2 '@types/tabulator-tables': - specifier: 6.3.0 - version: 6.3.0 + specifier: 6.3.1 + version: 6.3.1 copy-webpack-plugin: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) @@ -5656,8 +5656,8 @@ packages: '@types/supertest@6.0.3': resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==} - '@types/tabulator-tables@6.3.0': - resolution: {integrity: sha512-/mQzrThCdSQXc2lz2SUZglIG+vWQ1sb1CEiVxw9SFGKPulaj1543zrL2qABeJIKjKPxcSgmWUyDA9e8CMaI2cQ==} + '@types/tabulator-tables@6.3.1': + resolution: {integrity: sha512-qL05wGXVy0yfWcF8LCE9+9uSeUIpeKdgpm8YmOAPTjLd3FaoZziPOhVxIiLzEhLTFfOvbuwnaWDm4v4i87diRQ==} '@types/through2@2.0.41': resolution: {integrity: sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==} @@ -15181,8 +15181,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-block-quote@47.3.0': dependencies: @@ -15474,6 +15472,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -15523,6 +15523,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.3.0': dependencies: @@ -15981,6 +15983,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.3.0': dependencies: @@ -20390,7 +20394,7 @@ snapshots: '@types/methods': 1.1.4 '@types/superagent': 8.1.9 - '@types/tabulator-tables@6.3.0': {} + '@types/tabulator-tables@6.3.1': {} '@types/through2@2.0.41': dependencies: