diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index ddce68d42..6c196e7b3 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -77,7 +77,7 @@ jobs: GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }} - name: Publish release - uses: softprops/action-gh-release@v2.4.1 + uses: softprops/action-gh-release@v2.4.2 if: ${{ github.event_name != 'pull_request' }} with: make_latest: false @@ -118,7 +118,7 @@ jobs: arch: ${{ matrix.arch }} - name: Publish release - uses: softprops/action-gh-release@v2.4.1 + uses: softprops/action-gh-release@v2.4.2 if: ${{ github.event_name != 'pull_request' }} with: make_latest: false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3d48cb80d..37fbe8c5d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -127,7 +127,7 @@ jobs: path: upload - name: Publish stable release - uses: softprops/action-gh-release@v2.4.1 + uses: softprops/action-gh-release@v2.4.2 with: draft: false body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md diff --git a/_regroup/package.json b/_regroup/package.json index ce0e70d45..56a419e99 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -46,7 +46,7 @@ "esm": "3.2.25", "jsdoc": "4.0.5", "lorem-ipsum": "2.0.8", - "rcedit": "4.0.1", + "rcedit": "5.0.0", "rimraf": "6.1.0", "tslib": "2.8.1" }, diff --git a/apps/client/package.json b/apps/client/package.json index d2ca22049..6922d39b1 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -43,7 +43,7 @@ "draggabilly": "3.0.0", "force-graph": "1.51.0", "globals": "16.5.0", - "i18next": "25.6.0", + "i18next": "25.6.1", "i18next-http-backend": "3.0.2", "jquery": "3.7.1", "jquery.fancytree": "2.38.5", @@ -53,7 +53,7 @@ "leaflet": "1.9.4", "leaflet-gpx": "2.2.0", "mark.js": "8.11.1", - "marked": "16.4.1", + "marked": "16.4.2", "mermaid": "11.12.1", "mind-elixir": "5.3.5", "normalize.css": "8.0.1", diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index ecdd589be..912e44cc0 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -495,6 +495,10 @@ type EventMappings = { noteIds: string[]; }; refreshData: { ntxId: string | null | undefined }; + contentSafeMarginChanged: { + top: number; + noteContext: NoteContext; + } }; export type EventListener = { diff --git a/apps/client/src/components/root_command_executor.ts b/apps/client/src/components/root_command_executor.ts index 632eb0a88..3ad05b7a2 100644 --- a/apps/client/src/components/root_command_executor.ts +++ b/apps/client/src/components/root_command_executor.ts @@ -171,7 +171,8 @@ export default class RootCommandExecutor extends Component { } toggleTrayCommand() { - if (!utils.isElectron()) return; + if (!utils.isElectron() || options.is("disableTray")) return; + const { BrowserWindow } = utils.dynamicRequire("@electron/remote"); const windows = BrowserWindow.getAllWindows() as Electron.BaseWindow[]; const isVisible = windows.every((w) => w.isVisible()); diff --git a/apps/client/src/layouts/desktop_layout.tsx b/apps/client/src/layouts/desktop_layout.tsx index 0f75666b8..d33799669 100644 --- a/apps/client/src/layouts/desktop_layout.tsx +++ b/apps/client/src/layouts/desktop_layout.tsx @@ -1,46 +1,48 @@ -import FlexContainer from "../widgets/containers/flex_container.js"; -import TabRowWidget from "../widgets/tab_row.js"; -import LeftPaneContainer from "../widgets/containers/left_pane_container.js"; -import NoteTreeWidget from "../widgets/note_tree.js"; -import NoteTitleWidget from "../widgets/note_title.jsx"; -import PromotedAttributesWidget from "../widgets/promoted_attributes.js"; -import NoteIconWidget from "../widgets/note_icon.jsx"; -import ScrollingContainer from "../widgets/containers/scrolling_container.js"; -import RootContainer from "../widgets/containers/root_container.js"; -import WatchedFileUpdateStatusWidget from "../widgets/watched_file_update_status.js"; -import SpacerWidget from "../widgets/spacer.js"; -import QuickSearchWidget from "../widgets/quick_search.js"; -import SplitNoteContainer from "../widgets/containers/split_note_container.js"; -import CreatePaneButton from "../widgets/buttons/create_pane_button.js"; -import ClosePaneButton from "../widgets/buttons/close_pane_button.js"; -import RightPaneContainer from "../widgets/containers/right_pane_container.js"; -import NoteWrapperWidget from "../widgets/note_wrapper.js"; -import FindWidget from "../widgets/find.js"; -import TocWidget from "../widgets/toc.js"; -import HighlightsListWidget from "../widgets/highlights_list.js"; -import PasswordNoteSetDialog from "../widgets/dialogs/password_not_set.js"; -import LauncherContainer from "../widgets/containers/launcher_container.js"; -import MovePaneButton from "../widgets/buttons/move_pane_button.js"; -import UploadAttachmentsDialog from "../widgets/dialogs/upload_attachments.js"; -import ScrollPadding from "../widgets/scroll_padding.js"; -import options from "../services/options.js"; -import utils from "../services/utils.js"; -import type { AppContext } from "../components/app_context.js"; -import type { WidgetsByParent } from "../services/bundle.js"; import { applyModals } from "./layout_commons.js"; -import Ribbon from "../widgets/ribbon/Ribbon.jsx"; -import FloatingButtons from "../widgets/FloatingButtons.jsx"; import { DESKTOP_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx"; -import SearchResult from "../widgets/search_result.jsx"; +import ApiLog from "../widgets/api_log.jsx"; +import ClosePaneButton from "../widgets/buttons/close_pane_button.js"; +import CloseZenModeButton from "../widgets/close_zen_button.jsx"; +import ContentHeader from "../widgets/containers/content-header.js"; +import CreatePaneButton from "../widgets/buttons/create_pane_button.js"; +import FindWidget from "../widgets/find.js"; +import FlexContainer from "../widgets/containers/flex_container.js"; +import FloatingButtons from "../widgets/FloatingButtons.jsx"; import GlobalMenu from "../widgets/buttons/global_menu.jsx"; +import HighlightsListWidget from "../widgets/highlights_list.js"; +import LauncherContainer from "../widgets/containers/launcher_container.js"; +import LeftPaneContainer from "../widgets/containers/left_pane_container.js"; +import LeftPaneToggle from "../widgets/buttons/left_pane_toggle.js"; +import MovePaneButton from "../widgets/buttons/move_pane_button.js"; +import NoteIconWidget from "../widgets/note_icon.jsx"; +import NoteList from "../widgets/collections/NoteList.jsx"; +import NoteTitleWidget from "../widgets/note_title.jsx"; +import NoteTreeWidget from "../widgets/note_tree.js"; +import NoteWrapperWidget from "../widgets/note_wrapper.js"; +import options from "../services/options.js"; +import PasswordNoteSetDialog from "../widgets/dialogs/password_not_set.js"; +import PromotedAttributesWidget from "../widgets/promoted_attributes.js"; +import QuickSearchWidget from "../widgets/quick_search.js"; +import ReadOnlyNoteInfoBar from "../widgets/ReadOnlyNoteInfoBar.jsx"; +import Ribbon from "../widgets/ribbon/Ribbon.jsx"; +import RightPaneContainer from "../widgets/containers/right_pane_container.js"; +import RootContainer from "../widgets/containers/root_container.js"; +import ScrollingContainer from "../widgets/containers/scrolling_container.js"; +import ScrollPadding from "../widgets/scroll_padding.js"; +import SearchResult from "../widgets/search_result.jsx"; +import SharedInfo from "../widgets/shared_info.jsx"; +import SpacerWidget from "../widgets/spacer.js"; +import SplitNoteContainer from "../widgets/containers/split_note_container.js"; import SqlResults from "../widgets/sql_result.js"; import SqlTableSchemas from "../widgets/sql_table_schemas.js"; +import TabRowWidget from "../widgets/tab_row.js"; import TitleBarButtons from "../widgets/title_bar_buttons.jsx"; -import LeftPaneToggle from "../widgets/buttons/left_pane_toggle.js"; -import ApiLog from "../widgets/api_log.jsx"; -import CloseZenModeButton from "../widgets/close_zen_button.jsx"; -import SharedInfo from "../widgets/shared_info.jsx"; -import NoteList from "../widgets/collections/NoteList.jsx"; +import TocWidget from "../widgets/toc.js"; +import type { AppContext } from "../components/app_context.js"; +import type { WidgetsByParent } from "../services/bundle.js"; +import UploadAttachmentsDialog from "../widgets/dialogs/upload_attachments.js"; +import utils from "../services/utils.js"; +import WatchedFileUpdateStatusWidget from "../widgets/watched_file_update_status.js"; import NoteDetail from "../widgets/NoteDetail.jsx"; export default class DesktopLayout { @@ -129,12 +131,15 @@ export default class DesktopLayout { .child() ) .child() - .child() .child(new WatchedFileUpdateStatusWidget()) .child() .child( new ScrollingContainer() .filling() + .child(new ContentHeader() + .child() + .child() + ) .child(new PromotedAttributesWidget()) .child() .child() diff --git a/apps/client/src/layouts/mobile_layout.tsx b/apps/client/src/layouts/mobile_layout.tsx index 2ea4831a2..d50e57bf9 100644 --- a/apps/client/src/layouts/mobile_layout.tsx +++ b/apps/client/src/layouts/mobile_layout.tsx @@ -1,32 +1,34 @@ +import { applyModals } from "./layout_commons.js"; +import { MOBILE_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx"; +import { useNoteContext } from "../widgets/react/hooks.jsx"; +import CloseZenModeButton from "../widgets/close_zen_button.js"; +import FilePropertiesTab from "../widgets/ribbon/FilePropertiesTab.jsx"; import FlexContainer from "../widgets/containers/flex_container.js"; -import NoteTitleWidget from "../widgets/note_title.js"; -import QuickSearchWidget from "../widgets/quick_search.js"; -import NoteTreeWidget from "../widgets/note_tree.js"; -import ScreenContainer from "../widgets/mobile_widgets/screen_container.js"; -import ScrollingContainer from "../widgets/containers/scrolling_container.js"; +import FloatingButtons from "../widgets/FloatingButtons.jsx"; import GlobalMenuWidget from "../widgets/buttons/global_menu.js"; import LauncherContainer from "../widgets/containers/launcher_container.js"; -import RootContainer from "../widgets/containers/root_container.js"; -import SharedInfoWidget from "../widgets/shared_info.js"; -import PromotedAttributesWidget from "../widgets/promoted_attributes.js"; -import SidebarContainer from "../widgets/mobile_widgets/sidebar_container.js"; -import type AppContext from "../components/app_context.js"; -import TabRowWidget from "../widgets/tab_row.js"; -import MobileEditorToolbar from "../widgets/type_widgets/text/mobile_editor_toolbar.js"; -import { applyModals } from "./layout_commons.js"; -import FilePropertiesTab from "../widgets/ribbon/FilePropertiesTab.jsx"; -import { useNoteContext } from "../widgets/react/hooks.jsx"; -import FloatingButtons from "../widgets/FloatingButtons.jsx"; -import { MOBILE_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx"; -import ToggleSidebarButton from "../widgets/mobile_widgets/toggle_sidebar_button.jsx"; -import CloseZenModeButton from "../widgets/close_zen_button.js"; -import NoteWrapperWidget from "../widgets/note_wrapper.js"; import MobileDetailMenu from "../widgets/mobile_widgets/mobile_detail_menu.js"; +import MobileEditorToolbar from "../widgets/type_widgets/ckeditor/mobile_editor_toolbar.js"; import NoteList from "../widgets/collections/NoteList.jsx"; -import NoteDetail from "../widgets/NoteDetail.jsx"; -import StandaloneRibbonAdapter from "../widgets/ribbon/components/StandaloneRibbonAdapter.jsx"; +import NoteTitleWidget from "../widgets/note_title.js"; +import ContentHeader from "../widgets/containers/content-header.js"; +import NoteTreeWidget from "../widgets/note_tree.js"; +import NoteWrapperWidget from "../widgets/note_wrapper.js"; +import PromotedAttributesWidget from "../widgets/promoted_attributes.js"; +import QuickSearchWidget from "../widgets/quick_search.js"; +import ReadOnlyNoteInfoBar from "../widgets/ReadOnlyNoteInfoBar.jsx"; +import RootContainer from "../widgets/containers/root_container.js"; +import ScreenContainer from "../widgets/mobile_widgets/screen_container.js"; +import ScrollingContainer from "../widgets/containers/scrolling_container.js"; import SearchDefinitionTab from "../widgets/ribbon/SearchDefinitionTab.jsx"; import SearchResult from "../widgets/search_result.jsx"; +import SharedInfoWidget from "../widgets/shared_info.js"; +import SidebarContainer from "../widgets/mobile_widgets/sidebar_container.js"; +import StandaloneRibbonAdapter from "../widgets/ribbon/components/StandaloneRibbonAdapter.jsx"; +import TabRowWidget from "../widgets/tab_row.js"; +import ToggleSidebarButton from "../widgets/mobile_widgets/toggle_sidebar_button.jsx"; +import type AppContext from "../components/app_context.js"; +import NoteDetail from "../widgets/NoteDetail.jsx"; const MOBILE_CSS = ` -