diff --git a/packages/editor-framework/demo/usage.md b/packages/editor-framework/demo/usage.md
index 819d1ac15..9f19eae0b 100644
--- a/packages/editor-framework/demo/usage.md
+++ b/packages/editor-framework/demo/usage.md
@@ -8,13 +8,11 @@ order: 1
````jsx
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
-import Demo from 'editor-framework';
class App extends Component {
render() {
return (
-
);
}
diff --git a/packages/editor-framework/es/context.d.ts b/packages/editor-framework/es/context.d.ts
new file mode 100644
index 000000000..7836d2580
--- /dev/null
+++ b/packages/editor-framework/es/context.d.ts
@@ -0,0 +1,3 @@
+///
+declare const context: import("react").Context<{}>;
+export default context;
diff --git a/packages/editor-framework/es/context.js b/packages/editor-framework/es/context.js
new file mode 100644
index 000000000..450ae72fb
--- /dev/null
+++ b/packages/editor-framework/es/context.js
@@ -0,0 +1,3 @@
+import { createContext } from 'react';
+var context = createContext({});
+export default context;
\ No newline at end of file
diff --git a/packages/editor-framework/es/index.d.ts b/packages/editor-framework/es/index.d.ts
deleted file mode 100644
index ceb2fe364..000000000
--- a/packages/editor-framework/es/index.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-///
-declare function TSDemo(props: any): JSX.Element;
-declare namespace TSDemo {
- var propTypes: {};
- var defaultProps: {};
-}
-export default TSDemo;
diff --git a/packages/editor-framework/es/index.js b/packages/editor-framework/es/index.js
deleted file mode 100644
index 9ea3ef8aa..000000000
--- a/packages/editor-framework/es/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import _extends from "@babel/runtime/helpers/extends";
-import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
-import * as React from 'react';
-export default function TSDemo(props) {
- var type = props.type,
- others = _objectWithoutPropertiesLoose(props, ["type"]);
-
- return React.createElement("div", _extends({
- className: "TSDemo"
- }, others), "Hello TSDemo");
-}
-TSDemo.propTypes = {};
-TSDemo.defaultProps = {};
\ No newline at end of file
diff --git a/packages/editor-framework/es/index.scss b/packages/editor-framework/es/index.scss
deleted file mode 100644
index 3a0f72cfb..000000000
--- a/packages/editor-framework/es/index.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-/* write style here */
-.TSDemo {
-
-}
diff --git a/packages/editor-framework/es/style.js b/packages/editor-framework/es/style.js
deleted file mode 100644
index bf3c23acb..000000000
--- a/packages/editor-framework/es/style.js
+++ /dev/null
@@ -1 +0,0 @@
-import './index.scss';
\ No newline at end of file
diff --git a/packages/editor-framework/package.json b/packages/editor-framework/package.json
index ebcbe65db..2b11f2c53 100644
--- a/packages/editor-framework/package.json
+++ b/packages/editor-framework/package.json
@@ -28,7 +28,8 @@
"events": "^3.1.0",
"intl-messageformat": "^7.8.4",
"lodash": "^4.17.15",
- "prop-types": "^15.5.8"
+ "prop-types": "^15.5.8",
+ "store": "^2.0.12"
},
"devDependencies": {
"@alib/build-scripts": "^0.1.3",
diff --git a/packages/editor-framework/src/editor.ts b/packages/editor-framework/src/editor.ts
index daeeb2182..b3328df2d 100644
--- a/packages/editor-framework/src/editor.ts
+++ b/packages/editor-framework/src/editor.ts
@@ -1,7 +1,46 @@
import EventEmitter from 'events';
import Debug from 'debug';
-let instance = null;
+import store from 'store';
+import {
+ unRegistShortCuts,
+ registShortCuts,
+ transformToPromise,
+ generateI18n
+} from './utils';
+
+// 根据url参数设置debug选项
+const res = /_?debug=(.*?)(&|$)/.exec(location.search);
+if (res && res[1]) {
+ window.__isDebug = true;
+ store.storage.write('debug', res[1] === 'true' ? '*' : res[1]);
+} else {
+ window.__isDebug = false;
+ store.remove('debug');
+}
+
+//重要,用于矫正画布执行new Function的window对象上下文
+window.__newFunc = funContext => {
+ return new Function(funContext);
+};
+
+//关闭浏览器前提醒,只有产生过交互才会生效
+window.onbeforeunload = function(e) {
+ e = e || window.event;
+ // 本地调试不生效
+ if (location.href.indexOf('localhost') > 0) return;
+ var msg = '您确定要离开此页面吗?';
+ e.cancelBubble = true;
+ e.returnValue = msg;
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ return msg;
+};
+
+
+let instance = null;
const debug = Debug('editor');
EventEmitter.defaultMaxListeners = 100;
@@ -9,7 +48,7 @@ export interface editor {
};
-export class Editor extends EventEmitter {
+export default class Editor extends EventEmitter {
static getInstance = () => {
if (!instance) {
instance = new Editor();
@@ -21,22 +60,62 @@ export class Editor extends EventEmitter {
super();
instance = this;
Object.assign(this, config);
+ this.init();
}
init() {
+ const {
+ hooks,
+ shortCuts,
+ lifeCycles
+ } = this.config || {};
+ this.destroy();
+ this.locale = store.get('lowcode-editor-locale') || 'zh-CN';
+ this.messages = this.messagesSet[this.locale];
+ this.i18n = generateI18n(this.locale, this.messages);
+ this.pluginStatus = this.initPluginStatus();
+ this.initHooks(hooks, appHelper);
+ appHelper.emit('editor.beforeInit');
+ const init = lifeCycles && lifeCycles.init || () => {};
+ // 用户可以通过设置extensions.init自定义初始化流程;
+ transformToPromise(init(this))
+ .then(() => {
+ // 注册快捷键
+ registShortCuts(shortCuts, this);
+ this.emit('editor.afterInit');
+ })
+ .catch(err => {
+ console.warn(err);
+ });
}
destroy() {
-
+ try {
+ const {
+ hooks = [],
+ shortCuts = [],
+ lifeCycles = {}
+ } = this.config;
+ unRegistShortCuts(shortCuts);
+ this.destroyHooks(hooks);
+ lifeCycles.destroy && lifeCycles.destroy();
+ } catch (err) {
+ console.warn(err);
+ return;
+ }
}
get(key:string):any {
return this[key];
}
- set(key, val) {
+ set(key:string|object, val:any):void {
if (typeof key === 'string') {
+ if (['init', 'destroy', 'get', 'set', 'batchOn', 'batchOff', 'batchOnce'].includes(key)) {
+ console.warning('init, destroy, get, set, batchOn, batchOff, batchOnce is private attribute');
+ return;
+ }
this[key] = val;
} else if (typeof key === 'object') {
Object.keys(key).forEach(item => {
@@ -45,18 +124,63 @@ export class Editor extends EventEmitter {
}
}
- batchOn(events, lisenter) {
+ batchOn(events:Array, lisenter:function):void {
if (!Array.isArray(events)) return;
events.forEach(event => this.on(event, lisenter));
}
- batchOnce(events, lisenter) {
+ batchOnce(events:Array, lisenter:function):void {
if (!Array.isArray(events)) return;
events.forEach(event => this.once(event, lisenter));
}
- batchOff(events, lisenter) {
+ batchOff(events:Array, lisenter:function):void {
if (!Array.isArray(events)) return;
events.forEach(event => this.off(event, lisenter));
}
+
+ //销毁hooks中的消息监听
+ private destroyHooks(hooks = []) {
+ hooks.forEach((item, idx) => {
+ if (typeof this.__hooksFuncs[idx] === 'function') {
+ this.appHelper.off(item.message, this.__hooksFuncs[idx]);
+ }
+ });
+ delete this.__hooksFuncs;
+ };
+
+ //初始化hooks中的消息监听
+ private initHooks(hooks = []) {
+ this.__hooksFuncs = hooks.map(item => {
+ const func = (...args) => {
+ item.handler(this, ...args);
+ };
+ this[item.type](item.message, func);
+ return func;
+ });
+ };
+
+
+ private initPluginStatus () {
+ const {plugins = {}} = this.config;
+ const pluginAreas = Object.keys(plugins);
+ const res = {};
+ pluginAreas.forEach(area => {
+ (plugins[area] || []).forEach(plugin => {
+ if (plugin.type === 'Divider') return;
+ const { visible, disabled, dotted } = plugin.props || {};
+ res[plugin.pluginKey] = {
+ visible: typeof visible === 'boolean' ? visible : true,
+ disabled: typeof disabled === 'boolean' ? disabled : false,
+ dotted: typeof dotted === 'boolean' ? dotted : false
+ };
+ const pluginClass = this.props.components[skeletonUtils.generateAddonCompName(addon.addonKey)];
+ // 判断如果编辑器插件有init静态方法,则在此执行init方法
+ if (pluginClass && pluginClass.init) {
+ pluginClass.init(this);
+ }
+ });
+ });
+ return res;
+ };
}
diff --git a/packages/editor-framework/src/index.ts b/packages/editor-framework/src/index.ts
index e69de29bb..aac18d138 100644
--- a/packages/editor-framework/src/index.ts
+++ b/packages/editor-framework/src/index.ts
@@ -0,0 +1,4 @@
+import Editor from './editor';
+
+
+export default Editor;
\ No newline at end of file
diff --git a/packages/editor-framework/src/utils.ts b/packages/editor-framework/src/utils.ts
index 5cc738bca..d09c4929c 100644
--- a/packages/editor-framework/src/utils.ts
+++ b/packages/editor-framework/src/utils.ts
@@ -72,4 +72,146 @@ export function getEnv() {
const isTheia = window.is_theia === true;
if (isTheia) return ENV.WEBIDE;
return ENV.WEB;
+}
+
+// 注册快捷键
+export function registShortCuts(config, editor) {
+ const keyboardFilter = (keymaster.filter = event => {
+ let eTarget = event.target || event.srcElement;
+ let tagName = eTarget.tagName;
+ let isInput = !!(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');
+ let isContenteditable = !!eTarget.getAttribute('contenteditable');
+ if (isInput || isContenteditable) {
+ if (event.metaKey === true && [70, 83].includes(event.keyCode)) event.preventDefault(); //禁止触发chrome原生的页面保存或查找
+ return false;
+ } else {
+ return true;
+ }
+ });
+
+ const ideMessage = appHelper.utils && appHelper.utils.ideMessage;
+
+ //复制
+ if (!document.copyListener) {
+ document.copyListener = e => {
+ if (!keyboardFilter(e) || appHelper.isCopying) return;
+ const schema = appHelper.schemaHelper && appHelper.schemaHelper.schemaMap[appHelper.activeKey];
+ if (!schema || !isSchema(schema)) return;
+ appHelper.isCopying = true;
+ const schemaStr = serialize(transformSchemaToPure(schema), {
+ unsafe: true
+ });
+ setClipboardData(schemaStr)
+ .then(() => {
+ ideMessage && ideMessage('success', '当前内容已复制到剪贴板,请使用快捷键Command+v进行粘贴');
+ appHelper.emit('schema.copy', schemaStr, schema);
+ appHelper.isCopying = false;
+ })
+ .catch(errMsg => {
+ ideMessage && ideMessage('error', errMsg);
+ appHelper.isCopying = false;
+ });
+ };
+ document.addEventListener('copy', document.copyListener);
+ if (window.parent.vscode) {
+ keymaster('command+c', document.copyListener);
+ }
+ }
+
+ //粘贴
+ if (!document.pasteListener) {
+ const doPaste = (e, text) => {
+ if (!keyboardFilter(e) || appHelper.isPasting) return;
+ const schemaHelper = appHelper.schemaHelper;
+ let targetKey = appHelper.activeKey;
+ let direction = 'after';
+ const topKey = schemaHelper.schema && schemaHelper.schema.__ctx && schemaHelper.schema.__ctx.lunaKey;
+ if (!targetKey || topKey === targetKey) {
+ const schemaHelper = appHelper.schemaHelper;
+ const topKey = schemaHelper.schema && schemaHelper.schema.__ctx && schemaHelper.schema.__ctx.lunaKey;
+ if (!topKey) return;
+ targetKey = topKey;
+ direction = 'in';
+ }
+ appHelper.isPasting = true;
+ const schema = parseObj(text);
+ if (!isSchema(schema)) {
+ appHelper.emit('illegalSchema.paste', text);
+ // ideMessage && ideMessage('error', '当前内容不是模型结构,不能粘贴进来!');
+ console.warn('paste schema illegal');
+ appHelper.isPasting = false;
+ return;
+ }
+ appHelper.emit('material.add', {
+ schema,
+ targetKey,
+ direction
+ });
+ appHelper.isPasting = false;
+ appHelper.emit('schema.paste', schema);
+ };
+ document.pasteListener = e => {
+ const clipboardData = e.clipboardData || window.clipboardData;
+ const text = clipboardData && clipboardData.getData('text');
+ doPaste(e, text);
+ };
+ document.addEventListener('paste', document.pasteListener);
+ if (window.parent.vscode) {
+ keymaster('command+v', e => {
+ const sendIDEMessage = window.parent.sendIDEMessage;
+ sendIDEMessage &&
+ sendIDEMessage({
+ action: 'readClipboard'
+ })
+ .then(text => {
+ doPaste(e, text);
+ })
+ .catch(err => {
+ console.warn(err);
+ });
+ });
+ }
+ }
+
+ (config || []).forEach(item => {
+ keymaster(item.keyboard, ev => {
+ ev.preventDefault();
+ item.handler(ev, appHelper, keymaster);
+ });
+ });
+}
+
+// 取消注册快捷
+export function unRegistShortCuts(config) {
+ (config || []).forEach(item => {
+ keymaster.unbind(item.keyboard);
+ });
+ if (window.parent.vscode) {
+ keymaster.unbind('command+c');
+ keymaster.unbind('command+v');
+ }
+ if (document.copyListener) {
+ document.removeEventListener('copy', document.copyListener);
+ delete document.copyListener;
+ }
+ if (document.pasteListener) {
+ document.removeEventListener('paste', document.pasteListener);
+ delete document.pasteListener;
+ }
+}
+
+// 将函数返回结果转成promise形式,如果函数有返回值则根据返回值的bool类型判断是reject还是resolve,若函数无返回值默认执行resolve
+export function transformToPromise(input) {
+ if (input instanceof Promise) return input;
+ return new Promise((resolve, reject) => {
+ if (input || input === undefined) {
+ resolve();
+ } else {
+ reject();
+ }
+ });
+}
+
+export function comboEditorConfig(defaultConfig, customConfig) {
+
}
\ No newline at end of file
diff --git a/packages/editor-skeleton/build.json b/packages/editor-skeleton/build.json
new file mode 100644
index 000000000..77627cdf9
--- /dev/null
+++ b/packages/editor-skeleton/build.json
@@ -0,0 +1,9 @@
+{
+ "plugins": [
+ "build-plugin-component",
+ "build-plugin-fusion",
+ ["build-plugin-moment-locales", {
+ "locales": ["zh-cn"]
+ }]
+ ]
+}
\ No newline at end of file
diff --git a/packages/editor-skeleton/demo/usage.md b/packages/editor-skeleton/demo/usage.md
new file mode 100644
index 000000000..9f19eae0b
--- /dev/null
+++ b/packages/editor-skeleton/demo/usage.md
@@ -0,0 +1,24 @@
+---
+title: Simple Usage
+order: 1
+---
+
+本 Demo 演示一行文字的用法。
+
+````jsx
+import React, { Component } from 'react';
+import ReactDOM from 'react-dom';
+
+class App extends Component {
+ render() {
+ return (
+
+
+ );
+ }
+}
+
+ReactDOM.render((
+
+), mountNode);
+````
diff --git a/packages/editor-skeleton/es/components/LeftIcon/index.js b/packages/editor-skeleton/es/components/LeftIcon/index.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/components/LeftIcon/index.scss b/packages/editor-skeleton/es/components/LeftIcon/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/components/LeftPlugin/index.js b/packages/editor-skeleton/es/components/LeftPlugin/index.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/components/LeftPlugin/index.scss b/packages/editor-skeleton/es/components/LeftPlugin/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/components/Panel/index.js b/packages/editor-skeleton/es/components/Panel/index.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/components/TopIcon/index.d.ts b/packages/editor-skeleton/es/components/TopIcon/index.d.ts
new file mode 100644
index 000000000..0e1aea7cb
--- /dev/null
+++ b/packages/editor-skeleton/es/components/TopIcon/index.d.ts
@@ -0,0 +1,6 @@
+///
+export interface Props {
+ name: string;
+}
+declare const Greeting: ({ name }: Props) => JSX.Element;
+export default Greeting;
diff --git a/packages/editor-skeleton/es/components/TopIcon/index.js b/packages/editor-skeleton/es/components/TopIcon/index.js
new file mode 100644
index 000000000..3a62c613d
--- /dev/null
+++ b/packages/editor-skeleton/es/components/TopIcon/index.js
@@ -0,0 +1,14 @@
+import React from 'react';
+
+var Greeting = function Greeting(_ref) {
+ var name = _ref.name;
+ return React.createElement("div", {
+ style: {
+ textAlign: 'center',
+ fontSize: '40px',
+ fontWeight: 'bold'
+ }
+ }, "Hello, ", name);
+};
+
+export default Greeting;
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/components/TopPlugin/index.js b/packages/editor-skeleton/es/components/TopPlugin/index.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/components/TopPlugin/index.scss b/packages/editor-skeleton/es/components/TopPlugin/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/config/skeleton.d.ts b/packages/editor-skeleton/es/config/skeleton.d.ts
new file mode 100644
index 000000000..67ae8a0ae
--- /dev/null
+++ b/packages/editor-skeleton/es/config/skeleton.d.ts
@@ -0,0 +1,14 @@
+declare const routerConfig: {
+ path: string;
+ component: any;
+ children: ({
+ path: string;
+ component: any;
+ redirect?: undefined;
+ } | {
+ path: string;
+ redirect: string;
+ component?: undefined;
+ })[];
+}[];
+export default routerConfig;
diff --git a/packages/editor-skeleton/es/config/skeleton.js b/packages/editor-skeleton/es/config/skeleton.js
new file mode 100644
index 000000000..8fb0727ab
--- /dev/null
+++ b/packages/editor-skeleton/es/config/skeleton.js
@@ -0,0 +1,14 @@
+import Dashboard from '@/pages/Dashboard';
+import BasicLayout from '@/layouts/BasicLayout';
+var routerConfig = [{
+ path: '/',
+ component: BasicLayout,
+ children: [{
+ path: '/dashboard',
+ component: Dashboard
+ }, {
+ path: '/',
+ redirect: '/dashboard'
+ }]
+}];
+export default routerConfig;
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/config/utils.d.ts b/packages/editor-skeleton/es/config/utils.d.ts
new file mode 100644
index 000000000..5e5bda5ab
--- /dev/null
+++ b/packages/editor-skeleton/es/config/utils.d.ts
@@ -0,0 +1,2 @@
+declare const asideMenuConfig: any[];
+export { asideMenuConfig };
diff --git a/packages/editor-skeleton/es/config/utils.js b/packages/editor-skeleton/es/config/utils.js
new file mode 100644
index 000000000..39cee308b
--- /dev/null
+++ b/packages/editor-skeleton/es/config/utils.js
@@ -0,0 +1,3 @@
+// 菜单配置
+var asideMenuConfig = [];
+export { asideMenuConfig };
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/global.scss b/packages/editor-skeleton/es/global.scss
new file mode 100644
index 000000000..68689a592
--- /dev/null
+++ b/packages/editor-skeleton/es/global.scss
@@ -0,0 +1,23 @@
+.next-loading {
+ .next-loading-wrap {
+ height: 100%;
+ }
+}
+.lowcode-editor {
+ .lowcode-main-content {
+ position: absolute;
+ top: 54px;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ display: flex;
+ }
+ .lowcode-center-area {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ background: #f7f7f7;
+ padding: 10px;
+ overflow: auto;
+ }
+}
diff --git a/packages/editor-skeleton/es/index.d.ts b/packages/editor-skeleton/es/index.d.ts
new file mode 100644
index 000000000..f07a622f4
--- /dev/null
+++ b/packages/editor-skeleton/es/index.d.ts
@@ -0,0 +1,9 @@
+///
+import { PureComponent } from 'react-dom';
+import './global.scss';
+export default class Skeleton extends PureComponent {
+ static displayName: string;
+ constructor(props: any);
+ componentWillUnmount(): void;
+ render(): JSX.Element;
+}
diff --git a/packages/editor-skeleton/es/index.js b/packages/editor-skeleton/es/index.js
new file mode 100644
index 000000000..7031d8ee9
--- /dev/null
+++ b/packages/editor-skeleton/es/index.js
@@ -0,0 +1,43 @@
+import _ConfigProvider from "@alifd/next/es/config-provider";
+import _Loading from "@alifd/next/es/loading";
+import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
+import React, { PureComponent } from 'react-dom'; // import Editor from '@ali/lowcode-engine-editor';
+
+import './global.scss';
+
+var Skeleton = /*#__PURE__*/function (_PureComponent) {
+ _inheritsLoose(Skeleton, _PureComponent);
+
+ function Skeleton(props) {
+ return _PureComponent.call(this, props) || this; // this.editor = new Editor(props.config, props.utils);
+ }
+
+ var _proto = Skeleton.prototype;
+
+ _proto.componentWillUnmount = function componentWillUnmount() {// this.editor && this.editor.destroy();
+ // this.editor = null;
+ };
+
+ _proto.render = function render() {
+ var _this$props = this.props,
+ location = _this$props.location,
+ history = _this$props.history,
+ messages = _this$props.messages;
+ return React.createElement(_ConfigProvider, {
+ locale: messages[appHelper.locale]
+ }, React.createElement(_Loading, {
+ tip: this.i18n('loading'),
+ size: "large",
+ visible: loading || !initReady,
+ shape: "fusion-reactor",
+ fullScreen: true
+ }, React.createElement("div", {
+ className: "lowcode-editor"
+ })));
+ };
+
+ return Skeleton;
+}(PureComponent);
+
+Skeleton.displayName = 'lowcodeEditorSkeleton';
+export { Skeleton as default };
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/layouts/CenterArea/index.d.ts b/packages/editor-skeleton/es/layouts/CenterArea/index.d.ts
new file mode 100644
index 000000000..201db137a
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/CenterArea/index.d.ts
@@ -0,0 +1,7 @@
+import { PureComponent } from 'react';
+import './index.scss';
+export default class CenterArea extends PureComponent {
+ static displayName: string;
+ constructor(props: any);
+ render(): JSX.Element;
+}
diff --git a/packages/editor-skeleton/es/layouts/CenterArea/index.js b/packages/editor-skeleton/es/layouts/CenterArea/index.js
new file mode 100644
index 000000000..4b9710f81
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/CenterArea/index.js
@@ -0,0 +1,24 @@
+import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
+import React, { PureComponent } from 'react';
+import './index.scss';
+
+var CenterArea = /*#__PURE__*/function (_PureComponent) {
+ _inheritsLoose(CenterArea, _PureComponent);
+
+ function CenterArea(props) {
+ return _PureComponent.call(this, props) || this;
+ }
+
+ var _proto = CenterArea.prototype;
+
+ _proto.render = function render() {
+ return React.createElement("div", {
+ className: "lowcode-center-area"
+ });
+ };
+
+ return CenterArea;
+}(PureComponent);
+
+CenterArea.displayName = 'lowcodeCenterArea';
+export { CenterArea as default };
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/layouts/CenterArea/index.scss b/packages/editor-skeleton/es/layouts/CenterArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/layouts/LeftArea/index.d.ts b/packages/editor-skeleton/es/layouts/LeftArea/index.d.ts
new file mode 100644
index 000000000..d888d90f0
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/LeftArea/index.d.ts
@@ -0,0 +1,5 @@
+declare const _default: {
+ Nav: any;
+ Panel: any;
+};
+export default _default;
diff --git a/packages/editor-skeleton/es/layouts/LeftArea/index.js b/packages/editor-skeleton/es/layouts/LeftArea/index.js
new file mode 100644
index 000000000..50ecfad2f
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/LeftArea/index.js
@@ -0,0 +1,6 @@
+import Nav from './nav';
+import Panel from './panel';
+export default {
+ Nav: Nav,
+ Panel: Panel
+};
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/layouts/LeftArea/index.scss b/packages/editor-skeleton/es/layouts/LeftArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/layouts/LeftArea/nav.d.ts b/packages/editor-skeleton/es/layouts/LeftArea/nav.d.ts
new file mode 100644
index 000000000..c44a09527
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/LeftArea/nav.d.ts
@@ -0,0 +1,7 @@
+import { PureComponent } from 'react';
+import './index.scss';
+export default class LeftAreaPanel extends PureComponent {
+ static displayName: string;
+ constructor(props: any);
+ render(): JSX.Element;
+}
diff --git a/packages/editor-skeleton/es/layouts/LeftArea/nav.js b/packages/editor-skeleton/es/layouts/LeftArea/nav.js
new file mode 100644
index 000000000..962129007
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/LeftArea/nav.js
@@ -0,0 +1,24 @@
+import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
+import React, { PureComponent } from 'react';
+import './index.scss';
+
+var LeftAreaPanel = /*#__PURE__*/function (_PureComponent) {
+ _inheritsLoose(LeftAreaPanel, _PureComponent);
+
+ function LeftAreaPanel(props) {
+ return _PureComponent.call(this, props) || this;
+ }
+
+ var _proto = LeftAreaPanel.prototype;
+
+ _proto.render = function render() {
+ return React.createElement("div", {
+ className: "lowcode-left-area-nav"
+ });
+ };
+
+ return LeftAreaPanel;
+}(PureComponent);
+
+LeftAreaPanel.displayName = 'lowcodeLeftAreaNav';
+export { LeftAreaPanel as default };
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/layouts/LeftArea/panel.d.ts b/packages/editor-skeleton/es/layouts/LeftArea/panel.d.ts
new file mode 100644
index 000000000..c44a09527
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/LeftArea/panel.d.ts
@@ -0,0 +1,7 @@
+import { PureComponent } from 'react';
+import './index.scss';
+export default class LeftAreaPanel extends PureComponent {
+ static displayName: string;
+ constructor(props: any);
+ render(): JSX.Element;
+}
diff --git a/packages/editor-skeleton/es/layouts/LeftArea/panel.js b/packages/editor-skeleton/es/layouts/LeftArea/panel.js
new file mode 100644
index 000000000..0120423d8
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/LeftArea/panel.js
@@ -0,0 +1,24 @@
+import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
+import React, { PureComponent } from 'react';
+import './index.scss';
+
+var LeftAreaPanel = /*#__PURE__*/function (_PureComponent) {
+ _inheritsLoose(LeftAreaPanel, _PureComponent);
+
+ function LeftAreaPanel(props) {
+ return _PureComponent.call(this, props) || this;
+ }
+
+ var _proto = LeftAreaPanel.prototype;
+
+ _proto.render = function render() {
+ return React.createElement("div", {
+ className: "lowcode-left-area"
+ });
+ };
+
+ return LeftAreaPanel;
+}(PureComponent);
+
+LeftAreaPanel.displayName = 'lowcodeLeftAreaPanel';
+export { LeftAreaPanel as default };
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/layouts/RightArea/index.d.ts b/packages/editor-skeleton/es/layouts/RightArea/index.d.ts
new file mode 100644
index 000000000..ad87a57de
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/RightArea/index.d.ts
@@ -0,0 +1,7 @@
+import { PureComponent } from 'react';
+import './index.scss';
+export default class RightArea extends PureComponent {
+ static displayName: string;
+ constructor(props: any);
+ render(): JSX.Element;
+}
diff --git a/packages/editor-skeleton/es/layouts/RightArea/index.js b/packages/editor-skeleton/es/layouts/RightArea/index.js
new file mode 100644
index 000000000..d1d38689d
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/RightArea/index.js
@@ -0,0 +1,24 @@
+import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
+import React, { PureComponent } from 'react';
+import './index.scss';
+
+var RightArea = /*#__PURE__*/function (_PureComponent) {
+ _inheritsLoose(RightArea, _PureComponent);
+
+ function RightArea(props) {
+ return _PureComponent.call(this, props) || this;
+ }
+
+ var _proto = RightArea.prototype;
+
+ _proto.render = function render() {
+ return React.createElement("div", {
+ className: "lowcode-right-area"
+ });
+ };
+
+ return RightArea;
+}(PureComponent);
+
+RightArea.displayName = 'lowcodeRightArea';
+export { RightArea as default };
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/layouts/RightArea/index.scss b/packages/editor-skeleton/es/layouts/RightArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/layouts/TopArea/index.d.ts b/packages/editor-skeleton/es/layouts/TopArea/index.d.ts
new file mode 100644
index 000000000..716bd94a8
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/TopArea/index.d.ts
@@ -0,0 +1,7 @@
+import { PureComponent } from 'react';
+import './index.scss';
+export default class TopArea extends PureComponent {
+ static displayName: string;
+ constructor(props: any);
+ render(): JSX.Element;
+}
diff --git a/packages/editor-skeleton/es/layouts/TopArea/index.js b/packages/editor-skeleton/es/layouts/TopArea/index.js
new file mode 100644
index 000000000..39f2b2b23
--- /dev/null
+++ b/packages/editor-skeleton/es/layouts/TopArea/index.js
@@ -0,0 +1,24 @@
+import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
+import React, { PureComponent } from 'react';
+import './index.scss';
+
+var TopArea = /*#__PURE__*/function (_PureComponent) {
+ _inheritsLoose(TopArea, _PureComponent);
+
+ function TopArea(props) {
+ return _PureComponent.call(this, props) || this;
+ }
+
+ var _proto = TopArea.prototype;
+
+ _proto.render = function render() {
+ return React.createElement("div", {
+ className: "lowcode-top-area"
+ });
+ };
+
+ return TopArea;
+}(PureComponent);
+
+TopArea.displayName = 'lowcodeTopArea';
+export { TopArea as default };
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/layouts/TopArea/index.scss b/packages/editor-skeleton/es/layouts/TopArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/es/locale/en-US.js b/packages/editor-skeleton/es/locale/en-US.js
new file mode 100644
index 000000000..f190625da
--- /dev/null
+++ b/packages/editor-skeleton/es/locale/en-US.js
@@ -0,0 +1,10 @@
+export default {
+ loading: 'loading...',
+ rejectRedirect: 'Redirect is not allowed',
+ expand: 'Unfold',
+ fold: 'Fold',
+ pageNotExist: 'The current Page not exist',
+ enterFromAppCenter: 'Please enter from the app center',
+ noPermission: 'Sorry, you do not have the develop permission',
+ getPermission: 'Please connect the app owners {owners} to get the permission'
+};
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/locale/ja-JP.js b/packages/editor-skeleton/es/locale/ja-JP.js
new file mode 100644
index 000000000..7c645e42f
--- /dev/null
+++ b/packages/editor-skeleton/es/locale/ja-JP.js
@@ -0,0 +1 @@
+export default {};
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/locale/zh-CN.js b/packages/editor-skeleton/es/locale/zh-CN.js
new file mode 100644
index 000000000..51791f741
--- /dev/null
+++ b/packages/editor-skeleton/es/locale/zh-CN.js
@@ -0,0 +1,10 @@
+export default {
+ loading: '加载中...',
+ rejectRedirect: '开发中,已阻止发生跳转',
+ expand: '展开',
+ fold: '收起',
+ pageNotExist: '当前访问地址不存在',
+ enterFromAppCenter: '请从应用中心入口重新进入',
+ noPermission: '抱歉,您暂无开发权限',
+ getPermission: '请移步应用中心申请开发权限, 或联系 {owners} 开通权限'
+};
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/locale/zh-TW.js b/packages/editor-skeleton/es/locale/zh-TW.js
new file mode 100644
index 000000000..7c645e42f
--- /dev/null
+++ b/packages/editor-skeleton/es/locale/zh-TW.js
@@ -0,0 +1 @@
+export default {};
\ No newline at end of file
diff --git a/packages/editor-skeleton/es/style.js b/packages/editor-skeleton/es/style.js
new file mode 100644
index 000000000..ba2702ef4
--- /dev/null
+++ b/packages/editor-skeleton/es/style.js
@@ -0,0 +1,2 @@
+import '@alifd/next/es/config-provider/style';
+import '@alifd/next/es/loading/style';
\ No newline at end of file
diff --git a/packages/editor-skeleton/package.json b/packages/editor-skeleton/package.json
index 7ada377d0..9067b4544 100644
--- a/packages/editor-skeleton/package.json
+++ b/packages/editor-skeleton/package.json
@@ -15,20 +15,26 @@
"react-router-dom": "^5.0.1"
},
"devDependencies": {
+ "@alib/build-scripts": "^0.1.3",
+ "@alifd/next": "1.x",
"@ice/spec": "^0.1.1",
- "css-modules-typescript-loader": "^2.0.4",
+ "@types/lodash": "^4.14.149",
+ "@types/react": "^16.9.13",
+ "@types/react-dom": "^16.9.4",
+ "build-plugin-component": "^0.2.0",
+ "build-plugin-fusion": "^0.1.0",
+ "build-plugin-moment-locales": "^0.1.0",
"eslint": "^6.0.1",
- "ice-plugin-fusion": "^0.1.4",
- "ice-plugin-moment-locales": "^0.1.0",
- "ice-scripts": "^2.0.0",
- "stylelint": "^10.1.0"
+ "prettier": "^1.19.1",
+ "react": "^16.8.0",
+ "react-dom": "^16.8.0"
},
"scripts": {
- "start": "ice-scripts dev",
- "build": "ice-scripts build",
- "lint": "npm run eslint && npm run stylelint",
- "eslint": "eslint --cache --ext .js,.jsx ./",
- "stylelint": "stylelint ./**/*.scss"
+ "start": "build-scripts start",
+ "build": "build-scripts build",
+ "prepublishOnly": "npm run prettier && npm run build",
+ "lint": "eslint --cache --ext .js,.jsx ./",
+ "prettier": "prettier --write \"./src/**/*.{ts,tsx,js,jsx,ejs,less,css,scss,json}\" "
},
"engines": {
"node": ">=8.0.0"
@@ -43,5 +49,6 @@
"repository": {
"type": "git",
"url": "https://github.com/ice-lab/react-materials/tree/master/scaffolds/ice-ts"
- }
+ },
+ "homepage": "https://unpkg.alibaba-inc.com/@ali/lowcode-engine-skeleton@0.0.1/build/index.html"
}
diff --git a/packages/editor-skeleton/src/components/Guide/index.module.scss b/packages/editor-skeleton/src/components/Guide/index.module.scss
deleted file mode 100644
index eeb4e21aa..000000000
--- a/packages/editor-skeleton/src/components/Guide/index.module.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-.item {
- height: 34px;
- line-height: 34px;
-}
-.title {
- text-align: center;
-}
-.container {
- width: 470px;
- margin: 40px auto;
-}
\ No newline at end of file
diff --git a/packages/editor-skeleton/src/components/Guide/index.tsx b/packages/editor-skeleton/src/components/Guide/index.tsx
deleted file mode 100644
index 9a07b5789..000000000
--- a/packages/editor-skeleton/src/components/Guide/index.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import React from 'react';
-import { Button } from '@alifd/next';
-import styles from './index.module.scss';
-
-const Guide = () => {
- return (
-
-
使用指南
-
- -
- 1. 该模板适用于从 0 到 1 开始搭建项目,内置引导页面,路由和菜单展示。
-
- - 2. 菜单配置: menuConfig.js。
- - 3. 路由配置: routerConfig.js。
- -
- 4. 通过 GUI 工具{' '}
-
- Iceworks
- {' '}
- 创建页面,会同步的更新菜单和路由配置。
-
- -
- 5. 基于{' '}
-
- 物料
- {' '}
- 生成的页面将会添加在 pages 目录。
-
- -
- 6. 让前端工程变的轻松便捷,
-
- 下载 iceworks
- {' '}
- 。
-
-
-
-
- );
-};
-
-export default Guide;
diff --git a/packages/editor-skeleton/src/components/LeftIcon/index.scss b/packages/editor-skeleton/src/components/LeftIcon/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/components/LeftIcon/index.tsx b/packages/editor-skeleton/src/components/LeftIcon/index.tsx
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/components/LeftPlugin/index.scss b/packages/editor-skeleton/src/components/LeftPlugin/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/components/LeftPlugin/index.tsx b/packages/editor-skeleton/src/components/LeftPlugin/index.tsx
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/components/Panel/index.tsx b/packages/editor-skeleton/src/components/Panel/index.tsx
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/components/Greeting/index.tsx b/packages/editor-skeleton/src/components/TopIcon/index.tsx
similarity index 100%
rename from packages/editor-skeleton/src/components/Greeting/index.tsx
rename to packages/editor-skeleton/src/components/TopIcon/index.tsx
diff --git a/packages/editor-skeleton/src/components/TopPlugin/index.scss b/packages/editor-skeleton/src/components/TopPlugin/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/components/TopPlugin/index.tsx b/packages/editor-skeleton/src/components/TopPlugin/index.tsx
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/config/routes.ts b/packages/editor-skeleton/src/config/skeleton.ts
similarity index 100%
rename from packages/editor-skeleton/src/config/routes.ts
rename to packages/editor-skeleton/src/config/skeleton.ts
diff --git a/packages/editor-skeleton/src/config/menu.ts b/packages/editor-skeleton/src/config/utils.ts
similarity index 100%
rename from packages/editor-skeleton/src/config/menu.ts
rename to packages/editor-skeleton/src/config/utils.ts
diff --git a/packages/editor-skeleton/src/global.scss b/packages/editor-skeleton/src/global.scss
index 6086b53a6..68689a592 100644
--- a/packages/editor-skeleton/src/global.scss
+++ b/packages/editor-skeleton/src/global.scss
@@ -1,6 +1,23 @@
-// 引入默认全局样式
-@import '@alifd/next/reset.scss';
-
-body {
- -webkit-font-smoothing: antialiased;
-}
\ No newline at end of file
+.next-loading {
+ .next-loading-wrap {
+ height: 100%;
+ }
+}
+.lowcode-editor {
+ .lowcode-main-content {
+ position: absolute;
+ top: 54px;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ display: flex;
+ }
+ .lowcode-center-area {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ background: #f7f7f7;
+ padding: 10px;
+ overflow: auto;
+ }
+}
diff --git a/packages/editor-skeleton/src/index.tsx b/packages/editor-skeleton/src/index.tsx
index ba347d027..2a9643b69 100644
--- a/packages/editor-skeleton/src/index.tsx
+++ b/packages/editor-skeleton/src/index.tsx
@@ -1,13 +1,52 @@
-import ReactDOM from 'react-dom';
+import React, {PureComponent} from 'react-dom';
+
+// import Editor from '@ali/lowcode-engine-editor';
+import { Loading, ConfigProvider } from '@alifd/next';
+import defaultConfig from './config/skeleton';
+
+import TopArea from './layouts/TopArea';
+import LeftArea from './layouts/LeftArea';
+import CenterArea from './layouts/CenterArea';
+import RightArea from './layouts/RightArea';
import './global.scss';
-import router from './router';
+export default class Skeleton extends PureComponent {
+ static displayName = 'lowcodeEditorSkeleton';
-const ICE_CONTAINER = document.getElementById('ice-container');
+ constructor(props) {
+ super(props);
+ // this.editor = new Editor(props.config, props.utils);
+ }
-if (!ICE_CONTAINER) {
- throw new Error('当前页面不存在 节点.');
+ componentWillUnmount() {
+ // this.editor && this.editor.destroy();
+ // this.editor = null;
+ }
+
+ render() {
+ const { location, history, messages } = this.props;
+
+ return (
+
+
+
+
+
+ );
+ }
}
-
-ReactDOM.render(router(), ICE_CONTAINER);
diff --git a/packages/editor-skeleton/src/layouts/BasicLayout/index.tsx b/packages/editor-skeleton/src/layouts/BasicLayout/index.tsx
deleted file mode 100644
index b45f3c44e..000000000
--- a/packages/editor-skeleton/src/layouts/BasicLayout/index.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import React from 'react';
-
-export default function BasicLayout({ children }) {
- return (
-
- {children}
-
- );
-}
diff --git a/packages/editor-skeleton/src/layouts/CenterArea/index.scss b/packages/editor-skeleton/src/layouts/CenterArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/layouts/CenterArea/index.tsx b/packages/editor-skeleton/src/layouts/CenterArea/index.tsx
new file mode 100644
index 000000000..36263969c
--- /dev/null
+++ b/packages/editor-skeleton/src/layouts/CenterArea/index.tsx
@@ -0,0 +1,17 @@
+import React, {PureComponent} from 'react';
+
+import './index.scss';
+
+export default class CenterArea extends PureComponent {
+ static displayName = 'lowcodeCenterArea';
+
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/packages/editor-skeleton/src/layouts/LeftArea/index.scss b/packages/editor-skeleton/src/layouts/LeftArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/layouts/LeftArea/index.tsx b/packages/editor-skeleton/src/layouts/LeftArea/index.tsx
new file mode 100644
index 000000000..f77a9b830
--- /dev/null
+++ b/packages/editor-skeleton/src/layouts/LeftArea/index.tsx
@@ -0,0 +1,7 @@
+import Nav from './nav';
+import Panel from './panel';
+
+export default {
+ Nav,
+ Panel
+};
\ No newline at end of file
diff --git a/packages/editor-skeleton/src/layouts/LeftArea/nav.tsx b/packages/editor-skeleton/src/layouts/LeftArea/nav.tsx
new file mode 100644
index 000000000..5c1fbea92
--- /dev/null
+++ b/packages/editor-skeleton/src/layouts/LeftArea/nav.tsx
@@ -0,0 +1,17 @@
+import React, {PureComponent} from 'react';
+
+import './index.scss';
+
+export default class LeftAreaPanel extends PureComponent {
+ static displayName = 'lowcodeLeftAreaNav';
+
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/packages/editor-skeleton/src/layouts/LeftArea/panel.tsx b/packages/editor-skeleton/src/layouts/LeftArea/panel.tsx
new file mode 100644
index 000000000..c378ad929
--- /dev/null
+++ b/packages/editor-skeleton/src/layouts/LeftArea/panel.tsx
@@ -0,0 +1,17 @@
+import React, {PureComponent} from 'react';
+
+import './index.scss';
+
+export default class LeftAreaPanel extends PureComponent {
+ static displayName = 'lowcodeLeftAreaPanel';
+
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/packages/editor-skeleton/src/layouts/RightArea/index.scss b/packages/editor-skeleton/src/layouts/RightArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/layouts/RightArea/index.tsx b/packages/editor-skeleton/src/layouts/RightArea/index.tsx
new file mode 100644
index 000000000..449a273e5
--- /dev/null
+++ b/packages/editor-skeleton/src/layouts/RightArea/index.tsx
@@ -0,0 +1,17 @@
+import React, {PureComponent} from 'react';
+
+import './index.scss';
+
+export default class RightArea extends PureComponent {
+ static displayName = 'lowcodeRightArea';
+
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/packages/editor-skeleton/src/layouts/TopArea/index.scss b/packages/editor-skeleton/src/layouts/TopArea/index.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor-skeleton/src/layouts/TopArea/index.tsx b/packages/editor-skeleton/src/layouts/TopArea/index.tsx
new file mode 100644
index 000000000..3bc7e3562
--- /dev/null
+++ b/packages/editor-skeleton/src/layouts/TopArea/index.tsx
@@ -0,0 +1,17 @@
+import React, {PureComponent} from 'react';
+
+import './index.scss';
+
+export default class TopArea extends PureComponent {
+ static displayName = 'lowcodeTopArea';
+
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/packages/editor-skeleton/src/locale/en-US.js b/packages/editor-skeleton/src/locale/en-US.js
new file mode 100644
index 000000000..936701e33
--- /dev/null
+++ b/packages/editor-skeleton/src/locale/en-US.js
@@ -0,0 +1,10 @@
+export default {
+ loading: 'loading...',
+ rejectRedirect: 'Redirect is not allowed',
+ expand: 'Unfold',
+ fold: 'Fold',
+ pageNotExist: 'The current Page not exist',
+ enterFromAppCenter: 'Please enter from the app center',
+ noPermission: 'Sorry, you do not have the develop permission',
+ getPermission: 'Please connect the app owners {owners} to get the permission'
+};
diff --git a/packages/editor-skeleton/src/locale/ja-JP.js b/packages/editor-skeleton/src/locale/ja-JP.js
new file mode 100644
index 000000000..ff8b4c563
--- /dev/null
+++ b/packages/editor-skeleton/src/locale/ja-JP.js
@@ -0,0 +1 @@
+export default {};
diff --git a/packages/editor-skeleton/src/locale/zh-CN.js b/packages/editor-skeleton/src/locale/zh-CN.js
new file mode 100644
index 000000000..efe4ea898
--- /dev/null
+++ b/packages/editor-skeleton/src/locale/zh-CN.js
@@ -0,0 +1,10 @@
+export default {
+ loading: '加载中...',
+ rejectRedirect: '开发中,已阻止发生跳转',
+ expand: '展开',
+ fold: '收起',
+ pageNotExist: '当前访问地址不存在',
+ enterFromAppCenter: '请从应用中心入口重新进入',
+ noPermission: '抱歉,您暂无开发权限',
+ getPermission: '请移步应用中心申请开发权限, 或联系 {owners} 开通权限'
+};
diff --git a/packages/editor-skeleton/src/locale/zh-TW.js b/packages/editor-skeleton/src/locale/zh-TW.js
new file mode 100644
index 000000000..ff8b4c563
--- /dev/null
+++ b/packages/editor-skeleton/src/locale/zh-TW.js
@@ -0,0 +1 @@
+export default {};
diff --git a/packages/editor-skeleton/src/pages/Dashboard/index.tsx b/packages/editor-skeleton/src/pages/Dashboard/index.tsx
deleted file mode 100644
index 2130cc8ce..000000000
--- a/packages/editor-skeleton/src/pages/Dashboard/index.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import React from 'react';
-import Guide from '@/components/Guide';
-import Greeting from '@/components/Greeting';
-
-export default function Dashboard() {
- return (
-
-
-
-
- );
-}
diff --git a/packages/editor-skeleton/src/router.tsx b/packages/editor-skeleton/src/router.tsx
deleted file mode 100644
index e260e72c8..000000000
--- a/packages/editor-skeleton/src/router.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import React from 'react';
-import { HashRouter as Router, Switch, Route, Redirect } from 'react-router-dom';
-import path from 'path';
-import routes from '@/config/routes';
-
-const RouteItem = (props) => {
- const { redirect, path: routePath, component, key } = props;
- if (redirect) {
- return (
-
- );
- }
- return (
-
- );
-};
-
-const router = () => {
- return (
-
-
- {routes.map((route, id) => {
- const { component: RouteComponent, children, ...others } = route;
- return (
- {
- return (
- children ? (
-
-
- {children.map((routeChild, idx) => {
- const { redirect, path: childPath, component } = routeChild;
- return RouteItem({
- key: `${id}-${idx}`,
- redirect,
- path: childPath && path.join(route.path, childPath),
- component,
- });
- })}
-
-
- ) : (
- <>
- {
- RouteItem({
- key: id,
- ...route,
- })
- }
- >
- )
- );
- }}
- />
- );
- })}
-
-
- );
-};
-
-export default router;
diff --git a/packages/editor-skeleton/tsconfig.json b/packages/editor-skeleton/tsconfig.json
index 3f5e62810..a511d68ba 100644
--- a/packages/editor-skeleton/tsconfig.json
+++ b/packages/editor-skeleton/tsconfig.json
@@ -2,30 +2,20 @@
"compileOnSave": false,
"buildOnSave": false,
"compilerOptions": {
- "baseUrl": ".",
"outDir": "build",
"module": "esnext",
"target": "es6",
"jsx": "react",
"moduleResolution": "node",
- "allowSyntheticDefaultImports": true,
"lib": ["es6", "dom"],
"sourceMap": true,
"allowJs": true,
- "rootDir": "src",
- "forceConsistentCasingInFileNames": true,
+ "noUnusedLocals": true,
"noImplicitReturns": true,
"noImplicitThis": true,
- "noImplicitAny": false,
- "importHelpers": true,
- "strictNullChecks": true,
- "suppressImplicitAnyIndexErrors": true,
- "noUnusedLocals": true,
- "skipLibCheck": true,
- "paths": {
- "@/*": ["./src/*"]
- }
+ "noImplicitAny": true,
+ "skipLibCheck": true
},
- "include": ["src/*"],
+ "include": ["src/*.ts", "src/*.tsx"],
"exclude": ["node_modules", "build", "public"]
}
diff --git a/packages/editor/.editorconfig b/packages/editor/.editorconfig
new file mode 100644
index 000000000..5760be583
--- /dev/null
+++ b/packages/editor/.editorconfig
@@ -0,0 +1,12 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/packages/editor/.eslintignore b/packages/editor/.eslintignore
new file mode 100644
index 000000000..3b437e614
--- /dev/null
+++ b/packages/editor/.eslintignore
@@ -0,0 +1,11 @@
+# 忽略目录
+build/
+tests/
+demo/
+
+# node 覆盖率文件
+coverage/
+
+# 忽略文件
+**/*-min.js
+**/*.min.js
diff --git a/packages/editor/.eslintrc.js b/packages/editor/.eslintrc.js
new file mode 100644
index 000000000..18ae6baa7
--- /dev/null
+++ b/packages/editor/.eslintrc.js
@@ -0,0 +1,7 @@
+const { eslint, deepmerge } = require('@ice/spec');
+
+module.exports = deepmerge(eslint, {
+ rules: {
+ "global-require": 0,
+ },
+});
diff --git a/packages/editor/.gitignore b/packages/editor/.gitignore
new file mode 100644
index 000000000..c590da5b0
--- /dev/null
+++ b/packages/editor/.gitignore
@@ -0,0 +1,20 @@
+# See https://help.github.com/ignore-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+
+# production
+/build
+/dist
+
+# misc
+.idea/
+.happypack
+.DS_Store
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# ignore d.ts auto generated by css-modules-typescript-loader
+*.module.scss.d.ts
\ No newline at end of file
diff --git a/packages/editor/.stylelintignore b/packages/editor/.stylelintignore
new file mode 100644
index 000000000..82af6f60d
--- /dev/null
+++ b/packages/editor/.stylelintignore
@@ -0,0 +1,7 @@
+# 忽略目录
+build/
+tests/
+demo/
+
+# node 覆盖率文件
+coverage/
diff --git a/packages/editor/.stylelintrc.js b/packages/editor/.stylelintrc.js
new file mode 100644
index 000000000..eeb605b33
--- /dev/null
+++ b/packages/editor/.stylelintrc.js
@@ -0,0 +1,3 @@
+const { stylelint } = require('@ice/spec');
+
+module.exports = stylelint;
diff --git a/packages/editor/README.md b/packages/editor/README.md
new file mode 100644
index 000000000..6a1a5d0fa
--- /dev/null
+++ b/packages/editor/README.md
@@ -0,0 +1,20 @@
+# ice-typescript-starter
+
+## 使用
+
+- 启动调试服务: `npm start`
+- 构建 dist: `npm run build`
+
+## 目录结构
+
+- 入口文件: `src/index.jsx`
+- 导航配置: `src/config/menu.js`
+- 路由配置: `src/config/routes.js`
+- 路由入口: `src/router.jsx`
+- 布局文件: `src/layouts`
+- 通用组件: `src/components`
+- 页面文件: `src/pages`
+
+## 效果图
+
+
diff --git a/packages/editor/abc.json b/packages/editor/abc.json
new file mode 100644
index 000000000..dce1f92ed
--- /dev/null
+++ b/packages/editor/abc.json
@@ -0,0 +1,4 @@
+{
+ "type": "ice-scripts",
+ "builder": "@ali/builder-ice-scripts"
+}
diff --git a/packages/editor-skeleton/ice.config.js b/packages/editor/ice.config.js
similarity index 100%
rename from packages/editor-skeleton/ice.config.js
rename to packages/editor/ice.config.js
diff --git a/packages/editor/jsconfig.json b/packages/editor/jsconfig.json
new file mode 100644
index 000000000..9e0f3c03d
--- /dev/null
+++ b/packages/editor/jsconfig.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "jsx": "react",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
diff --git a/packages/editor/package.json b/packages/editor/package.json
new file mode 100644
index 000000000..5f31e94e0
--- /dev/null
+++ b/packages/editor/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "@icedesign/ts-scaffold",
+ "version": "0.0.1",
+ "description": "低代码编辑器",
+ "dependencies": {
+ "@alifd/next": "^1.x",
+ "@icedesign/theme": "^1.x",
+ "@types/react": "^16.8.3",
+ "@types/react-dom": "^16.8.2",
+ "moment": "^2.23.0",
+ "prop-types": "^15.5.8",
+ "react": "^16.4.1",
+ "react-dom": "^16.4.1",
+ "react-router-dom": "^5.1.2"
+ },
+ "devDependencies": {
+ "@ice/spec": "^0.1.1",
+ "css-modules-typescript-loader": "^2.0.4",
+ "eslint": "^6.0.1",
+ "ice-plugin-fusion": "^0.1.4",
+ "ice-plugin-moment-locales": "^0.1.0",
+ "ice-scripts": "^2.0.0",
+ "stylelint": "^10.1.0"
+ },
+ "scripts": {
+ "start": "ice-scripts dev",
+ "build": "ice-scripts build",
+ "lint": "npm run eslint && npm run stylelint",
+ "eslint": "eslint --cache --ext .js,.jsx ./",
+ "stylelint": "stylelint ./**/*.scss"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "iceworks": {
+ "type": "react",
+ "adapter": "adapter-react-v3"
+ },
+ "ideMode": {
+ "name": "ice-react"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/ice-lab/react-materials/tree/master/scaffolds/ice-ts"
+ }
+}
diff --git a/packages/editor-skeleton/public/favicon.png b/packages/editor/public/favicon.png
similarity index 100%
rename from packages/editor-skeleton/public/favicon.png
rename to packages/editor/public/favicon.png
diff --git a/packages/editor-skeleton/public/index.html b/packages/editor/public/index.html
similarity index 100%
rename from packages/editor-skeleton/public/index.html
rename to packages/editor/public/index.html
diff --git a/packages/editor/src/config/components.js b/packages/editor/src/config/components.js
new file mode 100644
index 000000000..96acc32a7
--- /dev/null
+++ b/packages/editor/src/config/components.js
@@ -0,0 +1,3 @@
+
+export default {
+};
\ No newline at end of file
diff --git a/packages/editor/src/config/constants.js b/packages/editor/src/config/constants.js
new file mode 100644
index 000000000..1c713fc4e
--- /dev/null
+++ b/packages/editor/src/config/constants.js
@@ -0,0 +1,3 @@
+export default {
+ "namespace": "page"
+}
\ No newline at end of file
diff --git a/packages/editor/src/config/locale/en-US.js b/packages/editor/src/config/locale/en-US.js
new file mode 100644
index 000000000..7c645e42f
--- /dev/null
+++ b/packages/editor/src/config/locale/en-US.js
@@ -0,0 +1 @@
+export default {};
\ No newline at end of file
diff --git a/packages/editor/src/config/locale/index.js b/packages/editor/src/config/locale/index.js
new file mode 100644
index 000000000..eaa4da099
--- /dev/null
+++ b/packages/editor/src/config/locale/index.js
@@ -0,0 +1,10 @@
+import en_us from './en-US';
+import zh_cn from './zh-CN';
+import zh_tw from './zh-TW';
+import ja_jp from './ja-JP';
+export default {
+ 'en-US': en_us,
+ 'zh-CN': zh_cn,
+ 'zh-TW': zh_tw,
+ 'ja-JP': ja_jp
+};
\ No newline at end of file
diff --git a/packages/editor/src/config/locale/ja-JP.js b/packages/editor/src/config/locale/ja-JP.js
new file mode 100644
index 000000000..7c645e42f
--- /dev/null
+++ b/packages/editor/src/config/locale/ja-JP.js
@@ -0,0 +1 @@
+export default {};
\ No newline at end of file
diff --git a/packages/editor/src/config/locale/zh-CN.js b/packages/editor/src/config/locale/zh-CN.js
new file mode 100644
index 000000000..7c645e42f
--- /dev/null
+++ b/packages/editor/src/config/locale/zh-CN.js
@@ -0,0 +1 @@
+export default {};
\ No newline at end of file
diff --git a/packages/editor/src/config/locale/zh-TW.js b/packages/editor/src/config/locale/zh-TW.js
new file mode 100644
index 000000000..7c645e42f
--- /dev/null
+++ b/packages/editor/src/config/locale/zh-TW.js
@@ -0,0 +1 @@
+export default {};
\ No newline at end of file
diff --git a/packages/editor/src/config/skeleton.js b/packages/editor/src/config/skeleton.js
new file mode 100644
index 000000000..3b3841521
--- /dev/null
+++ b/packages/editor/src/config/skeleton.js
@@ -0,0 +1,435 @@
+export default {
+ "skeleton": {
+ "config": {
+ "package": "@ali/lowcode-skeleton",
+ "version": "0.0.1"
+ },
+ },
+ "theme": {
+ "fusion": {
+ "package": "@alife/dpl-iceluna",
+ "version": "^2.3.0"
+ },
+ "scss": ""
+ },
+ "constants": {
+ "namespace": "page"
+ },
+ "utils": [],
+ "plugins": {
+ "topArea": [{
+ "pluginKey": "logo",
+ "type": "Custom",
+ "props": {
+ "width": 110,
+ "align": "left"
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-logo",
+ "version": "^1.0.2"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "divider",
+ "type": "Divider",
+ "props": {
+ "align": "left"
+ }
+ }, {
+ "pluginKey": "pageList",
+ "type": "Custom",
+ "props": {
+ "align": "left",
+ "width": 360
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-page-list",
+ "version": "^1.0.11"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "partner",
+ "type": "Custom",
+ "props": {
+ "align": "right",
+ "width": 200
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-partner",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "divider",
+ "type": "Divider",
+ "props": {
+ "align": "right"
+ }
+ }, {
+ "pluginKey": "designMode",
+ "type": "Custom",
+ "props": {
+ "align": "right",
+ "width": 144
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-design-mode",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "divider",
+ "type": "Divider",
+ "props": {
+ "align": "right"
+ }
+ }, {
+ "pluginKey": "undoRedo",
+ "type": "Custom",
+ "props": {
+ "align": "right",
+ "width": 88
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-undo-redo",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "d2c",
+ "type": "Custom",
+ "props": {
+ "align": "right",
+ "width": 44
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-d2c",
+ "version": "^1.0.1"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "history",
+ "type": "DialogIcon",
+ "props": {
+ "align": "right",
+ "icon": "lishijilu1",
+ "title": "历史",
+ "dialogProps": {
+ "title": "历史记录",
+ "footer": false,
+ "shouldUpdatePosition": true
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-history",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "refresh",
+ "type": "Icon",
+ "props": {
+ "align": "right",
+ "icon": "shuaxin",
+ "title": "刷新",
+ "onClick": function(appHelper) {
+ appHelper.emit('ide.reset');
+ }
+ }
+ }, {
+ "pluginKey": "divider",
+ "type": "Divider",
+ "props": {
+ "align": "right"
+ }
+ }, {
+ "pluginKey": "save",
+ "type": "Custom",
+ "props": {
+ "align": "right",
+ "width": 86
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-save",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "preview",
+ "type": "Custom",
+ "props": {
+ "align": "right",
+ "width": 86
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-preview",
+ "version": "^1.0.1"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "publish",
+ "type": "Custom",
+ "props": {
+ "align": "right",
+ "width": 104
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-publish",
+ "version": "^1.0.1"
+ },
+ "pluginProps": {}
+ }],
+ "leftArea": [{
+ "pluginKey": "componentTree",
+ "type": "PanelIcon",
+ "props": {
+ "align": "top",
+ "icon": "shuxingkongjian",
+ "title": "组件树",
+ "panelProps": {
+ "minWidth": 100,
+ "maxWidth": 500
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-component-tree",
+ "version": "^1.0.5"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "componentList",
+ "type": "PanelIcon",
+ "props": {
+ "align": "top",
+ "icon": "zujianku",
+ "title": "组件库"
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-component-list",
+ "version": "^1.0.4"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "blockList",
+ "type": "PanelIcon",
+ "props": {
+ "align": "top",
+ "icon": "jihe",
+ "title": "区块库"
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-block-list",
+ "version": "^1.0.2"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "schema",
+ "type": "PanelIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "ceshi",
+ "title": "schema 源码开发",
+ "panelProps": {
+ "defaultWidth": 480
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-schema",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "style",
+ "type": "PanelIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "SCSS",
+ "title": "scss 全局样式设置",
+ "panelProps": {
+ "defaultWidth": 480
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-style",
+ "version": "^1.0.2"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "utils",
+ "type": "PanelIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "funcsgaiban",
+ "title": "utils 全局公共函数设置",
+ "panelProps": {
+ "defaultWidth": 540
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-utils",
+ "version": "^1.0.7"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "constants",
+ "type": "PanelIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "constgaiban",
+ "title": "constants 全局常量设置",
+ "panelProps": {
+ "defaultWidth": 480
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-constants",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "package",
+ "type": "PanelIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "packagegaiban",
+ "title": "package.json 应用设置",
+ "panelProps": {
+ "defaultWidth": 480
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-package",
+ "version": "^1.0.2"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "canvasSetting",
+ "type": "PanelIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "huabushezhi",
+ "title": "canvas 画布配置",
+ "panelProps": {
+ "defaultWidth": 300
+ }
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-canvas-setting",
+ "version": "^1.0.2"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "issue",
+ "type": "LinkIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "chongzi",
+ "title": "issue 问题反馈",
+ "linkProps": {
+ "href": "//work.aone.alibaba-inc.com/project/860698/issue/new",
+ "target": "blank"
+ }
+ }
+ }, {
+ "pluginKey": "document",
+ "type": "LinkIcon",
+ "props": {
+ "align": "bottom",
+ "icon": "wendangzhongxin",
+ "title": "docs 文档中心",
+ "linkProps": {
+ "href": "https://iceluna.alibaba-inc.com/#/document",
+ "target": "blank"
+ }
+ }
+ }],
+ "rightArea": [{
+ "pluginKey": "componentStyle",
+ "props": {
+ "title": "样式"
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-component-style",
+ "version": "^1.0.8"
+ }
+ }, {
+ "pluginKey": "componentAttr",
+ "props": {
+ "title": "属性"
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-component-attr",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "componentEvent",
+ "props": {
+ "title": "事件"
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-component-event",
+ "version": "^1.0.4"
+ },
+ "pluginProps": {}
+ }, {
+ "pluginKey": "componentData",
+ "props": {
+ "title": "数据"
+ },
+ "config": {
+ "package": "@ali/iceluna-addon-component-data",
+ "version": "^1.0.3"
+ },
+ "pluginProps": {}
+ }],
+ "centerArea": [{
+ "pluginKey": "canvas",
+ "config": {
+ "package": "@ali/iceluna-addon-canvas",
+ "version": "^1.0.8"
+ }
+ }, {
+ "pluginKey": "guide",
+ "config": {
+ "package": "@ali/iceluna-addon-guide",
+ "version": "^1.0.1"
+ }
+ }]
+ },
+ "hooks": [{
+ "message": "wsHelper.result.updateInfo",
+ "type": "on",
+ "handler": function(appHelper, data) {
+ const pageInfo = appHelper.pageInfo;
+ if (data && data.code > 0 && pageInfo) {
+ const {
+ clientLocks,
+ entityLocks,
+ entityUsers,
+ entityPubInfo
+ } = data.data;
+ if (JSON.stringify(clientLocks || {}) !== JSON.stringify(appHelper.clientLocks || {})) {
+ clientLocks.schema = clientLocks[pageInfo.id];
+ appHelper.set('clientLocks', clientLocks);
+ appHelper.emit('wsHelper.update.clientLocks', clientLocks);
+ }
+ if (JSON.stringify(entityLocks || {}) !== JSON.stringify(appHelper.entityLocks || {})) {
+ entityLocks.schema = entityLocks[pageInfo.id];
+ appHelper.set('entityLocks', entityLocks);
+ appHelper.emit('wsHelper.update.entityLocks', entityLocks);
+ }
+ if (JSON.stringify(entityUsers || {}) !== JSON.stringify(appHelper.entityUsers || {})) {
+ appHelper.set('entityUsers', entityUsers);
+ appHelper.emit('wsHelper.update.entityUsers', entityUsers);
+ }
+ if (JSON.stringify(entityPubInfo || {}) !== JSON.stringify(appHelper.entityPubInfo || {})) {
+ appHelper.set('entityPubInfo', entityPubInfo);
+ appHelper.emit('wsHelper.update.entityPubInfo', entityPubInfo);
+ }
+ }
+ }
+ }],
+ "shortCuts": [],
+ "lifeCycles": {}
+};
\ No newline at end of file
diff --git a/packages/editor/src/config/theme.scss b/packages/editor/src/config/theme.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/packages/editor/src/config/utils.js b/packages/editor/src/config/utils.js
new file mode 100644
index 000000000..dd651ca49
--- /dev/null
+++ b/packages/editor/src/config/utils.js
@@ -0,0 +1,3 @@
+export default {
+
+};
\ No newline at end of file
diff --git a/packages/editor/src/global.scss b/packages/editor/src/global.scss
new file mode 100644
index 000000000..e827d91b7
--- /dev/null
+++ b/packages/editor/src/global.scss
@@ -0,0 +1,8 @@
+body {
+ font-family: PingFangSC-Regular, Roboto, Helvetica Neue, Helvetica, Tahoma, Arial, PingFang SC-Light,
+ Microsoft YaHei;
+ font-size: 12px;
+ * {
+ box-sizing: border-box;
+ }
+}
\ No newline at end of file
diff --git a/packages/editor/src/index.tsx b/packages/editor/src/index.tsx
new file mode 100644
index 000000000..f4b8bc855
--- /dev/null
+++ b/packages/editor/src/index.tsx
@@ -0,0 +1,42 @@
+import ReactDOM from 'react-dom';
+import { HashRouter as Router, Route } from 'react-router-dom';
+import Skeleton from '@ali/lowcode-engine-skeleton';
+
+import config from './config/skeleton';
+import components from './config/components';
+import componentsMap from './config/componentsMap';
+import utils from './config/utils';
+import constants from './config/constants';
+import messages from './config/locale';
+
+import pkg from '../package.json';
+import './global.scss';
+import './config/theme.scss';
+
+window.__pkg = pkg;
+
+const ICE_CONTAINER = document.getElementById('ice-container');
+
+if (!ICE_CONTAINER) {
+ throw new Error('当前页面不存在 节点.');
+}
+
+ReactDOM.render(
+
+ {
+ return (
+
+ );
+ }}
+ />
+ , ICE_CONTAINER);
diff --git a/packages/editor/tests/index.js b/packages/editor/tests/index.js
new file mode 100644
index 000000000..346e384d2
--- /dev/null
+++ b/packages/editor/tests/index.js
@@ -0,0 +1 @@
+// test file
diff --git a/packages/editor/tsconfig.json b/packages/editor/tsconfig.json
new file mode 100644
index 000000000..3f5e62810
--- /dev/null
+++ b/packages/editor/tsconfig.json
@@ -0,0 +1,31 @@
+{
+ "compileOnSave": false,
+ "buildOnSave": false,
+ "compilerOptions": {
+ "baseUrl": ".",
+ "outDir": "build",
+ "module": "esnext",
+ "target": "es6",
+ "jsx": "react",
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true,
+ "lib": ["es6", "dom"],
+ "sourceMap": true,
+ "allowJs": true,
+ "rootDir": "src",
+ "forceConsistentCasingInFileNames": true,
+ "noImplicitReturns": true,
+ "noImplicitThis": true,
+ "noImplicitAny": false,
+ "importHelpers": true,
+ "strictNullChecks": true,
+ "suppressImplicitAnyIndexErrors": true,
+ "noUnusedLocals": true,
+ "skipLibCheck": true,
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["src/*"],
+ "exclude": ["node_modules", "build", "public"]
+}