diff --git a/docs/docs/api/setters.md b/docs/docs/api/setters.md index 9b3c9d705d..4e1eac744f 100644 --- a/docs/docs/api/setters.md +++ b/docs/docs/api/setters.md @@ -73,7 +73,7 @@ registerSetter( ```typescript import { setters, skeleton } from '@felce/lowcode-engine'; -import { setterMap, pluginMap } from '@alilc/lowcode-engine-ext'; +import { setterMap, pluginMap } from '@felce/lowcode-engine-ext'; import { IPublicModelPluginContext } from '@felce/lowcode-types'; const SetterRegistry = (ctx: IPublicModelPluginContext) => { diff --git a/docs/docs/guide/create/useEditor.md b/docs/docs/guide/create/useEditor.md index 151e6cd5af..91b6c6538a 100644 --- a/docs/docs/guide/create/useEditor.md +++ b/docs/docs/guide/create/useEditor.md @@ -13,9 +13,11 @@ sidebar_position: 0 1. 确保本地安装了 Node.js 和 npm,如果没有,[您可以通过 nvm 进行快捷的安装](https://github.com/nvm-sh/nvm) 2. 确保为 npm [设置了可以访问的 npm 源,保证安装过程无网络问题](https://npmmirror.com/) 3. 安装官方命令行工具 + ```bash npm install -g @alilc/create-element@latest ``` + 4. 通过命令行工具创建 ```bash @@ -31,17 +33,23 @@ sidebar_position: 0 > 注 @alilc/create-element 版本需 >= 1.0.4,若看不到`编辑器`选项,请重新执行步骤 3 5. 进入创建后的目录 + ```bash cd editor-project-name ``` + 6. 安装依赖 + ```bash npm install ``` + 7. 安装依赖成功后,启动项目 (注意观察上一步的输出,如有 error 等失败信息,请先进行排查) + ```bash npm start ``` + 执行后如果看到这个界面,说明项目启动成功。您可以继续看后续章节了。本章节后续内容均为高级配置方式。 ![image.png](https://img.alicdn.com/imgextra/i4/O1CN013qJVoV1OAcFNKFrIQ_!!6000000001665-2-tps-3060-1634.png) @@ -60,7 +68,7 @@ sidebar_position: 0 @@ -72,7 +80,7 @@ sidebar_position: 0 @@ -91,18 +99,18 @@ sidebar_position: 0 ``` -> 注:如果 unpkg 的服务比较缓慢,您可以使用官方 CDN 来获得确定版本的低代码引擎,如对于引擎的 1.0.18 版本,可用以下官方 CDN 替代 +> 注:如果 unpkg 的服务比较缓慢,您可以使用官方 cnpm CDN 来获得确定版本的低代码引擎,如对于引擎的 1.4.0 版本,可用以下cnpm CDN 替代 > -> - [https://uipaas-assets.com/prod/npm/@felce/lowcode-engine/1.0.18/dist/js/engine-core.js](https://uipaas-assets.com/prod/npm/@felce/lowcode-engine/1.0.18/dist/js/engine-core.js) +> - [https://registry.npmmirror.com/@felce/lowcode-engine/1.4.0/files/dist/js/engine-core.js](https://registry.npmmirror.com/@felce/lowcode-engine/1.4.0/files/dist/js/engine-core.js) ### 配置打包 @@ -116,7 +124,7 @@ sidebar_position: 0 "prop-types": "var window.PropTypes", "@alifd/next": "var window.Next", "@felce/lowcode-engine": "var window.AliLowCodeEngine", - "@alilc/lowcode-engine-ext": "var window.AliLowCodeEngineExt", + "@felce/lowcode-engine-ext": "var window.AliLowCodeEngineExt", "moment": "var window.moment", "lodash": "var window._" } diff --git a/docs/docs/guide/design/setter.md b/docs/docs/guide/design/setter.md index 62b795d9b7..5bd6c33ad4 100644 --- a/docs/docs/guide/design/setter.md +++ b/docs/docs/guide/design/setter.md @@ -18,7 +18,7 @@ sidebar_position: 6 ## npm 包与仓库信息 -- npm 包:@alilc/lowcode-engine-ext +- npm 包:@felce/lowcode-engine-ext - 仓库:[https://github.com/fe-lce/lowcode-engine-ext](https://github.com/fe-lce/lowcode-engine-ext) ## 设置器模块原理 diff --git a/docs/docs/participate/index.md b/docs/docs/participate/index.md index 1a602a73bf..f468bad42a 100644 --- a/docs/docs/participate/index.md +++ b/docs/docs/participate/index.md @@ -34,19 +34,19 @@ npm install && npm run setup { "proxy": [ [ - "https://uipaas-assets.com/prod/npm/@felce/lowcode-engine/(.*)/dist/js/engine-core.js", + "https://registry.npmmirror.com/@felce/lowcode-engine/(.*)/dist/js/engine-core.js", "http://localhost:5555/js/AliLowCodeEngine.js" ], [ - "https://uipaas-assets.com/prod/npm/@felce/lowcode-engine/(.*)/dist/css/engine-core.css", + "https://registry.npmmirror.com/@felce/lowcode-engine/(.*)/dist/css/engine-core.css", "http://localhost:5555/css/AliLowCodeEngine.css" ], [ - "https?://uipaas-assets.com/prod/npm/@felce/lowcode-engine/(.*)/dist/js/react-simulator-renderer.js", + "https://registry.npmmirror.com/@felce/lowcode-engine/(.*)/dist/js/react-simulator-renderer.js", "http://localhost:5555/js/ReactSimulatorRenderer.js" ], [ - "https?://uipaas-assets.com/prod/npm/@felce/lowcode-engine/(.*)/dist/css/react-simulator-renderer.css", + "https://registry.npmmirror.com/@felce/lowcode-engine/(.*)/dist/css/react-simulator-renderer.css", "http://localhost:5555/css/ReactSimulatorRenderer.css" ] ] diff --git a/lerna.json b/lerna.json index d0d5e9aea2..4ba0590f28 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "4.0.0", - "version": "1.4.0", + "version": "1.4.1", "npmClient": "yarn", "useWorkspaces": true, "packages": [ diff --git a/packages/designer/package.json b/packages/designer/package.json index 563e3d2979..10608a3504 100644 --- a/packages/designer/package.json +++ b/packages/designer/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-designer", - "version": "1.4.0", + "version": "1.4.1", "description": "Designer for Ali LowCode Engine", "main": "lib/index.js", "module": "es/index.js", @@ -15,9 +15,9 @@ }, "license": "MIT", "dependencies": { - "@felce/lowcode-editor-core": "1.4.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-editor-core": "1.4.1", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "classnames": "^2.2.6", "react": "^16", "react-dom": "^16.7.0", diff --git a/packages/designer/src/context-menu-actions.ts b/packages/designer/src/context-menu-actions.ts index 4bb052aa3a..17a277dd22 100644 --- a/packages/designer/src/context-menu-actions.ts +++ b/packages/designer/src/context-menu-actions.ts @@ -19,7 +19,7 @@ import './context-menu-actions.scss'; export interface IContextMenuActions { actions: IPublicTypeContextMenuAction[]; - adjustMenuLayoutFn: (actions: IPublicTypeContextMenuItem[]) => IPublicTypeContextMenuItem[]; + // adjustMenuLayoutFn: (actions: IPublicTypeContextMenuItem[]) => IPublicTypeContextMenuItem[]; addMenuAction: IPublicApiMaterial['addContextMenuOption']; @@ -57,7 +57,11 @@ export class GlobalContextMenuActions { event.preventDefault(); const actions: IPublicTypeContextMenuAction[] = []; - let contextMenu: ContextMenuActions = this.contextMenuActionsMap.values().next().value; + let contextMenu: ContextMenuActions | undefined = this.contextMenuActionsMap + .values() + .next().value; + if (!contextMenu) return; + this.contextMenuActionsMap.forEach((contextMenu) => { actions.push(...contextMenu.actions); }); @@ -90,12 +94,17 @@ export class GlobalContextMenuActions { pluginContext, }); - const target = event.target; + const target = event.target as HTMLElement; + + if (!target) { + console.warn('context menu target is null'); + return; + } - const { top, left } = target?.getBoundingClientRect(); + const { top, left } = target.getBoundingClientRect(); const menuInstance = Menu.create({ - target: event.target, + target: target, offset: [event.clientX - left, event.clientY - top], children: menuNode, className: 'engine-context-menu', @@ -177,7 +186,7 @@ export class ContextMenuActions implements IContextMenuActions { ) as IPublicModelPluginContext; const menus: IPublicTypeContextMenuItem[] = parseContextMenuProperties(actions, { - nodes: nodes.map((d) => designer.shellModelFactory.createNode(d)!), + nodes: nodes.map((d) => designer.shellModelFactory!.createNode(d)!), destroy, event, pluginContext, @@ -191,7 +200,7 @@ export class ContextMenuActions implements IContextMenuActions { const menuNode = parseContextMenuAsReactNode(layoutMenu, { destroy, - nodes: nodes.map((d) => designer.shellModelFactory.createNode(d)!), + nodes: nodes.map((d) => designer.shellModelFactory!.createNode(d)!), pluginContext, }); @@ -210,10 +219,10 @@ export class ContextMenuActions implements IContextMenuActions { originalEvent.stopPropagation(); originalEvent.preventDefault(); // 如果右键的节点不在 当前选中的节点中,选中该节点 - if (!designer.currentSelection.has(node.id)) { - designer.currentSelection.select(node.id); + if (!designer.currentSelection!.has(node.id)) { + designer.currentSelection!.select(node.id); } - const nodes = designer.currentSelection.getNodes(); + const nodes = designer.currentSelection!.getNodes(); this.handleContextMenu(nodes, originalEvent); }, ), diff --git a/packages/designer/src/designer/active-tracker.ts b/packages/designer/src/designer/active-tracker.ts index 69ce1122b9..2b08dc380c 100644 --- a/packages/designer/src/designer/active-tracker.ts +++ b/packages/designer/src/designer/active-tracker.ts @@ -3,9 +3,8 @@ import { obx, IEventBus, createModuleEventBus } from '@felce/lowcode-editor-core import { IPublicTypeActiveTarget, IPublicModelActiveTracker } from '@felce/lowcode-types'; import { isNode } from '@felce/lowcode-utils'; -export interface IActiveTracker extends Omit { - _target: ActiveTarget | INode; - +export interface IActiveTracker + extends Omit { track(originalTarget: ActiveTarget | INode): void; onChange(fn: (target: ActiveTarget) => void): () => void; @@ -16,7 +15,7 @@ export interface ActiveTarget extends Omit { } export class ActiveTracker implements IActiveTracker { - @obx.ref private _target?: ActiveTarget | INode; + @obx.ref private _target: ActiveTarget | INode; private emitter: IEventBus = createModuleEventBus('ActiveTracker'); diff --git a/packages/designer/src/designer/designer.ts b/packages/designer/src/designer/designer.ts index 70ceaa4442..b01bc873c8 100644 --- a/packages/designer/src/designer/designer.ts +++ b/packages/designer/src/designer/designer.ts @@ -1,3 +1,4 @@ +import { BuiltinSimulatorProps } from './../builtin-simulator/host'; import { ComponentType } from 'react'; import { obx, @@ -55,13 +56,13 @@ const logger = new Logger({ level: 'warn', bizName: 'designer' }); export interface DesignerProps { [key: string]: any; editor: IPublicModelEditor; - shellModelFactory: IShellModelFactory; + shellModelFactory?: IShellModelFactory; className?: string; style?: object; defaultSchema?: IPublicTypeProjectSchema; hotkeys?: object; viewName?: string; - simulatorProps?: Record | ((document: DocumentModel) => object); + simulatorProps?: ((project: Project) => BuiltinSimulatorProps) | BuiltinSimulatorProps; simulatorComponent?: ComponentType; dragGhostComponent?: ComponentType; suspensed?: boolean; @@ -71,13 +72,13 @@ export interface DesignerProps { onDragstart?: (e: IPublicModelLocateEvent) => void; onDrag?: (e: IPublicModelLocateEvent) => void; onDragend?: ( - e: { dragObject: IPublicModelDragObject; copy: boolean }, + e: { dragObject: IPublicModelDragObject; copy?: boolean }, loc?: DropLocation, ) => void; } export interface IDesigner { - readonly shellModelFactory: IShellModelFactory; + readonly shellModelFactory?: IShellModelFactory; viewName: string | undefined; @@ -89,7 +90,7 @@ export interface IDesigner { get componentActions(): ComponentActions; - get contextMenuActions(): ContextMenuActions; + get contextMenuActions(): IContextMenuActions; get editor(): IPublicModelEditor; @@ -97,7 +98,7 @@ export interface IDesigner { get simulatorComponent(): ComponentType | undefined; - get currentSelection(): ISelection; + get currentSelection(): ISelection | undefined; createScroller(scrollable: IPublicTypeScrollable): IPublicModelScroller; @@ -162,7 +163,7 @@ export class Designer implements IDesigner { readonly bemToolsManager = new BemToolsManager(this); - readonly shellModelFactory: IShellModelFactory; + readonly shellModelFactory?: IShellModelFactory; private _dropLocation?: DropLocation; @@ -448,9 +449,10 @@ export class Designer implements IDesigner { this._simulatorComponent = props.simulatorComponent; } if (props.simulatorProps !== this.props.simulatorProps) { + const oldDesignMode = this.simulatorProps?.designMode; this._simulatorProps = props.simulatorProps; // 重新 setupSelection - if (props.simulatorProps?.designMode !== this.props.simulatorProps?.designMode) { + if (this.simulatorProps?.designMode !== oldDesignMode) { this.setupSelection(); } } diff --git a/packages/designer/src/designer/drag-ghost/index.tsx b/packages/designer/src/designer/drag-ghost/index.tsx index 8fd4d6e9fe..d1d12d52c6 100644 --- a/packages/designer/src/designer/drag-ghost/index.tsx +++ b/packages/designer/src/designer/drag-ghost/index.tsx @@ -1,7 +1,6 @@ import { Component, ReactElement } from 'react'; import { observer, obx, Title, makeObservable } from '@felce/lowcode-editor-core'; import { Designer } from '../designer'; -import { isDragNodeObject } from '../dragon'; import { isSimulatorHost } from '../../simulator'; import './ghost.less'; import { @@ -9,6 +8,7 @@ import { IPublicTypeNodeSchema, IPublicModelDragObject, } from '@felce/lowcode-types'; +import { isDragNodeObject } from '@felce/lowcode-utils'; type offBinding = () => any; @@ -16,7 +16,7 @@ type offBinding = () => any; export default class DragGhost extends Component<{ designer: Designer }> { private dispose: offBinding[] = []; - @obx.ref private titles: (string | IPublicTypeI18nData | ReactElement)[] | null = null; + @obx.ref private titles: (string | IPublicTypeI18nData | ReactElement | null)[] | null = null; @obx.ref private x = 0; @@ -58,17 +58,19 @@ export default class DragGhost extends Component<{ designer: Designer }> { ]; } - getTitles(dragObject: IPublicModelDragObject) { + getTitles(dragObject: IPublicModelDragObject | null) { + if (!dragObject) return null; + if (isDragNodeObject(dragObject)) { - return dragObject.nodes.map((node) => node.title); + return dragObject.nodes.map((node) => node?.title || null); } const dataList = Array.isArray(dragObject.data) ? dragObject.data : [dragObject.data]; - return dataList.map( - (item: IPublicTypeNodeSchema, i) => - this.props.designer.getComponentMeta(item.componentName).title, - ); + return dataList.map((item: IPublicTypeNodeSchema | null) => { + if (!item) return null; + return this.props.designer.getComponentMeta(item.componentName).title; + }); } componentWillUnmount() { diff --git a/packages/designer/src/designer/dragon.ts b/packages/designer/src/designer/dragon.ts index a34273a904..27c3d93be3 100644 --- a/packages/designer/src/designer/dragon.ts +++ b/packages/designer/src/designer/dragon.ts @@ -1,20 +1,16 @@ -import { obx, makeObservable, IEventBus, createModuleEventBus } from '@felce/lowcode-editor-core'; +import { IEventBus, createModuleEventBus, makeObservable, obx } from '@felce/lowcode-editor-core'; import { - IPublicTypeDragNodeObject, - IPublicTypeDragAnyObject, - IPublicEnumDragObjectType, - IPublicTypeDragNodeDataObject, IPublicModelDragObject, - IPublicModelNode, IPublicModelDragon, IPublicModelLocateEvent, + IPublicModelNode, IPublicModelSensor, } from '@felce/lowcode-types'; -import { setNativeSelection, cursor } from '@felce/lowcode-utils'; +import { cursor, isDragNodeObject, setNativeSelection } from '@felce/lowcode-utils'; import { INode, Node } from '../document'; import { ISimulatorHost, isSimulatorHost } from '../simulator'; -import { IDesigner } from './designer'; import { makeEventsHandler } from '../utils/misc'; +import { IDesigner } from './designer'; export interface ILocateEvent extends IPublicModelLocateEvent { readonly type: 'LocateEvent'; @@ -25,31 +21,6 @@ export interface ILocateEvent extends IPublicModelLocateEvent { sensor?: IPublicModelSensor; } -/** - * @deprecated use same function in @felce/lowcode-utils - */ -export function isDragNodeObject(obj: any): obj is IPublicTypeDragNodeObject { - return obj && obj.type === IPublicEnumDragObjectType.Node; -} - -/** - * @deprecated use same function in @felce/lowcode-utils - */ -export function isDragNodeDataObject(obj: any): obj is IPublicTypeDragNodeDataObject { - return obj && obj.type === IPublicEnumDragObjectType.NodeData; -} - -/** - * @deprecated use same function in @felce/lowcode-utils - */ -export function isDragAnyObject(obj: any): obj is IPublicTypeDragAnyObject { - return ( - obj && - obj.type !== IPublicEnumDragObjectType.NodeData && - obj.type !== IPublicEnumDragObjectType.Node - ); -} - export function isLocateEvent(e: any): e is ILocateEvent { return e && e.type === 'LocateEvent'; } @@ -88,7 +59,7 @@ export function setShaken(e: any) { e.shaken = true; } -function getSourceSensor(dragObject: IPublicModelDragObject): ISimulatorHost | null { +function getSourceSensor(dragObject: IPublicModelDragObject): ISimulatorHost | null { if (!isDragNodeObject(dragObject)) { return null; } @@ -144,7 +115,7 @@ export class Dragon implements IDragon { * @param shell container element * @param boost boost got a drag object */ - from(shell: Element, boost: (e: MouseEvent) => IPublicModelDragObject | null) { + from(shell: Element, boost: (e: MouseEvent) => IPublicModelDragObject | null) { const mousedown = (e: MouseEvent) => { // ESC or RightClick if (e.which === 3 || e.button === 2) { @@ -172,7 +143,7 @@ export class Dragon implements IDragon { * @param boostEvent 拖拽初始时事件 */ boost( - dragObject: IPublicModelDragObject, + dragObject: IPublicModelDragObject, boostEvent: MouseEvent | DragEvent, fromRglNode?: INode | IPublicModelNode, ) { @@ -257,7 +228,7 @@ export class Dragon implements IDragon { /* istanbul ignore next */ if (isRGL) { // 禁止被拖拽元素的阻断 - const nodeInst = dragObject.nodes[0].getDOMNode(); + const nodeInst = dragObject.nodes?.[0]?.getDOMNode(); if (nodeInst && nodeInst.style) { this.nodeInstPointerEvents = true; nodeInst.style.pointerEvents = 'none'; @@ -275,7 +246,7 @@ export class Dragon implements IDragon { this.emitter.emit('rgl.add.placeholder', { rglNode, fromRglNode, - node: locateEvent.dragObject?.nodes[0], + node: locateEvent.dragObject?.nodes?.[0], event: e, }); designer.clearLocation(); @@ -349,7 +320,7 @@ export class Dragon implements IDragon { const over = (e?: any) => { // 禁止被拖拽元素的阻断 if (this.nodeInstPointerEvents) { - const nodeInst = dragObject.nodes[0].getDOMNode(); + const nodeInst = dragObject.nodes?.[0]?.getDOMNode(); if (nodeInst && nodeInst.style) { nodeInst.style.pointerEvents = ''; } @@ -361,7 +332,7 @@ export class Dragon implements IDragon { const { isRGL, rglNode } = getRGL(e); /* istanbul ignore next */ if (isRGL && this._canDrop && this._dragging) { - const tarNode = dragObject.nodes[0]; + const tarNode = dragObject.nodes?.[0]; if (rglNode.id !== tarNode.id) { // 避免死循环 this.emitter.emit('rgl.drop', { @@ -489,6 +460,7 @@ export class Dragon implements IDragon { } else if (e.sensor) { sensor = e.sensor; } else if (sourceSensor) { + // FIXME: 这里为什么会把simulator拿过来? sensor = sourceSensor; } } @@ -640,7 +612,7 @@ export class Dragon implements IDragon { }; } - onDragend(func: (x: { dragObject: IPublicModelDragObject; copy: boolean }) => any) { + onDragend(func: (x: { dragObject: IPublicModelDragObject; copy: boolean }) => any) { this.emitter.on('dragend', func); return () => { this.emitter.removeListener('dragend', func); diff --git a/packages/designer/src/document/document-view.tsx b/packages/designer/src/document/document-view.tsx index 1c42ce6a63..9a14d1b66a 100644 --- a/packages/designer/src/document/document-view.tsx +++ b/packages/designer/src/document/document-view.tsx @@ -1,9 +1,12 @@ -import { Component } from 'react'; -import classNames from 'classnames'; import { observer } from '@felce/lowcode-editor-core'; -import { DocumentModel, IDocumentModel } from './document-model'; +import classNames from 'classnames'; +import { Component } from 'react'; import { BuiltinSimulatorHostView } from '../builtin-simulator'; +import { IDocumentModel } from './document-model'; +/** + * @deprecated 暂时没用到 + */ @observer export class DocumentView extends Component<{ document: IDocumentModel }> { render() { diff --git a/packages/designer/tests/designer/dragon.test.ts b/packages/designer/tests/designer/dragon.test.ts index a7bd35655b..b2e88fa023 100644 --- a/packages/designer/tests/designer/dragon.test.ts +++ b/packages/designer/tests/designer/dragon.test.ts @@ -5,9 +5,6 @@ import { DocumentModel } from '../../src/document/document-model'; import { Designer } from '../../src/designer/designer'; import { Dragon, - isDragNodeObject, - isDragNodeDataObject, - isDragAnyObject, isLocateEvent, isShaken, setShaken, @@ -18,6 +15,7 @@ import { IPublicEnumDragObjectType } from '@felce/lowcode-types'; import formSchema from '../fixtures/schema/form'; import { fireEvent } from '@testing-library/react'; import { shellModelFactory } from '../../../engine/src/modules/shell-model-factory'; +import { isDragAnyObject, isDragNodeDataObject, isDragNodeObject } from '@felce/lowcode-utils'; describe('Dragon 测试', () => { let editor: Editor; diff --git a/packages/editor-core/package.json b/packages/editor-core/package.json index 4775509fb9..242d2def51 100644 --- a/packages/editor-core/package.json +++ b/packages/editor-core/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-editor-core", - "version": "1.4.0", + "version": "1.4.1", "description": "Core Api for Ali lowCode engine", "license": "MIT", "main": "lib/index.js", @@ -16,8 +16,8 @@ }, "dependencies": { "@alifd/next": "^1.26.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "classnames": "^2.2.6", "debug": "^4.1.1", "intl-messageformat": "^9.3.1", diff --git a/packages/editor-core/src/config.ts b/packages/editor-core/src/config.ts index dc6dbdbeb0..1c747fd299 100644 --- a/packages/editor-core/src/config.ts +++ b/packages/editor-core/src/config.ts @@ -270,7 +270,7 @@ export class EngineConfig implements IEngineConfig { * * @param {IPublicTypeEngineOptions} engineOptions */ - setEngineOptions(engineOptions: IPublicTypeEngineOptions) { + setEngineOptions(engineOptions?: IPublicTypeEngineOptions) { if (!engineOptions || !isPlainObject(engineOptions)) { return; } diff --git a/packages/editor-skeleton/package.json b/packages/editor-skeleton/package.json index 7840e73ba7..9dde413572 100644 --- a/packages/editor-skeleton/package.json +++ b/packages/editor-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-editor-skeleton", - "version": "1.4.0", + "version": "1.4.1", "description": "alibaba lowcode editor skeleton", "main": "lib/index.js", "module": "es/index.js", @@ -19,10 +19,10 @@ ], "dependencies": { "@alifd/next": "^1.26.0", - "@felce/lowcode-designer": "1.4.0", - "@felce/lowcode-editor-core": "1.4.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-designer": "1.4.1", + "@felce/lowcode-editor-core": "1.4.1", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "classnames": "^2.2.6", "react": "^16.8.1", "react-dom": "^16.8.1" diff --git a/packages/editor-skeleton/src/area.ts b/packages/editor-skeleton/src/area.ts index c0ad92c894..6c3b45c72c 100644 --- a/packages/editor-skeleton/src/area.ts +++ b/packages/editor-skeleton/src/area.ts @@ -1,23 +1,22 @@ /* eslint-disable max-len */ import { obx, computed, makeObservable } from '@felce/lowcode-editor-core'; import { Logger } from '@felce/lowcode-utils'; -import { IPublicTypeWidgetBaseConfig } from '@felce/lowcode-types'; +import { + IPublicTypeWidgetBaseConfig, + IPublicModelArea, + IPublicModelWidget, +} from '@felce/lowcode-types'; import { WidgetContainer } from './widget/widget-container'; import { ISkeleton } from './skeleton'; -import { IWidget } from './widget/widget'; const logger = new Logger({ level: 'warn', bizName: 'skeleton:area' }); -export interface IArea { - isEmpty(): boolean; - add(config: T | C): T; - remove(config: T | string): number; - setVisible(flag: boolean): void; - hide(): void; - show(): void; -} -export class Area - implements IArea +export interface IArea extends IPublicModelArea {} + +export class Area< + C extends IPublicTypeWidgetBaseConfig = any, + T extends IPublicModelWidget = IPublicModelWidget, +> implements IArea { @obx private _visible = true; diff --git a/packages/editor-skeleton/src/skeleton.ts b/packages/editor-skeleton/src/skeleton.ts index 8b7d46f4cc..45639ee202 100644 --- a/packages/editor-skeleton/src/skeleton.ts +++ b/packages/editor-skeleton/src/skeleton.ts @@ -68,6 +68,9 @@ export interface ISkeleton | 'remove' | 'hideArea' | 'add' + | 'getAreaItems' + | 'onDisableWidget' + | 'onEnableWidget' > { editor: IEditor; @@ -456,14 +459,14 @@ export class Skeleton implements ISkeleton { const { content, ...restConfig } = config; if (content) { if (isPlainObject(content) && !isValidElement(content)) { - Object.keys(content).forEach((key) => { + Object.keys(content).forEach((key: any) => { if (/props$/i.test(key) && restConfig[key]) { restConfig[key] = { ...restConfig[key], - ...content[key], + ...(content as unknown as IPublicTypePanelConfig)[key], }; } else { - restConfig[key] = content[key]; + restConfig[key] = (content as unknown as IPublicTypePanelConfig)[key]; } }); } else { diff --git a/packages/editor-skeleton/src/widget/widget.ts b/packages/editor-skeleton/src/widget/widget.ts index 04c074e5b5..a05860cff8 100644 --- a/packages/editor-skeleton/src/widget/widget.ts +++ b/packages/editor-skeleton/src/widget/widget.ts @@ -5,27 +5,9 @@ import { getEvent } from '@felce/lowcode-shell'; import { WidgetConfig } from '../types'; import { ISkeleton } from '../skeleton'; import { WidgetView } from '../components/widget-views'; -import { IPublicTypeTitleContent, IPublicTypeWidgetBaseConfig } from '@felce/lowcode-types'; +import { IPublicModelWidget, IPublicTypeTitleContent } from '@felce/lowcode-types'; -export interface IWidget { - readonly name: string; - readonly content: ReactNode; - readonly align?: string; - readonly isWidget: true; - readonly visible: boolean; - readonly disabled?: boolean; - readonly body: ReactNode; - readonly skeleton: ISkeleton; - readonly config: IPublicTypeWidgetBaseConfig; - - getName(): string; - getContent(): any; - show(): void; - hide(): void; - toggle(): void; - enable?(): void; - disable?(): void; -} +export interface IWidget extends IPublicModelWidget {} export class Widget implements IWidget { readonly isWidget = true; @@ -138,6 +120,6 @@ export class Widget implements IWidget { } } -export function isWidget(obj: any): obj is IWidget { +export function isWidget(obj: any): obj is IPublicModelWidget { return obj && obj.isWidget; } diff --git a/packages/engine/README-en_US.md b/packages/engine/README-en_US.md index 6f889e5e5b..c08b1e64f7 100644 --- a/packages/engine/README-en_US.md +++ b/packages/engine/README-en_US.md @@ -101,7 +101,7 @@ init(document.getElementById('lce')); { "externals": { "@felce/lowcode-engine": "var window.AliLowCodeEngine", - "@alilc/lowcode-engine-ext": "var window.AliLowCodeEngineExt" + "@felce/lowcode-engine-ext": "var window.AliLowCodeEngineExt" } } ``` @@ -111,22 +111,22 @@ init(document.getElementById('lce')); #### unpkg ```html -https://unpkg.com/@felce/lowcode-engine@1.4.0-beta.0/dist/js/engine-core.js -https://unpkg.com/@felce/lowcode-react-simulator-renderer@1.4.0-beta.0/dist/js/react-simulator-renderer.js +https://unpkg.com/@felce/lowcode-engine@1.4.0/dist/js/engine-core.js +https://unpkg.com/@felce/lowcode-react-simulator-renderer@1.4.0/dist/js/react-simulator-renderer.js ``` #### npmmirror ```html -https://registry.npmmirror.com/@felce/lowcode-engine/1.4.0-beta.0/files/dist/js/engine-core.js -https://registry.npmmirror.com/@felce/lowcode-react-simulator-renderer/1.4.0-beta.0/files/dist/js/react-simulator-renderer.js +https://registry.npmmirror.com/@felce/lowcode-engine/1.4.0/files/dist/js/engine-core.js +https://registry.npmmirror.com/@felce/lowcode-react-simulator-renderer/1.4.0/files/dist/js/react-simulator-renderer.js ``` #### jsdelivr ```html -https://cdn.jsdelivr.net/npm/@felce/lowcode-engine@1.4.0-beta.0/dist/js/engine-core.js -https://cdn.jsdelivr.net/npm/@felce/lowcode-react-simulator-renderer@1.4.0-beta.0/dist/js/react-simulator-renderer.js +https://cdn.jsdelivr.net/npm/@felce/lowcode-engine@1.4.0/dist/js/engine-core.js +https://cdn.jsdelivr.net/npm/@felce/lowcode-react-simulator-renderer@1.4.0/dist/js/react-simulator-renderer.js ``` #### Method 5: Use your own cdn diff --git a/packages/engine/README.md b/packages/engine/README.md index e4a896ff98..ee9b288a1e 100644 --- a/packages/engine/README.md +++ b/packages/engine/README.md @@ -112,7 +112,7 @@ init(document.getElementById('lce')); { "externals": { "@felce/lowcode-engine": "var window.AliLowCodeEngine", - "@alilc/lowcode-engine-ext": "var window.AliLowCodeEngineExt" + "@felce/lowcode-engine-ext": "var window.AliLowCodeEngineExt" } } ``` @@ -122,22 +122,22 @@ init(document.getElementById('lce')); #### unpkg ```html -https://unpkg.com/@felce/lowcode-engine@1.4.0-beta.0/dist/js/engine-core.js -https://unpkg.com/@felce/lowcode-react-simulator-renderer@1.4.0-beta.0/dist/js/react-simulator-renderer.js +https://unpkg.com/@felce/lowcode-engine@1.4.0/dist/js/engine-core.js +https://unpkg.com/@felce/lowcode-react-simulator-renderer@1.4.0/dist/js/react-simulator-renderer.js ``` #### npmmirror ```html -https://registry.npmmirror.com/@felce/lowcode-engine/1.4.0-beta.0/files/dist/js/engine-core.js -https://registry.npmmirror.com/@felce/lowcode-react-simulator-renderer/1.4.0-beta.0/files/dist/js/react-simulator-renderer.js +https://registry.npmmirror.com/@felce/lowcode-engine/1.4.0/files/dist/js/engine-core.js +https://registry.npmmirror.com/@felce/lowcode-react-simulator-renderer/1.4.0/files/dist/js/react-simulator-renderer.js ``` #### jsdelivr ```html -https://cdn.jsdelivr.net/npm/@felce/lowcode-engine@1.4.0-beta.0/dist/js/engine-core.js -https://cdn.jsdelivr.net/npm/@felce/lowcode-react-simulator-renderer@1.4.0-beta.0/dist/js/react-simulator-renderer.js +https://cdn.jsdelivr.net/npm/@felce/lowcode-engine@1.4.0/dist/js/engine-core.js +https://cdn.jsdelivr.net/npm/@felce/lowcode-react-simulator-renderer@1.4.0/dist/js/react-simulator-renderer.js ``` #### 使用自有 cdn diff --git a/packages/engine/build.umd.json b/packages/engine/build.umd.json index 92d5a1bfd3..32d150b215 100644 --- a/packages/engine/build.umd.json +++ b/packages/engine/build.umd.json @@ -15,7 +15,7 @@ "monaco-editor/esm/vs/editor/editor.api": "var window.monaco", "monaco-editor/esm/vs/editor/editor.main.js": "var window.monaco", "@alifd/next": "var Next", - "@alilc/lowcode-engine-ext": "var window.AliLowCodeEngineExt", + "@felce/lowcode-engine-ext": "var window.AliLowCodeEngineExt", "moment": "var moment", "lodash": "var _" }, diff --git a/packages/engine/package.json b/packages/engine/package.json index b6e167d96e..8aaee62691 100644 --- a/packages/engine/package.json +++ b/packages/engine/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-engine", - "version": "1.4.0", + "version": "1.4.1", "description": "An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系", "main": "lib/engine-core.js", "module": "es/engine-core.js", @@ -19,16 +19,16 @@ "license": "MIT", "dependencies": { "@alifd/next": "^1.26.0", - "@alilc/lowcode-engine-ext": "^1.0.0", - "@felce/lowcode-designer": "1.4.0", - "@felce/lowcode-editor-core": "1.4.0", - "@felce/lowcode-editor-skeleton": "1.4.0", - "@felce/lowcode-plugin-command": "1.4.0", - "@felce/lowcode-plugin-designer": "1.4.0", - "@felce/lowcode-plugin-outline-pane": "1.4.0", - "@felce/lowcode-shell": "1.4.0", - "@felce/lowcode-utils": "1.4.0", - "@felce/lowcode-workspace": "1.4.0", + "@felce/lowcode-designer": "1.4.1", + "@felce/lowcode-editor-core": "1.4.1", + "@felce/lowcode-editor-skeleton": "1.4.1", + "@felce/lowcode-engine-ext": "^1.1.0", + "@felce/lowcode-plugin-command": "1.4.1", + "@felce/lowcode-plugin-designer": "1.4.1", + "@felce/lowcode-plugin-outline-pane": "1.4.1", + "@felce/lowcode-shell": "1.4.1", + "@felce/lowcode-utils": "1.4.1", + "@felce/lowcode-workspace": "1.4.1", "react": "^16.8.1", "react-dom": "^16.8.1" }, diff --git a/packages/engine/src/engine-core.ts b/packages/engine/src/engine-core.ts index 3b4f3edaab..28182c96ac 100644 --- a/packages/engine/src/engine-core.ts +++ b/packages/engine/src/engine-core.ts @@ -30,7 +30,11 @@ import { PluginPreference, IDesigner, } from '@felce/lowcode-designer'; -import { Skeleton as InnerSkeleton, registerDefaults } from '@felce/lowcode-editor-skeleton'; +import { + Skeleton as InnerSkeleton, + registerDefaults, + ISkeleton, +} from '@felce/lowcode-editor-skeleton'; import { Workspace as InnerWorkspace, Workbench as WorkSpaceWorkbench, @@ -108,10 +112,10 @@ globalContext.register(innerWorkspace, 'workspace'); const engineContext: Partial = {}; -const innerSkeleton = new InnerSkeleton(editor); +const innerSkeleton: ISkeleton = new InnerSkeleton(editor); editor.set('skeleton' as any, innerSkeleton); -const designer = new Designer({ editor, shellModelFactory }); +const designer: IDesigner = new Designer({ editor, shellModelFactory }); editor.set('designer' as any, designer); const { project: innerProject } = designer; @@ -228,27 +232,28 @@ export async function init( await destroy(); let engineOptions = null; if (isPlainObject(container)) { - engineOptions = container; + engineOptions = container as IPublicTypeEngineOptions; engineContainer = document.createElement('div'); engineContainer.id = 'engine'; document.body.appendChild(engineContainer); } else { engineOptions = options; - engineContainer = container; if (!container) { engineContainer = document.createElement('div'); engineContainer.id = 'engine'; document.body.appendChild(engineContainer); + } else { + engineContainer = container; } } - engineConfig.setEngineOptions(engineOptions as any); + engineConfig.setEngineOptions(engineOptions); const { Workbench } = common.skeletonCabin; if (options && options.enableWorkspaceMode) { const disposeFun = await pluginPromise; disposeFun && disposeFun(); render( - createElement(WorkSpaceWorkbench, { + createElement(options?.WorkSpaceWorkbench || (WorkSpaceWorkbench as any), { workspace: innerWorkspace, // skeleton: workspace.skeleton, className: 'engine-main', @@ -264,10 +269,10 @@ export async function init( return; } - await plugins.init(pluginPreference as any); + await plugins.init(pluginPreference); render( - createElement(Workbench, { + createElement(options?.Workbench || (Workbench as any), { skeleton: innerSkeleton, className: 'engine-main', topAreaItemClassName: 'engine-actionitem', diff --git a/packages/engine/src/inner-plugins/setter-registry.ts b/packages/engine/src/inner-plugins/setter-registry.ts index cdb6092d14..e2c857642d 100644 --- a/packages/engine/src/inner-plugins/setter-registry.ts +++ b/packages/engine/src/inner-plugins/setter-registry.ts @@ -6,7 +6,7 @@ export const setterRegistry = (ctx: IPublicModelPluginContext) => { init() { const { config } = ctx; if (config.get('disableDefaultSetters')) return; - const builtinSetters = require('@alilc/lowcode-engine-ext')?.setters; + const builtinSetters = require('@felce/lowcode-engine-ext')?.setters; if (builtinSetters) { ctx.setters.registerSetter(builtinSetters); } diff --git a/packages/ignitor/build.json b/packages/ignitor/build.json index 5b7ec07d65..6055d193ba 100644 --- a/packages/ignitor/build.json +++ b/packages/ignitor/build.json @@ -17,7 +17,7 @@ "@alifd/next": "var window.Next", "rax": "var window.Rax", "@felce/lowcode-engine": "var window.AliLowCodeEngine", - "@alilc/lowcode-engine-ext": "var window.AliLowCodeEngineExt", + "@felce/lowcode-engine-ext": "var window.AliLowCodeEngineExt", "moment": "var moment", "lodash": "var _" }, diff --git a/packages/ignitor/package.json b/packages/ignitor/package.json index e71de7e671..186ad28be6 100644 --- a/packages/ignitor/package.json +++ b/packages/ignitor/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-ignitor", - "version": "1.4.0", + "version": "1.4.1", "description": "点火器,bootstrap lce project", "main": "lib/index.js", "private": true, diff --git a/packages/plugin-command/package.json b/packages/plugin-command/package.json index 51bd003ae7..bfcea56483 100644 --- a/packages/plugin-command/package.json +++ b/packages/plugin-command/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-plugin-command", - "version": "1.4.0", + "version": "1.4.1", "description": "> TODO: description", "author": "liujuping ", "homepage": "https://github.com/fe-lce/lowcode-engine#readme", @@ -30,8 +30,8 @@ "url": "https://github.com/fe-lce/lowcode-engine/issues" }, "dependencies": { - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0" + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1" }, "devDependencies": { "@alib/build-scripts": "^0.1.18" diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json index 61b3298efd..348a6a1947 100644 --- a/packages/plugin-designer/package.json +++ b/packages/plugin-designer/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-plugin-designer", - "version": "1.4.0", + "version": "1.4.1", "description": "alibaba lowcode editor designer plugin", "files": [ "es", @@ -18,9 +18,9 @@ ], "author": "xiayang.xy", "dependencies": { - "@felce/lowcode-designer": "1.4.0", - "@felce/lowcode-editor-core": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-designer": "1.4.1", + "@felce/lowcode-editor-core": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "react": "^16.8.1", "react-dom": "^16.8.1" }, diff --git a/packages/plugin-designer/src/index.tsx b/packages/plugin-designer/src/index.tsx index 0183cf675b..53898ec324 100644 --- a/packages/plugin-designer/src/index.tsx +++ b/packages/plugin-designer/src/index.tsx @@ -3,14 +3,17 @@ import { Editor, engineConfig } from '@felce/lowcode-editor-core'; import { DesignerView, Designer } from '@felce/lowcode-designer'; import { Asset, getLogger } from '@felce/lowcode-utils'; import './index.scss'; +import { IPublicModelEngineConfig } from '@felce/lowcode-types'; const logger = getLogger({ level: 'warn', bizName: 'plugin:plugin-designer' }); export interface PluginProps { engineEditor: Editor; + engineConfig: IPublicModelEngineConfig; } interface DesignerPluginState { + utilsMetadata?: any[] | null; componentMetadatas?: any[] | null; library?: any[] | null; extraEnvironment?: any[] | null; diff --git a/packages/plugin-outline-pane/package.json b/packages/plugin-outline-pane/package.json index 3b57e6df1c..5998e947fe 100644 --- a/packages/plugin-outline-pane/package.json +++ b/packages/plugin-outline-pane/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-plugin-outline-pane", - "version": "1.4.0", + "version": "1.4.1", "description": "Outline pane for Ali lowCode engine", "files": [ "es", @@ -13,8 +13,8 @@ }, "dependencies": { "@alifd/next": "^1.26.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "classnames": "^2.2.6", "react": "^16", "react-dom": "^16.7.0", diff --git a/packages/react-renderer/package.json b/packages/react-renderer/package.json index ac178de6a6..3357a54421 100644 --- a/packages/react-renderer/package.json +++ b/packages/react-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-react-renderer", - "version": "1.4.0", + "version": "1.4.1", "description": "react renderer for ali lowcode engine", "main": "lib/index.js", "module": "es/index.js", @@ -22,7 +22,7 @@ ], "dependencies": { "@alifd/next": "^1.26.0", - "@felce/lowcode-renderer-core": "1.4.0" + "@felce/lowcode-renderer-core": "1.4.1" }, "devDependencies": { "@alib/build-scripts": "^0.1.18", diff --git a/packages/react-simulator-renderer/build.umd.json b/packages/react-simulator-renderer/build.umd.json index 1052bb0765..ff20a23782 100644 --- a/packages/react-simulator-renderer/build.umd.json +++ b/packages/react-simulator-renderer/build.umd.json @@ -10,7 +10,7 @@ "react-dom": "var window.ReactDOM", "prop-types": "var window.PropTypes", "@alifd/next": "var Next", - "@alilc/lowcode-engine-ext": "var window.AliLowCodeEngineExt", + "@felce/lowcode-engine-ext": "var window.AliLowCodeEngineExt", "moment": "var moment", "lodash": "var _" }, diff --git a/packages/react-simulator-renderer/package.json b/packages/react-simulator-renderer/package.json index a6bd187309..daae6b8459 100644 --- a/packages/react-simulator-renderer/package.json +++ b/packages/react-simulator-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-react-simulator-renderer", - "version": "1.4.0", + "version": "1.4.1", "description": "react simulator renderer for alibaba lowcode designer", "main": "lib/index.js", "module": "es/index.js", @@ -17,10 +17,10 @@ "test:cov": "build-scripts test --config build.test.json --jest-coverage" }, "dependencies": { - "@felce/lowcode-designer": "1.4.0", - "@felce/lowcode-react-renderer": "1.4.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-designer": "1.4.1", + "@felce/lowcode-react-renderer": "1.4.1", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "classnames": "^2.2.6", "mobx": "^6.3.0", "mobx-react": "^7.2.0", diff --git a/packages/renderer-core/package.json b/packages/renderer-core/package.json index 9e0b33f1a3..45bac74aa3 100644 --- a/packages/renderer-core/package.json +++ b/packages/renderer-core/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-renderer-core", - "version": "1.4.0", + "version": "1.4.1", "description": "renderer core", "license": "MIT", "main": "lib/index.js", @@ -16,8 +16,8 @@ }, "dependencies": { "@alilc/lowcode-datasource-engine": "^1.0.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "classnames": "^2.2.6", "debug": "^4.1.1", "fetch-jsonp": "^1.1.3", @@ -33,7 +33,7 @@ "@alib/build-scripts": "^0.1.18", "@alifd/next": "^1.26.0", "@babel/plugin-transform-typescript": "^7.16.8", - "@felce/lowcode-designer": "1.4.0", + "@felce/lowcode-designer": "1.4.1", "@testing-library/react": "^11.2.2", "@types/classnames": "^2.2.11", "@types/debug": "^4.1.5", diff --git a/packages/shell/package.json b/packages/shell/package.json index 693cfaa2ec..86f42902f1 100644 --- a/packages/shell/package.json +++ b/packages/shell/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-shell", - "version": "1.4.0", + "version": "1.4.1", "description": "Shell Layer for AliLowCodeEngine", "main": "lib/index.js", "module": "es/index.js", @@ -14,12 +14,12 @@ "license": "MIT", "dependencies": { "@alifd/next": "^1.26.0", - "@felce/lowcode-designer": "1.4.0", - "@felce/lowcode-editor-core": "1.4.0", - "@felce/lowcode-editor-skeleton": "1.4.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", - "@felce/lowcode-workspace": "1.4.0", + "@felce/lowcode-designer": "1.4.1", + "@felce/lowcode-editor-core": "1.4.1", + "@felce/lowcode-editor-skeleton": "1.4.1", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", + "@felce/lowcode-workspace": "1.4.1", "classnames": "^2.2.6", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.5", diff --git a/packages/shell/src/api/common.tsx b/packages/shell/src/api/common.tsx index eee286fe5c..8647363b6c 100644 --- a/packages/shell/src/api/common.tsx +++ b/packages/shell/src/api/common.tsx @@ -59,6 +59,7 @@ import { Workbench as InnerWorkbench, SettingsPrimaryPane as InnerSettingsPrimaryPane, registerDefaults as InnerRegisterDefaults, + ISkeleton, } from '@felce/lowcode-editor-skeleton'; import { Editor, @@ -180,11 +181,11 @@ class DesignerCabin implements IPublicApiCommonDesignerCabin { } class SkeletonCabin implements IPublicApiCommonSkeletonCabin { - private readonly [skeletonSymbol]: InnerSkeleton; + private readonly [skeletonSymbol]: ISkeleton; readonly [skeletonCabinSymbol]: any; - constructor(skeleton: InnerSkeleton) { + constructor(skeleton: ISkeleton) { this[skeletonSymbol] = skeleton; this[skeletonCabinSymbol] = { Workbench: InnerWorkbench, @@ -426,11 +427,11 @@ class EditorCabin implements IPublicApiCommonEditorCabin { export class Common implements IPublicApiCommon { private readonly __designerCabin: any; - private readonly __skeletonCabin: any; + private readonly __skeletonCabin: IPublicApiCommonSkeletonCabin; private readonly __editorCabin: any; private readonly __utils: Utils; - constructor(editor: Editor, skeleton: InnerSkeleton) { + constructor(editor: Editor, skeleton: ISkeleton) { this.__designerCabin = new DesignerCabin(editor); this.__skeletonCabin = new SkeletonCabin(skeleton); this.__editorCabin = new EditorCabin(editor); @@ -459,7 +460,7 @@ export class Common implements IPublicApiCommon { return this.__designerCabin; } - get skeletonCabin(): any { + get skeletonCabin(): IPublicApiCommonSkeletonCabin { return this.__skeletonCabin; } diff --git a/packages/types/package.json b/packages/types/package.json index 1a6f8f7430..10362eb7e2 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-types", - "version": "1.4.0", + "version": "1.4.1", "description": "Types for Ali lowCode engine", "files": [ "es", diff --git a/packages/types/src/shell/api/common.ts b/packages/types/src/shell/api/common.ts index 05ef0da17f..26613b2e67 100644 --- a/packages/types/src/shell/api/common.ts +++ b/packages/types/src/shell/api/common.ts @@ -1,10 +1,12 @@ - import { Component, ReactNode } from 'react'; -import { IPublicTypeI18nData, IPublicTypeNodeSchema, IPublicTypeTitleContent } from '../type'; +import { + IPublicTypeI18nData, + IPublicTypeNodeSchema, + IPublicTypeTitleContent, +} from '../type'; import { IPublicEnumTransitionType } from '../enum'; export interface IPublicApiCommonUtils { - /** * 是否为合法的 schema 结构 * check if data is valid NodeSchema @@ -30,9 +32,9 @@ export interface IPublicApiCommonUtils { * @returns {(IPublicTypeNodeSchema | undefined)} */ getNodeSchemaById( - schema: IPublicTypeNodeSchema, - nodeId: string, - ): IPublicTypeNodeSchema | undefined; + schema: IPublicTypeNodeSchema, + nodeId: string, + ): IPublicTypeNodeSchema | undefined; // TODO: add comments getConvertedExtraKey(key: string): string; @@ -76,16 +78,14 @@ export interface IPublicApiCommonUtils { intl(data: IPublicTypeI18nData | string, params?: object): string; } export interface IPublicApiCommonSkeletonCabin { - /** * 编辑器框架 View * get Workbench Component */ - get Workbench(): Component; + get Workbench(): ReactNode; } export interface IPublicApiCommonEditorCabin { - /** * Title 组件 * @experimental unstable API, pay extra caution when trying to use this @@ -103,11 +103,9 @@ export interface IPublicApiCommonEditorCabin { }>; } -export interface IPublicApiCommonDesignerCabin { -} +export interface IPublicApiCommonDesignerCabin {} export interface IPublicApiCommon { - get utils(): IPublicApiCommonUtils; /** diff --git a/packages/types/src/shell/model/area.ts b/packages/types/src/shell/model/area.ts new file mode 100644 index 0000000000..a736e99136 --- /dev/null +++ b/packages/types/src/shell/model/area.ts @@ -0,0 +1,8 @@ +export interface IPublicModelArea { + isEmpty(): boolean; + add(config: T | C): T; + remove(config: T | string): number; + setVisible(flag: boolean): void; + hide(): void; + show(): void; +} diff --git a/packages/types/src/shell/model/drag-object.ts b/packages/types/src/shell/model/drag-object.ts index 92d92eca35..0ca749b5e9 100644 --- a/packages/types/src/shell/model/drag-object.ts +++ b/packages/types/src/shell/model/drag-object.ts @@ -2,10 +2,10 @@ import { IPublicEnumDragObjectType } from '../enum'; import { IPublicTypeNodeSchema } from '../type'; import { IPublicModelNode } from './node'; -export class IPublicModelDragObject { +export class IPublicModelDragObject { type: IPublicEnumDragObjectType.Node | IPublicEnumDragObjectType.NodeData; data: IPublicTypeNodeSchema | IPublicTypeNodeSchema[] | null; - nodes: (IPublicModelNode | null)[] | null; + nodes: (Node | null)[] | null; } diff --git a/packages/types/src/shell/model/dragon.ts b/packages/types/src/shell/model/dragon.ts index 917149faf3..4eadde52a2 100644 --- a/packages/types/src/shell/model/dragon.ts +++ b/packages/types/src/shell/model/dragon.ts @@ -1,12 +1,15 @@ /* eslint-disable max-len */ -import { IPublicTypeDisposable, IPublicTypeDragNodeDataObject, IPublicTypeDragObject } from '../type'; -import { IPublicModelDragObject, IPublicModelLocateEvent, IPublicModelNode } from './'; +import { IPublicTypeDisposable, IPublicTypeDragObject } from '../type'; +import { + IPublicModelDragObject, + IPublicModelLocateEvent, + IPublicModelNode, +} from './'; export interface IPublicModelDragon< Node = IPublicModelNode, - LocateEvent = IPublicModelLocateEvent + LocateEvent = IPublicModelLocateEvent, > { - /** * 是否正在拖动 * is dragging or not @@ -35,7 +38,12 @@ export interface IPublicModelDragon< * @param func * @returns */ - onDragend(func: (o: { dragObject: IPublicModelDragObject; copy?: boolean }) => any): IPublicTypeDisposable; + onDragend( + func: (o: { + dragObject: IPublicModelDragObject; + copy?: boolean; + }) => any, + ): IPublicTypeDisposable; /** * 设置拖拽监听的区域 shell,以及自定义拖拽转换函数 boost @@ -45,7 +53,10 @@ export interface IPublicModelDragon< * @param shell 拖拽监听的区域 * @param boost 拖拽转换函数 */ - from(shell: Element, boost: (e: MouseEvent) => IPublicTypeDragNodeDataObject | null): any; + from( + shell: Element, + boost: (e: MouseEvent) => IPublicModelDragObject | null, + ): any; /** * 发射拖拽对象 @@ -54,7 +65,11 @@ export interface IPublicModelDragon< * @param dragObject 拖拽对象 * @param boostEvent 拖拽初始时事件 */ - boost(dragObject: IPublicTypeDragObject, boostEvent: MouseEvent | DragEvent, fromRglNode?: Node): void; + boost( + dragObject: IPublicTypeDragObject, + boostEvent: MouseEvent | DragEvent, + fromRglNode?: Node, + ): void; /** * 添加投放感应区 diff --git a/packages/types/src/shell/model/index.ts b/packages/types/src/shell/model/index.ts index ffe6347ac2..6fe6b96679 100644 --- a/packages/types/src/shell/model/index.ts +++ b/packages/types/src/shell/model/index.ts @@ -33,3 +33,5 @@ export * from './setting-field'; export * from './editor-view'; export * from './skeleton-item'; export * from './simulator-render'; +export * from './area'; +export * from './widget'; diff --git a/packages/types/src/shell/model/widget.ts b/packages/types/src/shell/model/widget.ts new file mode 100644 index 0000000000..0446e7698a --- /dev/null +++ b/packages/types/src/shell/model/widget.ts @@ -0,0 +1,23 @@ +import { ISkeleton } from '@felce/lowcode-editor-skeleton'; +import { ReactNode } from 'react'; +import { IPublicTypeWidgetBaseConfig } from '../type'; + +export interface IPublicModelWidget { + readonly name: string; + readonly content: ReactNode; + readonly align?: string; + readonly isWidget: true; + readonly visible: boolean; + readonly disabled?: boolean; + readonly body: ReactNode; + readonly skeleton: ISkeleton; + readonly config: IPublicTypeWidgetBaseConfig; + + getName(): string; + getContent(): any; + show(): void; + hide(): void; + toggle(): void; + enable?(): void; + disable?(): void; +} diff --git a/packages/types/src/shell/type/engine-options.ts b/packages/types/src/shell/type/engine-options.ts index 8221c4089c..39b180bad5 100644 --- a/packages/types/src/shell/type/engine-options.ts +++ b/packages/types/src/shell/type/engine-options.ts @@ -1,8 +1,7 @@ import { RequestHandlersMap } from '@alilc/lowcode-datasource-types'; -import { ComponentType } from 'react'; +import { ComponentType, ReactNode } from 'react'; export interface IPublicTypeEngineOptions { - /** * 是否开启 condition 的能力,默认在设计器中不管 condition 是啥都正常展示 * when this is true, node that configured as conditional not renderring @@ -75,7 +74,10 @@ export interface IPublicTypeEngineOptions { /** * 定制画布中点击被忽略的 selectors,默认值:undefined */ - customizeIgnoreSelectors?: (defaultIgnoreSelectors: string[], e: MouseEvent) => string[]; + customizeIgnoreSelectors?: ( + defaultIgnoreSelectors: string[], + e: MouseEvent, + ) => string[]; /** * 禁止默认的设置面板,默认值:false @@ -137,7 +139,6 @@ export interface IPublicTypeEngineOptions { * 与 react-renderer 的 appHelper 一致,https://lowcode-engine.cn/site/docs/guide/expand/runtime/renderer#apphelper */ appHelper?: { - /** 全局公共函数 */ utils?: Record; @@ -189,11 +190,19 @@ export interface IPublicTypeEngineOptions { * 隐藏设计器辅助层 */ hideComponentAction?: boolean; + + /** + * 自定义的 WorkSpaceWorkbench + */ + WorkSpaceWorkbench?: ReactNode; + + /** + * 自定义的 Workbench + */ + Workbench?: ReactNode; } /** * @deprecated use IPublicTypeEngineOptions instead */ -export interface EngineOptions { - -} \ No newline at end of file +export interface EngineOptions {} diff --git a/packages/utils/package.json b/packages/utils/package.json index abf50b017c..51b5b2efc9 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-utils", - "version": "1.4.0", + "version": "1.4.1", "description": "Utils for Ali lowCode engine", "files": [ "lib", @@ -14,7 +14,7 @@ }, "dependencies": { "@alifd/next": "^1.26.0", - "@felce/lowcode-types": "1.4.0", + "@felce/lowcode-types": "1.4.1", "events": "^3.3.0", "lodash": "^4.17.21", "mobx": "^6.3.0", diff --git a/packages/utils/src/is-plain-object.ts b/packages/utils/src/is-plain-object.ts index 17bc6266f1..acca4bc207 100644 --- a/packages/utils/src/is-plain-object.ts +++ b/packages/utils/src/is-plain-object.ts @@ -1,6 +1,6 @@ import { isObject } from './is-object'; -export function isPlainObject(value: any): value is any { +export function isPlainObject(value: any): value is Record { if (!isObject(value)) { return false; } diff --git a/packages/workspace/package.json b/packages/workspace/package.json index 0383c958bc..cfb8514c19 100644 --- a/packages/workspace/package.json +++ b/packages/workspace/package.json @@ -1,6 +1,6 @@ { "name": "@felce/lowcode-workspace", - "version": "1.4.0", + "version": "1.4.1", "description": "Shell Layer for AliLowCodeEngine", "main": "lib/index.js", "module": "es/index.js", @@ -15,11 +15,11 @@ }, "license": "MIT", "dependencies": { - "@felce/lowcode-designer": "1.4.0", - "@felce/lowcode-editor-core": "1.4.0", - "@felce/lowcode-editor-skeleton": "1.4.0", - "@felce/lowcode-types": "1.4.0", - "@felce/lowcode-utils": "1.4.0", + "@felce/lowcode-designer": "1.4.1", + "@felce/lowcode-editor-core": "1.4.1", + "@felce/lowcode-editor-skeleton": "1.4.1", + "@felce/lowcode-types": "1.4.1", + "@felce/lowcode-utils": "1.4.1", "classnames": "^2.2.6", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.5", diff --git a/packages/workspace/src/workspace.ts b/packages/workspace/src/workspace.ts index f229cbab67..27a4e26401 100644 --- a/packages/workspace/src/workspace.ts +++ b/packages/workspace/src/workspace.ts @@ -37,7 +37,7 @@ const CHANGE_EVENT = 'resource.list.change'; export interface IWorkspace extends Omit< - IPublicApiWorkspace, + IPublicApiWorkspace, 'resourceList' | 'plugins' | 'openEditorWindow' | 'removeEditorWindow' > { readonly registryInnerPlugin: (