diff --git a/packages/editor-framework/README.md b/packages/editor-framework/README.md index eb99c606a..8a6fb13f0 100644 --- a/packages/editor-framework/README.md +++ b/packages/editor-framework/README.md @@ -1 +1 @@ -编辑器框架 +## todo diff --git a/packages/editor-framework/package.json b/packages/editor-framework/package.json index 8866b4a77..ebcbe65db 100644 --- a/packages/editor-framework/package.json +++ b/packages/editor-framework/package.json @@ -1,7 +1,7 @@ { - "name": "editor-framework", + "name": "@ali/lowcode-engine-editor", "version": "0.0.1", - "description": "alibaba lowcode editor framework", + "description": "alibaba lowcode editor core", "files": [ "demo/", "es/", diff --git a/packages/editor-skeleton/.editorconfig b/packages/editor-skeleton/.editorconfig new file mode 100644 index 000000000..5760be583 --- /dev/null +++ b/packages/editor-skeleton/.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-skeleton/.eslintignore b/packages/editor-skeleton/.eslintignore new file mode 100644 index 000000000..3b437e614 --- /dev/null +++ b/packages/editor-skeleton/.eslintignore @@ -0,0 +1,11 @@ +# 忽略目录 +build/ +tests/ +demo/ + +# node 覆盖率文件 +coverage/ + +# 忽略文件 +**/*-min.js +**/*.min.js diff --git a/packages/editor-skeleton/.eslintrc.js b/packages/editor-skeleton/.eslintrc.js new file mode 100644 index 000000000..18ae6baa7 --- /dev/null +++ b/packages/editor-skeleton/.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-skeleton/.gitignore b/packages/editor-skeleton/.gitignore new file mode 100644 index 000000000..c590da5b0 --- /dev/null +++ b/packages/editor-skeleton/.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-skeleton/.stylelintignore b/packages/editor-skeleton/.stylelintignore new file mode 100644 index 000000000..82af6f60d --- /dev/null +++ b/packages/editor-skeleton/.stylelintignore @@ -0,0 +1,7 @@ +# 忽略目录 +build/ +tests/ +demo/ + +# node 覆盖率文件 +coverage/ diff --git a/packages/editor-skeleton/.stylelintrc.js b/packages/editor-skeleton/.stylelintrc.js new file mode 100644 index 000000000..eeb605b33 --- /dev/null +++ b/packages/editor-skeleton/.stylelintrc.js @@ -0,0 +1,3 @@ +const { stylelint } = require('@ice/spec'); + +module.exports = stylelint; diff --git a/packages/editor-skeleton/README.md b/packages/editor-skeleton/README.md new file mode 100644 index 000000000..8a6fb13f0 --- /dev/null +++ b/packages/editor-skeleton/README.md @@ -0,0 +1 @@ +## todo diff --git a/packages/editor-skeleton/abc.json b/packages/editor-skeleton/abc.json new file mode 100644 index 000000000..dce1f92ed --- /dev/null +++ b/packages/editor-skeleton/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-skeleton/ice.config.js new file mode 100644 index 000000000..f905f88e8 --- /dev/null +++ b/packages/editor-skeleton/ice.config.js @@ -0,0 +1,30 @@ +const path = require('path'); + +module.exports = { + entry: 'src/index.tsx', + publicPath: './', + alias: { + '@': path.resolve(__dirname, './src'), + }, + plugins: [ + ['ice-plugin-fusion', { + themePackage: '@icedesign/theme', + }], + ['ice-plugin-moment-locales', { + locales: ['zh-cn'], + }], + ], + chainWebpack: (config) => { + // 修改对应 css module的 loader,默认修改 scss-module 同理可以修改 css-module 和 less-module 规则 + ['scss-module'].forEach((rule) => { + if (config.module.rules.get(rule)) { + config.module.rule(rule).use('ts-css-module-loader') + .loader(require.resolve('css-modules-typescript-loader')) + .options({ modules: true, sass: true }); + // 指定应用loader的位置 + config.module.rule(rule).use('ts-css-module-loader').before('css-loader'); + } + }); + }, +}; + diff --git a/packages/editor-skeleton/jsconfig.json b/packages/editor-skeleton/jsconfig.json new file mode 100644 index 000000000..9e0f3c03d --- /dev/null +++ b/packages/editor-skeleton/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "jsx": "react", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/packages/editor-skeleton/package.json b/packages/editor-skeleton/package.json new file mode 100644 index 000000000..7ada377d0 --- /dev/null +++ b/packages/editor-skeleton/package.json @@ -0,0 +1,47 @@ +{ + "name": "@ali/lowcode-engine-skeleton", + "version": "0.0.1", + "description": "alibaba lowcode editor skeleton", + "author": "xiayang.xy", + "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.0.1" + }, + "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-skeleton/public/favicon.png new file mode 100644 index 000000000..a2605c57e Binary files /dev/null and b/packages/editor-skeleton/public/favicon.png differ diff --git a/packages/editor-skeleton/public/index.html b/packages/editor-skeleton/public/index.html new file mode 100644 index 000000000..5c0692966 --- /dev/null +++ b/packages/editor-skeleton/public/index.html @@ -0,0 +1,13 @@ + + + + + + + ICE TypeScript Starter + + + +
+ + diff --git a/packages/editor-skeleton/src/components/Greeting/index.tsx b/packages/editor-skeleton/src/components/Greeting/index.tsx new file mode 100644 index 000000000..b9369ed63 --- /dev/null +++ b/packages/editor-skeleton/src/components/Greeting/index.tsx @@ -0,0 +1,15 @@ +import React from 'react'; + +export interface Props { + name: string; +} + +const Greeting = ({ name }: Props) => { + return ( +
+ Hello, {name} +
+ ); +}; + +export default Greeting; diff --git a/packages/editor-skeleton/src/components/Guide/index.module.scss b/packages/editor-skeleton/src/components/Guide/index.module.scss new file mode 100644 index 000000000..eeb4e21aa --- /dev/null +++ b/packages/editor-skeleton/src/components/Guide/index.module.scss @@ -0,0 +1,11 @@ +.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 new file mode 100644 index 000000000..9a07b5789 --- /dev/null +++ b/packages/editor-skeleton/src/components/Guide/index.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import { Button } from '@alifd/next'; +import styles from './index.module.scss'; + +const Guide = () => { + return ( +
+

使用指南

+ +
+ + + + + + +
+
+ ); +}; + +export default Guide; diff --git a/packages/editor-skeleton/src/config/menu.ts b/packages/editor-skeleton/src/config/menu.ts new file mode 100644 index 000000000..e3c4c9e37 --- /dev/null +++ b/packages/editor-skeleton/src/config/menu.ts @@ -0,0 +1,5 @@ +// 菜单配置 + +const asideMenuConfig = []; + +export { asideMenuConfig }; diff --git a/packages/editor-skeleton/src/config/routes.ts b/packages/editor-skeleton/src/config/routes.ts new file mode 100644 index 000000000..5d63e83cc --- /dev/null +++ b/packages/editor-skeleton/src/config/routes.ts @@ -0,0 +1,21 @@ +import Dashboard from '@/pages/Dashboard'; +import BasicLayout from '@/layouts/BasicLayout'; + +const routerConfig = [ + { + path: '/', + component: BasicLayout, + children: [ + { + path: '/dashboard', + component: Dashboard, + }, + { + path: '/', + redirect: '/dashboard', + } + ], + }, +]; + +export default routerConfig; diff --git a/packages/editor-skeleton/src/global.scss b/packages/editor-skeleton/src/global.scss new file mode 100644 index 000000000..6086b53a6 --- /dev/null +++ b/packages/editor-skeleton/src/global.scss @@ -0,0 +1,6 @@ +// 引入默认全局样式 +@import '@alifd/next/reset.scss'; + +body { + -webkit-font-smoothing: antialiased; +} \ No newline at end of file diff --git a/packages/editor-skeleton/src/index.tsx b/packages/editor-skeleton/src/index.tsx new file mode 100644 index 000000000..ba347d027 --- /dev/null +++ b/packages/editor-skeleton/src/index.tsx @@ -0,0 +1,13 @@ +import ReactDOM from 'react-dom'; + +import './global.scss'; + +import router from './router'; + +const ICE_CONTAINER = document.getElementById('ice-container'); + +if (!ICE_CONTAINER) { + throw new Error('当前页面不存在
节点.'); +} + +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 new file mode 100644 index 000000000..b45f3c44e --- /dev/null +++ b/packages/editor-skeleton/src/layouts/BasicLayout/index.tsx @@ -0,0 +1,9 @@ +import React from 'react'; + +export default function BasicLayout({ children }) { + return ( +
+ {children} +
+ ); +} diff --git a/packages/editor-skeleton/src/pages/Dashboard/index.tsx b/packages/editor-skeleton/src/pages/Dashboard/index.tsx new file mode 100644 index 000000000..2130cc8ce --- /dev/null +++ b/packages/editor-skeleton/src/pages/Dashboard/index.tsx @@ -0,0 +1,12 @@ +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 new file mode 100644 index 000000000..e260e72c8 --- /dev/null +++ b/packages/editor-skeleton/src/router.tsx @@ -0,0 +1,73 @@ +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/tests/index.js b/packages/editor-skeleton/tests/index.js new file mode 100644 index 000000000..346e384d2 --- /dev/null +++ b/packages/editor-skeleton/tests/index.js @@ -0,0 +1 @@ +// test file diff --git a/packages/editor-skeleton/tsconfig.json b/packages/editor-skeleton/tsconfig.json new file mode 100644 index 000000000..3f5e62810 --- /dev/null +++ b/packages/editor-skeleton/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"] +}