From ab6da26a25a1f4880bebb3fd737eb029b8239a7c Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 23 Oct 2025 18:09:32 +0300 Subject: [PATCH] refactor(client): standalone rendering mechanism for ribbon --- apps/client/src/layouts/layout_commons.tsx | 5 +- .../src/widgets/ribbon/FormattingToolbar.tsx | 13 +- apps/client/src/widgets/ribbon/Ribbon.tsx | 156 +----------------- .../src/widgets/ribbon/RibbonDefinition.ts | 134 +++++++++++++++ .../components/StandaloneRibbonAdapter.tsx | 43 +++++ .../src/widgets/ribbon/ribbon-interface.ts | 19 +++ 6 files changed, 207 insertions(+), 163 deletions(-) create mode 100644 apps/client/src/widgets/ribbon/RibbonDefinition.ts create mode 100644 apps/client/src/widgets/ribbon/components/StandaloneRibbonAdapter.tsx diff --git a/apps/client/src/layouts/layout_commons.tsx b/apps/client/src/layouts/layout_commons.tsx index 610f31dda..26f8ea232 100644 --- a/apps/client/src/layouts/layout_commons.tsx +++ b/apps/client/src/layouts/layout_commons.tsx @@ -29,8 +29,9 @@ import PromotedAttributesWidget from "../widgets/promoted_attributes.js"; import NoteDetailWidget from "../widgets/note_detail.js"; import CallToActionDialog from "../widgets/dialogs/call_to_action.jsx"; import NoteTitleWidget from "../widgets/note_title.jsx"; -import { PopupEditorFormattingToolbar } from "../widgets/ribbon/FormattingToolbar.js"; +import FormattingToolbar from "../widgets/ribbon/FormattingToolbar.js"; import NoteList from "../widgets/collections/NoteList.jsx"; +import StandaloneRibbonAdapter from "../widgets/ribbon/components/StandaloneRibbonAdapter.jsx"; export function applyModals(rootContainer: RootContainer) { rootContainer @@ -63,7 +64,7 @@ export function applyModals(rootContainer: RootContainer) { .cssBlock(".title-row > * { margin: 5px; }") .child() .child()) - .child() + .child() .child(new PromotedAttributesWidget()) .child(new NoteDetailWidget()) .child()) diff --git a/apps/client/src/widgets/ribbon/FormattingToolbar.tsx b/apps/client/src/widgets/ribbon/FormattingToolbar.tsx index 3282ce5af..8828b15ee 100644 --- a/apps/client/src/widgets/ribbon/FormattingToolbar.tsx +++ b/apps/client/src/widgets/ribbon/FormattingToolbar.tsx @@ -1,4 +1,5 @@ -import { useNoteContext, useTriliumOption } from "../react/hooks"; +import { useTriliumOption } from "../react/hooks"; +import { TabContext } from "./ribbon-interface"; /** * Handles the editing toolbar when the CKEditor is in decoupled mode. @@ -6,19 +7,13 @@ import { useNoteContext, useTriliumOption } from "../react/hooks"; * This toolbar is only enabled if the user has selected the classic CKEditor. * * The ribbon item is active by default for text notes, as long as they are not in read-only mode. - * + * * ! The toolbar is not only used in the ribbon, but also in the quick edit feature. */ -export default function FormattingToolbar({ hidden }: { hidden?: boolean }) { +export default function FormattingToolbar({ hidden }: TabContext) { const [ textNoteEditorType ] = useTriliumOption("textNoteEditorType"); return (textNoteEditorType === "ckeditor-classic" &&
) }; - -export function PopupEditorFormattingToolbar() { - // TODO: Integrate this directly once we migrate away from class components. - const { note } = useNoteContext(); - return