From 8e90826aef5142b76abf3c3301dc5a0102672088 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Wed, 5 Nov 2025 23:52:38 +0200 Subject: [PATCH] client: add a read-only note info bar --- apps/client/src/layouts/desktop_layout.tsx | 78 +++++++++--------- apps/client/src/layouts/mobile_layout.tsx | 46 ++++++----- .../src/translations/en/translation.json | 6 ++ .../src/widgets/read-only-note-info-bar.css | 22 +++++ .../src/widgets/read_only_note_info-bar.tsx | 80 +++++++++++++++++++ 5 files changed, 172 insertions(+), 60 deletions(-) create mode 100644 apps/client/src/widgets/read-only-note-info-bar.css create mode 100644 apps/client/src/widgets/read_only_note_info-bar.tsx diff --git a/apps/client/src/layouts/desktop_layout.tsx b/apps/client/src/layouts/desktop_layout.tsx index 3f9416584..a584ccd5e 100644 --- a/apps/client/src/layouts/desktop_layout.tsx +++ b/apps/client/src/layouts/desktop_layout.tsx @@ -1,47 +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 NoteDetailWidget from "../widgets/note_detail.js"; -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 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 NoteDetailWidget from "../widgets/note_detail.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/read_only_note_info-bar.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"; export default class DesktopLayout { @@ -130,6 +131,7 @@ export default class DesktopLayout { ) .child() .child() + .child() .child(new WatchedFileUpdateStatusWidget()) .child() .child( diff --git a/apps/client/src/layouts/mobile_layout.tsx b/apps/client/src/layouts/mobile_layout.tsx index 2bae994b6..e7fc93b27 100644 --- a/apps/client/src/layouts/mobile_layout.tsx +++ b/apps/client/src/layouts/mobile_layout.tsx @@ -1,32 +1,33 @@ +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 NoteDetailWidget from "../widgets/note_detail.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/ckeditor/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 NoteDetailWidget from "../widgets/note_detail.js"; import NoteList from "../widgets/collections/NoteList.jsx"; -import StandaloneRibbonAdapter from "../widgets/ribbon/components/StandaloneRibbonAdapter.jsx"; +import NoteTitleWidget from "../widgets/note_title.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/read_only_note_info-bar.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"; const MOBILE_CSS = `