Skip to content

Commit f1aca3f

Browse files
committed
feat(mobile): add bottom toolbar position
1 parent 0221373 commit f1aca3f

File tree

5 files changed

+19
-2
lines changed

5 files changed

+19
-2
lines changed

demo/stories/mobile-editor/MobileEditor.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import {toolbarPreset} from './preset';
1111
export const MobileEditor = memo(() => {
1212
const editor = useMarkdownEditor({
1313
mobile: true,
14+
initial: {
15+
toolbarPosition: 'bottom',
16+
},
1417
});
1518

1619
return (

src/bundle/Editor.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import type {
2929
MarkdownEditorPreset as EditorPreset,
3030
MarkdownEditorMdOptions,
3131
MarkdownEditorOptions,
32+
MarkdownEditorToolbarPosition,
3233
MarkdownEditorMarkupConfig as MarkupConfig,
3334
ParseInsertedUrlAsImage,
3435
RenderPreview,
@@ -64,6 +65,7 @@ export interface Editor extends Receiver<EventMap>, CommonEditor {
6465
readonly logger: Logger2.LogReceiver;
6566
readonly currentMode: EditorMode;
6667
readonly toolbarVisible: boolean;
68+
readonly toolbarPosition?: 'top' | 'bottom';
6769

6870
setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;
6971

@@ -83,6 +85,7 @@ export interface EditorInt
8385
readonly logger: Logger2.ILogger;
8486
readonly currentMode: EditorMode;
8587
readonly toolbarVisible: boolean;
88+
readonly toolbarPosition: MarkdownEditorToolbarPosition;
8689
readonly splitModeEnabled: boolean;
8790
readonly splitMode: SplitMode;
8891
readonly preset: EditorPreset;
@@ -141,6 +144,7 @@ export class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorI
141144
#markup: MarkupString;
142145
#editorMode: EditorMode;
143146
#toolbarVisible: boolean;
147+
#toolbarPosition: MarkdownEditorToolbarPosition;
144148
#splitModeEnabled: boolean;
145149
#splitMode: SplitMode;
146150
#renderPreview?: RenderPreview;
@@ -221,6 +225,10 @@ export class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorI
221225
return this.#toolbarVisible;
222226
}
223227

228+
get toolbarPosition(): MarkdownEditorToolbarPosition {
229+
return this.#toolbarPosition;
230+
}
231+
224232
get splitModeEnabled(): boolean {
225233
return this.#splitModeEnabled;
226234
}
@@ -364,6 +372,7 @@ export class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorI
364372

365373
this.#editorMode = initial.mode ?? 'wysiwyg';
366374
this.#toolbarVisible = initial.toolbarVisible ?? true;
375+
this.#toolbarPosition = initial.toolbarPosition ?? 'top';
367376
this.#splitMode = (markupConfig.renderPreview && markupConfig.splitMode) ?? false;
368377
this.#splitModeEnabled = (this.#splitMode && initial.splitModeEnabled) ?? false;
369378
this.#renderPreview = markupConfig.renderPreview;

src/bundle/MarkdownEditorView.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ const EditorWrapper = forwardRef<HTMLDivElement, EditorWrapperProps>(
199199
settingsVisible={areSettingsVisible}
200200
toolbarConfig={wysiwygToolbarConfig}
201201
toolbarVisible={editor.toolbarVisible}
202+
toolbarPosition={editor.toolbarPosition}
202203
hiddenActionsConfig={wysiwygHiddenActionsConfig}
203204
className={b('editor', {mode: editorMode})}
204205
toolbarClassName={b('toolbar')}

src/bundle/WysiwygEditorView.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type {EditorInt} from './Editor';
1111
import {ToolbarView} from './ToolbarView';
1212
import {WysiwygEditorComponent} from './WysiwygEditorComponent';
1313
import type {WToolbarData, WToolbarItemData} from './toolbar/types';
14+
import type {MarkdownEditorToolbarPosition} from './types';
1415

1516
import './WysiwygEditorView.scss';
1617

@@ -23,21 +24,21 @@ export type WysiwygEditorViewProps = ClassNameProps &
2324
settingsVisible?: boolean;
2425
toolbarConfig: WToolbarData;
2526
toolbarVisible?: boolean;
27+
toolbarPosition: MarkdownEditorToolbarPosition;
2628
stickyToolbar?: boolean;
2729
toolbarClassName?: string;
2830
hiddenActionsConfig?: WToolbarItemData[];
2931
children?: React.ReactNode;
3032
mobile?: boolean;
3133
};
3234

33-
const toolbarPosition: 'top' | 'bottom' = 'bottom';
34-
3535
export const WysiwygEditorView = memo<WysiwygEditorViewProps>((props) => {
3636
const {
3737
editor,
3838
autofocus,
3939
settingsVisible,
4040
toolbarVisible,
41+
toolbarPosition,
4142
toolbarConfig,
4243
hiddenActionsConfig,
4344
qa,

src/bundle/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export type MarkdownEditorMode = 'wysiwyg' | 'markup';
1717
export type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';
1818
export type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';
1919

20+
export type MarkdownEditorToolbarPosition = 'top' | 'bottom';
21+
2022
export type RenderPreviewParams = {
2123
getValue: () => MarkupString;
2224
mode: 'preview' | 'split';
@@ -51,6 +53,7 @@ export type MarkdownEditorInitialOptions = {
5153
mode?: MarkdownEditorMode;
5254
/** Default – true */
5355
toolbarVisible?: boolean;
56+
toolbarPosition?: MarkdownEditorToolbarPosition;
5457
/**
5558
* Default – false
5659
*

0 commit comments

Comments
 (0)