mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-06-05 01:23:20 +08:00
feat(editor): 新增 stage-top 插槽用于在画布上方插入自定义元素
ScrollViewer 增加 before 具名插槽,Stage 据此暴露 stage-top 插槽, 经 Workspace、Editor 逐层透传,并补充对应类型定义与文档说明。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
7b870e5908
commit
7ce640627d
@ -270,6 +270,28 @@
|
|||||||
|
|
||||||
- **默认:** [Stage.vue](https://github.com/Tencent/tmagic-editor/blob/239b5d3efeae916a8cf3e3566d88063ecccc0553/packages/editor/src/layouts/workspace/Stage.vue)
|
- **默认:** [Stage.vue](https://github.com/Tencent/tmagic-editor/blob/239b5d3efeae916a8cf3e3566d88063ecccc0553/packages/editor/src/layouts/workspace/Stage.vue)
|
||||||
|
|
||||||
|
## stage-top
|
||||||
|
|
||||||
|
- **详情:** 画布上方位置,与画布共享同一个滚动容器,渲染在画布之前,可用于在画布顶部插入自定义元素,例如顶部工具条、提示信息等
|
||||||
|
|
||||||
|
- **默认:** 无
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
如设置了[stage](#stage)插槽,此插槽将失效
|
||||||
|
:::
|
||||||
|
|
||||||
|
- **示例:**
|
||||||
|
|
||||||
|
```html
|
||||||
|
<template>
|
||||||
|
<m-editor>
|
||||||
|
<template #stage-top>
|
||||||
|
<div class="custom-stage-top">画布顶部自定义内容</div>
|
||||||
|
</template>
|
||||||
|
</m-editor>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
## workspace-content
|
## workspace-content
|
||||||
|
|
||||||
- **详情:** 编辑器中间区域内,画布上方位置
|
- **详情:** 编辑器中间区域内,画布上方位置
|
||||||
|
|||||||
@ -86,6 +86,7 @@
|
|||||||
:stage-content-menu="stageContentMenu"
|
:stage-content-menu="stageContentMenu"
|
||||||
:custom-content-menu="customContentMenu"
|
:custom-content-menu="customContentMenu"
|
||||||
>
|
>
|
||||||
|
<template #stage-top><slot name="stage-top"></slot></template>
|
||||||
<template #stage><slot name="stage"></slot></template>
|
<template #stage><slot name="stage"></slot></template>
|
||||||
<template #workspace-content><slot name="workspace-content" :editorService="editorService"></slot></template>
|
<template #workspace-content><slot name="workspace-content" :editorService="editorService"></slot></template>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="m-editor-scroll-viewer-container" ref="container">
|
<div class="m-editor-scroll-viewer-container" ref="container">
|
||||||
<div ref="target" :style="style">
|
<div ref="target" :style="style">
|
||||||
|
<slot name="before"></slot>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ import { computed, onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from
|
|||||||
|
|
||||||
import { isNumber } from '@tmagic/utils';
|
import { isNumber } from '@tmagic/utils';
|
||||||
|
|
||||||
import type { ScrollViewerEvent } from '@editor/type';
|
import type { ScrollViewerEvent, ScrollViewerSlots } from '@editor/type';
|
||||||
import { ScrollViewer } from '@editor/utils/scroll-viewer';
|
import { ScrollViewer } from '@editor/utils/scroll-viewer';
|
||||||
|
|
||||||
import ScrollBar from './ScrollBar.vue';
|
import ScrollBar from './ScrollBar.vue';
|
||||||
@ -38,6 +39,8 @@ defineOptions({
|
|||||||
name: 'MEditorScrollViewer',
|
name: 'MEditorScrollViewer',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
defineSlots<ScrollViewerSlots>();
|
||||||
|
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
width?: number | string;
|
width?: number | string;
|
||||||
|
|||||||
@ -9,7 +9,9 @@
|
|||||||
:disabled-stage-overlay="disabledStageOverlay"
|
:disabled-stage-overlay="disabledStageOverlay"
|
||||||
:stage-content-menu="stageContentMenu"
|
:stage-content-menu="stageContentMenu"
|
||||||
:custom-content-menu="customContentMenu"
|
:custom-content-menu="customContentMenu"
|
||||||
></MagicStage>
|
>
|
||||||
|
<template #stage-top><slot name="stage-top"></slot></template>
|
||||||
|
</MagicStage>
|
||||||
</slot>
|
</slot>
|
||||||
|
|
||||||
<slot name="workspace-content"></slot>
|
<slot name="workspace-content"></slot>
|
||||||
|
|||||||
@ -27,6 +27,10 @@
|
|||||||
|
|
||||||
<NodeListMenu></NodeListMenu>
|
<NodeListMenu></NodeListMenu>
|
||||||
|
|
||||||
|
<template #before>
|
||||||
|
<slot name="stage-top"></slot>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template #content>
|
<template #content>
|
||||||
<StageOverlay v-if="!disabledStageOverlay"></StageOverlay>
|
<StageOverlay v-if="!disabledStageOverlay"></StageOverlay>
|
||||||
|
|
||||||
@ -52,7 +56,7 @@ import { calcValueByFontsize, getIdFromEl } from '@tmagic/utils';
|
|||||||
import ScrollViewer from '@editor/components/ScrollViewer.vue';
|
import ScrollViewer from '@editor/components/ScrollViewer.vue';
|
||||||
import { useServices } from '@editor/hooks';
|
import { useServices } from '@editor/hooks';
|
||||||
import { useStage } from '@editor/hooks/use-stage';
|
import { useStage } from '@editor/hooks/use-stage';
|
||||||
import type { CustomContentMenuFunction, MenuButton, MenuComponent, StageOptions } from '@editor/type';
|
import type { CustomContentMenuFunction, MenuButton, MenuComponent, StageOptions, StageSlots } from '@editor/type';
|
||||||
import { DragType, Layout } from '@editor/type';
|
import { DragType, Layout } from '@editor/type';
|
||||||
import { getEditorConfig } from '@editor/utils/config';
|
import { getEditorConfig } from '@editor/utils/config';
|
||||||
import { KeyBindingContainerKey } from '@editor/utils/keybinding-config';
|
import { KeyBindingContainerKey } from '@editor/utils/keybinding-config';
|
||||||
@ -65,6 +69,8 @@ defineOptions({
|
|||||||
name: 'MEditorStage',
|
name: 'MEditorStage',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
defineSlots<StageSlots>();
|
||||||
|
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
stageOptions: StageOptions;
|
stageOptions: StageOptions;
|
||||||
|
|||||||
@ -73,7 +73,17 @@ export interface FrameworkSlots {
|
|||||||
'page-list-popover'(props: { list: (MPage | MPageFragment)[] }): any;
|
'page-list-popover'(props: { list: (MPage | MPageFragment)[] }): any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface WorkspaceSlots {
|
export interface ScrollViewerSlots {
|
||||||
|
before(props: {}): any;
|
||||||
|
content(props: {}): any;
|
||||||
|
default(props: {}): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StageSlots extends ScrollViewerSlots {
|
||||||
|
'stage-top'(props: {}): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WorkspaceSlots extends StageSlots {
|
||||||
stage(props: {}): any;
|
stage(props: {}): any;
|
||||||
'workspace-content'(props: {}): any;
|
'workspace-content'(props: {}): any;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user