From 7b149759b0c3d8ef2daf808cfc08cee2ec640c0a Mon Sep 17 00:00:00 2001 From: ajaxzheng <894103554@qq.com> Date: Tue, 26 Sep 2023 08:40:44 +0800 Subject: [PATCH 001/322] fix: fix build error (#1) * fix: fix build error * fix: fix server dependence --- lerna.json | 8 +------ mockServer/package.json | 5 ++++- mockServer/src/services/appinfo.json | 3 +++ mockServer/src/services/schema2code.js | 22 +++++++++---------- package.json | 4 +++- packages/vue-generator/package.json | 12 +++++----- src/canvas/package.json | 5 ++++- src/canvas/vite.config.js | 22 +++++++++---------- src/common/package.json | 3 +++ src/common/vite.config.js | 22 +++++++++---------- src/controller/package.json | 3 +++ src/controller/vite.config.js | 22 +++++++++---------- src/http/package.json | 3 +++ src/http/vite.config.js | 22 +++++++++---------- src/i18n/package.json | 3 +++ src/plugins/packages/block/package.json | 5 ++++- src/plugins/packages/block/vite.config.js | 22 +++++++++---------- src/plugins/packages/bridge/package.json | 5 ++++- src/plugins/packages/bridge/vite.config.js | 22 +++++++++---------- src/plugins/packages/data/package.json | 5 ++++- src/plugins/packages/data/vite.config.js | 22 +++++++++---------- src/plugins/packages/datasource/package.json | 5 ++++- .../datasource/src/DataSourceRecordList.vue | 2 +- .../packages/datasource/vite.config.js | 22 +++++++++---------- src/plugins/packages/help/package.json | 5 ++++- src/plugins/packages/help/vite.config.js | 22 +++++++++---------- src/plugins/packages/i18n/package.json | 5 ++++- src/plugins/packages/i18n/vite.config.js | 22 +++++++++---------- .../packages/materials/bash.exe.stackdump | 16 ++++++++++++++ src/plugins/packages/materials/package.json | 5 ++++- src/plugins/packages/materials/vite.config.js | 22 +++++++++---------- src/plugins/packages/page/package.json | 5 ++++- src/plugins/packages/page/vite.config.js | 22 +++++++++---------- src/plugins/packages/robot/package.json | 5 ++++- src/plugins/packages/robot/vite.config.js | 22 +++++++++---------- src/plugins/packages/schema/package.json | 5 ++++- src/plugins/packages/schema/vite.config.js | 22 +++++++++---------- src/plugins/packages/script/package.json | 5 ++++- src/plugins/packages/script/vite.config.js | 22 +++++++++---------- src/plugins/packages/tree/package.json | 5 ++++- src/plugins/packages/tree/vite.config.js | 22 +++++++++---------- src/plugins/packages/tutorial/package.json | 5 ++++- src/plugins/packages/tutorial/vite.config.js | 22 +++++++++---------- src/settings/packages/design/package.json | 5 ++++- src/settings/packages/design/vite.config.js | 22 +++++++++---------- src/settings/packages/events/package.json | 5 ++++- src/settings/packages/events/vite.config.js | 22 +++++++++---------- src/settings/packages/props/package.json | 5 ++++- src/settings/packages/props/vite.config.js | 22 +++++++++---------- src/settings/packages/styles/package.json | 5 ++++- src/settings/packages/styles/vite.config.js | 22 +++++++++---------- src/svgs/package.json | 5 ++++- src/svgs/vite.config.js | 22 +++++++++---------- src/theme/packages/dark/package.json | 5 ++++- src/theme/packages/light/package.json | 5 ++++- src/toolbars/packages/breadcrumb/package.json | 5 ++++- .../packages/breadcrumb/vite.config.js | 22 +++++++++---------- src/toolbars/packages/clean/package.json | 5 ++++- src/toolbars/packages/clean/vite.config.js | 22 +++++++++---------- .../packages/collaboration/package.json | 5 ++++- .../packages/collaboration/vite.config.js | 22 +++++++++---------- src/toolbars/packages/fullscreen/package.json | 5 ++++- .../packages/fullscreen/vite.config.js | 22 +++++++++---------- .../packages/generate-vue/package.json | 5 ++++- .../packages/generate-vue/vite.config.js | 22 +++++++++---------- src/toolbars/packages/lang/package.json | 5 ++++- src/toolbars/packages/lang/vite.config.js | 22 +++++++++---------- src/toolbars/packages/layout/package.json | 5 ++++- src/toolbars/packages/layout/vite.config.js | 22 +++++++++---------- src/toolbars/packages/lock/package.json | 5 ++++- src/toolbars/packages/lock/vite.config.js | 22 +++++++++---------- src/toolbars/packages/logo/package.json | 5 ++++- src/toolbars/packages/logo/vite.config.js | 22 +++++++++---------- src/toolbars/packages/logout/package.json | 5 ++++- src/toolbars/packages/logout/vite.config.js | 22 +++++++++---------- src/toolbars/packages/media/package.json | 5 ++++- src/toolbars/packages/media/vite.config.js | 22 +++++++++---------- src/toolbars/packages/preview/package.json | 5 ++++- src/toolbars/packages/preview/vite.config.js | 22 +++++++++---------- src/toolbars/packages/redoundo/package.json | 5 ++++- src/toolbars/packages/redoundo/vite.config.js | 22 +++++++++---------- src/toolbars/packages/refresh/package.json | 5 ++++- src/toolbars/packages/refresh/vite.config.js | 22 +++++++++---------- src/toolbars/packages/save/package.json | 5 ++++- src/toolbars/packages/save/vite.config.js | 22 +++++++++---------- src/toolbars/packages/setting/package.json | 5 ++++- src/toolbars/packages/setting/vite.config.js | 22 +++++++++---------- src/utils/package.json | 5 ++++- src/utils/vite.config.js | 22 +++++++++---------- src/webcomponent/package.json | 5 ++++- 90 files changed, 643 insertions(+), 494 deletions(-) create mode 100644 src/plugins/packages/materials/bash.exe.stackdump diff --git a/lerna.json b/lerna.json index ef32bdfb9f..7168deb820 100644 --- a/lerna.json +++ b/lerna.json @@ -1,11 +1,5 @@ { - "packages": [ - "src/*", - "src/plugins/packages/*", - "src/settings/packages/*", - "src/theme/packages/*", - "src/toolbars/packages/*" - ], + "packages": ["src/**", "packages/**"], "useNx": false, "version": "independent" } diff --git a/mockServer/package.json b/mockServer/package.json index 0700197ab7..d7f06a18f3 100644 --- a/mockServer/package.json +++ b/mockServer/package.json @@ -1,6 +1,9 @@ { "name": "koa2-mock", "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "description": "mock服务", "author": "opentiny", "license": "WTFPL", @@ -13,7 +16,7 @@ "lint": "eslint --fix ." }, "dependencies": { - "@opentiny/lowcode-dsl-vue": "0.4.0", + "@opentiny/tiny-engine-dsl-vue": "~1.0.0", "@seald-io/nedb": "^4.0.2", "fs-extra": "^11.1.1", "glob": "^10.3.4", diff --git a/mockServer/src/services/appinfo.json b/mockServer/src/services/appinfo.json index 693b50cc51..72f04d5803 100644 --- a/mockServer/src/services/appinfo.json +++ b/mockServer/src/services/appinfo.json @@ -3227,6 +3227,9 @@ "mode": null, "block_id": 989, "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "i18n": null, "created_app": null, "content_blocks": null diff --git a/mockServer/src/services/schema2code.js b/mockServer/src/services/schema2code.js index 160361da73..5cec6b3fe4 100644 --- a/mockServer/src/services/schema2code.js +++ b/mockServer/src/services/schema2code.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { pageService } from '../routes/main-routes' import appInfo from './appinfo.json' @@ -50,7 +50,7 @@ export default class Schema2CodeServcice { main: defaultMain }) - const { generateCode } = require('@opentiny/lowcode-dsl-vue') + const { generateCode } = require('@opentiny/tiny-engine-dsl-vue') let code try { code = generateCode({ diff --git a/package.json b/package.json index 68d9f45c0e..a58a4ade10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine", "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "description": "TinyEngine enables developers to customize low-code platforms, build low-bit platforms online in real time, and support secondary development or integration of low-bit platform capabilities.", "homepage": "https://opentiny.design/tiny-engine", "keywords": [ @@ -21,7 +24,6 @@ "preview": "vite preview", "lint": "eslint . --ext .js,.vue,.jsx --fix", "format": "prettier --write **/*{.vue,.js,.ts,.html,.json}", - "auto:publish": "node autoPublish", "publish:core": "npm publish", "publish:plugin": "lerna exec npm publish --scope @opentiny/tiny-engine-*", "version": "lerna exec npm version ${version}", diff --git a/packages/vue-generator/package.json b/packages/vue-generator/package.json index 4cea2f557a..797259b2a2 100644 --- a/packages/vue-generator/package.json +++ b/packages/vue-generator/package.json @@ -1,7 +1,10 @@ { - "name": "@opentiny/lowcode-dsl-vue", - "version": "0.3.29", - "main": "dist/lowcode-dsl-vue.cjs.js", + "name": "@opentiny/tiny-engine-dsl-vue", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, + "main": "dist/tiny-engine-dsl-vue.cjs.js", "files": [ "dist" ], @@ -12,11 +15,10 @@ "publish:npm": "npm publish --verbose" }, "dependencies": { - "vue": "3.2.33", + "vue": "3.2.45", "vue-eslint-parser": "8.3.0" }, "devDependencies": { - "@cloud/eslint-config-cbc": "^1.7.3", "@rushstack/eslint-patch": "^1.1.1", "@vue/eslint-config-prettier": "^7.0.0", "eslint": "^8.12.0", diff --git a/src/canvas/package.json b/src/canvas/package.json index 4ee7791047..79dd4a0136 100644 --- a/src/canvas/package.json +++ b/src/canvas/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-canvas", - "version": "1.0.5", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "scripts": { "dev": "vite", "build": "vite build", diff --git a/src/canvas/vite.config.js b/src/canvas/vite.config.js index ded86db5a6..85ac557f9f 100644 --- a/src/canvas/vite.config.js +++ b/src/canvas/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -66,7 +66,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', 'vue-i18n', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', 'vue-i18n', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] }, minify: true } diff --git a/src/common/package.json b/src/common/package.json index 2c3b480db0..fce4b3be18 100644 --- a/src/common/package.json +++ b/src/common/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-common", "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/common/vite.config.js b/src/common/vite.config.js index de53c118bd..b4d50d21fe 100644 --- a/src/common/vite.config.js +++ b/src/common/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -35,7 +35,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', 'monaco-editor', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/, /^prettier.*/] + external: ['vue', 'monaco-editor', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/, /^prettier.*/] } } }) diff --git a/src/controller/package.json b/src/controller/package.json index dfe0ff967d..5e5a32ffde 100644 --- a/src/controller/package.json +++ b/src/controller/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-controller", "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/controller/vite.config.js b/src/controller/vite.config.js index 137e663040..8f7b67d339 100644 --- a/src/controller/vite.config.js +++ b/src/controller/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -29,7 +29,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/http/package.json b/src/http/package.json index b040f357f1..a3e656888b 100644 --- a/src/http/package.json +++ b/src/http/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-http", "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/http/vite.config.js b/src/http/vite.config.js index bd347addf2..6b29354daf 100644 --- a/src/http/vite.config.js +++ b/src/http/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -32,7 +32,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/i18n/package.json b/src/i18n/package.json index 807a00849a..67040ef237 100644 --- a/src/i18n/package.json +++ b/src/i18n/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-i18n-host", "version": "1.0.0", + "publishConfig": { + "access": "public" + }, "description": "webcomponent vue i18n host", "author": "tinybuilder", "scripts": { diff --git a/src/plugins/packages/block/package.json b/src/plugins/packages/block/package.json index 6742253edb..fab3ec3ed0 100644 --- a/src/plugins/packages/block/package.json +++ b/src/plugins/packages/block/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-block", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/block/vite.config.js b/src/plugins/packages/block/vite.config.js index 806ecb7ac2..4cddadfb96 100644 --- a/src/plugins/packages/block/vite.config.js +++ b/src/plugins/packages/block/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/bridge/package.json b/src/plugins/packages/bridge/package.json index 9e892d9fce..653f790744 100644 --- a/src/plugins/packages/bridge/package.json +++ b/src/plugins/packages/bridge/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-bridge", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/bridge/vite.config.js b/src/plugins/packages/bridge/vite.config.js index 334634cd0b..db8dc6eb88 100644 --- a/src/plugins/packages/bridge/vite.config.js +++ b/src/plugins/packages/bridge/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/data/package.json b/src/plugins/packages/data/package.json index 07a247c83b..c2355ca57f 100644 --- a/src/plugins/packages/data/package.json +++ b/src/plugins/packages/data/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-data", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/data/vite.config.js b/src/plugins/packages/data/vite.config.js index ee2e8173b4..bb51f82d43 100644 --- a/src/plugins/packages/data/vite.config.js +++ b/src/plugins/packages/data/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['monaco-editor', 'vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['monaco-editor', 'vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/datasource/package.json b/src/plugins/packages/datasource/package.json index 4a6dccc04b..0313453706 100644 --- a/src/plugins/packages/datasource/package.json +++ b/src/plugins/packages/datasource/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-datasource", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/datasource/src/DataSourceRecordList.vue b/src/plugins/packages/datasource/src/DataSourceRecordList.vue index ca04271010..93ee922844 100644 --- a/src/plugins/packages/datasource/src/DataSourceRecordList.vue +++ b/src/plugins/packages/datasource/src/DataSourceRecordList.vue @@ -83,7 +83,7 @@ import { camelize, capitalize } from '@vue/shared' import { Grid, Pager, Button, Input, Numeric, DatePicker, Switch, Slider, Link } from '@opentiny/vue' import { IconPlusCircle, IconImport } from '@opentiny/vue-icon' import { PluginSetting } from '@opentiny/tiny-engine-common' -import { utils } from '@opentiny/tiny-engineils' +import { utils } from '@opentiny/tiny-engine-utils' import { useModal, useLayout, useNotify } from '@opentiny/tiny-engine-controller' import { getSchema } from '@opentiny/tiny-engine-canvas' import useClipboard from 'vue-clipboard3' diff --git a/src/plugins/packages/datasource/vite.config.js b/src/plugins/packages/datasource/vite.config.js index 00e0fb6d74..c8ea647dbc 100644 --- a/src/plugins/packages/datasource/vite.config.js +++ b/src/plugins/packages/datasource/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/help/package.json b/src/plugins/packages/help/package.json index 3ef9d7f564..6b8693857d 100644 --- a/src/plugins/packages/help/package.json +++ b/src/plugins/packages/help/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-help", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/help/vite.config.js b/src/plugins/packages/help/vite.config.js index 7dd770255a..89b8139156 100644 --- a/src/plugins/packages/help/vite.config.js +++ b/src/plugins/packages/help/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/i18n/package.json b/src/plugins/packages/i18n/package.json index a90598eb38..966838fa2e 100644 --- a/src/plugins/packages/i18n/package.json +++ b/src/plugins/packages/i18n/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-i18n", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/i18n/vite.config.js b/src/plugins/packages/i18n/vite.config.js index cd8e139d5a..71de3ed5d4 100644 --- a/src/plugins/packages/i18n/vite.config.js +++ b/src/plugins/packages/i18n/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/materials/bash.exe.stackdump b/src/plugins/packages/materials/bash.exe.stackdump new file mode 100644 index 0000000000..11c8105af9 --- /dev/null +++ b/src/plugins/packages/materials/bash.exe.stackdump @@ -0,0 +1,16 @@ +Stack trace: +Frame Function Args +000FFFFCD30 00210062B0E (0021028A770, 00210275E51, 00000000058, 000FFFFB720) +000FFFFCD30 0021004846A (00210000000, 00200000000, 00000000000, 00000000001) +000FFFFCD30 002100484A2 (00000000000, 00000000000, 00000000058, 10100000004) +000FFFFCD30 0021006E496 (00210045323, 00210358950, 00000000000, 0000000000D) +000FFFFCD30 0021006E4A9 (00210045170, 0021023D7E0, 002100448F2, 000FFFFC920) +000FFFFCD30 00210070DE4 (00000000013, 00000000001, 000FFFFC920, 00210278640) +000FFFFCD30 0021005AB65 (000FFFF0000, 00000000000, 00000000000, 008FFFFFFFF) +000FFFFCD30 0021005B335 (00000000002, 00000001000, 00200000004, 00210358270) +000FFFFCD30 0021005B847 (002100DF73E, 00000000000, 00000000000, 00000000000) +000FFFFCD30 0021005BB86 (002102308C0, 000FFFFCDF0, FFFFFFFFFFFFFFD1, 00000000000) +000FFFFCD30 00210048C0C (00000000000, 00000000000, 00000000000, 00000000000) +000FFFFFFF0 00210047716 (00000000000, 00000000000, 00000000000, 00000000000) +000FFFFFFF0 002100477C4 (00000000000, 00000000000, 00000000000, 00000000000) +End of stack trace diff --git a/src/plugins/packages/materials/package.json b/src/plugins/packages/materials/package.json index 28ae216adf..ebff07dd1e 100644 --- a/src/plugins/packages/materials/package.json +++ b/src/plugins/packages/materials/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-materials", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/materials/vite.config.js b/src/plugins/packages/materials/vite.config.js index fb7d30551e..6df3a05727 100644 --- a/src/plugins/packages/materials/vite.config.js +++ b/src/plugins/packages/materials/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/page/package.json b/src/plugins/packages/page/package.json index fc61eed922..1f62fd21cf 100644 --- a/src/plugins/packages/page/package.json +++ b/src/plugins/packages/page/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-page", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/page/vite.config.js b/src/plugins/packages/page/vite.config.js index e0a2b45272..69d756e211 100644 --- a/src/plugins/packages/page/vite.config.js +++ b/src/plugins/packages/page/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/robot/package.json b/src/plugins/packages/robot/package.json index 098fde9bf5..f96cee78ae 100644 --- a/src/plugins/packages/robot/package.json +++ b/src/plugins/packages/robot/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-robot", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/robot/vite.config.js b/src/plugins/packages/robot/vite.config.js index ed73b8cf58..218d0a5ea7 100644 --- a/src/plugins/packages/robot/vite.config.js +++ b/src/plugins/packages/robot/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/schema/package.json b/src/plugins/packages/schema/package.json index 63505c9aea..20a21b250f 100644 --- a/src/plugins/packages/schema/package.json +++ b/src/plugins/packages/schema/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-schema", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/schema/vite.config.js b/src/plugins/packages/schema/vite.config.js index 4d677da26c..0205767c5d 100644 --- a/src/plugins/packages/schema/vite.config.js +++ b/src/plugins/packages/schema/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/script/package.json b/src/plugins/packages/script/package.json index edd39e7a6b..908b3a3dc1 100644 --- a/src/plugins/packages/script/package.json +++ b/src/plugins/packages/script/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-script", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/script/vite.config.js b/src/plugins/packages/script/vite.config.js index a656e99eea..80bab01350 100644 --- a/src/plugins/packages/script/vite.config.js +++ b/src/plugins/packages/script/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/tree/package.json b/src/plugins/packages/tree/package.json index 8d7ca7f640..f3e30fcb20 100644 --- a/src/plugins/packages/tree/package.json +++ b/src/plugins/packages/tree/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-tree", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/tree/vite.config.js b/src/plugins/packages/tree/vite.config.js index 112f5634e0..d58d84fcc2 100644 --- a/src/plugins/packages/tree/vite.config.js +++ b/src/plugins/packages/tree/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/plugins/packages/tutorial/package.json b/src/plugins/packages/tutorial/package.json index 309c514be3..b77e6a0f7e 100644 --- a/src/plugins/packages/tutorial/package.json +++ b/src/plugins/packages/tutorial/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-plugin-tutorial", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/plugins/packages/tutorial/vite.config.js b/src/plugins/packages/tutorial/vite.config.js index 61f7c99f19..31a9f1ae2e 100644 --- a/src/plugins/packages/tutorial/vite.config.js +++ b/src/plugins/packages/tutorial/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/settings/packages/design/package.json b/src/settings/packages/design/package.json index a034eab9ff..67aa48c68f 100644 --- a/src/settings/packages/design/package.json +++ b/src/settings/packages/design/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-setting-design", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/settings/packages/design/vite.config.js b/src/settings/packages/design/vite.config.js index 43c73ee027..d67a1f6035 100644 --- a/src/settings/packages/design/vite.config.js +++ b/src/settings/packages/design/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/settings/packages/events/package.json b/src/settings/packages/events/package.json index e6d2a60831..b523d06091 100644 --- a/src/settings/packages/events/package.json +++ b/src/settings/packages/events/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-setting-events", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/settings/packages/events/vite.config.js b/src/settings/packages/events/vite.config.js index 1e6003ffe7..8d07a017e1 100644 --- a/src/settings/packages/events/vite.config.js +++ b/src/settings/packages/events/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/settings/packages/props/package.json b/src/settings/packages/props/package.json index 753b60ac42..08d1fdff8c 100644 --- a/src/settings/packages/props/package.json +++ b/src/settings/packages/props/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-setting-props", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/settings/packages/props/vite.config.js b/src/settings/packages/props/vite.config.js index 0ea6e1dad7..45e96db5b4 100644 --- a/src/settings/packages/props/vite.config.js +++ b/src/settings/packages/props/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/settings/packages/styles/package.json b/src/settings/packages/styles/package.json index b1e37d0e75..79992b126f 100644 --- a/src/settings/packages/styles/package.json +++ b/src/settings/packages/styles/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-setting-styles", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/settings/packages/styles/vite.config.js b/src/settings/packages/styles/vite.config.js index d2b6e8dad6..d5e0a1ef43 100644 --- a/src/settings/packages/styles/vite.config.js +++ b/src/settings/packages/styles/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/svgs/package.json b/src/svgs/package.json index aeeaefd46e..11dc6ca5ce 100644 --- a/src/svgs/package.json +++ b/src/svgs/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-svgs", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/svgs/vite.config.js b/src/svgs/vite.config.js index f8d5ef2842..1e52df3017 100644 --- a/src/svgs/vite.config.js +++ b/src/svgs/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/theme/packages/dark/package.json b/src/theme/packages/dark/package.json index bccd1e8448..3c084aad53 100644 --- a/src/theme/packages/dark/package.json +++ b/src/theme/packages/dark/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-theme-dark", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build && rimraf dist/index.js" }, diff --git a/src/theme/packages/light/package.json b/src/theme/packages/light/package.json index 71042c13d0..ddcd49ba1b 100644 --- a/src/theme/packages/light/package.json +++ b/src/theme/packages/light/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-theme-light", - "version": "1.0.0", + "version": "1.0.2", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build && rimraf dist/index.js" }, diff --git a/src/toolbars/packages/breadcrumb/package.json b/src/toolbars/packages/breadcrumb/package.json index d30b3d5e6a..5f93d1f043 100644 --- a/src/toolbars/packages/breadcrumb/package.json +++ b/src/toolbars/packages/breadcrumb/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-breadcrumb", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/breadcrumb/vite.config.js b/src/toolbars/packages/breadcrumb/vite.config.js index b1783527e5..21600f81a1 100644 --- a/src/toolbars/packages/breadcrumb/vite.config.js +++ b/src/toolbars/packages/breadcrumb/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/clean/package.json b/src/toolbars/packages/clean/package.json index 9bb302efb3..948485cbbb 100644 --- a/src/toolbars/packages/clean/package.json +++ b/src/toolbars/packages/clean/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-clean", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/clean/vite.config.js b/src/toolbars/packages/clean/vite.config.js index 101fd157e3..1e28908642 100644 --- a/src/toolbars/packages/clean/vite.config.js +++ b/src/toolbars/packages/clean/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -28,7 +28,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/collaboration/package.json b/src/toolbars/packages/collaboration/package.json index 432cedbc9b..a59c661134 100644 --- a/src/toolbars/packages/collaboration/package.json +++ b/src/toolbars/packages/collaboration/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-collaboration", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/collaboration/vite.config.js b/src/toolbars/packages/collaboration/vite.config.js index 55b282af70..2ca358b2ab 100644 --- a/src/toolbars/packages/collaboration/vite.config.js +++ b/src/toolbars/packages/collaboration/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/fullscreen/package.json b/src/toolbars/packages/fullscreen/package.json index d676faa85f..37b9bb6891 100644 --- a/src/toolbars/packages/fullscreen/package.json +++ b/src/toolbars/packages/fullscreen/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-fullscreen", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/fullscreen/vite.config.js b/src/toolbars/packages/fullscreen/vite.config.js index 8591724bac..15d788a857 100644 --- a/src/toolbars/packages/fullscreen/vite.config.js +++ b/src/toolbars/packages/fullscreen/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -28,7 +28,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/generate-vue/package.json b/src/toolbars/packages/generate-vue/package.json index f11cb64562..b5a6382aa5 100644 --- a/src/toolbars/packages/generate-vue/package.json +++ b/src/toolbars/packages/generate-vue/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-generate-vue", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/generate-vue/vite.config.js b/src/toolbars/packages/generate-vue/vite.config.js index 091b0404f4..090e112780 100644 --- a/src/toolbars/packages/generate-vue/vite.config.js +++ b/src/toolbars/packages/generate-vue/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -28,7 +28,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/, /^prettier.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/, /^prettier.*/] } } }) diff --git a/src/toolbars/packages/lang/package.json b/src/toolbars/packages/lang/package.json index 9612df976d..ece45a75d2 100644 --- a/src/toolbars/packages/lang/package.json +++ b/src/toolbars/packages/lang/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-lang", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/lang/vite.config.js b/src/toolbars/packages/lang/vite.config.js index 42115790d2..493a84fbf3 100644 --- a/src/toolbars/packages/lang/vite.config.js +++ b/src/toolbars/packages/lang/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/layout/package.json b/src/toolbars/packages/layout/package.json index b4f77b39c0..fdb7b7c2c2 100644 --- a/src/toolbars/packages/layout/package.json +++ b/src/toolbars/packages/layout/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-layout", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/layout/vite.config.js b/src/toolbars/packages/layout/vite.config.js index 7d1aee50ed..4081b7b560 100644 --- a/src/toolbars/packages/layout/vite.config.js +++ b/src/toolbars/packages/layout/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -28,7 +28,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/lock/package.json b/src/toolbars/packages/lock/package.json index c045b3b038..393e0af974 100644 --- a/src/toolbars/packages/lock/package.json +++ b/src/toolbars/packages/lock/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-checkinout", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/lock/vite.config.js b/src/toolbars/packages/lock/vite.config.js index 4eee10d063..736e82ba31 100644 --- a/src/toolbars/packages/lock/vite.config.js +++ b/src/toolbars/packages/lock/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -29,7 +29,7 @@ export default defineConfig({ }, rollupOptions: { output: {}, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/logo/package.json b/src/toolbars/packages/logo/package.json index 668d924efb..94d57ff1f6 100644 --- a/src/toolbars/packages/logo/package.json +++ b/src/toolbars/packages/logo/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-logo", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/logo/vite.config.js b/src/toolbars/packages/logo/vite.config.js index 52510b8700..329e5ed0dd 100644 --- a/src/toolbars/packages/logo/vite.config.js +++ b/src/toolbars/packages/logo/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/logout/package.json b/src/toolbars/packages/logout/package.json index 0365d0daf8..898f6413d5 100644 --- a/src/toolbars/packages/logout/package.json +++ b/src/toolbars/packages/logout/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-logout", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/logout/vite.config.js b/src/toolbars/packages/logout/vite.config.js index 3646a8acdc..068bbbeb1a 100644 --- a/src/toolbars/packages/logout/vite.config.js +++ b/src/toolbars/packages/logout/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/media/package.json b/src/toolbars/packages/media/package.json index aabac54458..fd77e98fb0 100644 --- a/src/toolbars/packages/media/package.json +++ b/src/toolbars/packages/media/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-media", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/media/vite.config.js b/src/toolbars/packages/media/vite.config.js index b7fa851a8a..17c4196a81 100644 --- a/src/toolbars/packages/media/vite.config.js +++ b/src/toolbars/packages/media/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/preview/package.json b/src/toolbars/packages/preview/package.json index 44b4722220..9b002ebf75 100644 --- a/src/toolbars/packages/preview/package.json +++ b/src/toolbars/packages/preview/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-preview", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/preview/vite.config.js b/src/toolbars/packages/preview/vite.config.js index f35fa6fb97..19a198f606 100644 --- a/src/toolbars/packages/preview/vite.config.js +++ b/src/toolbars/packages/preview/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -28,7 +28,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/redoundo/package.json b/src/toolbars/packages/redoundo/package.json index a11d98f90b..8033b17a0b 100644 --- a/src/toolbars/packages/redoundo/package.json +++ b/src/toolbars/packages/redoundo/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-redoundo", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/redoundo/vite.config.js b/src/toolbars/packages/redoundo/vite.config.js index c8e4517986..a2390dabc4 100644 --- a/src/toolbars/packages/redoundo/vite.config.js +++ b/src/toolbars/packages/redoundo/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/refresh/package.json b/src/toolbars/packages/refresh/package.json index 4244eedb8d..379734cce9 100644 --- a/src/toolbars/packages/refresh/package.json +++ b/src/toolbars/packages/refresh/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-refresh", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/refresh/vite.config.js b/src/toolbars/packages/refresh/vite.config.js index 0ddb7d57dc..ccb280dcd1 100644 --- a/src/toolbars/packages/refresh/vite.config.js +++ b/src/toolbars/packages/refresh/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -28,7 +28,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/save/package.json b/src/toolbars/packages/save/package.json index 03417cc69d..5f42caf1c9 100644 --- a/src/toolbars/packages/save/package.json +++ b/src/toolbars/packages/save/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-save", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/save/vite.config.js b/src/toolbars/packages/save/vite.config.js index aec7e03920..62ce9955c1 100644 --- a/src/toolbars/packages/save/vite.config.js +++ b/src/toolbars/packages/save/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -31,7 +31,7 @@ export default defineConfig({ output: { banner: 'import "./style.css"' }, - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/toolbars/packages/setting/package.json b/src/toolbars/packages/setting/package.json index c5326f970d..4d36b886b0 100644 --- a/src/toolbars/packages/setting/package.json +++ b/src/toolbars/packages/setting/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-toolbar-setting", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "scripts": { "build": "vite build" }, diff --git a/src/toolbars/packages/setting/vite.config.js b/src/toolbars/packages/setting/vite.config.js index fff52684f6..d1a9c03499 100644 --- a/src/toolbars/packages/setting/vite.config.js +++ b/src/toolbars/packages/setting/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -28,7 +28,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', /@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/utils/package.json b/src/utils/package.json index 99e3a5e33d..b71e6d5c81 100644 --- a/src/utils/package.json +++ b/src/utils/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-utils", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "description": "", "main": "dist/index.js", "module": "dist/index.js", diff --git a/src/utils/vite.config.js b/src/utils/vite.config.js index ce24ef46a5..1b48c67c88 100644 --- a/src/utils/vite.config.js +++ b/src/utils/vite.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { defineConfig } from 'vite' import path from 'path' @@ -26,7 +26,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: [/@opentiny\/lowcode.*/, /@opentiny\/vue.*/] + external: [/@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } }) diff --git a/src/webcomponent/package.json b/src/webcomponent/package.json index a412b8bb8e..3a50bdd844 100644 --- a/src/webcomponent/package.json +++ b/src/webcomponent/package.json @@ -1,6 +1,9 @@ { "name": "@opentiny/tiny-engine-webcomponent-core", - "version": "1.0.0", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, "description": "webcomponent vue core", "author": "tinybuilder", "scripts": { From 0141072e3574cc76c9d4a74a26d82b2b37865896 Mon Sep 17 00:00:00 2001 From: ajaxzheng <894103554@qq.com> Date: Tue, 26 Sep 2023 14:15:19 +0800 Subject: [PATCH 002/322] fix: add logo and fix readme (#5) --- README.en-US.md | 2 +- logo.svg | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 logo.svg diff --git a/README.en-US.md b/README.en-US.md index c41c5b0fb6..5de4529728 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -93,7 +93,7 @@ Please read the [Contribution Guide](CONTRIBUTING.md) before participating in th - Add official assistant WeChat opentiny-official and join the technical exchange group - Join the mailing list opentiny@googlegroups.com -## Open source protocol +## License [MIT](LICENSE) diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000000..59d1b063bd --- /dev/null +++ b/logo.svg @@ -0,0 +1,44 @@ + + + logo-top + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenTiny + + + + + + + + + + + + + \ No newline at end of file From ba8f21ea6dc7460f2211582b95e285d396540a43 Mon Sep 17 00:00:00 2001 From: ajaxzheng <894103554@qq.com> Date: Tue, 26 Sep 2023 14:30:18 +0800 Subject: [PATCH 003/322] update readme (#6) * fix: add logo and fix readme * fix: update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6cc0a5a576..483f3e8a8c 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,6 @@ Please read the [Contribution Guide](CONTRIBUTING.md) before participating in th - Add official assistant WeChat opentiny-official and join the technical exchange group - Join the mailing list opentiny@googlegroups.com -## Open source protocol +## License [MIT](LICENSE) From 1b882ccc793ae681487a6e0506699c821f322c57 Mon Sep 17 00:00:00 2001 From: ajaxZheng <894103554@qq.com> Date: Fri, 29 Sep 2023 11:17:46 +0800 Subject: [PATCH 004/322] feat: add pnpm to project --- .gitignore | 2 + .husky/pre-commit | 2 +- .npmignore | 7 +- README.en-US.md | 48 +- README.md | 44 +- README.zh-CN.md | 42 +- jsconfig.json | 128 +-- lerna.json | 14 +- lint-staged.config.js | 4 +- mockServer/package.json | 2 +- mockServer/src/database/blockCategories.db | 3 + mockServer/src/database/blockGroups.db | 3 + mockServer/src/database/blocks.db | 4 + mockServer/src/database/pages.db | 1 - .../get/app-center/v1/apps/schema/918.json | 850 -------------- .../get/material-center/block-categories.json | 503 -------- .../get/material-center/block-groups.json | 1022 ----------------- .../src/mock/get/material-center/blocks.json | 441 ------- mockServer/src/routes/main-routes.js | 175 ++- mockServer/src/services/block.js | 103 +- mockServer/src/services/blockCategory.js | 76 ++ mockServer/src/services/blockGroup.js | 75 ++ mockServer/src/services/mockService.js | 37 + package.json | 117 +- {src => packages}/canvas/.eslintrc.js | 0 {src => packages}/canvas/.gitignore | 0 {src => packages}/canvas/README.md | 0 {src => packages}/canvas/canvas.html | 0 {src => packages}/canvas/index.html | 0 packages/canvas/package.json | 39 + .../canvas}/public/favicon.ico | Bin {src => packages}/canvas/src/Design.vue | 0 {src => packages}/canvas/src/assets/logo.png | Bin {src => packages}/canvas/src/canvas.js | 0 .../src/components/builtin/CanvasBox.vue | 0 .../src/components/builtin/CanvasCol.vue | 0 .../components/builtin/CanvasCollection.js | 0 .../components/builtin/CanvasCollection.vue | 0 .../src/components/builtin/CanvasIcon.vue | 0 .../src/components/builtin/CanvasImg.vue | 0 .../components/builtin/CanvasPlaceholder.vue | 0 .../src/components/builtin/CanvasRow.vue | 0 .../builtin/CanvasRowColContainer.vue | 0 .../src/components/builtin/CanvasSlot.vue | 0 .../src/components/builtin/CanvasText.vue | 0 .../src/components/builtin/builtin.json | 0 .../canvas/src/components/builtin/helper.js | 0 .../canvas/src/components/builtin/index.js | 0 .../canvas/src/components/common/index.js | 0 .../src/components/container/CanvasAction.vue | 0 .../components/container/CanvasContainer.vue | 0 .../components/container/CanvasDivider.vue | 0 .../components/container/CanvasDragItem.vue | 0 .../src/components/container/CanvasFooter.vue | 0 .../src/components/container/CanvasMenu.vue | 0 .../src/components/container/CanvasResize.vue | 0 .../container/CanvasResizeBorder.vue | 0 .../src/components/container/container.js | 0 .../src/components/container/keyboard.js | 0 .../components/container/shortCutPopover.vue | 0 .../src/components/render/CanvasEmpty.vue | 0 .../src/components/render/RenderMain.js | 0 .../canvas/src/components/render/context.js | 0 .../canvas/src/components/render/render.js | 0 .../canvas/src/components/render/runner.js | 2 - {src => packages}/canvas/src/i18n.js | 0 {src => packages}/canvas/src/i18n/en.json | 0 {src => packages}/canvas/src/i18n/zh.json | 0 {src => packages}/canvas/src/index.js | 24 +- {src => packages}/canvas/src/locale.js | 0 {src => packages}/canvas/src/lowcode.js | 0 {src => packages}/canvas/src/main.js | 0 {src => packages}/canvas/test/form.json | 0 {src => packages}/canvas/test/group.json | 0 {src => packages}/canvas/test/jsslot.json | 0 {src => packages}/canvas/vite.config.js | 4 +- .../common/component/BindI18n.vue | 0 .../common/component/BlockDeployDialog.vue | 2 +- .../common/component/BlockDescription.vue | 0 .../common/component/BlockHistoryList.vue | 0 .../common/component/BlockHistoryTemplate.vue | 0 .../common/component/BlockLinkEvent.vue | 0 .../common/component/BlockLinkField.vue | 0 .../common/component/ButtonGroup.vue | 0 .../common/component/CloseIcon.vue | 0 .../common/component/ConfigCollapse.vue | 0 .../common/component/ConfigGroup.vue | 0 .../common/component/ConfigItem.vue | 0 .../common/component/ConfigRender.vue | 0 .../common/component/EmptyTip.vue | 0 .../common/component/LifeCycles.vue | 2 +- .../common/component/MaskModal.vue | 0 .../common/component/MetaArrayItem.vue | 0 .../common/component/MetaBindI18n.vue | 0 .../common/component/MetaBindVariable.vue | 4 +- .../common/component/MetaButtonGroup.vue | 2 +- .../common/component/MetaCascader.vue | 2 +- .../common/component/MetaCheckBox.vue | 0 .../common/component/MetaCheckboxGroup.vue | 2 +- .../common/component/MetaChildItem.vue | 0 .../common/component/MetaCodeEditor.vue | 0 .../common/component/MetaCodeEditorList.vue | 0 .../common/component/MetaCollection.vue | 0 .../common/component/MetaColor.vue | 0 .../common/component/MetaContainer.vue | 0 .../common/component/MetaDatePicker.vue | 0 .../common/component/MetaDescription.vue | 0 .../common/component/MetaForm.vue | 0 .../common/component/MetaGroupItem.vue | 0 .../common/component/MetaHtmlAttributes.vue | 0 .../common/component/MetaHtmlText.vue | 0 .../common/component/MetaInput.vue | 0 .../common/component/MetaIpSection.vue | 0 .../common/component/MetaJsSlot.vue | 0 .../common/component/MetaLayoutGrid.vue | 0 .../common/component/MetaList.vue | 0 .../common/component/MetaListActions.vue | 0 .../common/component/MetaListItem.vue | 0 .../common/component/MetaListItems.vue | 0 .../common/component/MetaListTitle.vue | 0 .../common/component/MetaModal.vue | 0 .../common/component/MetaModalItem.vue | 0 .../common/component/MetaNumber.md | 0 .../common/component/MetaNumber.vue | 0 .../common/component/MetaPopover.vue | 0 .../common/component/MetaRadio.vue | 0 .../common/component/MetaRadioGroup.vue | 2 +- .../common/component/MetaRelatedColumns.vue | 0 .../common/component/MetaRelatedEditor.vue | 0 .../common/component/MetaSelect.vue | 2 +- .../common/component/MetaSelectIcon.vue | 0 .../common/component/MetaSlider.vue | 0 .../common/component/MetaSlot.vue | 0 .../common/component/MetaSwitch.vue | 0 .../common/component/MonacoEditor.vue | 0 .../common/component/MultiTypeSelector.vue | 0 {src => packages}/common/component/Pane.vue | 0 .../common/component/PluginBlockList.vue | 0 .../common/component/PluginPanel.vue | 0 .../common/component/PluginSetting.vue | 0 .../common/component/ProgressBar.vue | 0 .../common/component/PublicIcon.vue | 0 .../common/component/SaveNewBlock.vue | 2 +- .../common/component/SplitPanes.vue | 0 .../common/component/SvgButton.vue | 0 .../common/component/VideoGuide.vue | 0 .../common/component/VueMonaco.vue | 0 {src => packages}/common/i18n/en-us.json | 0 {src => packages}/common/i18n/zh-cn.json | 0 {src => packages}/common/index.js | 0 {src => packages}/common/js/app.js | 0 {src => packages}/common/js/ast.js | 0 {src => packages}/common/js/completion.js | 0 {src => packages}/common/js/constants.js | 0 {src => packages}/common/js/css.js | 0 {src => packages}/common/js/environments.js | 20 +- {src => packages}/common/js/http.js | 4 +- {src => packages}/common/js/i18n.js | 0 {src => packages}/common/js/index.js | 0 {src => packages}/common/js/linter.js | 0 {src => packages}/common/js/monitor.js | 0 {src => packages}/common/js/preview.js | 0 {src => packages}/common/js/verification.js | 0 .../common/js/vscodeGenerateFile.js | 0 {src => packages}/common/package.json | 25 +- {src => packages}/common/vite.config.js | 23 +- {src => packages}/controller/adapter.js | 2 +- packages/controller/package.json | 35 + {src => packages}/controller/src/example.js | 0 .../controller/src/globalConfig.js | 0 {src => packages}/controller/src/index.js | 0 {src => packages}/controller/src/useApp.js | 0 {src => packages}/controller/src/useBlock.js | 0 .../controller/src/useBreadcrumb.js | 0 {src => packages}/controller/src/useCanvas.js | 2 +- {src => packages}/controller/src/useData.js | 0 .../controller/src/useDataSource.js | 2 +- .../controller/src/useEditorInfo.js | 2 +- .../controller/src/useHistory.js | 0 {src => packages}/controller/src/useLayout.js | 0 .../controller/src/useMessage.js | 0 {src => packages}/controller/src/useModal.jsx | 0 .../controller/src/useNotify.jsx | 0 {src => packages}/controller/src/usePage.js | 0 .../controller/src/useProperties.js | 0 .../controller/src/useProperty.js | 0 .../controller/src/useResource.js | 3 +- .../controller/src/useSaveLocal.js | 0 .../controller/src/useTranslate.js | 4 +- {src => packages}/controller/utils.js | 0 {src => packages}/controller/vite.config.js | 8 +- .env.alpha => packages/design-core/.env.alpha | 0 .../design-core/.env.development | 2 +- .env.prod => packages/design-core/.env.prod | 0 packages/design-core/.npmignore | 8 + .../design-core}/assets/AI.png | Bin .../design-core}/assets/accessdeclined.svg | 0 .../design-core}/assets/accordion.svg | 0 .../design-core}/assets/achart.svg | 0 .../design-core}/assets/add-collection.svg | 0 .../design-core}/assets/add-folder.svg | 0 .../design-core}/assets/add-group.svg | 0 .../design-core}/assets/add-page-new.svg | 0 .../design-core}/assets/add-page.svg | 0 .../design-core}/assets/add-utils.svg | 0 .../design-core}/assets/add.svg | 0 .../design-core}/assets/alert.svg | 0 .../assets/align-content-center.svg | 0 .../design-core}/assets/align-content-end.svg | 0 .../assets/align-content-space-around.svg | 0 .../assets/align-content-space-between.svg | 0 .../assets/align-content-start.svg | 0 .../assets/align-content-stretch.svg | 0 .../assets/align-items-baseline.svg | 0 .../assets/align-items-center.svg | 0 .../design-core}/assets/align-items-end.svg | 0 .../design-core}/assets/align-items-start.svg | 0 .../assets/align-items-stretch.svg | 0 .../design-core}/assets/background-color.svg | 0 .../design-core}/assets/background-image.svg | 0 .../design-core}/assets/bar.svg | 0 .../design-core}/assets/basic-search.svg | 0 .../design-core}/assets/bdlayout.svg | 0 .../design-core}/assets/beingmaintained.svg | 0 .../design-core}/assets/bem.svg | 0 .../design-core}/assets/beta.svg | 0 .../design-core}/assets/bind-variable.svg | 0 .../design-core}/assets/block-default-img.svg | 0 .../design-core}/assets/block-manage.svg | 0 .../design-core}/assets/border-all.svg | 0 .../design-core}/assets/border-bottom.svg | 0 .../design-core}/assets/border-left.svg | 0 .../assets/border-radius-bottomleft.svg | 0 .../assets/border-radius-bottomright.svg | 0 .../assets/border-radius-multiple.svg | 0 .../assets/border-radius-single.svg | 0 .../assets/border-radius-topleft.svg | 0 .../assets/border-radius-topright.svg | 0 .../design-core}/assets/border-right.svg | 0 .../assets/border-style-dashed.svg | 0 .../assets/border-style-dotted.svg | 0 .../assets/border-style-solid.svg | 0 .../design-core}/assets/border-top.svg | 0 .../design-core}/assets/box.svg | 0 .../design-core}/assets/breadcrumb.svg | 0 .../design-core}/assets/bridge.svg | 0 .../design-core}/assets/button.svg | 0 .../design-core}/assets/buttons.svg | 0 .../assets/cancel-full-screen.svg | 0 .../design-core}/assets/canvas-fit.svg | 0 .../design-core}/assets/carousel.svg | 0 .../design-core}/assets/carouselitem.svg | 0 .../design-core}/assets/chat-maximize.svg | 0 .../design-core}/assets/chat-message.svg | 0 .../design-core}/assets/chat-microphone.svg | 0 .../design-core}/assets/chat-minimize.svg | 0 .../design-core}/assets/checkbox.svg | 0 .../design-core}/assets/checkboxgroup.svg | 0 .../design-core}/assets/checkboxs.svg | 0 .../design-core}/assets/checkin.svg | 0 .../design-core}/assets/checkout.svg | 0 .../design-core}/assets/clear.svg | 0 .../design-core}/assets/clock-small.svg | 0 .../assets/clock-wise-counter.svg | 0 .../design-core}/assets/clock-wise.svg | 0 .../design-core}/assets/close.svg | 0 .../design-core}/assets/closest-corner.svg | 0 .../design-core}/assets/closest-side.svg | 0 .../design-core}/assets/cloud-shell.svg | 0 .../design-core}/assets/cn.svg | 0 .../design-core}/assets/col.svg | 0 .../design-core}/assets/collapse.svg | 0 .../design-core}/assets/collection.svg | 0 .../design-core}/assets/copy-outline.svg | 0 .../design-core}/assets/copy.svg | 0 .../design-core}/assets/cross.svg | 0 .../design-core}/assets/cursor-alias.svg | 0 .../design-core}/assets/cursor-auto.svg | 0 .../design-core}/assets/cursor-cell.svg | 0 .../design-core}/assets/cursor-col-resize.svg | 0 .../assets/cursor-context-menu.svg | 0 .../design-core}/assets/cursor-copy.svg | 0 .../design-core}/assets/cursor-crosshair.svg | 0 .../design-core}/assets/cursor-e-resize.svg | 0 .../design-core}/assets/cursor-ew-resize.svg | 0 .../design-core}/assets/cursor-grab.svg | 0 .../design-core}/assets/cursor-grabbing.svg | 0 .../design-core}/assets/cursor-help.svg | 0 .../design-core}/assets/cursor-move.svg | 0 .../design-core}/assets/cursor-n-resize.svg | 0 .../design-core}/assets/cursor-ne-resize.svg | 0 .../assets/cursor-nesw-resize.svg | 0 .../design-core}/assets/cursor-none.svg | 0 .../assets/cursor-not-allowed.svg | 0 .../design-core}/assets/cursor-ns-resize.svg | 0 .../design-core}/assets/cursor-nw-resize.svg | 0 .../assets/cursor-nwse-resize.svg | 0 .../design-core}/assets/cursor-pointer.svg | 0 .../design-core}/assets/cursor-progress.svg | 0 .../design-core}/assets/cursor-row-resize.svg | 0 .../design-core}/assets/cursor-s-resize.svg | 0 .../design-core}/assets/cursor-se-resize.svg | 0 .../design-core}/assets/cursor-sw-resize.svg | 0 .../design-core}/assets/cursor-text.svg | 0 .../assets/cursor-vertical-text.svg | 0 .../design-core}/assets/cursor-w-resize.svg | 0 .../design-core}/assets/cursor-wait.svg | 0 .../design-core}/assets/cursor-zoom-in.svg | 0 .../design-core}/assets/cursor-zoom-out.svg | 0 .../design-core}/assets/data.svg | 0 .../design-core}/assets/datepick.svg | 0 .../design-core}/assets/daterange.svg | 0 .../design-core}/assets/delete.svg | 0 .../design-core}/assets/descend.svg | 0 .../design-core}/assets/desktop-large.svg | 0 .../design-core}/assets/dialogbox.svg | 0 .../design-core}/assets/display-block.svg | 0 .../design-core}/assets/display-flex.svg | 0 .../design-core}/assets/display-grid.svg | 0 .../assets/display-inline-block.svg | 0 .../design-core}/assets/display-inline.svg | 0 .../design-core}/assets/dragger.svg | 0 .../design-core}/assets/dropdown.svg | 0 .../design-core}/assets/edit.svg | 0 .../design-core}/assets/ellipsis.svg | 0 .../design-core}/assets/empty-action.svg | 0 .../design-core}/assets/empty-data.svg | 0 .../design-core}/assets/empty.svg | 0 .../design-core}/assets/en.svg | 0 .../design-core}/assets/events.svg | 0 .../design-core}/assets/expand.svg | 0 .../design-core}/assets/eye-invisible.svg | 0 .../design-core}/assets/eye.svg | 0 .../design-core}/assets/farthest-corner.svg | 0 .../design-core}/assets/farthest-side.svg | 0 .../design-core}/assets/fixed.svg | 0 .../assets/flex-alignbaselinerow.svg | 0 .../assets/flex-aligncenterrow.svg | 0 .../assets/flex-alignflex-endrow.svg | 0 .../assets/flex-alignflex-startrow.svg | 0 .../assets/flex-alignstretchrow.svg | 0 .../assets/flex-directioncolumn-reverse.svg | 0 .../assets/flex-directioncolumn.svg | 0 .../assets/flex-directionrow-reverse.svg | 0 .../design-core}/assets/flex-directionrow.svg | 0 .../assets/flex-justifycenterrow.svg | 0 .../assets/flex-justifyflex-endrow.svg | 0 .../assets/flex-justifyflex-startrow.svg | 0 .../assets/flex-justifyspace-aroundrow.svg | 0 .../assets/flex-justifyspace-betweenrow.svg | 0 .../design-core}/assets/flow-add.svg | 0 .../design-core}/assets/flow-align-bottom.svg | 0 .../design-core}/assets/flow-align-left.svg | 0 .../design-core}/assets/flow-align-level.svg | 0 .../design-core}/assets/flow-align-rf.svg | 0 .../design-core}/assets/flow-align-right.svg | 0 .../design-core}/assets/flow-align-top.svg | 0 .../assets/flow-align-vertical.svg | 0 .../assets/flow-box-select-rf.svg | 0 .../design-core}/assets/flow-box-select.svg | 0 .../design-core}/assets/flow-checkmark.svg | 0 .../design-core}/assets/flow-clear.svg | 0 .../design-core}/assets/flow-cross.svg | 0 .../design-core}/assets/flow-delete.svg | 0 .../design-core}/assets/flow-download.svg | 0 .../design-core}/assets/flow-edit.svg | 0 .../design-core}/assets/flow-empty.svg | 0 .../design-core}/assets/flow-failure.svg | 0 .../assets/flow-file-download.svg | 0 .../assets/flow-fullscreen-icon.svg | 0 .../design-core}/assets/flow-guide.svg | 0 .../design-core}/assets/flow-help-center.svg | 0 .../design-core}/assets/flow-location.svg | 0 .../assets/flow-minscreen-icon.svg | 0 .../design-core}/assets/flow-navigation.svg | 0 .../design-core}/assets/flow-params-rf.svg | 0 .../design-core}/assets/flow-params.svg | 0 .../design-core}/assets/flow-prompt.svg | 0 .../design-core}/assets/flow-redo.svg | 0 .../design-core}/assets/flow-reduce.svg | 0 .../design-core}/assets/flow-refresh.svg | 0 .../design-core}/assets/flow-requirestar.svg | 0 .../design-core}/assets/flow-select.svg | 0 .../design-core}/assets/flow-set-bottom.svg | 0 .../design-core}/assets/flow-set-top.svg | 0 .../design-core}/assets/flow-success.svg | 0 .../design-core}/assets/flow-undo.svg | 0 .../design-core}/assets/flow-view-rf.svg | 0 .../design-core}/assets/flow-view.svg | 0 .../design-core}/assets/flow-zoom-in.svg | 0 .../design-core}/assets/flow-zoom-out.svg | 0 .../design-core}/assets/fold-outline.svg | 0 .../design-core}/assets/folder-wold.svg | 0 .../design-core}/assets/folder.svg | 0 .../design-core}/assets/font-style-italic.svg | 0 .../design-core}/assets/font-style-none.svg | 0 .../design-core}/assets/form.svg | 0 .../design-core}/assets/formfield.svg | 0 .../design-core}/assets/formitem.svg | 0 .../design-core}/assets/frozenpage.svg | 0 .../design-core}/assets/full-screen.svg | 0 .../design-core}/assets/generate-code.svg | 0 .../design-core}/assets/grid-column-flex.svg | 0 .../design-core}/assets/grid-row-auto.svg | 0 .../design-core}/assets/grid.svg | 0 .../design-core}/assets/h1.svg | 0 .../design-core}/assets/h16.svg | 0 .../design-core}/assets/h2.svg | 0 .../design-core}/assets/h3.svg | 0 .../design-core}/assets/h4.svg | 0 .../design-core}/assets/h5.svg | 0 .../design-core}/assets/h6.svg | 0 .../design-core}/assets/help-center.svg | 0 .../design-core}/assets/help.svg | 0 .../design-core}/assets/histogram.svg | 0 .../design-core}/assets/home-outline.svg | 0 .../design-core}/assets/home.svg | 0 .../design-core}/assets/hr.svg | 0 .../design-core}/assets/icon.svg | 0 .../design-core}/assets/image.svg | 0 .../design-core}/assets/input.svg | 0 .../design-core}/assets/js.svg | 0 .../design-core}/assets/json.svg | 0 .../assets/justify-content-center.svg | 0 .../assets/justify-content-end.svg | 0 .../assets/justify-content-space-around.svg | 0 .../assets/justify-content-space-between.svg | 0 .../assets/justify-content-start.svg | 0 .../assets/justify-content-stretch.svg | 0 .../assets/justify-items-baseline.svg | 0 .../assets/justify-items-center.svg | 0 .../design-core}/assets/justify-items-end.svg | 0 .../assets/justify-items-start.svg | 0 .../assets/justify-items-stretch.svg | 0 .../design-core}/assets/language.svg | 0 .../design-core}/assets/laptop-cut-corner.svg | 0 .../design-core}/assets/line.svg | 0 .../design-core}/assets/linear-gradient.svg | 0 .../design-core}/assets/link.svg | 0 .../design-core}/assets/list.svg | 0 .../design-core}/assets/loading.svg | 0 .../design-core}/assets/location.svg | 0 .../design-core}/assets/locked-outline.svg | 0 .../design-core}/assets/locked.svg | 0 .../design-core}/assets/logout.svg | 0 .../design-core}/assets/margin.svg | 0 .../design-core}/assets/materials.svg | 0 .../design-core}/assets/menu.svg | 0 .../design-core}/assets/mobile-landscape.svg | 0 .../design-core}/assets/mobile-portrai.svg | 0 .../design-core}/assets/new-page.svg | 0 .../design-core}/assets/news.svg | 0 .../design-core}/assets/nonsupportregion.svg | 0 .../design-core}/assets/notify-alarm.svg | 0 .../design-core}/assets/notify-failure.svg | 0 .../design-core}/assets/notify-prompt.svg | 0 .../design-core}/assets/notify-success.svg | 0 .../design-core}/assets/numeric.svg | 0 .../design-core}/assets/overflow-scroll.svg | 0 .../design-core}/assets/padding.svg | 0 .../design-core}/assets/page-schema.svg | 0 .../design-core}/assets/page.svg | 0 .../design-core}/assets/pager.svg | 0 .../design-core}/assets/paragraph.svg | 0 .../design-core}/assets/pencil-thick.svg | 0 .../design-core}/assets/pie.svg | 0 .../design-core}/assets/plugin-help.svg | 0 .../design-core}/assets/plugin-icon-data.svg | 0 .../design-core}/assets/plugin-icon-js.svg | 0 .../assets/plugin-icon-language.svg | 0 .../assets/plugin-icon-materials.svg | 0 .../assets/plugin-icon-page-schema.svg | 0 .../design-core}/assets/plugin-icon-page.svg | 0 .../assets/plugin-icon-plugin-help.svg | 0 .../design-core}/assets/plugin-icon-robot.svg | 0 .../assets/plugin-icon-sresources.svg | 0 .../assets/plugin-icon-symbol.svg | 0 .../design-core}/assets/plugin-icon-tree.svg | 0 .../assets/plugin-icon-tutorial.svg | 0 .../design-core}/assets/plugin-icon-var.svg | 0 .../design-core}/assets/plus-circle.svg | 0 .../design-core}/assets/plus.svg | 0 .../design-core}/assets/popeditor.svg | 0 .../design-core}/assets/popover.svg | 0 .../design-core}/assets/position-all.svg | 0 .../assets/position-bottom-left.svg | 0 .../assets/position-bottom-right.svg | 0 .../design-core}/assets/position-bottom.svg | 0 .../design-core}/assets/position-left.svg | 0 .../design-core}/assets/position-right.svg | 0 .../design-core}/assets/position-top-left.svg | 0 .../assets/position-top-right.svg | 0 .../design-core}/assets/position-top.svg | 0 .../design-core}/assets/preview.svg | 0 .../design-core}/assets/prompt.svg | 0 .../design-core}/assets/radar.svg | 0 .../design-core}/assets/radial-gradient.svg | 0 .../design-core}/assets/radio.svg | 0 .../design-core}/assets/realtime-flow.svg | 0 .../design-core}/assets/redo.svg | 0 .../design-core}/assets/refresh.svg | 0 .../design-core}/assets/report.svg | 0 .../design-core}/assets/resources.svg | 0 .../design-core}/assets/return.svg | 0 .../design-core}/assets/rf-alarm.svg | 0 .../assets/rf-resources/flowchart-ecs.svg | 0 .../assets/rf-resources/flowchart-evs.svg | 0 .../assets/rf-resources/flowchart-rds.svg | 0 .../assets/rf-resources/flowchart-vpc.svg | 0 .../design-core}/assets/ring.svg | 0 .../design-core}/assets/row.svg | 0 .../design-core}/assets/save.svg | 0 .../design-core}/assets/search.svg | 0 .../design-core}/assets/select.svg | 0 .../design-core}/assets/setting-outline.svg | 0 .../design-core}/assets/setting.svg | 0 .../design-core}/assets/slot.svg | 0 .../design-core}/assets/small-list.svg | 0 .../design-core}/assets/stars.svg | 0 .../design-core}/assets/start.svg | 0 .../assets/style-setting-background-image.svg | 0 .../design-core}/assets/swiper.svg | 0 .../design-core}/assets/switch.svg | 0 .../design-core}/assets/symbol.svg | 0 .../design-core}/assets/table.svg | 0 .../design-core}/assets/tablefilter.svg | 0 .../design-core}/assets/tablet-portrait.svg | 0 .../design-core}/assets/tabs.svg | 0 .../design-core}/assets/tag.svg | 0 .../design-core}/assets/target.svg | 0 .../design-core}/assets/text-align-center.svg | 0 .../assets/text-align-justify.svg | 0 .../design-core}/assets/text-align-left.svg | 0 .../design-core}/assets/text-align-right.svg | 0 .../design-core}/assets/text-copy-page.svg | 0 .../assets/text-decoration-overline.svg | 0 .../assets/text-decoration-strike.svg | 0 .../assets/text-decoration-underline.svg | 0 .../assets/text-direction-ltr.svg | 0 .../assets/text-direction-rtl.svg | 0 .../design-core}/assets/text-page-common.svg | 0 .../assets/text-page-folder-closed.svg | 0 .../design-core}/assets/text-page-folder.svg | 0 .../design-core}/assets/text-page-home.svg | 0 .../design-core}/assets/text-page-link.svg | 0 .../design-core}/assets/text-page-revert.svg | 0 .../design-core}/assets/text-page-review.svg | 0 .../assets/text-source-delete.svg | 0 .../assets/text-source-list-add.svg | 0 .../assets/text-source-list-close.svg | 0 .../assets/text-source-list-ref.svg | 0 .../assets/text-source-setting.svg | 0 .../assets/text-source-string.svg | 0 .../assets/text-transform-capitalize.svg | 0 .../assets/text-transform-lowercase.svg | 0 .../assets/text-transform-sentence.svg | 0 .../design-core}/assets/text.svg | 0 .../design-core}/assets/tile-x.svg | 0 .../design-core}/assets/tile-xy.svg | 0 .../design-core}/assets/tile-y.svg | 0 .../design-core}/assets/timeline.svg | 0 .../design-core}/assets/tiny-logo.svg | 0 .../design-core}/assets/tooltip.svg | 0 .../assets/transform-origin-bottom-left.svg | 0 .../assets/transform-origin-bottom-right.svg | 0 .../assets/transform-origin-bottom.svg | 0 .../assets/transform-origin-center.svg | 0 .../assets/transform-origin-left.svg | 0 .../assets/transform-origin-point.svg | 0 .../assets/transform-origin-right.svg | 0 .../assets/transform-origin-top-left.svg | 0 .../assets/transform-origin-top-right.svg | 0 .../assets/transform-origin-top.svg | 0 .../design-core}/assets/trash.svg | 0 .../design-core}/assets/tree-shape.svg | 0 .../design-core}/assets/tree.svg | 0 .../design-core}/assets/tutorial.svg | 0 .../design-core}/assets/undo.svg | 0 .../design-core}/assets/unfold-outline.svg | 0 .../design-core}/assets/unlocked.svg | 0 .../design-core}/assets/var.svg | 0 .../design-core}/assets/video.svg | 0 .../design-core}/assets/warning.svg | 0 .../design-core}/assets/wizard.svg | 0 .../design-core/canvas.html | 2 +- .../design-core}/config/addons.js | 0 .../design-core}/config/lowcode.config.js | 0 index.html => packages/design-core/index.html | 2 +- packages/design-core/package.json | 122 ++ .../design-core/preview.html | 2 +- .../design-core/previewApp.html | 2 +- .../design-core}/public/favicon.ico | Bin .../i18n-template-for-batch-import.zip | Bin .../design-core}/public/img/bgcModal.png | Bin .../design-core}/public/img/defaultAvator.png | Bin .../design-core}/public/img/divider.png | Bin .../design-core}/public/img/dividerActive.png | Bin .../design-core}/public/img/rocket.jpg | Bin .../design-core}/public/img/webNova.jpg | Bin .../design-core}/public/mock/bundle.json | 0 .../public/monaco-linter/eslint.worker.js | 0 .../design-core}/public/tiny-vue.css | 0 .../design-core/scripts}/externalDeps.js | 20 +- .../design-core/setting.html | 2 +- {src/app => packages/design-core}/src/App.vue | 0 .../design-core}/src/DesignCanvas.vue | 0 .../design-core}/src/DesignPlugins.vue | 0 .../design-core}/src/DesignSettings.vue | 0 .../design-core}/src/DesignToolbars.vue | 0 packages/design-core/src/canvas.js | 3 + {src/app => packages/design-core}/src/main.js | 0 .../design-core/src}/preview/src/App.vue | 0 .../design-core/src}/preview/src/Toolbar.vue | 0 .../src}/preview/src/constant/index.js | 0 .../design-core/src}/preview/src/main.js | 0 .../src}/preview/src/preview/Preview.vue | 0 .../src}/preview/src/preview/generate.js | 0 .../src}/preview/src/preview/http.js | 0 .../src}/preview/src/preview/importMap.js | 0 .../src}/preview/src/preview/srcFiles.js | 0 .../src}/preview/src/preview/srcFiles/App.vue | 0 .../preview/src/preview/srcFiles/Login.vue | 0 .../preview/src/preview/srcFiles/Main.vue | 0 .../src}/preview/src/preview/srcFiles/app.js | 0 .../preview/src/preview/srcFiles/bridge.js | 0 .../src/preview/srcFiles/constant/index.js | 0 .../src/preview/srcFiles/dataSource.js | 0 .../src/preview/srcFiles/dataSourceMap.js | 0 .../src/preview/srcFiles/injectGlobal.js | 0 .../preview/src/preview/srcFiles/locales.js | 0 .../preview/src/preview/srcFiles/lowcode.js | 0 .../preview/src/preview/srcFiles/stores.js | 0 .../src/preview/srcFiles/storesHelper.js | 0 .../preview/src/preview/srcFiles/utils.js | 0 .../src}/preview/src/previewApp.js | 0 .../src}/preview/src/previewApp.vue | 0 .../design-core/vite.config.js | 130 ++- {src => packages}/http/package.json | 11 +- {src => packages}/http/src/Login.vue | 0 {src => packages}/http/src/axios.js | 0 {src => packages}/http/src/config.js | 0 {src => packages}/http/src/index.js | 0 {src => packages}/http/src/mock.js | 0 {src => packages}/http/vite.config.js | 0 {src => packages}/i18n/README.md | 0 {src => packages}/i18n/index.html | 0 {src => packages}/i18n/package.json | 2 +- {src => packages}/i18n/src/App.vue | 0 {src => packages}/i18n/src/I18nHost.vue | 0 {src => packages}/i18n/src/i18n.js | 0 {src => packages}/i18n/src/lib.js | 0 {src => packages}/i18n/src/main.js | 0 .../i18n/src/test/TestVueInject.vue | 0 .../i18n/src/test/TestVueUse.vue | 0 .../i18n/src/test/TestWebcomponent.vue | 0 {src => packages}/i18n/vite.config.js | 0 .../plugins}/block/index.js | 0 .../plugins}/block/mock/test.js | 0 .../plugins}/block/package.json | 14 +- .../plugins}/block/src/BlockConfig.vue | 0 .../plugins}/block/src/BlockEvent.vue | 0 .../plugins}/block/src/BlockEventForm.vue | 0 .../plugins}/block/src/BlockEventList.vue | 0 .../plugins}/block/src/BlockGroupArrange.vue | 0 .../plugins}/block/src/BlockGuide.vue | 0 .../plugins}/block/src/BlockProperty.vue | 0 .../plugins}/block/src/BlockPropertyForm.vue | 0 .../plugins}/block/src/BlockPropertyList.vue | 0 .../plugins}/block/src/BlockSetting.vue | 0 .../plugins}/block/src/CategoryEdit.vue | 0 .../plugins}/block/src/Main.vue | 0 .../block/src/js/blockPropertyForm.js | 0 .../plugins}/block/src/js/blockSetting.jsx | 0 .../plugins}/block/src/js/http.js | 0 .../plugins}/block/test/test.js | 0 .../plugins}/block/vite.config.js | 0 .../plugins}/bridge/assets/test.png | 0 .../plugins}/bridge/index.js | 0 .../plugins}/bridge/mock/test.js | 0 .../plugins}/bridge/package.json | 10 +- .../plugins}/bridge/src/BridgeManage.vue | 0 .../plugins}/bridge/src/BridgeSetting.vue | 0 .../plugins}/bridge/src/Main.vue | 0 .../plugins}/bridge/src/http.js | 0 .../plugins}/bridge/src/js/resource.js | 0 .../plugins}/bridge/test/test.js | 0 .../plugins}/bridge/vite.config.js | 0 .../plugins}/data/assets/test.png | 0 .../plugins}/data/index.js | 0 .../plugins}/data/mock/test.js | 0 .../plugins}/data/package.json | 11 +- .../plugins}/data/src/CreateRemoteAPI.vue | 0 .../data/src/CreateRemoteFunction.vue | 0 .../plugins}/data/src/CreateStore.vue | 0 .../plugins}/data/src/CreateVariable.vue | 0 .../plugins}/data/src/DataSourceList.vue | 0 .../data/src/DataSourceRightPanel.vue | 0 .../plugins}/data/src/EditorFunctionTool.vue | 0 .../plugins}/data/src/EditorI18nTool.vue | 0 .../plugins}/data/src/Main.vue | 0 .../plugins}/data/src/js/common.js | 0 .../plugins}/data/src/js/constants.js | 0 .../plugins}/data/src/js/http.js | 0 .../plugins}/data/test/test.js | 0 .../plugins}/data/vite.config.js | 0 .../plugins}/datasource/index.js | 0 packages/plugins/datasource/package.json | 35 + .../datasource/src/DataSourceField.vue | 0 .../datasource/src/DataSourceFieldCheck.vue | 0 .../src/DataSourceFieldCheckMultipleLine.vue | 0 .../src/DataSourceFieldCheckRanger.vue | 0 .../datasource/src/DataSourceFieldForm.vue | 0 .../datasource/src/DataSourceFieldList.vue | 0 .../datasource/src/DataSourceFieldType.vue | 0 .../datasource/src/DataSourceForm.vue | 0 .../src/DataSourceGlobalDataHandler.vue | 0 .../datasource/src/DataSourceList.vue | 0 .../datasource/src/DataSourceName.vue | 0 .../datasource/src/DataSourceRecordForm.vue | 0 .../datasource/src/DataSourceRecordList.vue | 0 .../datasource/src/DataSourceRecordUpload.vue | 0 .../src/DataSourceRemoteAutoload.vue | 0 .../src/DataSourceRemoteDataAdapter.vue | 0 .../src/DataSourceRemoteDataResult.vue | 0 .../datasource/src/DataSourceRemoteForm.vue | 0 .../src/DataSourceRemoteMapping.vue | 0 .../datasource/src/DataSourceRemotePanel.vue | 0 .../src/DataSourceRemoteParameter.vue | 0 .../datasource/src/DataSourceTemplate.vue | 0 .../datasource/src/DataSourceType.vue | 0 .../plugins}/datasource/src/Main.vue | 0 .../datasource/src/RemoteDataAdapterForm.vue | 0 .../plugins}/datasource/src/config.js | 0 .../plugins}/datasource/src/js/datasource.js | 6 +- .../plugins}/datasource/src/js/http.js | 0 .../plugins}/datasource/vite.config.js | 0 .../plugins}/help/assets/test.png | 0 .../plugins}/help/index.js | 0 .../plugins}/help/mock/test.js | 0 .../plugins}/help/package.json | 8 +- .../plugins}/help/src/HelpIcon.vue | 0 .../plugins}/help/test/test.js | 0 .../plugins}/help/vite.config.js | 0 .../plugins}/i18n/assets/test.png | 0 .../plugins}/i18n/index.js | 0 .../plugins}/i18n/mock/test.js | 0 .../plugins}/i18n/package.json | 13 +- .../plugins}/i18n/src/Main.vue | 0 .../plugins}/i18n/test/test.js | 0 .../plugins}/i18n/vite.config.js | 0 .../plugins}/materials/assets/test.png | 0 .../plugins}/materials/index.js | 0 .../plugins}/materials/mock/test.js | 0 .../plugins}/materials/package.json | 10 +- .../plugins}/materials/src/Main.vue | 0 .../materials/src/block/BlockDetail.vue | 0 .../materials/src/block/BlockGroup.vue | 0 .../materials/src/block/BlockGroupArrange.vue | 0 .../materials/src/block/BlockGroupFilters.vue | 0 .../materials/src/block/BlockGroupPanel.vue | 0 .../materials/src/block/BlockGroupSort.vue | 0 .../src/block/BlockGroupTransfer.vue | 0 .../src/block/BlockGroupTransferPanel.vue | 0 .../materials/src/block/BlockList.vue | 0 .../src/block/BlockVersionSelect.vue | 0 .../plugins}/materials/src/block/Main.vue | 0 .../plugins}/materials/src/block/http.js | 0 .../materials/src/block/js/usePanel.js | 0 .../plugins}/materials/src/component/Main.vue | 0 .../plugins}/materials/test/test.js | 0 .../plugins}/materials/vite.config.js | 0 .../plugins}/page/assets/test.png | 0 .../plugins}/page/index.js | 0 .../plugins}/page/mock/test.js | 0 .../plugins}/page/package.json | 10 +- .../plugins}/page/src/Main.vue | 0 .../plugins}/page/src/PageFolderSetting.vue | 0 .../plugins}/page/src/PageGeneral.vue | 0 .../plugins}/page/src/PageHistory.vue | 0 .../plugins}/page/src/PageHome.vue | 0 .../plugins}/page/src/PageInputOutput.vue | 0 .../plugins}/page/src/PageSetting.vue | 0 .../plugins}/page/src/PageTree.vue | 0 .../plugins}/page/src/http.js | 0 .../plugins}/page/test/test.js | 0 .../plugins}/page/vite.config.js | 0 .../plugins}/robot/assets/AI.png | Bin .../plugins}/robot/assets/test.png | 0 .../plugins}/robot/index.js | 0 .../plugins}/robot/mock/test.js | 0 .../plugins}/robot/package.json | 11 +- .../plugins}/robot/src/Main.vue | 0 .../plugins}/robot/src/js/robotSetting.js | 0 .../plugins}/robot/test/test.js | 0 .../plugins}/robot/vite.config.js | 0 .../plugins}/schema/assets/test.png | 0 .../plugins}/schema/index.js | 0 .../plugins}/schema/mock/test.js | 0 .../plugins}/schema/package.json | 10 +- .../plugins}/schema/src/Main.vue | 0 .../plugins}/schema/test/test.js | 0 .../plugins}/schema/vite.config.js | 0 .../plugins}/script/assets/test.png | 0 .../plugins}/script/index.js | 0 .../plugins}/script/mock/test.js | 0 .../plugins}/script/package.json | 10 +- .../plugins}/script/src/Main.vue | 0 .../plugins}/script/src/js/method.js | 0 .../plugins}/script/test/test.js | 0 .../plugins}/script/vite.config.js | 0 .../plugins}/tree/assets/test.png | 0 .../plugins}/tree/index.js | 0 .../plugins}/tree/mock/test.js | 0 .../plugins}/tree/package.json | 11 +- .../plugins}/tree/src/Main.vue | 0 .../plugins}/tree/test/test.js | 0 .../plugins}/tree/vite.config.js | 0 .../plugins}/tutorial/assets/test.png | 0 .../plugins}/tutorial/index.js | 0 .../plugins}/tutorial/mock/test.js | 0 .../plugins}/tutorial/package.json | 12 +- .../plugins}/tutorial/src/Main.vue | 0 .../tutorial/src/TutorialVideoPanel.vue | 0 .../plugins}/tutorial/src/js/http.js | 0 .../plugins}/tutorial/test/test.js | 0 .../plugins}/tutorial/vite.config.js | 0 .../settings}/design/package.json | 5 +- .../settings}/design/src/App.vue | 0 .../src/assets/materials/ng-bundle.json | 0 .../materials/ng-components/accordion.json | 0 .../assets/materials/ng-components/alert.json | 0 .../materials/ng-components/button.json | 0 .../materials/ng-components/checkbox.json | 0 .../materials/ng-components/container.json | 0 .../assets/materials/ng-components/date.json | 0 .../materials/ng-components/daterange.json | 0 .../assets/materials/ng-components/form.json | 0 .../materials/ng-components/formfield.json | 0 .../materials/ng-components/halfmodal.json | 0 .../assets/materials/ng-components/image.json | 0 .../assets/materials/ng-components/index.js | 0 .../assets/materials/ng-components/input.json | 0 .../assets/materials/ng-components/radio.json | 0 .../materials/ng-components/select.json | 0 .../materials/ng-components/swiper.json | 0 .../materials/ng-components/switch.json | 0 .../assets/materials/ng-components/tab.json | 0 .../assets/materials/ng-components/table.json | 0 .../materials/ng-components/tablefilter.json | 0 .../assets/materials/ng-components/tag.json | 0 .../src/components/ArrayConfigItemForm.vue | 0 .../design/src/components/ComponentList.vue | 0 .../design/src/components/PropertyCanvas.vue | 0 .../design/src/components/PropertyList.vue | 0 .../design/src/components/SettingPanel.vue | 0 .../design/src/components/SourceEditor.vue | 0 .../design/src/components/widgets/index.js | 0 .../settings}/design/src/convertToSchema.js | 0 .../settings}/design/src/lib.js | 0 .../settings}/design/src/main.js | 0 .../design/src/ng-properties/accordion.json | 0 .../design/src/ng-properties/alert.json | 0 .../design/src/ng-properties/button.json | 0 .../design/src/ng-properties/checkbox.json | 0 .../design/src/ng-properties/container.json | 0 .../design/src/ng-properties/date.json | 0 .../design/src/ng-properties/daterange.json | 0 .../design/src/ng-properties/form.json | 0 .../design/src/ng-properties/formfield.json | 0 .../design/src/ng-properties/halfmodal.json | 0 .../design/src/ng-properties/image.json | 0 .../design/src/ng-properties/index.js | 0 .../design/src/ng-properties/input.json | 0 .../design/src/ng-properties/radio.json | 0 .../design/src/ng-properties/select.json | 0 .../design/src/ng-properties/swiper.json | 0 .../design/src/ng-properties/switch.json | 0 .../design/src/ng-properties/tab.json | 0 .../design/src/ng-properties/table.json | 0 .../design/src/ng-properties/tablefilter.json | 0 .../design/src/ng-properties/tag.json | 0 .../design/src/properties/alert.json | 0 .../design/src/properties/amount.json | 0 .../settings}/design/src/properties/area.json | 0 .../design/src/properties/autocomplete.json | 0 .../design/src/properties/badge.json | 0 .../src/properties/breadcrumb-item.json | 0 .../design/src/properties/breadcrumb.json | 0 .../design/src/properties/bulletin-board.json | 0 .../design/src/properties/button-group.json | 0 .../design/src/properties/button.json | 0 .../design/src/properties/calendar.json | 0 .../design/src/properties/carousel-item.json | 0 .../design/src/properties/carousel.json | 0 .../design/src/properties/cascader-panel.json | 0 .../design/src/properties/cascader-props.json | 0 .../design/src/properties/cascader.json | 0 .../design/src/properties/chart-data.json | 0 .../design/src/properties/chart-pie.json | 0 .../design/src/properties/chart.json | 0 .../src/properties/checkbox-button.json | 0 .../design/src/properties/checkbox-group.json | 0 .../design/src/properties/checkbox.json | 0 .../settings}/design/src/properties/col.json | 0 .../design/src/properties/collapse-item.json | 0 .../design/src/properties/collapse.json | 0 .../design/src/properties/company.json | 0 .../design/src/properties/container.json | 0 .../design/src/properties/country.json | 0 .../src/properties/credit-card-form.json | 0 .../settings}/design/src/properties/crop.json | 0 .../design/src/properties/currency.json | 0 .../properties/date-picker-date-format.json | 0 .../src/properties/date-picker-options.json | 0 .../src/properties/date-picker-shortcuts.json | 0 .../design/src/properties/date-picker.json | 0 .../settings}/design/src/properties/dept.json | 0 .../design/src/properties/detail-page.json | 0 .../design/src/properties/dialog-box.json | 0 .../design/src/properties/drop-roles.json | 0 .../design/src/properties/drop-times.json | 0 .../settings}/design/src/properties/edoc.json | 0 .../design/src/properties/espace.json | 0 .../design/src/properties/fall-menu.json | 0 .../design/src/properties/file-upload.json | 0 .../design/src/properties/floatbar.json | 0 .../design/src/properties/flow-chart.json | 0 .../design/src/properties/form-item.json | 0 .../settings}/design/src/properties/form.json | 0 .../design/src/properties/gantt.json | 0 .../design/src/properties/grid-column.json | 0 .../design/src/properties/grid-toolbar.json | 0 .../settings}/design/src/properties/grid.json | 0 .../design/src/properties/hrapprover.json | 0 .../design/src/properties/image.json | 0 .../settings}/design/src/properties/index.js | 0 .../design/src/properties/input.json | 0 .../design/src/properties/ip-address.json | 0 .../design/src/properties/layout.json | 0 .../design/src/properties/link-menu.json | 0 .../settings}/design/src/properties/link.json | 0 .../design/src/properties/loading.json | 0 .../design/src/properties/locales.json | 0 .../design/src/properties/logon-user.json | 0 .../design/src/properties/logout.json | 0 .../design/src/properties/menu-bar.json | 0 .../design/src/properties/milestone.json | 0 .../design/src/properties/modal.json | 0 .../design/src/properties/nav-menu.json | 0 .../design/src/properties/numeric.json | 0 .../design/src/properties/option-group.json | 0 .../design/src/properties/option.json | 0 .../design/src/properties/pager.json | 0 .../design/src/properties/panel.json | 0 .../design/src/properties/pop-upload.json | 0 .../design/src/properties/popeditor.json | 0 .../design/src/properties/popover.json | 0 .../design/src/properties/progress.json | 0 .../design/src/properties/radio-button.json | 0 .../design/src/properties/radio-group.json | 0 .../design/src/properties/radio.json | 0 .../settings}/design/src/properties/rate.json | 0 .../design/src/properties/rich-text.json | 0 .../design/src/properties/roles.json | 0 .../settings}/design/src/properties/row.json | 0 .../design/src/properties/scroll-text.json | 0 .../design/src/properties/search.json | 0 .../design/src/properties/select.json | 0 .../design/src/properties/slide-bar.json | 0 .../design/src/properties/slider.json | 0 .../design/src/properties/split.json | 0 .../design/src/properties/steps.json | 0 .../design/src/properties/svg-icon.json | 0 .../design/src/properties/switch.json | 0 .../settings}/design/src/properties/tabs.json | 0 .../settings}/design/src/properties/tag.json | 0 .../design/src/properties/text-popup.json | 0 .../design/src/properties/time-line.json | 0 .../src/properties/time-picker-options.json | 0 .../design/src/properties/time-picker.json | 0 .../src/properties/time-select-options.json | 0 .../design/src/properties/time-select.json | 0 .../design/src/properties/toggle-menu.json | 0 .../design/src/properties/tooltip.json | 0 .../design/src/properties/transfer.json | 0 .../design/src/properties/tree-menu.json | 0 .../settings}/design/src/properties/tree.json | 0 .../design/src/properties/user-account.json | 0 .../design/src/properties/user-contact.json | 0 .../design/src/properties/user-head.json | 0 .../design/src/properties/user-link.json | 0 .../settings}/design/src/properties/user.json | 0 .../design/src/properties/wizard.json | 0 .../design/src/schema/carousel-item.json | 0 .../settings}/design/src/schema/carousel.json | 0 .../settings}/design/src/schemas/button.json | 0 .../design/src/schemas/checkbox.json | 0 .../design/src/schemas/checkboxbutton.json | 0 .../design/src/schemas/checkboxgroup.json | 0 .../design/src/schemas/collapse.json | 0 .../design/src/schemas/collapseitem.json | 0 .../design/src/schemas/dialogbox.json | 0 .../design/src/schemas/floatbar.json | 0 .../settings}/design/src/schemas/form.json | 0 .../design/src/schemas/formitem.json | 0 .../settings}/design/src/schemas/grid.json | 0 .../design/src/schemas/gridcolumn.json | 0 .../settings}/design/src/schemas/index.js | 0 .../settings}/design/src/schemas/input.json | 0 .../settings}/design/src/schemas/pager.json | 0 .../design/src/schemas/popeditor.json | 0 .../settings}/design/src/schemas/popover.json | 0 .../settings}/design/src/schemas/radio.json | 0 .../settings}/design/src/schemas/search.json | 0 .../settings}/design/src/schemas/select.json | 0 .../settings}/design/src/schemas/switch.json | 0 .../settings}/design/src/schemas/tabitem.json | 0 .../settings}/design/src/schemas/tabs.json | 0 .../design/src/schemas/time-line.json | 0 .../settings}/design/src/schemas/tooltip.json | 0 .../settings}/design/src/schemas/tree.json | 0 .../settings}/design/src/store/index.js | 0 .../settings}/design/vite.config.js | 0 .../settings}/events/index.js | 0 .../settings}/events/package.json | 11 +- .../settings}/events/src/Main.vue | 0 .../settings}/events/src/commonjs/events.js | 0 .../events/src/components/AdvanceConfig.vue | 0 .../events/src/components/BindEvents.vue | 0 .../src/components/BindEventsDialog.vue | 0 .../settings}/events/vite.config.js | 0 .../settings}/props/index.js | 0 .../settings}/props/package.json | 11 +- .../settings}/props/src/Main.vue | 0 .../settings}/props/src/components/Empty.vue | 0 .../props/src/components/groups/LifeCycle.vue | 0 .../src/components/groups/TableColumn.vue | 0 .../src/components/groups/TablePager.vue | 0 .../settings}/props/src/components/index.js | 0 .../src/components/inputs/BindFunction.vue | 2 +- .../src/components/inputs/CheckValue.vue | 0 .../src/components/inputs/CodeEditor.vue | 0 .../components/inputs/DraggableOptions.vue | 0 .../src/components/inputs/NumericSelect.vue | 0 .../src/components/inputs/SelectOption.vue | 0 .../src/components/inputs/SwitchValue.vue | 0 .../src/components/modal/ModalContent.vue | 0 .../settings}/props/vite.config.js | 0 .../settings}/styles/assets/test.png | 0 .../settings}/styles/index.js | 0 .../settings}/styles/mock/test.js | 0 .../settings}/styles/package.json | 11 +- .../settings}/styles/src/Main.vue | 0 .../components/background/BackgroundGroup.vue | 0 .../background/BackgroundImageGradient.vue | 0 .../background/BackgroundImageSetting.vue | 0 .../components/background/ColorOverlay.vue | 0 .../components/background/ImageSetting.vue | 0 .../components/background/LinearGradient.vue | 0 .../components/background/PositionOrigin.vue | 0 .../components/background/RadialGradient.vue | 0 .../src/components/border/BorderGroup.vue | 0 .../src/components/effects/EffectGroup.vue | 0 .../settings}/styles/src/components/index.js | 0 .../src/components/inputs/ImageSelect.vue | 0 .../src/components/inputs/InputSelect.vue | 0 .../src/components/inputs/ModalMask.vue | 0 .../src/components/inputs/NumericSelect.vue | 0 .../src/components/inputs/ResetButton.vue | 0 .../styles/src/components/layout/FlexBox.vue | 0 .../styles/src/components/layout/GridBox.vue | 0 .../src/components/layout/LayoutGroup.vue | 0 .../src/components/position/PositionGroup.vue | 0 .../src/components/shadow/BoxShadowGroup.vue | 0 .../styles/src/components/size/SizeGroup.vue | 0 .../src/components/spacing/SpacingGroup.vue | 0 .../src/components/spacing/SpacingSetting.vue | 0 .../components/typography/TypographyGroup.vue | 0 .../components/typography/TypographyMore.vue | 0 .../settings}/styles/src/js/cssConvert.js | 0 .../settings}/styles/src/js/cssType.js | 0 .../settings}/styles/src/js/styleProperty.js | 0 .../settings}/styles/src/js/useEditor.js | 0 .../settings}/styles/src/js/useEvent.js | 0 .../settings}/styles/src/js/useLayout.js | 0 .../settings}/styles/src/js/useStyle.js | 0 .../settings}/styles/test/test.js | 0 .../settings}/styles/vite.config.js | 0 {src => packages}/svgs/index.js | 0 {src => packages}/svgs/mock/test.js | 0 {src => packages}/svgs/package.json | 3 +- {src => packages}/svgs/src/Main.vue | 0 {src => packages}/svgs/test/test.js | 0 {src => packages}/svgs/vite.config.js | 0 .../theme}/common/base.less | 0 .../theme}/common/global.less | 0 .../theme}/dark/base.less | 0 .../theme}/dark/block.less | 0 .../theme}/dark/bridge.less | 0 .../theme}/dark/button.less | 0 .../theme}/dark/canvas.less | 0 .../theme}/dark/datasource.less | 0 .../theme}/dark/events.less | 0 .../theme}/dark/gpt-dialog.less | 0 .../theme}/dark/help.less | 0 .../theme}/dark/i18n.less | 0 .../theme}/dark/index.less | 0 .../theme}/dark/life-cycles.less | 0 .../theme}/dark/materials.less | 0 .../theme}/dark/metaComponent.less | 0 .../theme}/dark/package.json | 0 .../theme}/dark/pageManage.less | 0 .../theme}/dark/plugin-js.less | 0 .../theme}/dark/radio.less | 0 .../theme}/dark/scrollbar.less | 0 .../theme}/dark/settings.less | 0 .../theme}/dark/tiny-checkbox.less | 0 .../theme}/dark/tiny-collapse.less | 0 .../theme}/dark/tiny-dialog-box.less | 0 .../theme}/dark/tiny-grid.less | 0 .../theme}/dark/tiny-input.less | 0 .../theme}/dark/tiny-modal.less | 0 .../theme}/dark/tiny-notify.less | 0 .../theme}/dark/tiny-numeric.less | 0 .../theme}/dark/tiny-search.less | 0 .../theme}/dark/tiny-switch.less | 0 .../theme}/dark/tiny-tabs.less | 0 .../theme}/dark/toolbar.less | 0 .../theme}/dark/tree.less | 0 .../theme}/dark/tutorial.less | 0 .../theme}/dark/variable.less | 0 .../theme}/dark/vite.config.js | 0 .../theme}/light/base.less | 0 .../theme}/light/block.less | 0 .../theme}/light/bridge.less | 0 .../theme}/light/button.less | 0 .../theme}/light/canvas.less | 0 .../theme}/light/datasource.less | 0 .../theme}/light/events.less | 0 .../theme}/light/gpt-dialog.less | 0 .../theme}/light/help.less | 0 .../theme}/light/i18n.less | 0 .../theme}/light/index.less | 0 .../theme}/light/life-cycles.less | 0 .../theme}/light/materials.less | 0 .../theme}/light/metaComponent.less | 0 .../theme}/light/package.json | 0 .../theme}/light/pageManage.less | 0 .../theme}/light/plugin-js.less | 0 .../theme}/light/radio.less | 0 .../theme}/light/scrollbar.less | 0 .../theme}/light/settings.less | 0 .../theme}/light/tiny-collapse.less | 0 .../theme}/light/tiny-dialog-box.less | 0 .../theme}/light/tiny-grid.less | 0 .../theme}/light/tiny-input.less | 0 .../theme}/light/tiny-modal.less | 0 .../theme}/light/tiny-notify.less | 0 .../theme}/light/tiny-numeric.less | 0 .../theme}/light/tiny-search.less | 0 .../theme}/light/tiny-switch.less | 0 .../theme}/light/toolbar.less | 0 .../theme}/light/tree.less | 0 .../theme}/light/tutorial.less | 0 .../theme}/light/variable.less | 0 .../theme}/light/vite.config.js | 0 .../toolbars}/breadcrumb/assets/test.png | 0 .../toolbars}/breadcrumb/index.js | 0 .../toolbars}/breadcrumb/mock/test.js | 0 .../toolbars}/breadcrumb/package.json | 5 +- .../toolbars}/breadcrumb/src/Main.vue | 0 .../toolbars}/breadcrumb/test/test.js | 0 .../toolbars}/breadcrumb/vite.config.js | 0 .../toolbars}/clean/assets/test.png | 0 .../toolbars}/clean/index.js | 0 .../toolbars}/clean/mock/test.js | 0 .../toolbars}/clean/package.json | 4 +- .../toolbars}/clean/src/Main.vue | 0 .../toolbars}/clean/test/test.js | 0 .../toolbars}/clean/vite.config.js | 0 .../toolbars}/collaboration/assets/test.png | 0 .../toolbars}/collaboration/index.js | 0 .../toolbars}/collaboration/mock/test.js | 0 .../toolbars}/collaboration/package.json | 3 +- .../toolbars}/collaboration/src/Main.vue | 0 .../toolbars}/collaboration/test/test.js | 0 .../toolbars}/collaboration/vite.config.js | 0 .../toolbars}/fullscreen/assets/test.png | 0 .../toolbars}/fullscreen/index.js | 0 .../toolbars}/fullscreen/mock/test.js | 0 .../toolbars}/fullscreen/package.json | 3 +- .../toolbars}/fullscreen/src/Main.vue | 0 .../toolbars}/fullscreen/test/test.js | 0 .../toolbars}/fullscreen/vite.config.js | 0 .../toolbars}/generate-vue/index.js | 0 .../toolbars}/generate-vue/package.json | 10 +- .../generate-vue/src/FileSelector.vue | 3 +- .../toolbars}/generate-vue/src/Main.vue | 0 .../generate-vue/src/generateCode.js | 0 .../toolbars}/generate-vue/src/http.js | 0 .../toolbars}/generate-vue/vite.config.js | 0 .../toolbars}/lang/assets/test.png | 0 .../toolbars}/lang/index.js | 0 .../toolbars}/lang/mock/test.js | 0 .../toolbars}/lang/package.json | 4 +- .../toolbars}/lang/src/Main.vue | 0 .../toolbars}/lang/test/test.js | 0 .../toolbars}/lang/vite.config.js | 0 .../toolbars}/layout/assets/test.png | 0 .../toolbars}/layout/index.js | 0 .../toolbars}/layout/mock/test.js | 0 .../toolbars}/layout/package.json | 2 +- .../toolbars}/layout/src/Main.vue | 0 .../toolbars}/layout/test/test.js | 0 .../toolbars}/layout/vite.config.js | 0 .../toolbars}/lock/assets/test.png | 0 .../toolbars}/lock/index.js | 0 .../toolbars}/lock/mock/test.js | 0 .../toolbars}/lock/package.json | 5 +- .../toolbars}/lock/src/Main.vue | 0 .../toolbars}/lock/src/http.js | 0 .../toolbars}/lock/test/test.js | 0 .../toolbars}/lock/vite.config.js | 0 .../toolbars}/logo/assets/test.png | 0 .../toolbars}/logo/index.js | 0 .../toolbars}/logo/mock/test.js | 0 .../toolbars}/logo/package.json | 5 +- .../toolbars}/logo/src/AppList.vue | 0 .../toolbars}/logo/src/Main.vue | 0 .../toolbars}/logo/test/test.js | 0 .../toolbars}/logo/vite.config.js | 0 .../toolbars}/logout/assets/test.png | 0 .../toolbars}/logout/index.js | 0 .../toolbars}/logout/mock/test.js | 0 .../toolbars}/logout/package.json | 2 +- .../toolbars}/logout/src/Main.vue | 0 .../toolbars}/logout/src/js/http.js | 0 .../toolbars}/logout/test/test.js | 0 .../toolbars}/logout/vite.config.js | 0 .../toolbars}/media/assets/test.png | 0 .../toolbars}/media/index.js | 0 .../toolbars}/media/mock/test.js | 0 .../toolbars}/media/package.json | 5 +- .../toolbars}/media/src/Main.vue | 0 .../toolbars}/media/test/test.js | 0 .../toolbars}/media/vite.config.js | 0 .../toolbars}/preview/assets/test.png | 0 .../toolbars}/preview/index.js | 0 .../toolbars}/preview/mock/test.js | 0 .../toolbars}/preview/package.json | 5 +- .../toolbars}/preview/src/Main.vue | 0 .../toolbars}/preview/test/test.js | 0 .../toolbars}/preview/vite.config.js | 0 .../toolbars}/redoundo/assets/test.png | 0 .../toolbars}/redoundo/index.js | 0 .../toolbars}/redoundo/mock/test.js | 0 .../toolbars}/redoundo/package.json | 3 +- .../toolbars}/redoundo/src/Main.vue | 0 .../toolbars}/redoundo/test/test.js | 0 .../toolbars}/redoundo/vite.config.js | 0 .../toolbars}/refresh/index.js | 0 .../toolbars}/refresh/package.json | 4 +- .../toolbars}/refresh/src/Main.vue | 0 .../toolbars}/refresh/vite.config.js | 0 .../toolbars}/save/assets/test.png | 0 .../toolbars}/save/index.js | 0 .../toolbars}/save/mock/test.js | 0 .../toolbars}/save/package.json | 6 +- .../toolbars}/save/src/Main.vue | 0 .../toolbars}/save/src/js/index.js | 0 .../toolbars}/save/test/test.js | 0 .../toolbars}/save/vite.config.js | 0 .../toolbars}/setting/index.js | 0 .../toolbars}/setting/package.json | 4 +- .../toolbars}/setting/src/Main.vue | 0 .../toolbars}/setting/vite.config.js | 0 {src => packages}/utils/package.json | 2 +- .../utils/src/constants/index.js | 2 +- {src => packages}/utils/src/fs/index.js | 0 {src => packages}/utils/src/index.js | 0 {src => packages}/utils/src/utils/index.js | 0 {src => packages}/utils/vite.config.js | 0 packages/vue-generator/package.json | 2 + {src => packages}/webcomponent/README.md | 0 {src => packages}/webcomponent/package.json | 1 + .../webcomponent/src/defineCustomElement.js | 0 {src => packages}/webcomponent/src/lib.js | 0 {src => packages}/webcomponent/vite.config.js | 0 pnpm-workspace.yaml | 3 + scripts/buildComponentSchemas.js | 22 +- src/canvas/package.json | 30 - src/controller/package.json | 31 - src/plugins/packages/datasource/package.json | 28 - .../packages/materials/bash.exe.stackdump | 16 - 1294 files changed, 1142 insertions(+), 3512 deletions(-) create mode 100644 mockServer/src/database/blockCategories.db create mode 100644 mockServer/src/database/blockGroups.db create mode 100644 mockServer/src/database/blocks.db delete mode 100644 mockServer/src/mock/get/material-center/block-categories.json delete mode 100644 mockServer/src/mock/get/material-center/block-groups.json delete mode 100644 mockServer/src/mock/get/material-center/blocks.json create mode 100644 mockServer/src/services/blockCategory.js create mode 100644 mockServer/src/services/blockGroup.js create mode 100644 mockServer/src/services/mockService.js rename {src => packages}/canvas/.eslintrc.js (100%) rename {src => packages}/canvas/.gitignore (100%) rename {src => packages}/canvas/README.md (100%) rename {src => packages}/canvas/canvas.html (100%) rename {src => packages}/canvas/index.html (100%) create mode 100644 packages/canvas/package.json rename {src/app => packages/canvas}/public/favicon.ico (100%) rename {src => packages}/canvas/src/Design.vue (100%) rename {src => packages}/canvas/src/assets/logo.png (100%) rename {src => packages}/canvas/src/canvas.js (100%) rename {src => packages}/canvas/src/components/builtin/CanvasBox.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasCol.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasCollection.js (100%) rename {src => packages}/canvas/src/components/builtin/CanvasCollection.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasIcon.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasImg.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasPlaceholder.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasRow.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasRowColContainer.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasSlot.vue (100%) rename {src => packages}/canvas/src/components/builtin/CanvasText.vue (100%) rename {src => packages}/canvas/src/components/builtin/builtin.json (100%) rename {src => packages}/canvas/src/components/builtin/helper.js (100%) rename {src => packages}/canvas/src/components/builtin/index.js (100%) rename {src => packages}/canvas/src/components/common/index.js (100%) rename {src => packages}/canvas/src/components/container/CanvasAction.vue (100%) rename {src => packages}/canvas/src/components/container/CanvasContainer.vue (100%) rename {src => packages}/canvas/src/components/container/CanvasDivider.vue (100%) rename {src => packages}/canvas/src/components/container/CanvasDragItem.vue (100%) rename {src => packages}/canvas/src/components/container/CanvasFooter.vue (100%) rename {src => packages}/canvas/src/components/container/CanvasMenu.vue (100%) rename {src => packages}/canvas/src/components/container/CanvasResize.vue (100%) rename {src => packages}/canvas/src/components/container/CanvasResizeBorder.vue (100%) rename {src => packages}/canvas/src/components/container/container.js (100%) rename {src => packages}/canvas/src/components/container/keyboard.js (100%) rename {src => packages}/canvas/src/components/container/shortCutPopover.vue (100%) rename {src => packages}/canvas/src/components/render/CanvasEmpty.vue (100%) rename {src => packages}/canvas/src/components/render/RenderMain.js (100%) rename {src => packages}/canvas/src/components/render/context.js (100%) rename {src => packages}/canvas/src/components/render/render.js (100%) rename {src => packages}/canvas/src/components/render/runner.js (98%) rename {src => packages}/canvas/src/i18n.js (100%) rename {src => packages}/canvas/src/i18n/en.json (100%) rename {src => packages}/canvas/src/i18n/zh.json (100%) rename {src => packages}/canvas/src/index.js (73%) rename {src => packages}/canvas/src/locale.js (100%) rename {src => packages}/canvas/src/lowcode.js (100%) rename {src => packages}/canvas/src/main.js (100%) rename {src => packages}/canvas/test/form.json (100%) rename {src => packages}/canvas/test/group.json (100%) rename {src => packages}/canvas/test/jsslot.json (100%) rename {src => packages}/canvas/vite.config.js (94%) rename {src => packages}/common/component/BindI18n.vue (100%) rename {src => packages}/common/component/BlockDeployDialog.vue (99%) rename {src => packages}/common/component/BlockDescription.vue (100%) rename {src => packages}/common/component/BlockHistoryList.vue (100%) rename {src => packages}/common/component/BlockHistoryTemplate.vue (100%) rename {src => packages}/common/component/BlockLinkEvent.vue (100%) rename {src => packages}/common/component/BlockLinkField.vue (100%) rename {src => packages}/common/component/ButtonGroup.vue (100%) rename {src => packages}/common/component/CloseIcon.vue (100%) rename {src => packages}/common/component/ConfigCollapse.vue (100%) rename {src => packages}/common/component/ConfigGroup.vue (100%) rename {src => packages}/common/component/ConfigItem.vue (100%) rename {src => packages}/common/component/ConfigRender.vue (100%) rename {src => packages}/common/component/EmptyTip.vue (100%) rename {src => packages}/common/component/LifeCycles.vue (99%) rename {src => packages}/common/component/MaskModal.vue (100%) rename {src => packages}/common/component/MetaArrayItem.vue (100%) rename {src => packages}/common/component/MetaBindI18n.vue (100%) rename {src => packages}/common/component/MetaBindVariable.vue (99%) rename {src => packages}/common/component/MetaButtonGroup.vue (97%) rename {src => packages}/common/component/MetaCascader.vue (97%) rename {src => packages}/common/component/MetaCheckBox.vue (100%) rename {src => packages}/common/component/MetaCheckboxGroup.vue (95%) rename {src => packages}/common/component/MetaChildItem.vue (100%) rename {src => packages}/common/component/MetaCodeEditor.vue (100%) rename {src => packages}/common/component/MetaCodeEditorList.vue (100%) rename {src => packages}/common/component/MetaCollection.vue (100%) rename {src => packages}/common/component/MetaColor.vue (100%) rename {src => packages}/common/component/MetaContainer.vue (100%) rename {src => packages}/common/component/MetaDatePicker.vue (100%) rename {src => packages}/common/component/MetaDescription.vue (100%) rename {src => packages}/common/component/MetaForm.vue (100%) rename {src => packages}/common/component/MetaGroupItem.vue (100%) rename {src => packages}/common/component/MetaHtmlAttributes.vue (100%) rename {src => packages}/common/component/MetaHtmlText.vue (100%) rename {src => packages}/common/component/MetaInput.vue (100%) rename {src => packages}/common/component/MetaIpSection.vue (100%) rename {src => packages}/common/component/MetaJsSlot.vue (100%) rename {src => packages}/common/component/MetaLayoutGrid.vue (100%) rename {src => packages}/common/component/MetaList.vue (100%) rename {src => packages}/common/component/MetaListActions.vue (100%) rename {src => packages}/common/component/MetaListItem.vue (100%) rename {src => packages}/common/component/MetaListItems.vue (100%) rename {src => packages}/common/component/MetaListTitle.vue (100%) rename {src => packages}/common/component/MetaModal.vue (100%) rename {src => packages}/common/component/MetaModalItem.vue (100%) rename {src => packages}/common/component/MetaNumber.md (100%) rename {src => packages}/common/component/MetaNumber.vue (100%) rename {src => packages}/common/component/MetaPopover.vue (100%) rename {src => packages}/common/component/MetaRadio.vue (100%) rename {src => packages}/common/component/MetaRadioGroup.vue (96%) rename {src => packages}/common/component/MetaRelatedColumns.vue (100%) rename {src => packages}/common/component/MetaRelatedEditor.vue (100%) rename {src => packages}/common/component/MetaSelect.vue (98%) rename {src => packages}/common/component/MetaSelectIcon.vue (100%) rename {src => packages}/common/component/MetaSlider.vue (100%) rename {src => packages}/common/component/MetaSlot.vue (100%) rename {src => packages}/common/component/MetaSwitch.vue (100%) rename {src => packages}/common/component/MonacoEditor.vue (100%) rename {src => packages}/common/component/MultiTypeSelector.vue (100%) rename {src => packages}/common/component/Pane.vue (100%) rename {src => packages}/common/component/PluginBlockList.vue (100%) rename {src => packages}/common/component/PluginPanel.vue (100%) rename {src => packages}/common/component/PluginSetting.vue (100%) rename {src => packages}/common/component/ProgressBar.vue (100%) rename {src => packages}/common/component/PublicIcon.vue (100%) rename {src => packages}/common/component/SaveNewBlock.vue (97%) rename {src => packages}/common/component/SplitPanes.vue (100%) rename {src => packages}/common/component/SvgButton.vue (100%) rename {src => packages}/common/component/VideoGuide.vue (100%) rename {src => packages}/common/component/VueMonaco.vue (100%) rename {src => packages}/common/i18n/en-us.json (100%) rename {src => packages}/common/i18n/zh-cn.json (100%) rename {src => packages}/common/index.js (100%) rename {src => packages}/common/js/app.js (100%) rename {src => packages}/common/js/ast.js (100%) rename {src => packages}/common/js/completion.js (100%) rename {src => packages}/common/js/constants.js (100%) rename {src => packages}/common/js/css.js (100%) rename {src => packages}/common/js/environments.js (51%) rename {src => packages}/common/js/http.js (91%) rename {src => packages}/common/js/i18n.js (100%) rename {src => packages}/common/js/index.js (100%) rename {src => packages}/common/js/linter.js (100%) rename {src => packages}/common/js/monitor.js (100%) rename {src => packages}/common/js/preview.js (100%) rename {src => packages}/common/js/verification.js (100%) rename {src => packages}/common/js/vscodeGenerateFile.js (100%) rename {src => packages}/common/package.json (50%) rename {src => packages}/common/vite.config.js (63%) rename {src => packages}/controller/adapter.js (94%) create mode 100644 packages/controller/package.json rename {src => packages}/controller/src/example.js (100%) rename {src => packages}/controller/src/globalConfig.js (100%) rename {src => packages}/controller/src/index.js (100%) rename {src => packages}/controller/src/useApp.js (100%) rename {src => packages}/controller/src/useBlock.js (100%) rename {src => packages}/controller/src/useBreadcrumb.js (100%) rename {src => packages}/controller/src/useCanvas.js (98%) rename {src => packages}/controller/src/useData.js (100%) rename {src => packages}/controller/src/useDataSource.js (98%) rename {src => packages}/controller/src/useEditorInfo.js (96%) rename {src => packages}/controller/src/useHistory.js (100%) rename {src => packages}/controller/src/useLayout.js (100%) rename {src => packages}/controller/src/useMessage.js (100%) rename {src => packages}/controller/src/useModal.jsx (100%) rename {src => packages}/controller/src/useNotify.jsx (100%) rename {src => packages}/controller/src/usePage.js (100%) rename {src => packages}/controller/src/useProperties.js (100%) rename {src => packages}/controller/src/useProperty.js (100%) rename {src => packages}/controller/src/useResource.js (99%) rename {src => packages}/controller/src/useSaveLocal.js (100%) rename {src => packages}/controller/src/useTranslate.js (97%) rename {src => packages}/controller/utils.js (100%) rename {src => packages}/controller/vite.config.js (79%) rename .env.alpha => packages/design-core/.env.alpha (100%) rename .env.development => packages/design-core/.env.development (87%) rename .env.prod => packages/design-core/.env.prod (100%) create mode 100644 packages/design-core/.npmignore rename {src/app => packages/design-core}/assets/AI.png (100%) rename {src/app => packages/design-core}/assets/accessdeclined.svg (100%) rename {src/app => packages/design-core}/assets/accordion.svg (100%) rename {src/app => packages/design-core}/assets/achart.svg (100%) rename {src/app => packages/design-core}/assets/add-collection.svg (100%) rename {src/app => packages/design-core}/assets/add-folder.svg (100%) rename {src/app => packages/design-core}/assets/add-group.svg (100%) rename {src/app => packages/design-core}/assets/add-page-new.svg (100%) rename {src/app => packages/design-core}/assets/add-page.svg (100%) rename {src/app => packages/design-core}/assets/add-utils.svg (100%) rename {src/app => packages/design-core}/assets/add.svg (100%) rename {src/app => packages/design-core}/assets/alert.svg (100%) rename {src/app => packages/design-core}/assets/align-content-center.svg (100%) rename {src/app => packages/design-core}/assets/align-content-end.svg (100%) rename {src/app => packages/design-core}/assets/align-content-space-around.svg (100%) rename {src/app => packages/design-core}/assets/align-content-space-between.svg (100%) rename {src/app => packages/design-core}/assets/align-content-start.svg (100%) rename {src/app => packages/design-core}/assets/align-content-stretch.svg (100%) rename {src/app => packages/design-core}/assets/align-items-baseline.svg (100%) rename {src/app => packages/design-core}/assets/align-items-center.svg (100%) rename {src/app => packages/design-core}/assets/align-items-end.svg (100%) rename {src/app => packages/design-core}/assets/align-items-start.svg (100%) rename {src/app => packages/design-core}/assets/align-items-stretch.svg (100%) rename {src/app => packages/design-core}/assets/background-color.svg (100%) rename {src/app => packages/design-core}/assets/background-image.svg (100%) rename {src/app => packages/design-core}/assets/bar.svg (100%) rename {src/app => packages/design-core}/assets/basic-search.svg (100%) rename {src/app => packages/design-core}/assets/bdlayout.svg (100%) rename {src/app => packages/design-core}/assets/beingmaintained.svg (100%) rename {src/app => packages/design-core}/assets/bem.svg (100%) rename {src/app => packages/design-core}/assets/beta.svg (100%) rename {src/app => packages/design-core}/assets/bind-variable.svg (100%) rename {src/app => packages/design-core}/assets/block-default-img.svg (100%) rename {src/app => packages/design-core}/assets/block-manage.svg (100%) rename {src/app => packages/design-core}/assets/border-all.svg (100%) rename {src/app => packages/design-core}/assets/border-bottom.svg (100%) rename {src/app => packages/design-core}/assets/border-left.svg (100%) rename {src/app => packages/design-core}/assets/border-radius-bottomleft.svg (100%) rename {src/app => packages/design-core}/assets/border-radius-bottomright.svg (100%) rename {src/app => packages/design-core}/assets/border-radius-multiple.svg (100%) rename {src/app => packages/design-core}/assets/border-radius-single.svg (100%) rename {src/app => packages/design-core}/assets/border-radius-topleft.svg (100%) rename {src/app => packages/design-core}/assets/border-radius-topright.svg (100%) rename {src/app => packages/design-core}/assets/border-right.svg (100%) rename {src/app => packages/design-core}/assets/border-style-dashed.svg (100%) rename {src/app => packages/design-core}/assets/border-style-dotted.svg (100%) rename {src/app => packages/design-core}/assets/border-style-solid.svg (100%) rename {src/app => packages/design-core}/assets/border-top.svg (100%) rename {src/app => packages/design-core}/assets/box.svg (100%) rename {src/app => packages/design-core}/assets/breadcrumb.svg (100%) rename {src/app => packages/design-core}/assets/bridge.svg (100%) rename {src/app => packages/design-core}/assets/button.svg (100%) rename {src/app => packages/design-core}/assets/buttons.svg (100%) rename {src/app => packages/design-core}/assets/cancel-full-screen.svg (100%) rename {src/app => packages/design-core}/assets/canvas-fit.svg (100%) rename {src/app => packages/design-core}/assets/carousel.svg (100%) rename {src/app => packages/design-core}/assets/carouselitem.svg (100%) rename {src/app => packages/design-core}/assets/chat-maximize.svg (100%) rename {src/app => packages/design-core}/assets/chat-message.svg (100%) rename {src/app => packages/design-core}/assets/chat-microphone.svg (100%) rename {src/app => packages/design-core}/assets/chat-minimize.svg (100%) rename {src/app => packages/design-core}/assets/checkbox.svg (100%) rename {src/app => packages/design-core}/assets/checkboxgroup.svg (100%) rename {src/app => packages/design-core}/assets/checkboxs.svg (100%) rename {src/app => packages/design-core}/assets/checkin.svg (100%) rename {src/app => packages/design-core}/assets/checkout.svg (100%) rename {src/app => packages/design-core}/assets/clear.svg (100%) rename {src/app => packages/design-core}/assets/clock-small.svg (100%) rename {src/app => packages/design-core}/assets/clock-wise-counter.svg (100%) rename {src/app => packages/design-core}/assets/clock-wise.svg (100%) rename {src/app => packages/design-core}/assets/close.svg (100%) rename {src/app => packages/design-core}/assets/closest-corner.svg (100%) rename {src/app => packages/design-core}/assets/closest-side.svg (100%) rename {src/app => packages/design-core}/assets/cloud-shell.svg (100%) rename {src/app => packages/design-core}/assets/cn.svg (100%) rename {src/app => packages/design-core}/assets/col.svg (100%) rename {src/app => packages/design-core}/assets/collapse.svg (100%) rename {src/app => packages/design-core}/assets/collection.svg (100%) rename {src/app => packages/design-core}/assets/copy-outline.svg (100%) rename {src/app => packages/design-core}/assets/copy.svg (100%) rename {src/app => packages/design-core}/assets/cross.svg (100%) rename {src/app => packages/design-core}/assets/cursor-alias.svg (100%) rename {src/app => packages/design-core}/assets/cursor-auto.svg (100%) rename {src/app => packages/design-core}/assets/cursor-cell.svg (100%) rename {src/app => packages/design-core}/assets/cursor-col-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-context-menu.svg (100%) rename {src/app => packages/design-core}/assets/cursor-copy.svg (100%) rename {src/app => packages/design-core}/assets/cursor-crosshair.svg (100%) rename {src/app => packages/design-core}/assets/cursor-e-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-ew-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-grab.svg (100%) rename {src/app => packages/design-core}/assets/cursor-grabbing.svg (100%) rename {src/app => packages/design-core}/assets/cursor-help.svg (100%) rename {src/app => packages/design-core}/assets/cursor-move.svg (100%) rename {src/app => packages/design-core}/assets/cursor-n-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-ne-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-nesw-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-none.svg (100%) rename {src/app => packages/design-core}/assets/cursor-not-allowed.svg (100%) rename {src/app => packages/design-core}/assets/cursor-ns-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-nw-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-nwse-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-pointer.svg (100%) rename {src/app => packages/design-core}/assets/cursor-progress.svg (100%) rename {src/app => packages/design-core}/assets/cursor-row-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-s-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-se-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-sw-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-text.svg (100%) rename {src/app => packages/design-core}/assets/cursor-vertical-text.svg (100%) rename {src/app => packages/design-core}/assets/cursor-w-resize.svg (100%) rename {src/app => packages/design-core}/assets/cursor-wait.svg (100%) rename {src/app => packages/design-core}/assets/cursor-zoom-in.svg (100%) rename {src/app => packages/design-core}/assets/cursor-zoom-out.svg (100%) rename {src/app => packages/design-core}/assets/data.svg (100%) rename {src/app => packages/design-core}/assets/datepick.svg (100%) rename {src/app => packages/design-core}/assets/daterange.svg (100%) rename {src/app => packages/design-core}/assets/delete.svg (100%) rename {src/app => packages/design-core}/assets/descend.svg (100%) rename {src/app => packages/design-core}/assets/desktop-large.svg (100%) rename {src/app => packages/design-core}/assets/dialogbox.svg (100%) rename {src/app => packages/design-core}/assets/display-block.svg (100%) rename {src/app => packages/design-core}/assets/display-flex.svg (100%) rename {src/app => packages/design-core}/assets/display-grid.svg (100%) rename {src/app => packages/design-core}/assets/display-inline-block.svg (100%) rename {src/app => packages/design-core}/assets/display-inline.svg (100%) rename {src/app => packages/design-core}/assets/dragger.svg (100%) rename {src/app => packages/design-core}/assets/dropdown.svg (100%) rename {src/app => packages/design-core}/assets/edit.svg (100%) rename {src/app => packages/design-core}/assets/ellipsis.svg (100%) rename {src/app => packages/design-core}/assets/empty-action.svg (100%) rename {src/app => packages/design-core}/assets/empty-data.svg (100%) rename {src/app => packages/design-core}/assets/empty.svg (100%) rename {src/app => packages/design-core}/assets/en.svg (100%) rename {src/app => packages/design-core}/assets/events.svg (100%) rename {src/app => packages/design-core}/assets/expand.svg (100%) rename {src/app => packages/design-core}/assets/eye-invisible.svg (100%) rename {src/app => packages/design-core}/assets/eye.svg (100%) rename {src/app => packages/design-core}/assets/farthest-corner.svg (100%) rename {src/app => packages/design-core}/assets/farthest-side.svg (100%) rename {src/app => packages/design-core}/assets/fixed.svg (100%) rename {src/app => packages/design-core}/assets/flex-alignbaselinerow.svg (100%) rename {src/app => packages/design-core}/assets/flex-aligncenterrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-alignflex-endrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-alignflex-startrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-alignstretchrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-directioncolumn-reverse.svg (100%) rename {src/app => packages/design-core}/assets/flex-directioncolumn.svg (100%) rename {src/app => packages/design-core}/assets/flex-directionrow-reverse.svg (100%) rename {src/app => packages/design-core}/assets/flex-directionrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-justifycenterrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-justifyflex-endrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-justifyflex-startrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-justifyspace-aroundrow.svg (100%) rename {src/app => packages/design-core}/assets/flex-justifyspace-betweenrow.svg (100%) rename {src/app => packages/design-core}/assets/flow-add.svg (100%) rename {src/app => packages/design-core}/assets/flow-align-bottom.svg (100%) rename {src/app => packages/design-core}/assets/flow-align-left.svg (100%) rename {src/app => packages/design-core}/assets/flow-align-level.svg (100%) rename {src/app => packages/design-core}/assets/flow-align-rf.svg (100%) rename {src/app => packages/design-core}/assets/flow-align-right.svg (100%) rename {src/app => packages/design-core}/assets/flow-align-top.svg (100%) rename {src/app => packages/design-core}/assets/flow-align-vertical.svg (100%) rename {src/app => packages/design-core}/assets/flow-box-select-rf.svg (100%) rename {src/app => packages/design-core}/assets/flow-box-select.svg (100%) rename {src/app => packages/design-core}/assets/flow-checkmark.svg (100%) rename {src/app => packages/design-core}/assets/flow-clear.svg (100%) rename {src/app => packages/design-core}/assets/flow-cross.svg (100%) rename {src/app => packages/design-core}/assets/flow-delete.svg (100%) rename {src/app => packages/design-core}/assets/flow-download.svg (100%) rename {src/app => packages/design-core}/assets/flow-edit.svg (100%) rename {src/app => packages/design-core}/assets/flow-empty.svg (100%) rename {src/app => packages/design-core}/assets/flow-failure.svg (100%) rename {src/app => packages/design-core}/assets/flow-file-download.svg (100%) rename {src/app => packages/design-core}/assets/flow-fullscreen-icon.svg (100%) rename {src/app => packages/design-core}/assets/flow-guide.svg (100%) rename {src/app => packages/design-core}/assets/flow-help-center.svg (100%) rename {src/app => packages/design-core}/assets/flow-location.svg (100%) rename {src/app => packages/design-core}/assets/flow-minscreen-icon.svg (100%) rename {src/app => packages/design-core}/assets/flow-navigation.svg (100%) rename {src/app => packages/design-core}/assets/flow-params-rf.svg (100%) rename {src/app => packages/design-core}/assets/flow-params.svg (100%) rename {src/app => packages/design-core}/assets/flow-prompt.svg (100%) rename {src/app => packages/design-core}/assets/flow-redo.svg (100%) rename {src/app => packages/design-core}/assets/flow-reduce.svg (100%) rename {src/app => packages/design-core}/assets/flow-refresh.svg (100%) rename {src/app => packages/design-core}/assets/flow-requirestar.svg (100%) rename {src/app => packages/design-core}/assets/flow-select.svg (100%) rename {src/app => packages/design-core}/assets/flow-set-bottom.svg (100%) rename {src/app => packages/design-core}/assets/flow-set-top.svg (100%) rename {src/app => packages/design-core}/assets/flow-success.svg (100%) rename {src/app => packages/design-core}/assets/flow-undo.svg (100%) rename {src/app => packages/design-core}/assets/flow-view-rf.svg (100%) rename {src/app => packages/design-core}/assets/flow-view.svg (100%) rename {src/app => packages/design-core}/assets/flow-zoom-in.svg (100%) rename {src/app => packages/design-core}/assets/flow-zoom-out.svg (100%) rename {src/app => packages/design-core}/assets/fold-outline.svg (100%) rename {src/app => packages/design-core}/assets/folder-wold.svg (100%) rename {src/app => packages/design-core}/assets/folder.svg (100%) rename {src/app => packages/design-core}/assets/font-style-italic.svg (100%) rename {src/app => packages/design-core}/assets/font-style-none.svg (100%) rename {src/app => packages/design-core}/assets/form.svg (100%) rename {src/app => packages/design-core}/assets/formfield.svg (100%) rename {src/app => packages/design-core}/assets/formitem.svg (100%) rename {src/app => packages/design-core}/assets/frozenpage.svg (100%) rename {src/app => packages/design-core}/assets/full-screen.svg (100%) rename {src/app => packages/design-core}/assets/generate-code.svg (100%) rename {src/app => packages/design-core}/assets/grid-column-flex.svg (100%) rename {src/app => packages/design-core}/assets/grid-row-auto.svg (100%) rename {src/app => packages/design-core}/assets/grid.svg (100%) rename {src/app => packages/design-core}/assets/h1.svg (100%) rename {src/app => packages/design-core}/assets/h16.svg (100%) rename {src/app => packages/design-core}/assets/h2.svg (100%) rename {src/app => packages/design-core}/assets/h3.svg (100%) rename {src/app => packages/design-core}/assets/h4.svg (100%) rename {src/app => packages/design-core}/assets/h5.svg (100%) rename {src/app => packages/design-core}/assets/h6.svg (100%) rename {src/app => packages/design-core}/assets/help-center.svg (100%) rename {src/app => packages/design-core}/assets/help.svg (100%) rename {src/app => packages/design-core}/assets/histogram.svg (100%) rename {src/app => packages/design-core}/assets/home-outline.svg (100%) rename {src/app => packages/design-core}/assets/home.svg (100%) rename {src/app => packages/design-core}/assets/hr.svg (100%) rename {src/app => packages/design-core}/assets/icon.svg (100%) rename {src/app => packages/design-core}/assets/image.svg (100%) rename {src/app => packages/design-core}/assets/input.svg (100%) rename {src/app => packages/design-core}/assets/js.svg (100%) rename {src/app => packages/design-core}/assets/json.svg (100%) rename {src/app => packages/design-core}/assets/justify-content-center.svg (100%) rename {src/app => packages/design-core}/assets/justify-content-end.svg (100%) rename {src/app => packages/design-core}/assets/justify-content-space-around.svg (100%) rename {src/app => packages/design-core}/assets/justify-content-space-between.svg (100%) rename {src/app => packages/design-core}/assets/justify-content-start.svg (100%) rename {src/app => packages/design-core}/assets/justify-content-stretch.svg (100%) rename {src/app => packages/design-core}/assets/justify-items-baseline.svg (100%) rename {src/app => packages/design-core}/assets/justify-items-center.svg (100%) rename {src/app => packages/design-core}/assets/justify-items-end.svg (100%) rename {src/app => packages/design-core}/assets/justify-items-start.svg (100%) rename {src/app => packages/design-core}/assets/justify-items-stretch.svg (100%) rename {src/app => packages/design-core}/assets/language.svg (100%) rename {src/app => packages/design-core}/assets/laptop-cut-corner.svg (100%) rename {src/app => packages/design-core}/assets/line.svg (100%) rename {src/app => packages/design-core}/assets/linear-gradient.svg (100%) rename {src/app => packages/design-core}/assets/link.svg (100%) rename {src/app => packages/design-core}/assets/list.svg (100%) rename {src/app => packages/design-core}/assets/loading.svg (100%) rename {src/app => packages/design-core}/assets/location.svg (100%) rename {src/app => packages/design-core}/assets/locked-outline.svg (100%) rename {src/app => packages/design-core}/assets/locked.svg (100%) rename {src/app => packages/design-core}/assets/logout.svg (100%) rename {src/app => packages/design-core}/assets/margin.svg (100%) rename {src/app => packages/design-core}/assets/materials.svg (100%) rename {src/app => packages/design-core}/assets/menu.svg (100%) rename {src/app => packages/design-core}/assets/mobile-landscape.svg (100%) rename {src/app => packages/design-core}/assets/mobile-portrai.svg (100%) rename {src/app => packages/design-core}/assets/new-page.svg (100%) rename {src/app => packages/design-core}/assets/news.svg (100%) rename {src/app => packages/design-core}/assets/nonsupportregion.svg (100%) rename {src/app => packages/design-core}/assets/notify-alarm.svg (100%) rename {src/app => packages/design-core}/assets/notify-failure.svg (100%) rename {src/app => packages/design-core}/assets/notify-prompt.svg (100%) rename {src/app => packages/design-core}/assets/notify-success.svg (100%) rename {src/app => packages/design-core}/assets/numeric.svg (100%) rename {src/app => packages/design-core}/assets/overflow-scroll.svg (100%) rename {src/app => packages/design-core}/assets/padding.svg (100%) rename {src/app => packages/design-core}/assets/page-schema.svg (100%) rename {src/app => packages/design-core}/assets/page.svg (100%) rename {src/app => packages/design-core}/assets/pager.svg (100%) rename {src/app => packages/design-core}/assets/paragraph.svg (100%) rename {src/app => packages/design-core}/assets/pencil-thick.svg (100%) rename {src/app => packages/design-core}/assets/pie.svg (100%) rename {src/app => packages/design-core}/assets/plugin-help.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-data.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-js.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-language.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-materials.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-page-schema.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-page.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-plugin-help.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-robot.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-sresources.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-symbol.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-tree.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-tutorial.svg (100%) rename {src/app => packages/design-core}/assets/plugin-icon-var.svg (100%) rename {src/app => packages/design-core}/assets/plus-circle.svg (100%) rename {src/app => packages/design-core}/assets/plus.svg (100%) rename {src/app => packages/design-core}/assets/popeditor.svg (100%) rename {src/app => packages/design-core}/assets/popover.svg (100%) rename {src/app => packages/design-core}/assets/position-all.svg (100%) rename {src/app => packages/design-core}/assets/position-bottom-left.svg (100%) rename {src/app => packages/design-core}/assets/position-bottom-right.svg (100%) rename {src/app => packages/design-core}/assets/position-bottom.svg (100%) rename {src/app => packages/design-core}/assets/position-left.svg (100%) rename {src/app => packages/design-core}/assets/position-right.svg (100%) rename {src/app => packages/design-core}/assets/position-top-left.svg (100%) rename {src/app => packages/design-core}/assets/position-top-right.svg (100%) rename {src/app => packages/design-core}/assets/position-top.svg (100%) rename {src/app => packages/design-core}/assets/preview.svg (100%) rename {src/app => packages/design-core}/assets/prompt.svg (100%) rename {src/app => packages/design-core}/assets/radar.svg (100%) rename {src/app => packages/design-core}/assets/radial-gradient.svg (100%) rename {src/app => packages/design-core}/assets/radio.svg (100%) rename {src/app => packages/design-core}/assets/realtime-flow.svg (100%) rename {src/app => packages/design-core}/assets/redo.svg (100%) rename {src/app => packages/design-core}/assets/refresh.svg (100%) rename {src/app => packages/design-core}/assets/report.svg (100%) rename {src/app => packages/design-core}/assets/resources.svg (100%) rename {src/app => packages/design-core}/assets/return.svg (100%) rename {src/app => packages/design-core}/assets/rf-alarm.svg (100%) rename {src/app => packages/design-core}/assets/rf-resources/flowchart-ecs.svg (100%) rename {src/app => packages/design-core}/assets/rf-resources/flowchart-evs.svg (100%) rename {src/app => packages/design-core}/assets/rf-resources/flowchart-rds.svg (100%) rename {src/app => packages/design-core}/assets/rf-resources/flowchart-vpc.svg (100%) rename {src/app => packages/design-core}/assets/ring.svg (100%) rename {src/app => packages/design-core}/assets/row.svg (100%) rename {src/app => packages/design-core}/assets/save.svg (100%) rename {src/app => packages/design-core}/assets/search.svg (100%) rename {src/app => packages/design-core}/assets/select.svg (100%) rename {src/app => packages/design-core}/assets/setting-outline.svg (100%) rename {src/app => packages/design-core}/assets/setting.svg (100%) rename {src/app => packages/design-core}/assets/slot.svg (100%) rename {src/app => packages/design-core}/assets/small-list.svg (100%) rename {src/app => packages/design-core}/assets/stars.svg (100%) rename {src/app => packages/design-core}/assets/start.svg (100%) rename {src/app => packages/design-core}/assets/style-setting-background-image.svg (100%) rename {src/app => packages/design-core}/assets/swiper.svg (100%) rename {src/app => packages/design-core}/assets/switch.svg (100%) rename {src/app => packages/design-core}/assets/symbol.svg (100%) rename {src/app => packages/design-core}/assets/table.svg (100%) rename {src/app => packages/design-core}/assets/tablefilter.svg (100%) rename {src/app => packages/design-core}/assets/tablet-portrait.svg (100%) rename {src/app => packages/design-core}/assets/tabs.svg (100%) rename {src/app => packages/design-core}/assets/tag.svg (100%) rename {src/app => packages/design-core}/assets/target.svg (100%) rename {src/app => packages/design-core}/assets/text-align-center.svg (100%) rename {src/app => packages/design-core}/assets/text-align-justify.svg (100%) rename {src/app => packages/design-core}/assets/text-align-left.svg (100%) rename {src/app => packages/design-core}/assets/text-align-right.svg (100%) rename {src/app => packages/design-core}/assets/text-copy-page.svg (100%) rename {src/app => packages/design-core}/assets/text-decoration-overline.svg (100%) rename {src/app => packages/design-core}/assets/text-decoration-strike.svg (100%) rename {src/app => packages/design-core}/assets/text-decoration-underline.svg (100%) rename {src/app => packages/design-core}/assets/text-direction-ltr.svg (100%) rename {src/app => packages/design-core}/assets/text-direction-rtl.svg (100%) rename {src/app => packages/design-core}/assets/text-page-common.svg (100%) rename {src/app => packages/design-core}/assets/text-page-folder-closed.svg (100%) rename {src/app => packages/design-core}/assets/text-page-folder.svg (100%) rename {src/app => packages/design-core}/assets/text-page-home.svg (100%) rename {src/app => packages/design-core}/assets/text-page-link.svg (100%) rename {src/app => packages/design-core}/assets/text-page-revert.svg (100%) rename {src/app => packages/design-core}/assets/text-page-review.svg (100%) rename {src/app => packages/design-core}/assets/text-source-delete.svg (100%) rename {src/app => packages/design-core}/assets/text-source-list-add.svg (100%) rename {src/app => packages/design-core}/assets/text-source-list-close.svg (100%) rename {src/app => packages/design-core}/assets/text-source-list-ref.svg (100%) rename {src/app => packages/design-core}/assets/text-source-setting.svg (100%) rename {src/app => packages/design-core}/assets/text-source-string.svg (100%) rename {src/app => packages/design-core}/assets/text-transform-capitalize.svg (100%) rename {src/app => packages/design-core}/assets/text-transform-lowercase.svg (100%) rename {src/app => packages/design-core}/assets/text-transform-sentence.svg (100%) rename {src/app => packages/design-core}/assets/text.svg (100%) rename {src/app => packages/design-core}/assets/tile-x.svg (100%) rename {src/app => packages/design-core}/assets/tile-xy.svg (100%) rename {src/app => packages/design-core}/assets/tile-y.svg (100%) rename {src/app => packages/design-core}/assets/timeline.svg (100%) rename {src/app => packages/design-core}/assets/tiny-logo.svg (100%) rename {src/app => packages/design-core}/assets/tooltip.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-bottom-left.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-bottom-right.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-bottom.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-center.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-left.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-point.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-right.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-top-left.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-top-right.svg (100%) rename {src/app => packages/design-core}/assets/transform-origin-top.svg (100%) rename {src/app => packages/design-core}/assets/trash.svg (100%) rename {src/app => packages/design-core}/assets/tree-shape.svg (100%) rename {src/app => packages/design-core}/assets/tree.svg (100%) rename {src/app => packages/design-core}/assets/tutorial.svg (100%) rename {src/app => packages/design-core}/assets/undo.svg (100%) rename {src/app => packages/design-core}/assets/unfold-outline.svg (100%) rename {src/app => packages/design-core}/assets/unlocked.svg (100%) rename {src/app => packages/design-core}/assets/var.svg (100%) rename {src/app => packages/design-core}/assets/video.svg (100%) rename {src/app => packages/design-core}/assets/warning.svg (100%) rename {src/app => packages/design-core}/assets/wizard.svg (100%) rename canvas.html => packages/design-core/canvas.html (98%) rename {src/app => packages/design-core}/config/addons.js (100%) rename {src/app => packages/design-core}/config/lowcode.config.js (100%) rename index.html => packages/design-core/index.html (97%) create mode 100644 packages/design-core/package.json rename preview.html => packages/design-core/preview.html (81%) rename previewApp.html => packages/design-core/previewApp.html (79%) rename {src/canvas => packages/design-core}/public/favicon.ico (100%) rename {src/app => packages/design-core}/public/i18n-mock/i18n-template-for-batch-import.zip (100%) rename {src/app => packages/design-core}/public/img/bgcModal.png (100%) rename {src/app => packages/design-core}/public/img/defaultAvator.png (100%) rename {src/app => packages/design-core}/public/img/divider.png (100%) rename {src/app => packages/design-core}/public/img/dividerActive.png (100%) rename {src/app => packages/design-core}/public/img/rocket.jpg (100%) rename {src/app => packages/design-core}/public/img/webNova.jpg (100%) rename {src/app => packages/design-core}/public/mock/bundle.json (100%) rename {src/app => packages/design-core}/public/monaco-linter/eslint.worker.js (100%) rename {src/app => packages/design-core}/public/tiny-vue.css (100%) rename {scripts => packages/design-core/scripts}/externalDeps.js (72%) rename setting.html => packages/design-core/setting.html (80%) rename {src/app => packages/design-core}/src/App.vue (100%) rename {src/app => packages/design-core}/src/DesignCanvas.vue (100%) rename {src/app => packages/design-core}/src/DesignPlugins.vue (100%) rename {src/app => packages/design-core}/src/DesignSettings.vue (100%) rename {src/app => packages/design-core}/src/DesignToolbars.vue (100%) create mode 100644 packages/design-core/src/canvas.js rename {src/app => packages/design-core}/src/main.js (100%) rename {src => packages/design-core/src}/preview/src/App.vue (100%) rename {src => packages/design-core/src}/preview/src/Toolbar.vue (100%) rename {src => packages/design-core/src}/preview/src/constant/index.js (100%) rename {src => packages/design-core/src}/preview/src/main.js (100%) rename {src => packages/design-core/src}/preview/src/preview/Preview.vue (100%) rename {src => packages/design-core/src}/preview/src/preview/generate.js (100%) rename {src => packages/design-core/src}/preview/src/preview/http.js (100%) rename {src => packages/design-core/src}/preview/src/preview/importMap.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/App.vue (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/Login.vue (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/Main.vue (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/app.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/bridge.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/constant/index.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/dataSource.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/dataSourceMap.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/injectGlobal.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/locales.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/lowcode.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/stores.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/storesHelper.js (100%) rename {src => packages/design-core/src}/preview/src/preview/srcFiles/utils.js (100%) rename {src => packages/design-core/src}/preview/src/previewApp.js (100%) rename {src => packages/design-core/src}/preview/src/previewApp.vue (100%) rename vite.config.js => packages/design-core/vite.config.js (71%) rename {src => packages}/http/package.json (64%) rename {src => packages}/http/src/Login.vue (100%) rename {src => packages}/http/src/axios.js (100%) rename {src => packages}/http/src/config.js (100%) rename {src => packages}/http/src/index.js (100%) rename {src => packages}/http/src/mock.js (100%) rename {src => packages}/http/vite.config.js (100%) rename {src => packages}/i18n/README.md (100%) rename {src => packages}/i18n/index.html (100%) rename {src => packages}/i18n/package.json (93%) rename {src => packages}/i18n/src/App.vue (100%) rename {src => packages}/i18n/src/I18nHost.vue (100%) rename {src => packages}/i18n/src/i18n.js (100%) rename {src => packages}/i18n/src/lib.js (100%) rename {src => packages}/i18n/src/main.js (100%) rename {src => packages}/i18n/src/test/TestVueInject.vue (100%) rename {src => packages}/i18n/src/test/TestVueUse.vue (100%) rename {src => packages}/i18n/src/test/TestWebcomponent.vue (100%) rename {src => packages}/i18n/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/block/index.js (100%) rename {src/plugins/packages => packages/plugins}/block/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/block/package.json (51%) rename {src/plugins/packages => packages/plugins}/block/src/BlockConfig.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockEvent.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockEventForm.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockEventList.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockGroupArrange.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockGuide.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockProperty.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockPropertyForm.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockPropertyList.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/BlockSetting.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/CategoryEdit.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/block/src/js/blockPropertyForm.js (100%) rename {src/plugins/packages => packages/plugins}/block/src/js/blockSetting.jsx (100%) rename {src/plugins/packages => packages/plugins}/block/src/js/http.js (100%) rename {src/plugins/packages => packages/plugins}/block/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/block/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/bridge/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/bridge/index.js (100%) rename {src/plugins/packages => packages/plugins}/bridge/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/bridge/package.json (59%) rename {src/plugins/packages => packages/plugins}/bridge/src/BridgeManage.vue (100%) rename {src/plugins/packages => packages/plugins}/bridge/src/BridgeSetting.vue (100%) rename {src/plugins/packages => packages/plugins}/bridge/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/bridge/src/http.js (100%) rename {src/plugins/packages => packages/plugins}/bridge/src/js/resource.js (100%) rename {src/plugins/packages => packages/plugins}/bridge/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/bridge/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/data/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/data/index.js (100%) rename {src/plugins/packages => packages/plugins}/data/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/data/package.json (56%) rename {src/plugins/packages => packages/plugins}/data/src/CreateRemoteAPI.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/CreateRemoteFunction.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/CreateStore.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/CreateVariable.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/DataSourceList.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/DataSourceRightPanel.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/EditorFunctionTool.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/EditorI18nTool.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/data/src/js/common.js (100%) rename {src/plugins/packages => packages/plugins}/data/src/js/constants.js (100%) rename {src/plugins/packages => packages/plugins}/data/src/js/http.js (100%) rename {src/plugins/packages => packages/plugins}/data/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/data/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/datasource/index.js (100%) create mode 100644 packages/plugins/datasource/package.json rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceField.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceFieldCheck.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceFieldCheckMultipleLine.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceFieldCheckRanger.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceFieldForm.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceFieldList.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceFieldType.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceForm.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceGlobalDataHandler.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceList.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceName.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRecordForm.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRecordList.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRecordUpload.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRemoteAutoload.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRemoteDataAdapter.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRemoteDataResult.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRemoteForm.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRemoteMapping.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRemotePanel.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceRemoteParameter.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceTemplate.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/DataSourceType.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/RemoteDataAdapterForm.vue (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/config.js (100%) rename {src/plugins/packages => packages/plugins}/datasource/src/js/datasource.js (96%) rename {src/plugins/packages => packages/plugins}/datasource/src/js/http.js (100%) rename {src/plugins/packages => packages/plugins}/datasource/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/help/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/help/index.js (100%) rename {src/plugins/packages => packages/plugins}/help/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/help/package.json (67%) rename {src/plugins/packages => packages/plugins}/help/src/HelpIcon.vue (100%) rename {src/plugins/packages => packages/plugins}/help/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/help/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/i18n/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/i18n/index.js (100%) rename {src/plugins/packages => packages/plugins}/i18n/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/i18n/package.json (53%) rename {src/plugins/packages => packages/plugins}/i18n/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/i18n/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/i18n/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/materials/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/materials/index.js (100%) rename {src/plugins/packages => packages/plugins}/materials/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/materials/package.json (62%) rename {src/plugins/packages => packages/plugins}/materials/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockDetail.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockGroup.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockGroupArrange.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockGroupFilters.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockGroupPanel.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockGroupSort.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockGroupTransfer.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockGroupTransferPanel.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockList.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/BlockVersionSelect.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/http.js (100%) rename {src/plugins/packages => packages/plugins}/materials/src/block/js/usePanel.js (100%) rename {src/plugins/packages => packages/plugins}/materials/src/component/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/materials/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/materials/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/page/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/page/index.js (100%) rename {src/plugins/packages => packages/plugins}/page/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/page/package.json (58%) rename {src/plugins/packages => packages/plugins}/page/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/PageFolderSetting.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/PageGeneral.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/PageHistory.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/PageHome.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/PageInputOutput.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/PageSetting.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/PageTree.vue (100%) rename {src/plugins/packages => packages/plugins}/page/src/http.js (100%) rename {src/plugins/packages => packages/plugins}/page/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/page/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/robot/assets/AI.png (100%) rename {src/plugins/packages => packages/plugins}/robot/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/robot/index.js (100%) rename {src/plugins/packages => packages/plugins}/robot/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/robot/package.json (58%) rename {src/plugins/packages => packages/plugins}/robot/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/robot/src/js/robotSetting.js (100%) rename {src/plugins/packages => packages/plugins}/robot/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/robot/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/schema/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/schema/index.js (100%) rename {src/plugins/packages => packages/plugins}/schema/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/schema/package.json (62%) rename {src/plugins/packages => packages/plugins}/schema/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/schema/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/schema/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/script/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/script/index.js (100%) rename {src/plugins/packages => packages/plugins}/script/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/script/package.json (58%) rename {src/plugins/packages => packages/plugins}/script/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/script/src/js/method.js (100%) rename {src/plugins/packages => packages/plugins}/script/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/script/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/tree/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/tree/index.js (100%) rename {src/plugins/packages => packages/plugins}/tree/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/tree/package.json (55%) rename {src/plugins/packages => packages/plugins}/tree/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/tree/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/tree/vite.config.js (100%) rename {src/plugins/packages => packages/plugins}/tutorial/assets/test.png (100%) rename {src/plugins/packages => packages/plugins}/tutorial/index.js (100%) rename {src/plugins/packages => packages/plugins}/tutorial/mock/test.js (100%) rename {src/plugins/packages => packages/plugins}/tutorial/package.json (62%) rename {src/plugins/packages => packages/plugins}/tutorial/src/Main.vue (100%) rename {src/plugins/packages => packages/plugins}/tutorial/src/TutorialVideoPanel.vue (100%) rename {src/plugins/packages => packages/plugins}/tutorial/src/js/http.js (100%) rename {src/plugins/packages => packages/plugins}/tutorial/test/test.js (100%) rename {src/plugins/packages => packages/plugins}/tutorial/vite.config.js (100%) rename {src/settings/packages => packages/settings}/design/package.json (78%) rename {src/settings/packages => packages/settings}/design/src/App.vue (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-bundle.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/accordion.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/alert.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/button.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/checkbox.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/container.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/date.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/daterange.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/form.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/formfield.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/halfmodal.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/image.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/index.js (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/input.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/radio.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/select.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/swiper.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/switch.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/tab.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/table.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/tablefilter.json (100%) rename {src/settings/packages => packages/settings}/design/src/assets/materials/ng-components/tag.json (100%) rename {src/settings/packages => packages/settings}/design/src/components/ArrayConfigItemForm.vue (100%) rename {src/settings/packages => packages/settings}/design/src/components/ComponentList.vue (100%) rename {src/settings/packages => packages/settings}/design/src/components/PropertyCanvas.vue (100%) rename {src/settings/packages => packages/settings}/design/src/components/PropertyList.vue (100%) rename {src/settings/packages => packages/settings}/design/src/components/SettingPanel.vue (100%) rename {src/settings/packages => packages/settings}/design/src/components/SourceEditor.vue (100%) rename {src/settings/packages => packages/settings}/design/src/components/widgets/index.js (100%) rename {src/settings/packages => packages/settings}/design/src/convertToSchema.js (100%) rename {src/settings/packages => packages/settings}/design/src/lib.js (100%) rename {src/settings/packages => packages/settings}/design/src/main.js (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/accordion.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/alert.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/button.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/checkbox.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/container.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/date.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/daterange.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/form.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/formfield.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/halfmodal.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/image.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/index.js (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/input.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/radio.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/select.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/swiper.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/switch.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/tab.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/table.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/tablefilter.json (100%) rename {src/settings/packages => packages/settings}/design/src/ng-properties/tag.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/alert.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/amount.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/area.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/autocomplete.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/badge.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/breadcrumb-item.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/breadcrumb.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/bulletin-board.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/button-group.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/button.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/calendar.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/carousel-item.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/carousel.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/cascader-panel.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/cascader-props.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/cascader.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/chart-data.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/chart-pie.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/chart.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/checkbox-button.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/checkbox-group.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/checkbox.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/col.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/collapse-item.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/collapse.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/company.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/container.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/country.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/credit-card-form.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/crop.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/currency.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/date-picker-date-format.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/date-picker-options.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/date-picker-shortcuts.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/date-picker.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/dept.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/detail-page.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/dialog-box.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/drop-roles.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/drop-times.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/edoc.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/espace.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/fall-menu.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/file-upload.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/floatbar.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/flow-chart.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/form-item.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/form.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/gantt.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/grid-column.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/grid-toolbar.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/grid.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/hrapprover.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/image.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/index.js (100%) rename {src/settings/packages => packages/settings}/design/src/properties/input.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/ip-address.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/layout.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/link-menu.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/link.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/loading.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/locales.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/logon-user.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/logout.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/menu-bar.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/milestone.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/modal.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/nav-menu.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/numeric.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/option-group.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/option.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/pager.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/panel.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/pop-upload.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/popeditor.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/popover.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/progress.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/radio-button.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/radio-group.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/radio.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/rate.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/rich-text.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/roles.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/row.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/scroll-text.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/search.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/select.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/slide-bar.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/slider.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/split.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/steps.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/svg-icon.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/switch.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/tabs.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/tag.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/text-popup.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/time-line.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/time-picker-options.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/time-picker.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/time-select-options.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/time-select.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/toggle-menu.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/tooltip.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/transfer.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/tree-menu.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/tree.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/user-account.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/user-contact.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/user-head.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/user-link.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/user.json (100%) rename {src/settings/packages => packages/settings}/design/src/properties/wizard.json (100%) rename {src/settings/packages => packages/settings}/design/src/schema/carousel-item.json (100%) rename {src/settings/packages => packages/settings}/design/src/schema/carousel.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/button.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/checkbox.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/checkboxbutton.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/checkboxgroup.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/collapse.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/collapseitem.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/dialogbox.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/floatbar.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/form.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/formitem.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/grid.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/gridcolumn.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/index.js (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/input.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/pager.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/popeditor.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/popover.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/radio.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/search.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/select.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/switch.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/tabitem.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/tabs.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/time-line.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/tooltip.json (100%) rename {src/settings/packages => packages/settings}/design/src/schemas/tree.json (100%) rename {src/settings/packages => packages/settings}/design/src/store/index.js (100%) rename {src/settings/packages => packages/settings}/design/vite.config.js (100%) rename {src/settings/packages => packages/settings}/events/index.js (100%) rename {src/settings/packages => packages/settings}/events/package.json (59%) rename {src/settings/packages => packages/settings}/events/src/Main.vue (100%) rename {src/settings/packages => packages/settings}/events/src/commonjs/events.js (100%) rename {src/settings/packages => packages/settings}/events/src/components/AdvanceConfig.vue (100%) rename {src/settings/packages => packages/settings}/events/src/components/BindEvents.vue (100%) rename {src/settings/packages => packages/settings}/events/src/components/BindEventsDialog.vue (100%) rename {src/settings/packages => packages/settings}/events/vite.config.js (100%) rename {src/settings/packages => packages/settings}/props/index.js (100%) rename {src/settings/packages => packages/settings}/props/package.json (61%) rename {src/settings/packages => packages/settings}/props/src/Main.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/Empty.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/groups/LifeCycle.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/groups/TableColumn.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/groups/TablePager.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/index.js (100%) rename {src/settings/packages => packages/settings}/props/src/components/inputs/BindFunction.vue (95%) rename {src/settings/packages => packages/settings}/props/src/components/inputs/CheckValue.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/inputs/CodeEditor.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/inputs/DraggableOptions.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/inputs/NumericSelect.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/inputs/SelectOption.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/inputs/SwitchValue.vue (100%) rename {src/settings/packages => packages/settings}/props/src/components/modal/ModalContent.vue (100%) rename {src/settings/packages => packages/settings}/props/vite.config.js (100%) rename {src/settings/packages => packages/settings}/styles/assets/test.png (100%) rename {src/settings/packages => packages/settings}/styles/index.js (100%) rename {src/settings/packages => packages/settings}/styles/mock/test.js (100%) rename {src/settings/packages => packages/settings}/styles/package.json (58%) rename {src/settings/packages => packages/settings}/styles/src/Main.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/BackgroundGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/BackgroundImageGradient.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/BackgroundImageSetting.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/ColorOverlay.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/ImageSetting.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/LinearGradient.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/PositionOrigin.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/background/RadialGradient.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/border/BorderGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/effects/EffectGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/index.js (100%) rename {src/settings/packages => packages/settings}/styles/src/components/inputs/ImageSelect.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/inputs/InputSelect.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/inputs/ModalMask.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/inputs/NumericSelect.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/inputs/ResetButton.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/layout/FlexBox.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/layout/GridBox.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/layout/LayoutGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/position/PositionGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/shadow/BoxShadowGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/size/SizeGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/spacing/SpacingGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/spacing/SpacingSetting.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/typography/TypographyGroup.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/components/typography/TypographyMore.vue (100%) rename {src/settings/packages => packages/settings}/styles/src/js/cssConvert.js (100%) rename {src/settings/packages => packages/settings}/styles/src/js/cssType.js (100%) rename {src/settings/packages => packages/settings}/styles/src/js/styleProperty.js (100%) rename {src/settings/packages => packages/settings}/styles/src/js/useEditor.js (100%) rename {src/settings/packages => packages/settings}/styles/src/js/useEvent.js (100%) rename {src/settings/packages => packages/settings}/styles/src/js/useLayout.js (100%) rename {src/settings/packages => packages/settings}/styles/src/js/useStyle.js (100%) rename {src/settings/packages => packages/settings}/styles/test/test.js (100%) rename {src/settings/packages => packages/settings}/styles/vite.config.js (100%) rename {src => packages}/svgs/index.js (100%) rename {src => packages}/svgs/mock/test.js (100%) rename {src => packages}/svgs/package.json (85%) rename {src => packages}/svgs/src/Main.vue (100%) rename {src => packages}/svgs/test/test.js (100%) rename {src => packages}/svgs/vite.config.js (100%) rename {src/theme/packages => packages/theme}/common/base.less (100%) rename {src/theme/packages => packages/theme}/common/global.less (100%) rename {src/theme/packages => packages/theme}/dark/base.less (100%) rename {src/theme/packages => packages/theme}/dark/block.less (100%) rename {src/theme/packages => packages/theme}/dark/bridge.less (100%) rename {src/theme/packages => packages/theme}/dark/button.less (100%) rename {src/theme/packages => packages/theme}/dark/canvas.less (100%) rename {src/theme/packages => packages/theme}/dark/datasource.less (100%) rename {src/theme/packages => packages/theme}/dark/events.less (100%) rename {src/theme/packages => packages/theme}/dark/gpt-dialog.less (100%) rename {src/theme/packages => packages/theme}/dark/help.less (100%) rename {src/theme/packages => packages/theme}/dark/i18n.less (100%) rename {src/theme/packages => packages/theme}/dark/index.less (100%) rename {src/theme/packages => packages/theme}/dark/life-cycles.less (100%) rename {src/theme/packages => packages/theme}/dark/materials.less (100%) rename {src/theme/packages => packages/theme}/dark/metaComponent.less (100%) rename {src/theme/packages => packages/theme}/dark/package.json (100%) rename {src/theme/packages => packages/theme}/dark/pageManage.less (100%) rename {src/theme/packages => packages/theme}/dark/plugin-js.less (100%) rename {src/theme/packages => packages/theme}/dark/radio.less (100%) rename {src/theme/packages => packages/theme}/dark/scrollbar.less (100%) rename {src/theme/packages => packages/theme}/dark/settings.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-checkbox.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-collapse.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-dialog-box.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-grid.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-input.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-modal.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-notify.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-numeric.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-search.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-switch.less (100%) rename {src/theme/packages => packages/theme}/dark/tiny-tabs.less (100%) rename {src/theme/packages => packages/theme}/dark/toolbar.less (100%) rename {src/theme/packages => packages/theme}/dark/tree.less (100%) rename {src/theme/packages => packages/theme}/dark/tutorial.less (100%) rename {src/theme/packages => packages/theme}/dark/variable.less (100%) rename {src/theme/packages => packages/theme}/dark/vite.config.js (100%) rename {src/theme/packages => packages/theme}/light/base.less (100%) rename {src/theme/packages => packages/theme}/light/block.less (100%) rename {src/theme/packages => packages/theme}/light/bridge.less (100%) rename {src/theme/packages => packages/theme}/light/button.less (100%) rename {src/theme/packages => packages/theme}/light/canvas.less (100%) rename {src/theme/packages => packages/theme}/light/datasource.less (100%) rename {src/theme/packages => packages/theme}/light/events.less (100%) rename {src/theme/packages => packages/theme}/light/gpt-dialog.less (100%) rename {src/theme/packages => packages/theme}/light/help.less (100%) rename {src/theme/packages => packages/theme}/light/i18n.less (100%) rename {src/theme/packages => packages/theme}/light/index.less (100%) rename {src/theme/packages => packages/theme}/light/life-cycles.less (100%) rename {src/theme/packages => packages/theme}/light/materials.less (100%) rename {src/theme/packages => packages/theme}/light/metaComponent.less (100%) rename {src/theme/packages => packages/theme}/light/package.json (100%) rename {src/theme/packages => packages/theme}/light/pageManage.less (100%) rename {src/theme/packages => packages/theme}/light/plugin-js.less (100%) rename {src/theme/packages => packages/theme}/light/radio.less (100%) rename {src/theme/packages => packages/theme}/light/scrollbar.less (100%) rename {src/theme/packages => packages/theme}/light/settings.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-collapse.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-dialog-box.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-grid.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-input.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-modal.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-notify.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-numeric.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-search.less (100%) rename {src/theme/packages => packages/theme}/light/tiny-switch.less (100%) rename {src/theme/packages => packages/theme}/light/toolbar.less (100%) rename {src/theme/packages => packages/theme}/light/tree.less (100%) rename {src/theme/packages => packages/theme}/light/tutorial.less (100%) rename {src/theme/packages => packages/theme}/light/variable.less (100%) rename {src/theme/packages => packages/theme}/light/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/breadcrumb/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/breadcrumb/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/breadcrumb/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/breadcrumb/package.json (74%) rename {src/toolbars/packages => packages/toolbars}/breadcrumb/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/breadcrumb/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/breadcrumb/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/clean/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/clean/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/clean/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/clean/package.json (74%) rename {src/toolbars/packages => packages/toolbars}/clean/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/clean/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/clean/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/collaboration/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/collaboration/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/collaboration/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/collaboration/package.json (82%) rename {src/toolbars/packages => packages/toolbars}/collaboration/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/collaboration/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/collaboration/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/fullscreen/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/fullscreen/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/fullscreen/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/fullscreen/package.json (83%) rename {src/toolbars/packages => packages/toolbars}/fullscreen/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/fullscreen/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/fullscreen/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/generate-vue/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/generate-vue/package.json (64%) rename {src/toolbars/packages => packages/toolbars}/generate-vue/src/FileSelector.vue (98%) rename {src/toolbars/packages => packages/toolbars}/generate-vue/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/generate-vue/src/generateCode.js (100%) rename {src/toolbars/packages => packages/toolbars}/generate-vue/src/http.js (100%) rename {src/toolbars/packages => packages/toolbars}/generate-vue/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/lang/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/lang/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/lang/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/lang/package.json (83%) rename {src/toolbars/packages => packages/toolbars}/lang/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/lang/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/lang/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/layout/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/layout/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/layout/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/layout/package.json (93%) rename {src/toolbars/packages => packages/toolbars}/layout/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/layout/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/layout/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/lock/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/lock/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/lock/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/lock/package.json (68%) rename {src/toolbars/packages => packages/toolbars}/lock/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/lock/src/http.js (100%) rename {src/toolbars/packages => packages/toolbars}/lock/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/lock/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/logo/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/logo/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/logo/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/logo/package.json (67%) rename {src/toolbars/packages => packages/toolbars}/logo/src/AppList.vue (100%) rename {src/toolbars/packages => packages/toolbars}/logo/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/logo/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/logo/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/logout/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/logout/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/logout/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/logout/package.json (93%) rename {src/toolbars/packages => packages/toolbars}/logout/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/logout/src/js/http.js (100%) rename {src/toolbars/packages => packages/toolbars}/logout/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/logout/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/media/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/media/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/media/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/media/package.json (69%) rename {src/toolbars/packages => packages/toolbars}/media/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/media/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/media/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/preview/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/preview/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/preview/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/preview/package.json (67%) rename {src/toolbars/packages => packages/toolbars}/preview/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/preview/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/preview/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/redoundo/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/redoundo/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/redoundo/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/redoundo/package.json (82%) rename {src/toolbars/packages => packages/toolbars}/redoundo/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/redoundo/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/redoundo/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/refresh/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/refresh/package.json (74%) rename {src/toolbars/packages => packages/toolbars}/refresh/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/refresh/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/save/assets/test.png (100%) rename {src/toolbars/packages => packages/toolbars}/save/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/save/mock/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/save/package.json (62%) rename {src/toolbars/packages => packages/toolbars}/save/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/save/src/js/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/save/test/test.js (100%) rename {src/toolbars/packages => packages/toolbars}/save/vite.config.js (100%) rename {src/toolbars/packages => packages/toolbars}/setting/index.js (100%) rename {src/toolbars/packages => packages/toolbars}/setting/package.json (74%) rename {src/toolbars/packages => packages/toolbars}/setting/src/Main.vue (100%) rename {src/toolbars/packages => packages/toolbars}/setting/vite.config.js (100%) rename {src => packages}/utils/package.json (89%) rename {src => packages}/utils/src/constants/index.js (98%) rename {src => packages}/utils/src/fs/index.js (100%) rename {src => packages}/utils/src/index.js (100%) rename {src => packages}/utils/src/utils/index.js (100%) rename {src => packages}/utils/vite.config.js (100%) rename {src => packages}/webcomponent/README.md (100%) rename {src => packages}/webcomponent/package.json (97%) rename {src => packages}/webcomponent/src/defineCustomElement.js (100%) rename {src => packages}/webcomponent/src/lib.js (100%) rename {src => packages}/webcomponent/vite.config.js (100%) create mode 100644 pnpm-workspace.yaml delete mode 100644 src/canvas/package.json delete mode 100644 src/controller/package.json delete mode 100644 src/plugins/packages/datasource/package.json delete mode 100644 src/plugins/packages/materials/bash.exe.stackdump diff --git a/.gitignore b/.gitignore index 836373965b..3e3d94e59d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ node_modules dist/ package-lock.json yarn.lock +pnpm-lock.yaml +lerna-debug.log # local env files .env.local diff --git a/.husky/pre-commit b/.husky/pre-commit index 099e5fd1f3..9179da3dd6 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -2,5 +2,5 @@ . "$(dirname -- "$0")/_/husky.sh" # npm run lint -npx lint-staged +npx lint-staged -q diff --git a/.npmignore b/.npmignore index 2df6aa4ea1..06d519d56f 100644 --- a/.npmignore +++ b/.npmignore @@ -18,7 +18,6 @@ package-lock.json # 忽略可能存在的其它编辑器文件夹 .idea -/src/app/public/mock/* -!/src/app/public/mock/graph-bundle.json -tmp -temp \ No newline at end of file +/packages/design-core/public/mock/* +**/**/tmp +**/**/temp \ No newline at end of file diff --git a/README.en-US.md b/README.en-US.md index 5de4529728..4f395514d9 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -22,20 +22,13 @@ English | [简体中文](README.zh-CN.md) ### Dependencies required for installation ```sh -$ npm install -$ pushd mockServer -$ npm install -$ popd +$ pnpm install ``` ### Local development: Start the local mock server and use the mock data of the local mock server. ```sh -$ npm run serve - -# start another terminal -$ cd mockServer -$ npm run dev +$ pnpm dev ``` Open a browser: `http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4MjvqoVj8OVsc` @@ -44,45 +37,18 @@ Open a browser: `http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4Mjvq - `type=app` Application type - `id=xxx` Application ID - `tenant=xxx` Organization ID -- `pagdId=xxx` Page ID +- `pageid=xxx` Page ID ## Build ```sh # Build all plug-ins first -npm run build:plugin +pnpm build:plugin # Build Designer -npm run build:alpha or build:prod - -# Release all plug-ins. -npm run publish:plugin - -# Publish the designer. -npm run publish:core - -``` - -## Common Packet Sending Process - -1. Release the plug-in. - -```sh -npm run build:plugin && npm run publish:plugin -``` - -2. Publish Designer - -a) Change the package name and version number. -Package name: @opentiny/tinybuilder-design-core-test -Version number: The last digit plus 1 each time. For example: +pnpm build:alpha or build:prod ``` -"name": "@opentiny/tinybuilder-design-core-test", -"version": "1.0.87", -``` - -b) npm publish ## 🤝 Participation and Contribution @@ -96,7 +62,3 @@ Please read the [Contribution Guide](CONTRIBUTING.md) before participating in th ## License [MIT](LICENSE) - -``` - -``` diff --git a/README.md b/README.md index 483f3e8a8c..4f395514d9 100644 --- a/README.md +++ b/README.md @@ -22,20 +22,13 @@ English | [简体中文](README.zh-CN.md) ### Dependencies required for installation ```sh -$ npm install -$ pushd mockServer -$ npm install -$ popd +$ pnpm install ``` ### Local development: Start the local mock server and use the mock data of the local mock server. ```sh -$ npm run serve - -# start another terminal -$ cd mockServer -$ npm run dev +$ pnpm dev ``` Open a browser: `http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4MjvqoVj8OVsc` @@ -44,46 +37,19 @@ Open a browser: `http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4Mjvq - `type=app` Application type - `id=xxx` Application ID - `tenant=xxx` Organization ID -- `pagdId=xxx` Page ID +- `pageid=xxx` Page ID ## Build ```sh # Build all plug-ins first -npm run build:plugin +pnpm build:plugin # Build Designer -npm run build:alpha or build:prod - -# Release all plug-ins. -npm run publish:plugin - -# Publish the designer. -npm run publish:core - -``` - -## Common Packet Sending Process - -1. Release the plug-in. +pnpm build:alpha or build:prod -```sh -npm run build:plugin && npm run publish:plugin ``` -2. Publish Designer - -a) Change the package name and version number. -Package name: @opentiny/tinybuilder-design-core-test -Version number: The last digit plus 1 each time. For example: - -``` -"name": "@opentiny/tinybuilder-design-core-test", -"version": "1.0.87", -``` - -b) npm publish - ## 🤝 Participation and Contribution If you are interested in our open source project, please join us! 🎉 diff --git a/README.zh-CN.md b/README.zh-CN.md index 17cc565609..60f3d1f3fb 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -22,21 +22,13 @@ ### 安装所需的依赖 ```sh -$ npm install -$ pushd mockServer -$ npm install -$ popd +$ pnpm install ``` ### 本地开发,启动本地 mock 服务器,使用本地 mock 服务器的 mock 数据 ```sh -$ npm run serve - -# 另起一个终端 -$ cd mockServer -$ npm run dev - +$ pnpm dev ``` 浏览器打开:`http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4MjvqoVj8OVsc` @@ -45,43 +37,19 @@ $ npm run dev - `type=app` 应用类型 - `id=xxx` 应用 ID - `tenant=xxx` 组织 ID -- `pagdId=xxx` 页面 ID +- `pageid=xxx` 页面 ID ## 构建 ```sh # 先构建所有插件 -npm run build:plugin +pnpm run build:plugin # 构建设计器 -npm run build:alpha 或 build:prod - -# 发布所有插件 -npm run publish:plugin - -# 发布设计器 -npm run publish:core - -``` +pnpm run build:alpha 或 build:prod -## 常规发包流程 - -1. 发布插件 - npm run build:plugin && npm run publish:plugin - -2. 发布设计器 - -a) 修改包名和版本号: -包名:@opentiny/tinybuilder-design-core-test -版本号:末位每次+1, 例如: - -``` - "name": "@opentiny/tinybuilder-design-core-test", - "version": "1.0.87", ``` -b) npm publish - ## 🤝 参与贡献 如果你对我们的开源项目感兴趣,欢迎加入我们!🎉 diff --git a/jsconfig.json b/jsconfig.json index e4f51d6fdc..c366326a17 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -3,71 +3,71 @@ "baseUrl": "./", "jsx": "react", "paths": { - "@/*": ["src/*"], - "@opentiny/tiny-engine-canvas": ["src/canvas/src/index.js"], - "@opentiny/tiny-engine-controller": ["src/controller/src/index"], - "@opentiny/tiny-engine-plugin-materials": ["src/plugins/packages/materials/index"], - "@opentiny/tiny-engine-plugin-data": ["src/plugins/packages/data/index"], - "@opentiny/tiny-engine-plugin-script": ["src/plugins/packages/script/index"], - "@opentiny/tiny-engine-plugin-tree": ["src/plugins/packages/tree/index"], - "@opentiny/tiny-engine-plugin-help": ["src/plugins/packages/help/index"], - "@opentiny/tiny-engine-plugin-schema": ["src/plugins/packages/schema/index"], - "@opentiny/tiny-engine-plugin-page": ["src/plugins/packages/page/index"], - "@opentiny/tiny-engine-plugin-i18n": ["src/plugins/packages/i18n/index"], - "@opentiny/tiny-engine-plugin-bridge": ["src/plugins/packages/bridge/index"], - "@opentiny/tiny-engine-setting-events": ["src/settings/packages/events/index"], - "@opentiny/tiny-engine-setting-props": ["src/settings/packages/props/index"], - "@opentiny/tiny-engine-common": ["src/common/index"], - "@opentiny/tiny-engine-setting-styles": ["src/settings/packages/styles/index"], - "@opentiny/tiny-engine-toolbar-breadcrumb": ["src/toolbars/packages/breadcrumb/index"], - "@opentiny/tiny-engine-toolbar-fullscreen": ["src/toolbars/packages/fullscreen/index"], - "@opentiny/tiny-engine-toolbar-lang": ["src/toolbars/packages/lang/index"], - "@opentiny/tiny-engine-toolbar-layout": ["src/toolbars/packages/layout/index"], - "@opentiny/tiny-engine-toolbar-checkinout": ["src/toolbars/packages/lock/index"], - "@opentiny/tiny-engine-toolbar-logo": ["src/toolbars/packages/logo/index"], - "@opentiny/tiny-engine-toolbar-media": ["src/toolbars/packages/media/index"], - "@opentiny/tiny-engine-toolbar-preview": ["src/toolbars/packages/preview/index"], - "@opentiny/tiny-engine-toolbar-generate-vue": ["src/toolbars/packages/generate-vue/index"], - "@opentiny/tiny-engine-toolbar-clean": ["src/toolbars/packages/clean/index"], - "@opentiny/tiny-engine-toolbar-save": ["src/toolbars/packages/save/index"], - "tiny-engine-canvas": ["src/canvas/index"], - "@opentiny/tiny-engine-theme-dark": ["src/theme/packages/dark/index.less"], - "@opentiny/tiny-engine-theme-light": ["src/theme/packages/light/index.less"], - "@opentiny/tiny-engine-svgs": ["src/svgs/index"], - "@opentiny/tiny-engine-http": ["src/http/index"], - "@opentiny/tiny-engine-controller/*": ["src/controller/src/*"], - "@opentiny/tiny-engine-plugin-materials/*": ["src/plugins/packages/materials/*"], - "@opentiny/tiny-engine-plugin-data/*": ["src/plugins/packages/data/*"], - "@opentiny/tiny-engine-plugin-script/*": ["src/plugins/packages/script/*"], - "@opentiny/tiny-engine-plugin-tree/*": ["src/plugins/packages/tree/*"], - "@opentiny/tiny-engine-plugin-help/*": ["src/plugins/packages/help/*"], - "@opentiny/tiny-engine-plugin-schema/*": ["src/plugins/packages/schema/*"], - "@opentiny/tiny-engine-plugin-page/*": ["src/plugins/packages/page/*"], - "@opentiny/tiny-engine-plugin-i18n/*": ["src/plugins/packages/i18n/*"], - "@opentiny/tiny-engine-plugin-bridge/*": ["src/plugins/packages/bridge/*"], - "@opentiny/tiny-engine-setting-events/*": ["src/settings/packages/events/*"], - "@opentiny/tiny-engine-setting-props/*": ["src/settings/packages/props/*"], - "@opentiny/tiny-engine-common/*": ["src/common/*"], - "@opentiny/tiny-engine-setting-styles/*": ["src/settings/packages/styles/*"], - "@opentiny/tiny-engine-toolbar-breadcrumb/*": ["src/toolbars/packages/breadcrumb/*"], - "@opentiny/tiny-engine-toolbar-fullscreen/*": ["src/toolbars/packages/fullscreen/*"], - "@opentiny/tiny-engine-toolbar-lang/*": ["src/toolbars/packages/lang/*"], - "@opentiny/tiny-engine-toolbar-layout/*": ["src/toolbars/packages/layout/*"], - "@opentiny/tiny-engine-toolbar-checkinout/*": ["src/toolbars/packages/lock/*"], - "@opentiny/tiny-engine-toolbar-logo/*": ["src/toolbars/packages/logo/*"], - "@opentiny/tiny-engine-toolbar-media/*": ["src/toolbars/packages/media/*"], - "@opentiny/tiny-engine-toolbar-preview/*": ["src/toolbars/packages/preview/*"], - "@opentiny/tiny-engine-toolbar-clean/*": ["src/toolbars/packages/clean/*"], - "@opentiny/tiny-engine-toolbar-save/*": ["src/toolbars/packages/save/*"], - "@opentiny/tiny-engine-theme-dark/*": ["src/theme/packages/dark/*"], - "@opentiny/tiny-engine-theme-light/*": ["src/theme/packages/light/*"], - "@opentiny/tiny-engine-svgs/*": ["src/svgs/*"], - "@opentiny/tiny-engine-http/*": ["src/http/*"], - "@opentiny/tiny-engine-utils": ["src/utils/src/index.js"], - "@opentiny/tiny-engine-webcomponent-core": ["src/webcomponent/src/lib"], - "@opentiny/tiny-engine-i18n-host": ["src/i18n/src/lib"] + "@/*": ["packages/*"], + "@opentiny/tiny-engine-canvas": ["packages/canvas/src/index.js"], + "@opentiny/tiny-engine-controller": ["packages/controller/src/index"], + "@opentiny/tiny-engine-plugin-materials": ["packages/plugins/materials/index"], + "@opentiny/tiny-engine-plugin-data": ["packages/plugins/data/index"], + "@opentiny/tiny-engine-plugin-script": ["packages/plugins/script/index"], + "@opentiny/tiny-engine-plugin-tree": ["packages/plugins/tree/index"], + "@opentiny/tiny-engine-plugin-help": ["packages/plugins/help/index"], + "@opentiny/tiny-engine-plugin-schema": ["packages/plugins/schema/index"], + "@opentiny/tiny-engine-plugin-page": ["packages/plugins/page/index"], + "@opentiny/tiny-engine-plugin-i18n": ["packages/plugins/i18n/index"], + "@opentiny/tiny-engine-plugin-bridge": ["packages/plugins/bridge/index"], + "@opentiny/tiny-engine-setting-events": ["packages/settings/events/index"], + "@opentiny/tiny-engine-setting-props": ["packages/settings/props/index"], + "@opentiny/tiny-engine-common": ["packages/common/index"], + "@opentiny/tiny-engine-setting-styles": ["packages/settings/styles/index"], + "@opentiny/tiny-engine-toolbar-breadcrumb": ["packages/toolbars/breadcrumb/index"], + "@opentiny/tiny-engine-toolbar-fullscreen": ["packages/toolbars/fullscreen/index"], + "@opentiny/tiny-engine-toolbar-lang": ["packages/toolbars/lang/index"], + "@opentiny/tiny-engine-toolbar-layout": ["packages/toolbars/layout/index"], + "@opentiny/tiny-engine-toolbar-checkinout": ["packages/toolbars/lock/index"], + "@opentiny/tiny-engine-toolbar-logo": ["packages/toolbars/logo/index"], + "@opentiny/tiny-engine-toolbar-media": ["packages/toolbars/media/index"], + "@opentiny/tiny-engine-toolbar-preview": ["packages/toolbars/preview/index"], + "@opentiny/tiny-engine-toolbar-generate-vue": ["packages/toolbars/generate-vue/index"], + "@opentiny/tiny-engine-toolbar-clean": ["packages/toolbars/clean/index"], + "@opentiny/tiny-engine-toolbar-save": ["packages/toolbars/save/index"], + "tiny-engine-canvas": ["packages/canvas/index"], + "@opentiny/tiny-engine-theme-dark": ["packages/theme/dark/index.less"], + "@opentiny/tiny-engine-theme-light": ["packages/theme/light/index.less"], + "@opentiny/tiny-engine-svgs": ["packages/svgs/index"], + "@opentiny/tiny-engine-http": ["packages/http/index"], + "@opentiny/tiny-engine-controller/*": ["packages/controller/src/*"], + "@opentiny/tiny-engine-plugin-materials/*": ["packages/plugins/materials/*"], + "@opentiny/tiny-engine-plugin-data/*": ["packages/plugins/data/*"], + "@opentiny/tiny-engine-plugin-script/*": ["packages/plugins/script/*"], + "@opentiny/tiny-engine-plugin-tree/*": ["packages/plugins/tree/*"], + "@opentiny/tiny-engine-plugin-help/*": ["packages/plugins/help/*"], + "@opentiny/tiny-engine-plugin-schema/*": ["packages/plugins/schema/*"], + "@opentiny/tiny-engine-plugin-page/*": ["packages/plugins/page/*"], + "@opentiny/tiny-engine-plugin-i18n/*": ["packages/plugins/i18n/*"], + "@opentiny/tiny-engine-plugin-bridge/*": ["packages/plugins/bridge/*"], + "@opentiny/tiny-engine-setting-events/*": ["packages/settings/events/*"], + "@opentiny/tiny-engine-setting-props/*": ["packages/settings/props/*"], + "@opentiny/tiny-engine-common/*": ["packages/common/*"], + "@opentiny/tiny-engine-setting-styles/*": ["packages/settings/styles/*"], + "@opentiny/tiny-engine-toolbar-breadcrumb/*": ["packages/toolbars/breadcrumb/*"], + "@opentiny/tiny-engine-toolbar-fullscreen/*": ["packages/toolbars/fullscreen/*"], + "@opentiny/tiny-engine-toolbar-lang/*": ["packages/toolbars/lang/*"], + "@opentiny/tiny-engine-toolbar-layout/*": ["packages/toolbars/layout/*"], + "@opentiny/tiny-engine-toolbar-checkinout/*": ["packages/toolbars/lock/*"], + "@opentiny/tiny-engine-toolbar-logo/*": ["packages/toolbars/logo/*"], + "@opentiny/tiny-engine-toolbar-media/*": ["packages/toolbars/media/*"], + "@opentiny/tiny-engine-toolbar-preview/*": ["packages/toolbars/preview/*"], + "@opentiny/tiny-engine-toolbar-clean/*": ["packages/toolbars/clean/*"], + "@opentiny/tiny-engine-toolbar-save/*": ["packages/toolbars/save/*"], + "@opentiny/tiny-engine-theme-dark/*": ["packages/theme/dark/*"], + "@opentiny/tiny-engine-theme-light/*": ["packages/theme/light/*"], + "@opentiny/tiny-engine-svgs/*": ["packages/svgs/*"], + "@opentiny/tiny-engine-http/*": ["packages/http/*"], + "@opentiny/tiny-engine-utils": ["packages/utils/src/index.js"], + "@opentiny/tiny-engine-webcomponent-core": ["packages/webcomponent/src/lib"], + "@opentiny/tiny-engine-i18n-host": ["packages/i18n/src/lib"] } }, - "include": ["src/**/*"], + "include": ["packages/**/*"], "exclude": ["node_modules", "dist"] } diff --git a/lerna.json b/lerna.json index 7168deb820..74c0687b9e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,15 @@ { - "packages": ["src/**", "packages/**"], + "command": { + "version": { + "message": "chore(release): publish" + } + }, "useNx": false, - "version": "independent" + "version": "independent", + "npmClient": "pnpm", + "publish": { + "npmClient": "pnpm" + }, + "ignoreChanges": ["**/*.md", "**/test/**", ".npmrc"], + "granularPathspec": false } diff --git a/lint-staged.config.js b/lint-staged.config.js index 237086fb9a..d673344c2e 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,4 +1,4 @@ module.exports = { - './src/**/**.{js,vue,jsx}': 'eslint', - './src/**/**.{vue,js,ts,html,json,less}': 'prettier --write' + './packages/**/**.{js,vue,jsx}': 'eslint', + './packages/**/**.{vue,js,ts,html,json,less}': 'prettier --write' } diff --git a/mockServer/package.json b/mockServer/package.json index d7f06a18f3..39aa2edaba 100644 --- a/mockServer/package.json +++ b/mockServer/package.json @@ -1,5 +1,5 @@ { - "name": "koa2-mock", + "name": "@opentiny/tiny-engine-mock", "version": "1.0.0", "publishConfig": { "access": "public" diff --git a/mockServer/src/database/blockCategories.db b/mockServer/src/database/blockCategories.db new file mode 100644 index 0000000000..85744f5a58 --- /dev/null +++ b/mockServer/src/database/blockCategories.db @@ -0,0 +1,3 @@ +{"id":"L0fyFYECrNiRZMiX","app":{"id":918,"name":"portal-app","app_website":null,"platform":{"id":897,"name":"portal-platform"},"obs_url":"","created_by":null,"updated_by":null,"created_at":"2022-06-08T07:19:01.000Z","updated_at":"2023-09-04T08:55:40.000Z","state":null,"published":false,"createdBy":86,"updatedBy":564,"tenant":1,"home_page":"NTJ4MjvqoVj8OVsc","css":null,"config":{},"git_group":"","project_name":"","constants":null,"data_handler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"},"description":"demo应用","latest":22,"platform_history":null,"editor_url":"","branch":"develop","visit_url":null,"is_demo":null,"image_url":"","is_default":true,"template_type":null,"set_template_time":null,"set_template_by":null,"set_default_by":169,"framework":"Vue","global_state":[],"default_lang":null,"extend_config":{"business":{"serviceName":"","endpointName":"cce","endpointId":"ee","serviceId":"ee","router":"ee"},"env":{"alpha":{"regions":[{"name":"","baseUrl":"","isDefault":false}],"isDefault":true}},"type":"console"},"assets_url":"","data_hash":"ae128e37f6bc378f1b9c21d75bd05551","can_associate":true,"data_source_global":{"dataHandler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"}}},"name":"我的分类","desc":"","blocks":["ALvDb0JD8atzd3nA"],"category_id":"qukuaifenlei","_id":"L0fyFYECrNiRZMiX"} +{"$$indexCreated":{"fieldName":"name","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"name","unique":true}} diff --git a/mockServer/src/database/blockGroups.db b/mockServer/src/database/blockGroups.db new file mode 100644 index 0000000000..fe904aae8a --- /dev/null +++ b/mockServer/src/database/blockGroups.db @@ -0,0 +1,3 @@ +{"id":"b57MCCORYPGjgL23","app":{"id":918,"name":"portal-app","app_website":null,"platform":{"id":897,"name":"portal-platform"},"obs_url":"","created_by":null,"updated_by":null,"created_at":"2022-06-08T07:19:01.000Z","updated_at":"2023-09-04T08:55:40.000Z","state":null,"published":false,"createdBy":86,"updatedBy":564,"tenant":1,"home_page":"NTJ4MjvqoVj8OVsc","css":null,"config":{},"git_group":"","project_name":"","constants":null,"data_handler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"},"description":"demo应用","latest":22,"platform_history":null,"editor_url":"","branch":"develop","visit_url":null,"is_demo":null,"image_url":"","is_default":true,"template_type":null,"set_template_time":null,"set_template_by":null,"set_default_by":169,"framework":"Vue","global_state":[],"default_lang":null,"extend_config":{"business":{"serviceName":"","endpointName":"cce","endpointId":"ee","serviceId":"ee","router":"ee"},"env":{"alpha":{"regions":[{"name":"","baseUrl":"","isDefault":false}],"isDefault":true}},"type":"console"},"assets_url":"","data_hash":"ae128e37f6bc378f1b9c21d75bd05551","can_associate":true,"data_source_global":{"dataHandler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"}}},"name":"我的区块","desc":"","blocks":["ALvDb0JD8atzd3nA"],"_id":"b57MCCORYPGjgL23"} +{"$$indexCreated":{"fieldName":"name","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"name","unique":true}} diff --git a/mockServer/src/database/blocks.db b/mockServer/src/database/blocks.db new file mode 100644 index 0000000000..387c640b25 --- /dev/null +++ b/mockServer/src/database/blocks.db @@ -0,0 +1,4 @@ +{"id":"ALvDb0JD8atzd3nA","label":"PortalHome","name_cn":null,"framework":"Vue","content":{"state":{"logoUrl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uyd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","loginImgUrl":"data:image/png;base64,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"},"componentName":"Block","css":".home-content {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\r\n \r\n}\r\n.home-content .btn {\r\n margin-top: 24px;\r\n \r\n }\r\n .home-content .btn button {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\r\n }\r\n\r\n .home-content .text {\r\n font-size: 18px;\r\n }\r\n\r\n .home-content .account {\r\n margin-top: 16px;\r\n \r\n \r\n }\r\n\r\n .home-content .account .sub-text {\r\n color: #575d6c;\r\n }\r\n .home-content .account .login {\r\n color: #1890ff;\r\n cursor: pointer;\r\n }\r\n .home-content .logo img{\r\n border-radius: 50%;\r\n overflow: hidden;\r\n }","props":{},"children":[{"componentName":"div","props":{"className":"home","style":"height: 100vh; display: flex;"},"id":"357534ab","children":[{"componentName":"TinyRow","props":{"align":"middle","flex":true,"style":""},"children":[{"componentName":"TinyCol","props":{"span":6,"style":"text-align: center; display: flex; justify-content: center;"},"id":"f01b66ea","children":[{"componentName":"div","props":{"style":"width: 90%; height: 50%;"},"id":"8197d016","children":[{"componentName":"Img","props":{"style":"width: 100%; height: 100%;","src":{"type":"JSExpression","value":"this.state.loginImgUrl"}},"id":"471e30f3"}]}]},{"componentName":"TinyCol","props":{"span":"6","style":"text-align: center;"},"id":"781d5b46","children":[{"componentName":"div","props":{"className":"home-content","style":"font-size: 14px;"},"id":"08638b8a","children":[{"componentName":"div","props":{"className":"text"},"id":"18712ee2","children":[{"componentName":"div","props":{"style":"font-size: 16px;"},"id":"07e6794c","children":[{"componentName":"div","props":{"className":"logo"},"id":"07cad264","children":[{"componentName":"Img","props":{"style":"width: 105px; height: 105px; border-radius: 100px;","src":{"type":"JSExpression","value":"this.state.logoUrl"}},"id":"f4489e27"}]},{"componentName":"Text","props":{"text":"TinyLowCode 低代码平台","style":"display: block; font-size: 28px; margin-top: 12px; margin-bottom: 12px; font-weight: bold;","ref":"","className":"title"},"id":"e82108ce"},{"componentName":"Text","props":{"text":"致力于通过友好的用户交互提升业务的开发效率","style":"display: block; margin-bottom: 12px;"},"id":"65a2f1ad"},{"componentName":"Text","props":{"text":"欢迎一起来解锁~~","style":"margin-top: 12px;"},"id":"bb879abb"}]},{"componentName":"div","props":{"className":"btn"},"id":"44b2bcbd","children":[{"componentName":"TinyButton","props":{"text":"立即体验","round":true,"type":"primary","style":"margin-top: 40px;"},"id":"9580c5e7"},{"componentName":"div","props":{"className":"account"},"id":"6a8ffa3e","children":[{"componentName":"div","props":{"style":"font-size: 14px; margin-top: 4px;"},"id":"bfc6eb6c","children":[{"componentName":"Text","props":{"text":"已有团队?","style":"color: #777777;"},"id":"3d993264"},{"componentName":"Text","props":{"text":"立即进入","style":"color: #5e7ce0;","onClick":{"type":"JSExpression","value":"this.handleClick(event)"}},"id":"21390118"}]}]}]}]}]}]}],"id":"4545fea2"}]}],"methods":{"handleClick":{"type":"JSFunction","value":"function (event) {this.emit('goto-home', event)\n}"}},"fileName":"PortalHome","meta":{"id":1722,"parentId":"0","group":"staticPages","title":null,"occupier":null,"isHome":false,"description":"","router":"/","rootElement":"div","creator":"开发者","gmt_create":"2022-06-08 03:25:51","gmt_modified":"2022-06-09 05:19:09"},"id":1722,"schema":{"properties":[{"label":{"zh_CN":"基础信息"},"description":{"zh_CN":"基础信息"},"collapse":{"number":6,"text":{"zh_CN":"显示更多"}},"content":[]}],"events":{"onGotoHome":{"label":{"zh_CN":"点击立即进入触发方法"},"description":{"zh_CN":"点击立即进入触发方法"},"type":"event","functionInfo":{"params":[],"returns":{}},"defaultValue":"","linked":{"id":"21390118","componentName":"Text","event":"onClick"}}},"slots":{}},"dataSource":{},"i18n":{}},"description":null,"path":"common/components/home","screenshot":"","created_app":null,"tags":"","categories":[],"occupier":null,"isDefault":null,"isOfficial":true,"created_at":"2022-06-13T07:56:51.000Z","updated_at":"2023-01-13T08:12:51.000Z","assets":{"material":[],"scripts":["http://localhost:9090/assets/js/989web-components.es.js","http://localhost:9090/assets/js/989web-components.umd.js"],"styles":[]},"createdBy":86,"current_history":1655,"public":1,"tiny_reserved":false,"author":null,"content_blocks":null,"current_version":"x","is_published":true,"_id":"ALvDb0JD8atzd3nA"} +{"id":"V85zd9sWEya25Kxh","label":"PortalBlock","name_cn":null,"framework":"Vue","content":{"state":{},"methods":{},"componentName":"Block","fileName":"PortalBlock","css":"","props":{},"children":[{"componentName":"div","props":{"style":"font-size: 18px; height: 40px; border-bottom: 1px solid rgb(223, 225, 230); margin-top: 20px;"},"id":"d38cea57","children":[{"componentName":"Icon","props":{"name":"IconChevronLeft"},"id":"86c6e6b0"},{"componentName":"Text","props":{"text":"编辑物料资产包 | ","style":"margin-left: 10px; font-weight: bold;"},"id":"38d9fbc8"},{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"this.props.blockName"},"style":"margin-left: 10px; font-weight: bold;"},"id":"6cd76396"}]}],"schema":{"properties":[{"label":{"zh_CN":"基础信息"},"description":{"zh_CN":"基础信息"},"collapse":{"number":6,"text":{"zh_CN":"显示更多"}},"content":[{"property":"blockName","type":"String","defaultValue":"MT0526-React 1.0","label":{"text":{"zh_CN":"区块名称"}},"cols":12,"rules":[],"handle":{"getter":"","setter":""},"hidden":false,"required":true,"readOnly":false,"disabled":false,"widget":{"component":"MetaInput","props":{"modelValue":"MT0526-React 1.0"}}}]}],"events":{},"slots":{}},"dataSource":{}},"description":null,"path":"portal","screenshot":"","created_app":null,"tags":null,"categories":[],"occupier":{"id":86,"username":"开发者","resetPasswordToken":"developer"},"isDefault":null,"isOfficial":null,"created_at":"2022-06-28T08:59:54.000Z","updated_at":"2023-01-13T08:20:09.000Z","assets":{"material":[],"scripts":["http://localhost:9090/assets/js/1005web-components.es.js","http://localhost:9090/assets/js/1005web-components.umd.js"],"styles":[]},"createdBy":{"id":86,"username":"开发者","resetPasswordToken":"developer"},"current_history":1665,"public":1,"tiny_reserved":false,"author":null,"content_blocks":null,"public_scope_tenants":[],"histories_length":1,"is_published":true,"_id":"V85zd9sWEya25Kxh"} +{"$$indexCreated":{"fieldName":"label","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"label","unique":true}} diff --git a/mockServer/src/database/pages.db b/mockServer/src/database/pages.db index 4ebe412f3f..103c886105 100644 --- a/mockServer/src/database/pages.db +++ b/mockServer/src/database/pages.db @@ -1,5 +1,4 @@ {"name":"DemoPage","id":"5bhD7p5FUsUOTFRN","app":"918","route":"demopage","page_content":{"state":{},"methods":{},"componentName":"Page","css":"","props":{},"lifeCycles":{},"children":[{"componentName":"div","props":{},"id":"85375559","children":[{"componentName":"TinySwitch","props":{"modelValue":""},"id":"33433546"}]}],"dataSource":{"list":[]},"utils":[],"bridge":[],"inputs":[],"outputs":[],"fileName":"DemoPage"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"message":"Page auto save","_id":"5bhD7p5FUsUOTFRN"} {"name":"createVm","id":"NTJ4MjvqoVj8OVsc","app":"918","route":"createVm","page_content":{"state":{"dataDisk":[1,2,3]},"methods":{},"componentName":"Page","css":"body {\r\n background-color:#eef0f5 ;\r\n margin-bottom: 80px;\r\n}","props":{},"children":[{"componentName":"div","props":{"style":"padding-bottom: 10px; padding-top: 10px;"},"id":"2b2cabf0","children":[{"componentName":"TinyTimeLine","props":{"active":"2","data":[{"name":"基础配置"},{"name":"网络配置"},{"name":"高级配置"},{"name":"确认配置"}],"horizontal":true,"style":"border-radius: 0px;"},"id":"dd764b17"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"id":"30c94cc8","children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"计费模式"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"包年/包月","value":"1"},{"text":"按需计费","value":"2"}],"modelValue":"1"},"id":"a8d84361"}],"id":"9f39f3e7"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"乌兰察布二零一","value":"1"}],"modelValue":"1","style":"border-radius: 0px; margin-right: 10px;"},"id":"c97ccd99"},{"componentName":"Text","props":{"text":"温馨提示:页面左上角切换区域","style":"background-color: [object Event]; color: #8a8e99; font-size: 12px;"},"id":"20923497"},{"componentName":"Text","props":{"text":"不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度","style":"display: block; color: #8a8e99; border-radius: 0px; font-size: 12px;"},"id":"54780a26"}],"id":"4966384d"},{"componentName":"TinyFormItem","props":{"label":"可用区","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"可用区1","value":"1"},{"text":"可用区2","value":"2"},{"text":"可用区3","value":"3"}],"modelValue":"1"},"id":"6184481b"}],"id":"690837bf"}],"id":"b6a425d4"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"CPU架构"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"x86计算","value":"1"},{"text":"鲲鹏计算","value":"2"}],"modelValue":"1"},"id":"7d33ced7"}],"id":"05ed5a79"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"div","props":{"style":"display: flex; justify-content: flex-start; align-items: center;"},"id":"606edf78","children":[{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"id":"f3f98246","children":[{"componentName":"Text","props":{"text":"vCPUs","style":"width: 80px;"},"id":"c287437e"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"4c43286b"}]},{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"children":[{"componentName":"Text","props":{"text":"内存","style":"width: 80px; border-radius: 0px;"},"id":"38b8fa1f"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"cd33328e"}],"id":"2b2c678f"},{"componentName":"div","props":{"style":"display: flex; align-items: center;"},"children":[{"componentName":"Text","props":{"text":"规格名称","style":"width: 80px;"},"id":"d3eb6352"},{"componentName":"TinySearch","props":{"modelValue":"","placeholder":"输入关键词"},"id":"21cb9282"}],"id":"b8e0f35c"}]},{"componentName":"div","props":{"style":"border-radius: 0px;"},"id":"5000c83e","children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"通用计算型","value":"1"},{"text":"通用计算增强型","value":"2"},{"text":"内存优化型","value":"3"},{"text":"内存优化型","value":"4"},{"text":"磁盘增强型","value":"5"},{"text":"超高I/O型","value":"6"},{"text":"GPU加速型","value":"7"}],"modelValue":"1","style":"border-radius: 0px; margin-top: 12px;"},"id":"b8724703"},{"componentName":"TinyGrid","props":{"editConfig":{"trigger":"click","mode":"cell","showStatus":true},"columns":[{"type":"radio","width":60},{"field":"employees","title":"规格名称"},{"field":"created_date","title":"vCPUs | 内存(GiB)","sortable":true},{"field":"city","title":"CPU","sortable":true},{"title":"基准 / 最大带宽\t","sortable":true},{"title":"内网收发包","sortable":true}],"data":[{"id":"1","name":"GFD科技有限公司","city":"福州","employees":800,"created_date":"2014-04-30 00:56:00","boole":false},{"id":"2","name":"WWW科技有限公司","city":"深圳","employees":300,"created_date":"2016-07-08 12:36:22","boole":true}],"style":"margin-top: 12px; border-radius: 0px;","auto-resize":true},"id":"77701c25"},{"componentName":"div","props":{"style":"margin-top: 12px; border-radius: 0px;"},"id":"3339838b","children":[{"componentName":"Text","props":{"text":"当前规格","style":"width: 150px; display: inline-block;"},"id":"203b012b"},{"componentName":"Text","props":{"text":"通用计算型 | Si2.large.2 | 2vCPUs | 4 GiB","style":"font-weight: 700;"},"id":"87723f52"}]}]}],"id":"657fb2fc"}],"id":"d19b15cf"}],"id":"9991228b"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"镜像","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"公共镜像","value":"1"},{"text":"私有镜像","value":"2"},{"text":"共享镜像","value":"3"}],"modelValue":"1"},"id":"922b14cb"},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"id":"6b679524","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 170px; margin-right: 10px;"},"id":"4851fff7"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 340px;"},"id":"a7183eb7"}]},{"componentName":"div","props":{"style":"margin-top: 12px;"},"id":"57aee314","children":[{"componentName":"Text","props":{"text":"请注意操作系统的语言类型。","style":"color: #e37d29;"},"id":"56d36c27"}]}],"id":"e3b02436"}],"id":"59aebf2b"}],"id":"87ff7b99"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"系统盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"display: flex;"},"id":"cddba5b8","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"a97fbe15"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"1cde4c0f"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限240,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px;"},"id":"2815d82d"}]}],"id":"50239a3a"}],"id":"e8582986"},{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"数据盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"margin-top: 12px; display: flex;"},"id":"728c9825","children":[{"componentName":"Icon","props":{"style":"margin-right: 10px; width: 16px; height: 16px;","name":"IconPanelMini"},"id":"fded6930"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"62734e3f"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"667c7926"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限600,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px; margin-right: 10px;"},"id":"e7bc36d6"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px;"},"id":"1bd56dc0"}],"loop":{"type":"JSExpression","value":"this.state.dataDisk"}},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"children":[{"componentName":"Icon","props":{"name":"IconPlus","style":"width: 16px; height: 16px; margin-right: 10px;"},"id":"65c89f2b"},{"componentName":"Text","props":{"text":"增加一块数据盘","style":"font-size: 12px; border-radius: 0px; margin-right: 10px;"},"id":"cb344071"},{"componentName":"Text","props":{"text":"您还可以挂载 21 块磁盘(云硬盘)","style":"color: #8a8e99; font-size: 12px;"},"id":"80eea996"}],"id":"e9e530ab"}],"id":"078e03ef"}],"id":"ccef886e"}],"id":"0fb7bd74"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-color: #ffffff; padding-top: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; position: fixed; inset: auto 0% 0% 0%; height: 80px; line-height: 80px; border-radius: 0px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[],"id":"21ed4475"},{"componentName":"TinyRow","props":{"style":"border-radius: 0px; height: 100%;"},"children":[{"componentName":"TinyCol","props":{"span":"8"},"id":"b9d051a5","children":[{"componentName":"TinyRow","props":{"style":"border-radius: 0px;"},"children":[{"componentName":"TinyCol","props":{"span":"5","style":"display: flex;"},"id":"02352776","children":[{"componentName":"Text","props":{"text":"购买量","style":"margin-right: 10px;"},"id":"0cd9ed5c"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"2f9cf442"},{"componentName":"Text","props":{"text":"台"},"id":"facd4481"}]},{"componentName":"TinyCol","props":{"span":"7"},"id":"82b6c659","children":[{"componentName":"div","props":{},"id":"9cd65874","children":[{"componentName":"Text","props":{"text":"配置费用","style":"font-size: 12px;"},"id":"b5a0a0da"},{"componentName":"Text","props":{"text":"¥1.5776","style":"padding-left: 10px; padding-right: 10px; color: #de504e;"},"id":"d9464214"},{"componentName":"Text","props":{"text":"/小时","style":"font-size: 12px;"},"id":"af7cc5e6"}]},{"componentName":"div","props":{},"id":"89063830","children":[{"componentName":"Text","props":{"text":"参考价格,具体扣费请以账单为准。","style":"font-size: 12px; border-radius: 0px;"},"id":"d8995fbc"},{"componentName":"Text","props":{"text":"了解计费详情","style":"font-size: 12px; color: #344899;"},"id":"b383c3e2"}]}]}],"id":"94fc0e43"}]},{"componentName":"TinyCol","props":{"span":"4","style":"display: flex; flex-direction: row-reverse; border-radius: 0px; height: 100%; justify-content: flex-start; align-items: center;"},"id":"10b73009","children":[{"componentName":"TinyButton","props":{"text":"下一步: 网络配置","type":"danger","style":"max-width: unset;"},"id":"0b584011"}]}],"id":"d414a473"}],"id":"e8ec029b"}],"fileName":"createVm"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"_id":"NTJ4MjvqoVj8OVsc"} -{"name":"ComponentsSetting","id":"fh7U0xYetFGA5Ieu","app":"918","route":"componentsSetting","page_content":{"state":{"components":[{"name":"表单","text":"由按钮、输入框、选择器、单选框、多选框等控件组成..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."},{"name":"按钮","text":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..."}],"pageConfig":{"component":{"type":"JSResource","value":"this.utils.Pager"},"attrs":{"currentPage":1,"pageSize":50,"pageSizes":[10,20,50],"total":0,"layout":"sizes,total, prev, pager, next, jumper"}},"componentsTotal":0,"renderf5956ed2":[{"label":"按更新时间","value":"updata","_RID":"row_6"},{"label":"按创建时间","value":"create"}],"renderb52aeac9":[{"framework":"","materials":"","name":"表单","description":"由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据","id":"021fd6b6","_RID":"row_1"},{"framework":"","materials":"","name":"按钮","description":"常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型","id":"84d239bb","_RID":"row_2"},{"framework":"","materials":"","name":"表单项","description":"Form 组件下的 FormItem 配置","id":"490f8a00","_RID":"row_3"},{"framework":"","materials":"","name":"开关","description":"关闭或打开","id":"c259b8b3","_RID":"row_4"},{"framework":"","materials":"","name":"互斥按钮组","description":"以按钮组的方式出现,常用于多项类似操作","id":"083ed9c7","_RID":"row_5"},{"framework":"","materials":"","name":"提示框","description":"Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画","id":"09136cea","_RID":"row_6"},{"framework":"","materials":"","name":"文字提示框","description":"动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信","id":"a63b57d5","_RID":"row_7"},{"framework":"","materials":"","name":"树","description":"可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单","id":"a0f6e8a3","_RID":"row_8"},{"framework":"","materials":"","name":"分页","description":"当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件","id":"d1aa18fc","_RID":"row_9"},{"framework":"","materials":"","name":"表格","description":"提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等","id":"ca49cc52","_RID":"row_10"},{"framework":"","materials":"","name":"搜索框","description":"指定条件对象进行搜索数据","id":"4e20ecc9"},{"framework":"","materials":"","name":"折叠面板","description":"内容区可指定动态页面或自定义 html 等,支持展开收起操作","id":"6b093ee5"},{"framework":"","materials":"","name":"对话框","description":"模态对话框,在浮层中显示,引导用户进行相关操作","id":"0a09abc0"},{"framework":"","materials":"","name":"标签页签项","description":"tab页签","id":"f814b901"},{"framework":"","materials":"","name":"单选","description":"用于配置不同场景的选项,在一组备选项中进行单选","id":"c5ae797c"},{"framework":"","materials":"","name":"弹出编辑","description":"该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件","id":"33d0c590"},{"framework":"","materials":"","name":"下拉框","description":"Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件","id":"16711dfa"},{"framework":"","materials":"","name":"折叠面板项","description":"内容区可指定动态页面或自定义 html 等,支持展开收起操作","id":"a9fd190a"},{"framework":"","materials":"","name":"复选框","description":"用于配置不同场景的选项,提供用户可在一组选项中进行多选","id":"a7dfa9ec"},{"framework":"","materials":"","name":"复选框按钮","description":"用于配置不同场景的选项,提供用户可在一组选项中进行多选","id":"c9071a7b"},{"framework":"","materials":"","name":"输入框","description":"通过鼠标或键盘输入字符","id":"d4bb8330"},{"framework":"","materials":"","name":"时间线","description":"时间线","id":"ced3dc83"}],"render7e97d9c7":[{"name":"标签页","description":"分隔内容上有关联但属于不同类别的数据集合","id":"a2b3e681","_RID":"row_1"},{"name":"走马灯","description":"常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现","id":"311fd1ae","_RID":"row_2"},{"name":"日期选择器","description":"用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式","id":"8d38b248","_RID":"row_3"},{"name":"布局列","description":"列配置信息","id":"1f6940d8"}]},"methods":{"linkClick":{"type":"JSFunction","value":"function linkClick() {\n location.href = 'http://10.37.114.118:3000/my-platform/create';\n}"},"query":{"type":"JSFunction","value":"function query(name) {\n this.state.components.fillter((e) => {\n return e.name !== name;\n });\n}"},"getTableData":{"type":"JSFunction","value":"function getTableData() {\n return new Promise((resolve, reject) => {\n this.dataSourceMap['timeData'].load().then((res) => {\n resolve({ result: [], page: { total: 0 } });\n });\n });\n}"},"clearSelected":{"type":"JSFunction","value":"function clearSelected(event) {\n this.dataSourceMap['selectedComponents'] = this.dataSourceMap['selectedComponents'] || [];\n this.dataSourceMap['selectedComponents'].map((e) => {\n this.dataSourceMap['componentList'].push(e);\n });\n this.dataSourceMap['selectedComponents'] = [];\n}"}},"componentName":"Page","css":".components-box{\r\n height:900px;\r\n display: flex;\r\n}\r\n.components-box-left{\r\n width: 270px;\r\n}\r\n.components-box-right{\r\n width:50%;\r\n}\r\n.components-box-right-add{\r\n width: 100%;\r\n height: 200px;\r\n}\r\n.mgr20{\r\n margin-right: 20px;\r\n}","props":{},"children":[{"componentName":"div","props":{},"id":"2a5d4622","children":[{"componentName":"TinyGrid","props":{"editConfig":{"trigger":"click","mode":"cell","showStatus":true},"columns":[{"type":"index","width":60},{"type":"selection","width":60},{"field":"employees","title":"员工数"},{"field":"created_date","title":"创建日期"},{"field":"city","title":"城市"}],"data":[{"id":"1","name":"GFD科技有限公司","city":"福州","employees":800,"created_date":"2014-04-30 00:56:00","boole":false},{"id":"2","name":"WWW科技有限公司","city":"深圳","employees":300,"created_date":"2016-07-08 12:36:22","boole":true}]},"id":"3635454e"}]},{"componentName":"div","props":{"style":"height: 80px; width: 87%; margin: 0 auto; margin-bottom: 20px; margin-top: 20px; padding-left: 20px; padding-top: 30px; background: rgb(242, 245, 252);"},"id":"436ecc4a","children":[{"componentName":"Text","props":{"text":" 物料资产包简介","style":"color: rgb(138, 142, 153);"},"id":"16ad7aa9"},{"componentName":"Text","props":{"text":"调试构建报错","style":"margin-left: 10px; margin-right: 10px;"},"id":"ab44d8ea"},{"componentName":"Icon","props":{"name":"IconEdit"},"id":"8b6be3c2"},{"componentName":"div","props":{},"id":"848e3e8a","children":[{"componentName":"Text","props":{"text":"发布地址","style":"color: rgb(138, 142, 153);"},"id":"cd51ad2c"},{"componentName":"Text","props":{"text":"http://10.37.114.118:3000/my-platform/create","style":"margin-left: 20px; margin-right: 10px; color: rgb(36, 150, 255);","onClick":{"type":"JSExpression","value":"this.linkClick"}},"id":"3ed13633"},{"componentName":"Icon","props":{"name":"IconEdit"},"id":"16b75d9f"}]}]},{"componentName":"div","props":{"className":"components-box","style":"width: 88%; margin: 0 auto; border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; padding-top: 40px; padding-bottom: 40px; height: 1200px;"},"id":"c880007b","children":[{"componentName":"div","props":{"className":"components-box-left","style":"border-right-width: 2px; border-right-style: solid; border-color: rgb(223, 225, 230); position: relative;"},"id":"3525fc52","children":[{"componentName":"TinyTimeLine","props":{"active":"1","data":[{"name":"添加组件"},{"name":"添加区块"}],"horizontal":false,"className":"components-box-left","vertical":true},"id":"1e391ed7"},{"componentName":"div","props":{},"id":"81ccd767","children":[{"componentName":"div","props":{"style":"height: 300px; position: absolute; bottom: 20px; left: 20px;"},"id":"bc11d593","children":[{"componentName":"div","props":{},"id":"50ed6e39","children":[{"componentName":"Text","props":{"text":"组件示意图 "},"id":"fa6b920c"}]},{"componentName":"div","props":{},"id":"9ca346e6","children":[{"componentName":"Text","props":{"text":"组件是构建物料资产包的必要元素\n","style":"margin-top: 10px; color: rgb(173, 176, 184); margin-bottom: 20px;"},"id":"d0ac5a34"}]},{"componentName":"Img","props":{"src":"http://localhost:9090/assets/images/f750dc319828b039af713c643aad02bd_222x134.png","style":"margin-top: 20px; width: 95%;"},"id":"3eac458c"}]}]}]},{"componentName":"div","props":{"className":".components-box-right","style":"padding-left: 50px; border-radius: 0px; height: 100%;"},"id":"d0890144","children":[{"componentName":"div","props":{"className":"components-box-right-add"},"id":"0c79b824","children":[{"componentName":"div","props":{"style":"height: 50px;"},"id":"5dd75633","children":[{"componentName":"Text","props":{"text":"已添加","style":"font-size: 16px; font-weight: bold;"},"id":"e534646e"},{"componentName":"div","props":{"style":"display: inline-block;","onClick":{"type":"JSExpression","value":"this.clearSelected(event)"}},"id":"1f3f03e5","children":[{"componentName":"Icon","props":{"name":"IconUndelete","style":"margin-left: 10px; font-size: 20px; color:rgb(94, 124, 224);"},"id":"1ea6eea4"},{"componentName":"Text","props":{"text":"清空默认","style":"color: rgb(94, 124, 224); border-radius: 0px;"},"id":"4f143cd5"}]}]},{"componentName":"Collection","props":{"style":"height: 140px; display: flex; border-radius: 0px;","dataSource":151},"id":"9b4f4898","children":[{"componentName":"div","props":{"style":"width: 300px; height: 70px; margin-top: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-width: 1px; border-style: solid; border-color: #dfe1e6; display: flex; flex-direction: row; padding-right: 0px; padding-left: 0px; margin-right: 25px; margin-left: 0px; padding-top: 20px; margin-bottom: 20px; position: relative; background: rgb(242, 245, 252); border-radius: 2px;"},"id":"b5f585f9","children":[{"componentName":"Img","props":{"style":"width: 50px; height: 50px; margin-left: 20px; margin-top: 0px;","src":"http://localhost:9090/assets/images/24b520f0-dd5d-11ec-9e28-e51c91ead705.png"},"id":"ee90fa60"},{"componentName":"div","props":{"style":"width: 200px; margin-left: 12px;"},"id":"7735e4da","children":[{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"item.name"},"style":"font-weight: bold;"},"id":"068127b6"},{"componentName":"Text","props":{"text":"默认","style":"position: absolute; right: 2px; top: 2px; font-family: \"Microsoft YaHei\"; color: rgb(255, 255, 255); background: rgb(80, 212, 171); border-radius: 4.5px 0px;"},"id":"6d0281d2"},{"componentName":"TinyCheckbox","props":{"text":"","style":"position: absolute; right: 10px; bottom: 10px; color: rgb(82, 110, 204);","checked":{"type":"JSExpression","value":"item.isSelected"},"modelValue":true},"id":"622d9bdf"},{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"item.description"},"style":"display: block; margin-top: 10px; text-overflow: ellipsis; width: 90%; overflow: hidden; white-space: nowrap;"},"id":"eb87da78"}]}],"loop":{"type":"JSExpression","value":"this.state.render7e97d9c7"}}]}]},{"componentName":"div","props":{"style":"width: 98%; display: flex; margin-bottom: 22px; justify-content: space-between; margin-right: 0px; padding-right: 0px;"},"id":"c7f80c55","children":[{"componentName":"Text","props":{"text":"选择组件","style":"font-size: 16px; font-weight: bold;"},"id":"2ebef929"},{"componentName":"div","props":{"style":"display: flex;"},"id":"00a6fb16","children":[{"componentName":"TinySearch","props":{"modelValue":"","placeholder":"输入关键词","style":"width: 295px; margin-right: 12px;","onChange":{"type":"JSExpression","value":"this.query"}},"id":"d7364e4d"},{"componentName":"Collection","props":{"dataSource":129},"id":"03a2f95b","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":{"type":"JSExpression","value":"this.state.renderf5956ed2"},"style":"border-radius: 0px; margin-right: 0px;"},"id":"181b5ab7"}]}]}]},{"componentName":"Collection","props":{"dataSource":150,"style":"margin-left: 0px; margin-right: 314px; display: flex; justify-content: flex-start; flex-wrap: wrap; width: 98%; over-flow: hidden; border-radius: 0px;"},"id":"2b24a6d3","children":[{"componentName":"div","props":{"style":"padding-top: 20px; padding-left: 12px; padding-right: 12px; width: 280px; height: 92px; background: rgb(255, 255, 255); border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; border-radius: 2px; padding-bottom: 20px; display: flex; margin-right: 0px; margin-bottom: 20px; margin-left: 20px;"},"id":"8a6e5b83","children":[{"componentName":"Img","props":{"style":"width: 40px; height: 40px;","src":"http://localhost:9090/assets/images/0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png"},"id":"474ffcb2"},{"componentName":"div","props":{"style":"margin-left: 12px; border-radius: 0px; width: 90%;"},"id":"99944a57","children":[{"componentName":"div","props":{"style":"display: flex; justify-content: space-between;"},"id":"b5c88120","children":[{"componentName":"Text","props":{"text":{"type":"JSExpression","value":"item.name"},"style":"font-weight: bold; border-radius: 0px;"},"id":"a747169d"},{"componentName":"TinyCheckbox","props":{"text":"","checked":false,"modelValue":{"type":"JSExpression","value":"item.isSelected","model":true},"style":"border-radius: 0px;"},"id":"72cee0e5"}]},{"componentName":"Text","props":{"style":"display: block; font-size: 12px; line-height: 17px; color: #333333; margin-top: 10px;","text":{"type":"JSExpression","value":"item.description"}},"id":"1aed3258"}]}],"loop":{"type":"JSExpression","value":"this.state.renderb52aeac9"},"condition":true,"loopArgs":["item","idx"]}]},{"componentName":"TinyPager","props":{"layout":"sizes,total, prev, pager, next","total":{"type":"JSExpression","value":"this.state.componentsTotal"},"pageSize":10,"currentPage":1,"style":"margin-left: 314px; margin-right: 314px;"},"id":"ff96cc4e"}]}]},{"componentName":"div","props":{"style":"height: 100px; background: rgb(255, 255, 255); filter: drop-shadow(rgba(0, 0, 0, 0.1) 0px -1px 4px); text-align: center;"},"id":"616d5f40","children":[{"componentName":"TinyButton","props":{"text":"创建物料资产包","style":"background: rgb(245, 245, 246); border-width: 1px; border-color: rgb(173, 176, 184); border-style: solid; border-radius: 2.5px; opacity: 0.6; margin: 0 auto; width: 200px; height: 32px; margin-top: 30px; max-width: none; margin-bottom: 10px;"},"id":"e6abff72"},{"componentName":"Text","props":{"style":"display: block; color: rgb(173, 176, 184); margin-top: 5px; width: 380px; margin: 0 auto;","text":"组件或区块未添加,请切换左侧步骤条去完成添加"},"id":"f3a123ba","children":[{"componentName":"Icon","props":{}}]}]}],"fileName":"componentsSetting"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":true,"_id":"fh7U0xYetFGA5Ieu"} {"$$indexCreated":{"fieldName":"route","unique":true,"sparse":false}} {"$$indexCreated":{"fieldName":"route","unique":true}} diff --git a/mockServer/src/mock/get/app-center/v1/apps/schema/918.json b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json index bdae6dad17..7df5f36e39 100644 --- a/mockServer/src/mock/get/app-center/v1/apps/schema/918.json +++ b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json @@ -83,856 +83,6 @@ } }, "componentsTree": [ - { - "state": { - "components": [ - { - "name": "表单", - "text": "由按钮、输入框、选择器、单选框、多选框等控件组成..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - }, - { - "name": "按钮", - "text": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮..." - } - ], - "pageConfig": { - "component": { - "type": "JSResource", - "value": "this.utils.Pager" - }, - "attrs": { - "currentPage": 1, - "pageSize": 50, - "pageSizes": [10, 20, 50], - "total": 0, - "layout": "sizes,total, prev, pager, next, jumper" - } - }, - "componentsTotal": 0, - "renderf5956ed2": [ - { - "label": "按更新时间", - "value": "updata", - "_RID": "row_6" - }, - { - "label": "按创建时间", - "value": "create" - } - ], - "renderb52aeac9": [ - { - "framework": "", - "materials": "", - "name": "表单", - "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", - "id": "021fd6b6", - "_RID": "row_1" - }, - { - "framework": "", - "materials": "", - "name": "按钮", - "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型", - "id": "84d239bb", - "_RID": "row_2" - }, - { - "framework": "", - "materials": "", - "name": "表单项", - "description": "Form 组件下的 FormItem 配置", - "id": "490f8a00", - "_RID": "row_3" - }, - { - "framework": "", - "materials": "", - "name": "开关", - "description": "关闭或打开", - "id": "c259b8b3", - "_RID": "row_4" - }, - { - "framework": "", - "materials": "", - "name": "互斥按钮组", - "description": "以按钮组的方式出现,常用于多项类似操作", - "id": "083ed9c7", - "_RID": "row_5" - }, - { - "framework": "", - "materials": "", - "name": "提示框", - "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", - "id": "09136cea", - "_RID": "row_6" - }, - { - "framework": "", - "materials": "", - "name": "文字提示框", - "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", - "id": "a63b57d5", - "_RID": "row_7" - }, - { - "framework": "", - "materials": "", - "name": "树", - "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", - "id": "a0f6e8a3", - "_RID": "row_8" - }, - { - "framework": "", - "materials": "", - "name": "分页", - "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", - "id": "d1aa18fc", - "_RID": "row_9" - }, - { - "framework": "", - "materials": "", - "name": "表格", - "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", - "id": "ca49cc52", - "_RID": "row_10" - }, - { - "framework": "", - "materials": "", - "name": "搜索框", - "description": "指定条件对象进行搜索数据", - "id": "4e20ecc9" - }, - { - "framework": "", - "materials": "", - "name": "折叠面板", - "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", - "id": "6b093ee5" - }, - { - "framework": "", - "materials": "", - "name": "对话框", - "description": "模态对话框,在浮层中显示,引导用户进行相关操作", - "id": "0a09abc0" - }, - { - "framework": "", - "materials": "", - "name": "标签页签项", - "description": "tab页签", - "id": "f814b901" - }, - { - "framework": "", - "materials": "", - "name": "单选", - "description": "用于配置不同场景的选项,在一组备选项中进行单选", - "id": "c5ae797c" - }, - { - "framework": "", - "materials": "", - "name": "弹出编辑", - "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", - "id": "33d0c590" - }, - { - "framework": "", - "materials": "", - "name": "下拉框", - "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", - "id": "16711dfa" - }, - { - "framework": "", - "materials": "", - "name": "折叠面板项", - "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", - "id": "a9fd190a" - }, - { - "framework": "", - "materials": "", - "name": "复选框", - "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", - "id": "a7dfa9ec" - }, - { - "framework": "", - "materials": "", - "name": "复选框按钮", - "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", - "id": "c9071a7b" - }, - { - "framework": "", - "materials": "", - "name": "输入框", - "description": "通过鼠标或键盘输入字符", - "id": "d4bb8330" - }, - { - "framework": "", - "materials": "", - "name": "时间线", - "description": "时间线", - "id": "ced3dc83" - } - ], - "render7e97d9c7": [ - { - "name": "标签页", - "description": "分隔内容上有关联但属于不同类别的数据集合", - "id": "a2b3e681", - "_RID": "row_1" - }, - { - "name": "走马灯", - "description": "常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现", - "id": "311fd1ae", - "_RID": "row_2" - }, - { - "name": "日期选择器", - "description": "用于设置/选择日期,包括年月/年月日/年月日时分/年月日时分秒日期格式", - "id": "8d38b248", - "_RID": "row_3" - }, - { - "name": "布局列", - "description": "列配置信息", - "id": "1f6940d8" - } - ] - }, - "methods": { - "linkClick": { - "type": "JSFunction", - "value": "function linkClick() {\n location.href = '';\n}" - }, - "query": { - "type": "JSFunction", - "value": "function query(name) {\n this.state.components.fillter((e) => {\n return e.name !== name;\n });\n}" - }, - "getTableData": { - "type": "JSFunction", - "value": "function getTableData() {\n return new Promise((resolve, reject) => {\n this.dataSourceMap['timeData'].load().then((res) => {\n resolve({ result: [], page: { total: 0 } });\n });\n });\n}" - }, - "clearSelected": { - "type": "JSFunction", - "value": "function clearSelected(event) {\nthis.dataSourceMap['selectedComponents'] = this.dataSourceMap['selectedComponents'] || [];\n this.dataSourceMap['selectedComponents'].map((e) => {\n this.dataSourceMap['componentList'].push(e);\n });\n this.dataSourceMap['selectedComponents'] = [];\n}" - } - }, - "componentName": "Page", - "css": ".components-box{\r\n height:900px;\r\n display: flex;\r\n}\r\n.components-box-left{\r\n width: 270px;\r\n}\r\n.components-box-right{\r\n width:50%;\r\n}\r\n.components-box-right-add{\r\n width: 100%;\r\n height: 200px;\r\n}\r\n.mgr20{\r\n margin-right: 20px;\r\n}", - "props": {}, - "children": [ - { - "componentName": "PortalHeader", - "props": {}, - "componentType": "Block", - "id": "60284cf1" - }, - { - "componentName": "portalBlock", - "props": {}, - "componentType": "Block", - "id": "6911db84" - }, - { - "componentName": "div", - "props": { - "style": "height: 80px; width: 87%; margin: 0 auto; margin-bottom: 20px; margin-top: 20px; padding-left: 20px; padding-top: 30px; background: rgb(242, 245, 252);" - }, - "id": "436ecc4a", - "children": [ - { - "componentName": "Text", - "props": { - "text": " 物料资产包简介", - "style": "color: rgb(138, 142, 153);" - }, - "id": "16ad7aa9" - }, - { - "componentName": "Text", - "props": { - "text": "调试构建报错", - "style": "margin-left: 10px; margin-right: 10px;" - }, - "id": "ab44d8ea" - }, - { - "componentName": "Icon", - "props": { - "name": "IconEdit" - }, - "id": "8b6be3c2" - }, - { - "componentName": "div", - "props": {}, - "id": "848e3e8a", - "children": [ - { - "componentName": "Text", - "props": { - "text": "发布地址", - "style": "color: rgb(138, 142, 153);" - }, - "id": "cd51ad2c" - }, - { - "componentName": "Text", - "props": { - "text": "", - "style": "margin-left: 20px; margin-right: 10px; color: rgb(36, 150, 255);", - "onClick": { - "type": "JSExpression", - "value": "this.linkClick" - } - }, - "id": "3ed13633" - }, - { - "componentName": "Icon", - "props": { - "name": "IconEdit" - }, - "id": "16b75d9f" - } - ] - } - ] - }, - { - "componentName": "div", - "props": { - "className": "components-box", - "style": "width: 88%; margin: 0 auto; border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; padding-top: 40px; padding-bottom: 40px; height: 1200px;" - }, - "id": "c880007b", - "children": [ - { - "componentName": "div", - "props": { - "className": "components-box-left", - "style": "border-right-width: 2px; border-right-style: solid; border-color: rgb(223, 225, 230); position: relative;" - }, - "id": "3525fc52", - "children": [ - { - "componentName": "TinyTimeLine", - "props": { - "active": "1", - "data": [ - { - "name": "添加组件" - }, - { - "name": "添加区块" - } - ], - "horizontal": false, - "className": "components-box-left", - "vertical": true - }, - "id": "1e391ed7" - }, - { - "componentName": "div", - "props": {}, - "id": "81ccd767", - "children": [ - { - "componentName": "div", - "props": { - "style": "height: 300px; position: absolute; bottom: 20px; left: 20px;" - }, - "id": "bc11d593", - "children": [ - { - "componentName": "div", - "props": {}, - "id": "50ed6e39", - "children": [ - { - "componentName": "Text", - "props": { - "text": "组件示意图 " - }, - "id": "fa6b920c" - } - ] - }, - { - "componentName": "div", - "props": {}, - "id": "9ca346e6", - "children": [ - { - "componentName": "Text", - "props": { - "text": "组件是构建物料资产包的必要元素\n", - "style": "margin-top: 10px; color: rgb(173, 176, 184); margin-bottom: 20px;" - }, - "id": "d0ac5a34" - } - ] - }, - { - "componentName": "Img", - "props": { - "src": "http://localhost:9090/assets/images/f750dc319828b039af713c643aad02bd_222x134.png", - "style": "margin-top: 20px; width: 95%;" - }, - "id": "3eac458c" - } - ] - } - ] - } - ] - }, - { - "componentName": "div", - "props": { - "className": ".components-box-right", - "style": "padding-left: 50px; border-radius: 0px; height: 100%;" - }, - "id": "d0890144", - "children": [ - { - "componentName": "div", - "props": { - "className": "components-box-right-add" - }, - "id": "0c79b824", - "children": [ - { - "componentName": "div", - "props": { - "style": "height: 50px;" - }, - "id": "5dd75633", - "children": [ - { - "componentName": "Text", - "props": { - "text": "已添加", - "style": "font-size: 16px; font-weight: bold;" - }, - "id": "e534646e" - }, - { - "componentName": "div", - "props": { - "style": "display: inline-block;", - "onClick": { - "type": "JSExpression", - "value": "this.clearSelected(event)" - } - }, - "id": "1f3f03e5", - "children": [ - { - "componentName": "Icon", - "props": { - "name": "IconUndelete", - "style": "margin-left: 10px; font-size: 20px; color:rgb(94, 124, 224);" - }, - "id": "1ea6eea4" - }, - { - "componentName": "Text", - "props": { - "text": "清空默认", - "style": "color: rgb(94, 124, 224); border-radius: 0px;" - }, - "id": "4f143cd5" - } - ] - } - ] - }, - { - "componentName": "Collection", - "props": { - "style": "height: 140px; display: flex; border-radius: 0px;", - "dataSource": 151 - }, - "id": "9b4f4898", - "children": [ - { - "componentName": "div", - "props": { - "style": "width: 300px; height: 70px; margin-top: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-width: 1px; border-style: solid; border-color: #dfe1e6; display: flex; flex-direction: row; padding-right: 0px; padding-left: 0px; margin-right: 25px; margin-left: 0px; padding-top: 20px; margin-bottom: 20px; position: relative; background: rgb(242, 245, 252); border-radius: 2px;" - }, - "id": "b5f585f9", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 50px; height: 50px; margin-left: 20px; margin-top: 0px;", - "src": "http://localhost:9090/assets/images/24b520f0-dd5d-11ec-9e28-e51c91ead705.png" - }, - "id": "ee90fa60" - }, - { - "componentName": "div", - "props": { - "style": "width: 200px; margin-left: 12px;" - }, - "id": "7735e4da", - "children": [ - { - "componentName": "Text", - "props": { - "text": { - "type": "JSExpression", - "value": "item.name" - }, - "style": "font-weight: bold;" - }, - "id": "068127b6" - }, - { - "componentName": "Text", - "props": { - "text": "默认", - "style": "position: absolute; right: 2px; top: 2px; font-family: \"Microsoft YaHei\"; color: rgb(255, 255, 255); background: rgb(80, 212, 171); border-radius: 4.5px 0px;" - }, - "id": "6d0281d2" - }, - { - "componentName": "TinyCheckbox", - "props": { - "text": "", - "style": "position: absolute; right: 10px; bottom: 10px; color: rgb(82, 110, 204);", - "checked": { - "type": "JSExpression", - "value": "item.isSelected" - }, - "modelValue": true - }, - "id": "622d9bdf" - }, - { - "componentName": "Text", - "props": { - "text": { - "type": "JSExpression", - "value": "item.description" - }, - "style": "display: block; margin-top: 10px; text-overflow: ellipsis; width: 90%; overflow: hidden; white-space: nowrap;" - }, - "id": "eb87da78" - } - ] - } - ], - "loop": { - "type": "JSExpression", - "value": "this.state.render7e97d9c7" - } - } - ] - } - ] - }, - { - "componentName": "div", - "props": { - "style": "width: 98%; display: flex; margin-bottom: 22px; justify-content: space-between; margin-right: 0px; padding-right: 0px;" - }, - "id": "c7f80c55", - "children": [ - { - "componentName": "Text", - "props": { - "text": "选择组件", - "style": "font-size: 16px; font-weight: bold;" - }, - "id": "2ebef929" - }, - { - "componentName": "div", - "props": { - "style": "display: flex;" - }, - "id": "00a6fb16", - "children": [ - { - "componentName": "TinySearch", - "props": { - "modelValue": "", - "placeholder": "输入关键词", - "style": "width: 295px; margin-right: 12px;", - "onChange": { - "type": "JSExpression", - "value": "this.query" - } - }, - "id": "d7364e4d" - }, - { - "componentName": "Collection", - "props": { - "dataSource": 129 - }, - "id": "03a2f95b", - "children": [ - { - "componentName": "TinySelect", - "props": { - "modelValue": "", - "placeholder": "请选择", - "options": { - "type": "JSExpression", - "value": "this.state.renderf5956ed2" - }, - "style": "border-radius: 0px; margin-right: 0px;" - }, - "id": "181b5ab7" - } - ] - } - ] - } - ] - }, - { - "componentName": "Collection", - "props": { - "dataSource": 150, - "style": "margin-left: 0px; margin-right: 314px; display: flex; justify-content: flex-start; flex-wrap: wrap; width: 98%; over-flow: hidden; border-radius: 0px;" - }, - "id": "2b24a6d3", - "children": [ - { - "componentName": "div", - "props": { - "style": "padding-top: 20px; padding-left: 12px; padding-right: 12px; width: 280px; height: 92px; background: rgb(255, 255, 255); border-width: 1px; border-color: rgb(223, 225, 230); border-style: solid; border-radius: 2px; padding-bottom: 20px; display: flex; margin-right: 0px; margin-bottom: 20px; margin-left: 20px;" - }, - "id": "8a6e5b83", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 40px; height: 40px;", - "src": "http://localhost:9090/assets/images/0cfe4680-dd6c-11ec-a115-b53bbc5cfe9d.png" - }, - "id": "474ffcb2" - }, - { - "componentName": "div", - "props": { - "style": "margin-left: 12px; border-radius: 0px; width: 90%;" - }, - "id": "99944a57", - "children": [ - { - "componentName": "div", - "props": { - "style": "display: flex; justify-content: space-between;" - }, - "id": "b5c88120", - "children": [ - { - "componentName": "Text", - "props": { - "text": { - "type": "JSExpression", - "value": "item.name" - }, - "style": "font-weight: bold; border-radius: 0px;" - }, - "id": "a747169d" - }, - { - "componentName": "TinyCheckbox", - "props": { - "text": "", - "checked": false, - "modelValue": { - "type": "JSExpression", - "value": "item.isSelected", - "model": true - }, - "style": "border-radius: 0px;" - }, - "id": "72cee0e5" - } - ] - }, - { - "componentName": "Text", - "props": { - "style": "display: block; font-size: 12px; line-height: 17px; color: #333333; margin-top: 10px;", - "text": { - "type": "JSExpression", - "value": "item.description" - } - }, - "id": "1aed3258" - } - ] - } - ], - "loop": { - "type": "JSExpression", - "value": "this.state.renderb52aeac9" - }, - "condition": true, - "loopArgs": ["item", "idx"] - } - ] - }, - { - "componentName": "TinyPager", - "props": { - "layout": "sizes,total, prev, pager, next", - "total": { - "type": "JSExpression", - "value": "this.state.componentsTotal" - }, - "pageSize": 10, - "currentPage": 1, - "style": "margin-left: 314px; margin-right: 314px;" - }, - "id": "ff96cc4e" - } - ] - } - ] - }, - { - "componentName": "div", - "props": { - "style": "height: 100px; background: rgb(255, 255, 255); filter: drop-shadow(rgba(0, 0, 0, 0.1) 0px -1px 4px); text-align: center;" - }, - "id": "616d5f40", - "children": [ - { - "componentName": "TinyButton", - "props": { - "text": "创建物料资产包", - "style": "background: rgb(245, 245, 246); border-width: 1px; border-color: rgb(173, 176, 184); border-style: solid; border-radius: 2.5px; opacity: 0.6; margin: 0 auto; width: 200px; height: 32px; margin-top: 30px; max-width: none; margin-bottom: 10px;" - }, - "id": "e6abff72" - }, - { - "componentName": "Text", - "props": { - "style": "display: block; color: rgb(173, 176, 184); margin-top: 5px; width: 380px; margin: 0 auto;", - "text": "组件或区块未添加,请切换左侧步骤条去完成添加" - }, - "id": "f3a123ba", - "children": [ - { - "componentName": "Icon", - "props": {} - } - ] - } - ] - } - ], - "fileName": "ComponentsSetting", - "meta": { - "id": 1761, - "parentId": "0", - "group": "staticPages", - "occupier": { - "id": 86, - "username": "开发者", - "email": "developer@lowcode.com", - "provider": null, - "password": null, - "resetPasswordToken": "developer", - "confirmationToken": "dfb2c162-351f-4f44-ad5f-899831311129", - "confirmed": true, - "blocked": null, - "role": null, - "created_by": null, - "updated_by": null, - "created_at": "2022-05-27T16:50:44.000Z", - "updated_at": "2022-05-27T16:50:44.000Z", - "block": null, - "is_admin": true, - "is_public": null - }, - "isHome": true, - "router": "componentsSetting", - "rootElement": "div", - "creator": "", - "gmt_create": "2022-06-23 03:21:31", - "gmt_modified": "2023-05-10 07:36:26" - } - }, { "state": { "dataDisk": [1, 2, 3] diff --git a/mockServer/src/mock/get/material-center/block-categories.json b/mockServer/src/mock/get/material-center/block-categories.json deleted file mode 100644 index fa0ea5f923..0000000000 --- a/mockServer/src/mock/get/material-center/block-categories.json +++ /dev/null @@ -1,503 +0,0 @@ -{ - "data": [ - { - "id": 81, - "name": "test", - "app": { - "id": 918, - "name": "portal-app", - "app_website": null, - "platform": 897, - "obs_url": "", - "created_at": "2022-06-08T07:19:01.000Z", - "updated_at": "2023-08-23T02:22:28.000Z", - "state": null, - "published": false, - "createdBy": 86, - "tenant": 1, - "home_page": "1761", - "css": null, - "config": {}, - "git_group": "", - "project_name": "", - "constants": null, - "data_handler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - }, - "description": "demo应用", - "latest": 22, - "platform_history": null, - "editor_url": "http://localhost:9090/platform-center/entry/portal-platform?type=app&id=918", - "branch": "develop", - "visit_url": null, - "is_demo": null, - "image_url": "http://localhost:9090/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg", - "is_default": true, - "template_type": null, - "set_template_time": null, - "set_template_by": null, - "framework": "Vue", - "global_state": [ - { - "id": "test1", - "state": { - "testa": 1 - }, - "getters": {}, - "actions": {} - }, - { - "id": "test2", - "state": { - "name1": "xxx1" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test3", - "state": { - "name1": "xxx" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test4", - "state": { - "region": "", - "scenario": "all", - "productId": "", - "planId": "", - "addEvs": false, - "addHss": false, - "addCbr": false, - "period": { - "value": 1, - "unit": "month" - }, - "amount": 1 - }, - "getters": {}, - "actions": {} - } - ], - "default_lang": null, - "extend_config": { - "business": { - "serviceName": "", - "endpointName": "cce", - "endpointId": "ee", - "serviceId": "ee", - "router": "ee" - }, - "env": { - "alpha": { - "regions": [ - { - "name": "", - "baseUrl": "", - "isDefault": false - } - ], - "isDefault": true - } - }, - "type": "console" - }, - "assets_url": "", - "data_hash": "d15fe133765a70ee503c9643a329f0db", - "can_associate": true, - "data_source_global": { - "dataHandler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - } - } - }, - "desc": null, - "createdBy": { - "id": 86, - "username": "开发者", - "email": "developer@lowcode.com", - "resetPasswordToken": "developer", - "blocked": null, - "created_at": "2022-05-27T16:50:44.000Z", - "updated_at": "2022-05-27T16:50:44.000Z", - "block": null, - "is_admin": true, - "is_public": null - }, - "updatedBy": { - "id": 86, - "username": "开发者", - "email": "developer@lowcode.com", - "resetPasswordToken": "developer", - "blocked": null, - "created_at": "2022-05-27T16:50:44.000Z", - "updated_at": "2022-05-27T16:50:44.000Z", - "block": null, - "is_admin": true, - "is_public": null - }, - "created_at": "2023-06-12T00:49:54.000Z", - "updated_at": "2023-06-12T00:49:54.000Z", - "category_id": "test", - "blocks": [] - }, - { - "id": 82, - "name": "test_mChange", - "app": { - "id": 918, - "name": "portal-app", - "app_website": null, - "platform": 897, - "obs_url": "", - "created_at": "2022-06-08T07:19:01.000Z", - "updated_at": "2023-08-23T02:22:28.000Z", - "state": null, - "published": false, - "createdBy": 86, - "tenant": 1, - "home_page": "1761", - "css": null, - "config": {}, - "git_group": "", - "project_name": "", - "constants": null, - "data_handler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - }, - "description": "demo应用", - "latest": 22, - "platform_history": null, - "editor_url": "http://localhost:9090/platform-center/entry/portal-platform?type=app&id=918", - "branch": "develop", - "visit_url": null, - "is_demo": null, - "image_url": "http://localhost:9090/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg", - "is_default": true, - "template_type": null, - "set_template_time": null, - "set_template_by": null, - "framework": "Vue", - "global_state": [ - { - "id": "test1", - "state": { - "testa": 1 - }, - "getters": {}, - "actions": {} - }, - { - "id": "test2", - "state": { - "name1": "xxx1" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test3", - "state": { - "name1": "xxx" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test4", - "state": { - "region": "", - "scenario": "all", - "productId": "", - "planId": "", - "addEvs": false, - "addHss": false, - "addCbr": false, - "period": { - "value": 1, - "unit": "month" - }, - "amount": 1 - }, - "getters": {}, - "actions": {} - } - ], - "default_lang": null, - "extend_config": { - "business": { - "serviceName": "", - "endpointName": "cce", - "endpointId": "ee", - "serviceId": "ee", - "router": "ee" - }, - "env": { - "alpha": { - "regions": [ - { - "name": "", - "baseUrl": "", - "isDefault": false - } - ], - "isDefault": true - } - }, - "type": "console" - }, - "assets_url": "", - "data_hash": "d15fe133765a70ee503c9643a329f0db", - "can_associate": true, - "data_source_global": { - "dataHandler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - } - } - }, - "desc": null, - "createdBy": { - "id": 86, - "username": "开发者", - "email": "developer@lowcode.com", - "resetPasswordToken": "developer", - "blocked": null, - "created_at": "2022-05-27T16:50:44.000Z", - "updated_at": "2022-05-27T16:50:44.000Z", - "block": null, - "is_admin": true, - "is_public": null - }, - "updatedBy": { - "id": 86, - "username": "开发者", - "email": "developer@lowcode.com", - "resetPasswordToken": "developer", - "blocked": null, - "created_at": "2022-05-27T16:50:44.000Z", - "updated_at": "2022-05-27T16:50:44.000Z", - "block": null, - "is_admin": true, - "is_public": null - }, - "created_at": "2023-06-12T00:50:54.000Z", - "updated_at": "2023-06-12T00:50:54.000Z", - "category_id": "test_mChange", - "blocks": [] - }, - { - "id": 19, - "name": "test1", - "app": { - "id": 918, - "name": "portal-app", - "app_website": null, - "platform": 897, - "obs_url": "", - "created_at": "2022-06-08T07:19:01.000Z", - "updated_at": "2023-08-23T02:22:28.000Z", - "state": null, - "published": false, - "createdBy": 86, - "tenant": 1, - "home_page": "1761", - "css": null, - "config": {}, - "git_group": "", - "project_name": "", - "constants": null, - "data_handler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - }, - "description": "demo应用", - "latest": 22, - "platform_history": null, - "editor_url": "http://localhost:9090/platform-center/entry/portal-platform?type=app&id=918", - "branch": "develop", - "visit_url": null, - "is_demo": null, - "image_url": "http://localhost:9090/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg", - "is_default": true, - "template_type": null, - "set_template_time": null, - "set_template_by": null, - "framework": "Vue", - "global_state": [ - { - "id": "test1", - "state": { - "testa": 1 - }, - "getters": {}, - "actions": {} - }, - { - "id": "test2", - "state": { - "name1": "xxx1" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test3", - "state": { - "name1": "xxx" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test4", - "state": { - "region": "", - "scenario": "all", - "productId": "", - "planId": "", - "addEvs": false, - "addHss": false, - "addCbr": false, - "period": { - "value": 1, - "unit": "month" - }, - "amount": 1 - }, - "getters": {}, - "actions": {} - } - ], - "default_lang": null, - "extend_config": { - "business": { - "serviceName": "", - "endpointName": "cce", - "endpointId": "ee", - "serviceId": "ee", - "router": "ee" - }, - "env": { - "alpha": { - "regions": [ - { - "name": "", - "baseUrl": "", - "isDefault": false - } - ], - "isDefault": true - } - }, - "type": "console" - }, - "assets_url": "", - "data_hash": "d15fe133765a70ee503c9643a329f0db", - "can_associate": true, - "data_source_global": { - "dataHandler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - } - } - }, - "desc": null, - "createdBy": { - "id": 86, - "username": "开发者", - "email": "developer@lowcode.com", - "resetPasswordToken": "developer", - "blocked": null, - "created_at": "2022-05-27T16:50:44.000Z", - "updated_at": "2022-05-27T16:50:44.000Z", - "block": null, - "is_admin": true, - "is_public": null - }, - "updatedBy": { - "id": 86, - "username": "开发者", - "email": "developer@lowcode.com", - "resetPasswordToken": "developer", - "blocked": null, - "created_at": "2022-05-27T16:50:44.000Z", - "updated_at": "2022-05-27T16:50:44.000Z", - "block": null, - "is_admin": true, - "is_public": null - }, - "created_at": "2023-03-22T07:26:04.000Z", - "updated_at": "2023-06-02T08:45:34.000Z", - "category_id": "test_mChange01", - "blocks": [] - } - ], - "locale": "zh-cn" -} diff --git a/mockServer/src/mock/get/material-center/block-groups.json b/mockServer/src/mock/get/material-center/block-groups.json deleted file mode 100644 index 434330edde..0000000000 --- a/mockServer/src/mock/get/material-center/block-groups.json +++ /dev/null @@ -1,1022 +0,0 @@ -{ - "data": [ - { - "id": 110, - "name": "门户网站区块分组", - "app": { - "id": 918, - "name": "portal-app", - "app_website": null, - "platform": 897, - "obs_url": "", - "created_at": "2022-06-08T07:19:01.000Z", - "updated_at": "2023-09-04T01:43:50.000Z", - "state": null, - "published": false, - "createdBy": 86, - "tenant": 1, - "home_page": "1761", - "css": null, - "config": {}, - "git_group": "", - "project_name": "", - "constants": null, - "data_handler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - }, - "description": "demo应用", - "latest": 22, - "platform_history": null, - "editor_url": "http://localhost:9090/platform-center/entry/portal-platform?type=app&id=918", - "branch": "develop", - "visit_url": null, - "is_demo": null, - "image_url": "http://localhost:9090/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg", - "is_default": true, - "template_type": null, - "set_template_time": null, - "set_template_by": null, - "framework": "Vue", - "global_state": [ - { - "id": "test1", - "state": { - "testa": 1 - }, - "getters": {}, - "actions": {} - }, - { - "id": "test2", - "state": { - "name1": "xxx1" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test3", - "state": { - "name1": "xxx" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test4", - "state": { - "region": "", - "scenario": "all", - "productId": "", - "planId": "", - "addEvs": false, - "addHss": false, - "addCbr": false, - "period": { - "value": 1, - "unit": "month" - }, - "amount": 1 - }, - "getters": {}, - "actions": {} - } - ], - "default_lang": null, - "extend_config": { - "business": { - "serviceName": "", - "endpointName": "cce", - "endpointId": "ee", - "serviceId": "ee", - "router": "ee" - }, - "env": { - "alpha": { - "regions": [ - { - "name": "", - "baseUrl": "", - "isDefault": false - } - ], - "isDefault": true - } - }, - "type": "console" - }, - "assets_url": "", - "data_hash": "ae128e37f6bc378f1b9c21d75bd05551", - "can_associate": true, - "data_source_global": { - "dataHandler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - } - } - }, - "desc": null, - "created_at": "2022-06-08T08:43:03.000Z", - "updated_at": "2023-08-01T13:07:41.000Z", - "blocks": [ - { - "id": 989, - "label": "PortalHome", - "framework": "Vue", - "content": { - "state": { - "logoUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uyd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", - "loginImgUrl": "data:image/png;base64,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" - }, - "componentName": "Block", - "css": ".home-content {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\r\n \r\n}\r\n.home-content .btn {\r\n margin-top: 24px;\r\n \r\n }\r\n .home-content .btn button {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\r\n }\r\n\r\n .home-content .text {\r\n font-size: 18px;\r\n }\r\n\r\n .home-content .account {\r\n margin-top: 16px;\r\n \r\n \r\n }\r\n\r\n .home-content .account .sub-text {\r\n color: #575d6c;\r\n }\r\n .home-content .account .login {\r\n color: #1890ff;\r\n cursor: pointer;\r\n }\r\n .home-content .logo img{\r\n border-radius: 50%;\r\n overflow: hidden;\r\n }", - "props": {}, - "children": [ - { - "componentName": "div", - "props": { - "className": "home", - "style": "height: 100vh; display: flex;" - }, - "id": "357534ab", - "children": [ - { - "componentName": "TinyRow", - "props": { - "align": "middle", - "flex": true, - "style": "" - }, - "children": [ - { - "componentName": "TinyCol", - "props": { - "span": 6, - "style": "text-align: center; display: flex; justify-content: center;" - }, - "id": "f01b66ea", - "children": [ - { - "componentName": "div", - "props": { - "style": "width: 90%; height: 50%;" - }, - "id": "8197d016", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 100%; height: 100%;", - "src": { - "type": "JSExpression", - "value": "this.state.loginImgUrl" - } - }, - "id": "471e30f3" - } - ] - } - ] - }, - { - "componentName": "TinyCol", - "props": { - "span": "6", - "style": "text-align: center;" - }, - "id": "781d5b46", - "children": [ - { - "componentName": "div", - "props": { - "className": "home-content", - "style": "font-size: 14px;" - }, - "id": "08638b8a", - "children": [ - { - "componentName": "div", - "props": { - "className": "text" - }, - "id": "18712ee2", - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 16px;" - }, - "id": "07e6794c", - "children": [ - { - "componentName": "div", - "props": { - "className": "logo" - }, - "id": "07cad264", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 105px; height: 105px; border-radius: 100px;", - "src": { - "type": "JSExpression", - "value": "this.state.logoUrl" - } - }, - "id": "f4489e27" - } - ] - }, - { - "componentName": "Text", - "props": { - "text": "TinyLowCode 低代码平台", - "style": "display: block; font-size: 28px; margin-top: 12px; margin-bottom: 12px; font-weight: bold;", - "ref": "", - "className": "title" - }, - "id": "e82108ce" - }, - { - "componentName": "Text", - "props": { - "text": "致力于通过友好的用户交互提升业务的开发效率", - "style": "display: block; margin-bottom: 12px;" - }, - "id": "65a2f1ad" - }, - { - "componentName": "Text", - "props": { - "text": "欢迎一起来解锁~~", - "style": "margin-top: 12px;" - }, - "id": "bb879abb" - } - ] - }, - { - "componentName": "div", - "props": { - "className": "btn" - }, - "id": "44b2bcbd", - "children": [ - { - "componentName": "TinyButton", - "props": { - "text": "立即体验", - "round": true, - "type": "primary", - "style": "margin-top: 40px;" - }, - "id": "9580c5e7" - }, - { - "componentName": "div", - "props": { - "className": "account" - }, - "id": "6a8ffa3e", - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 14px; margin-top: 4px;" - }, - "id": "bfc6eb6c", - "children": [ - { - "componentName": "Text", - "props": { - "text": "已有团队?", - "style": "color: #777777;" - }, - "id": "3d993264" - }, - { - "componentName": "Text", - "props": { - "text": "立即进入", - "style": "color: #5e7ce0;", - "onClick": { - "type": "JSExpression", - "value": "this.handleClick(event)" - } - }, - "id": "21390118" - } - ] - } - ] - } - ] - } - ] - } - ] - } - ] - } - ], - "id": "4545fea2" - } - ] - } - ], - "methods": { - "handleClick": { - "type": "JSFunction", - "value": "function (event) {this.emit('goto-home', event)\n}" - } - }, - "fileName": "PortalHome", - "meta": { - "id": 1722, - "parentId": "0", - "group": "staticPages", - "title": null, - "occupier": null, - "isHome": false, - "description": "", - "router": "/", - "rootElement": "div", - "creator": "开发者", - "gmt_create": "2022-06-08 03:25:51", - "gmt_modified": "2022-06-09 05:19:09" - }, - "id": 1722, - "schema": { - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [] - } - ], - "events": { - "onGotoHome": { - "label": { - "zh_CN": "点击立即进入触发方法" - }, - "description": { - "zh_CN": "点击立即进入触发方法" - }, - "type": "event", - "functionInfo": { - "params": [], - "returns": {} - }, - "defaultValue": "", - "linked": { - "id": "21390118", - "componentName": "Text", - "event": "onClick" - } - } - }, - "slots": {} - }, - "dataSource": {}, - "i18n": {} - }, - "created_at": "2022-06-13T07:56:51.000Z", - "updated_at": "2023-01-13T08:12:51.000Z", - "assets": { - "material": [], - "scripts": [ - "http://localhost:9090/assets/js/989web-components.es.js", - "http://localhost:9090/assets/js/989web-components.umd.js" - ], - "styles": [] - }, - "createdBy": 86, - "description": null, - "tags": "", - "current_history": 1655, - "screenshot": "", - "path": "common/components/home", - "occupier": null, - "isOfficial": true, - "public": 1, - "isDefault": null, - "tiny_reserved": false, - "author": null, - "name_cn": null, - "created_app": null, - "content_blocks": null, - "current_version": "x" - } - ] - }, - { - "id": 133, - "name": "门户网站拖拽分组C", - "app": { - "id": 918, - "name": "portal-app", - "app_website": null, - "platform": 897, - "obs_url": "", - "created_at": "2022-06-08T07:19:01.000Z", - "updated_at": "2023-09-04T01:43:50.000Z", - "state": null, - "published": false, - "createdBy": 86, - "tenant": 1, - "home_page": "1761", - "css": null, - "config": {}, - "git_group": "", - "project_name": "", - "constants": null, - "data_handler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - }, - "description": "demo应用", - "latest": 22, - "platform_history": null, - "editor_url": "http://localhost:9090/platform-center/entry/portal-platform?type=app&id=918", - "branch": "develop", - "visit_url": null, - "is_demo": null, - "image_url": "http://localhost:9090/assets/images/27f7f9d26edd98f6bb1ed8d594d408d9_100x100.jpg", - "is_default": true, - "template_type": null, - "set_template_time": null, - "set_template_by": null, - "framework": "Vue", - "global_state": [ - { - "id": "test1", - "state": { - "testa": 1 - }, - "getters": {}, - "actions": {} - }, - { - "id": "test2", - "state": { - "name1": "xxx1" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test3", - "state": { - "name1": "xxx" - }, - "getters": { - "count": { - "type": "JSFunction", - "value": "function count() {}" - } - }, - "actions": { - "actions": { - "type": "JSFunction", - "value": "function actions() {}" - } - } - }, - { - "id": "test4", - "state": { - "region": "", - "scenario": "all", - "productId": "", - "planId": "", - "addEvs": false, - "addHss": false, - "addCbr": false, - "period": { - "value": 1, - "unit": "month" - }, - "amount": 1 - }, - "getters": {}, - "actions": {} - } - ], - "default_lang": null, - "extend_config": { - "business": { - "serviceName": "", - "endpointName": "cce", - "endpointId": "ee", - "serviceId": "ee", - "router": "ee" - }, - "env": { - "alpha": { - "regions": [ - { - "name": "", - "baseUrl": "", - "isDefault": false - } - ], - "isDefault": true - } - }, - "type": "console" - }, - "assets_url": "", - "data_hash": "ae128e37f6bc378f1b9c21d75bd05551", - "can_associate": true, - "data_source_global": { - "dataHandler": { - "type": "JSFunction", - "value": "function dataHanlder(res){\n return res;\n}" - } - } - }, - "desc": null, - "created_at": "2022-06-23T12:47:31.000Z", - "updated_at": "2023-04-14T08:01:18.000Z", - "blocks": [ - { - "id": 989, - "label": "PortalHome", - "framework": "Vue", - "content": { - "state": { - "logoUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uydCZRdVZnvd92aq1IZSQIJQ4AMTAkOSRQQugFBbQm+p2A7oK0igt2K0L5+/exeq/Xx1rP72bbic0IEXSpqO/ZzagdUEEQ0jCZgSAhkIoEACZVKap7e/p+7b3JTqeGee898fr+1vpUQkqq6++zzO/t8+9t7142OjhoAAMg+BZoAAADhAwAAwgcAAIQPAAAIHwAAED4AACB8AABA+AAAUDENlfylTbtoKACAJLJ0QcDCB0gAbTaOtTHPxlwbx9g4ysbMMTHdRrP7++02mty/b7HRWvb19tsYsjFiY5/7s14bfe73+1x0lsXzNp628ZyNZ208ZaOHSwOZGuEDRICEvMjGSe7XsTE34O/XUfb7OTV8Hcl/6zjxpPu1j0sLCB/ySqONU20sd7HCxhk2jkvp55nrYtUE/3+HjUdsrLexzv26wcYgXQEQPmQJpVTOsvESJ/blTvaNOWqD41y8puzPBp30Sw+BB23ca6ObLgNhUlfJbplM2kKFLLTxChvn2DjbxpkMKipG8wl/tPE7F3fb2EmzwFT4mbRF+FALp9i40AlecTxNEijbbdzj4lc2HqNJAOFDVMy2cZGLi0168+5pRfMBt9v4hft1L00CCB+C5HQbr7VxiSmmaeppkkQwbIqpn5/Y+LGNR2kShI/wwS91NlbauNzGG0yxTBKSj8pAv2fj+zb+YIOj7BA+wocJWW3jTU7y5OLTzXYn/m/aWEtzIHyED2KZjTfbeIuNJTRHJnncxjec/DfSHAgf4ecLbS9wmY132ziP5sgVd9m4xcZ3TXEbCUD4CD+jaOHTVTauMMU9ZyC/aF+g22x80RQXfgHCR/gZYJoppmw0ml9Nc8A4rHWjfqV8DtAcCB/hp4/FNt5v453m8E3CACZCu4d+2canbWymObIpfA5AyRbn2/iBKU7OXYvswQcdrs+o7/zQ9SXIGAg/G9dQk7D32fi1jUu5rlBjf1rj+tJ9rm/RnxA+xIwO9lBuXvurfMcUF0sBBMlK17cec32tiSZB+BC96K+2sckUqyyon4ewWeL6mvrcNYgf4UP4NDrRayHNTTZOoEkgYtTnPu/64NUmX+caIHyI7Bq91cafnOjZ9gDi5njXFze4volHED4EwKttPGSKi2QW0xyQME52ffMh11cB4UMVvNgU9zv/qSmukAVIMitcX/2l67uA8KECjrFxq437bbyS5oCUcaHru7e6vgwIH8ZBVQ8fNMVFL+/iukDKnaI+vMn1aSp6ED6UoaMCH7bxccPKWMgO01yfftj1cUD4uWauja/b+LmNU2kOyCinuj7+ddfnAeHnDm1RrJK2t9AUkBPe4vr822gKhJ8XFtn4mY2v2ZhDc0DOUJ//qrsHTqQ5EH5WqbdxnY1HbLyK5oCco3tgvbsn6mkOhJ8lTrPxOxuftNFOcwB4tLt74nfuHgGEn/q2vd7GA4bTpgAmYrW7R67HRwg/rWivEa2U/YSNFpoDYFJa3L1yu2GvKISfMnRgxB9tXEBTAPjiAnfvXEZTIPyk02bjZlM8MGImzQFQFTPdPXSzu6cA4SeOM0zxOLiraAqAQLjK3VNn0BQIP0loP/DfGyoNAIJG99Qf3D0GCD9Wmk3xEAjtB065JUA4tLl77AuGAgiEHxPH2rjbFI95A4DweY+Nu2wcR1Mg/Cg51xT3/F5FUwBEyip3751LUyD8KLjGxq9szKcpAGJhnrsH30tTIPywaLDxaRuft9FIcwDEiu7Bz9n4rLs3AeEHxgwbP7HxPpoCIFH8tbs3Z9AUCD8IFtm4x3BiD0BSudjdo4toCoRfCy+2ca+N02kKgERzurtXX0JTIPxqRw2/sXE0TQGQCnSv3snbOML3i44f/LHhQHGAtNHh7t0raAqEXwnXmuIRbFTiAKSTRncPX0tTIPzJ+LCNT9mooykAUk2du5c/QlMg/PE6xyfpHACZHMR9kkEcwi+XvRZvXEdXAMgk17l7HOnnXPj67F80LNEGyDrvdfd67jMaeW2Aehu32riSewEgF1zp7vlcSz+PH16vdtpb+x3cAwC5Qvf8zSbH6Z28CV8X+nOM7AFyPdL/XF6lnzfha8b+Gvo8QK6RA25E+NnmIzY+QF8HAFNcmPURhJ9N3m+KNbkAACU+bHK2IjcPwteJ95+ibwPAONzoHIHwM8AFNr5kWHQBAONT5xxxAcJPN8ttfN9GE30aACahybliOcJPJyfa+E/D0WcAUBlyxe02Tkb46btwP7BxLH0YAHww38Z/ZHmgmDXha8uEb+Xh1QwAQkHu+LZzCcJPOJ+28Sr6LADUwMXOJQg/wWj1HDtfAkAQyCV/jfCTybmGWnsACJZPOrcg/AShydnvGcovASBYmpxbMlMAknbhN5virPpc+iYAhIDc8v+caxB+zCiNs5I+CQAh8lKTkZRxmoX/NhtX0xcBIAKuds5B+DFwuo2b6IMAECE3Ofcg/AhpsfHvNtrofwAQIW3OPS0IPzr+1cYZ9D0AiAG552MIPxpeY+Nv6HMAECPvcy5C+CGijY2+bNjbHgDipc65aD7CD6+Bb0ljAwNAJpnvnJSqAWhahK99LS6hjwFAgpCTUrXfThqEf5qNj9O3ACCB/KtzFMIPAO1J/RUbrfQrAEggctNXbTQg/Nr5oGHrBABINi91rko8daOjo1P+pU27YvnZTrHxkEnxIgcAyA19Nl5s47Gov/HSBekf4evnuhXZA0BKkKu+ZBKeNUnqD/ceG2fThwAgRZxlEr6hYxKFf4yNf6bvAEAK+ahzGMKvkE/YmEm/AYAUMtM5DOFXgE6LfxN9BgBSzJucyxD+JDQaDiIHgGzwKec0hD8B15piKSYAQNo5xTktUSSlDv9oGxttTKefAEBG6HLifzrMb5LGOvz/jewBIGNMd25LDEkQ/pk23kHfgGrYubufRoAk81fOcQjf8XGT3sPUIWbZ3/PgPvPo4900BiQVue3fEH6Rv7DxSvoE+KWza8isXbff+/2mrb1mcHCURoGkcqFJyHkehZi/90fpC+AXyX3tui4zODRS/G/760MbDtAwkGQ+moABdqw/gBYnnEk/AL9I7p37hw77s607e71RP0BCWW4SsKg0LuFrQcIN9AHwi/L2kvtEDwKABHODiXkxVlzCv9LGyVx/8EN37/DBvP14PLd3wGx9qo+GgqRysnNfroTfZONDXHvwi2RfyttPxKObu5nAhSTzD86BuRH+u2wcz3UHP2jkrhF8JW8Bm7b20GCQVI5zDsyF8PVk+x9cc/CDRux+8vMq05T4ARLKh+Ia5Uct/LfbOIHrDX6Q7KdK5Rz2gLB/99HHGeVDYjneuTDTwtf3+u9ca/DDs3sGJ6zKmQz9G/1bgITy9zEMuCP9hq+3sYTrDH7QJGy1PLxhPw0ISWWxjTdkWfh/zzXOBwODo17UimruK5monQgtzqJMExJM5BmPqIT/5zZWcn3zwT4r2t3PD9Qs/YcDWEjl5f8p04RkstK5MXPCv45rmw+GhkdNT9+wGRkdrUn6GpkHUWmjCVzKNCHBROrGKISvXNUarms+2H/gkKRrkX4tufvxvhZlmpBQ1jhHZkb41xr2u88NB3oOF2s10g9qdF/Ow+yzA8mkYCI8+zZsEXfYeCfXNB/09I14gh+LX+kHObovoQlgyjQhobzTuTL1wr/CxjSuZz7o7pl4VF6p9CXlsNIv963v4iJBEpEj35YF4V/DtcwHIyPGm6yd9O9UIP0wRvcHH0jePju9XCxIIpG4Mkzhn2NjBdcxH0wl+0qkLyHXUndfCTr/ljJNSCDLnTNTK/yruYb5obev8r1uJpL+4xGMvr19djZz6Dnkc5QflvCnmxiWDUM8VJLOqUT6WyJaFau6fMo0IYG83rkzdcL/SxttXL980DcwUtW/K5e+SjH97IhZK5OdnAUQE23OnakT/ju4dvmht6/60XJJ+k/siHYyVXMFlGlCAgm1jD0M4S+zcTbXLUcj/P7aRuYa2WsOYGgo2slUyjQhgZzlHJoa4b+Fa5YftHeOoha6DgybjvZ6c9Ssxkilrzy+qnYAEkZoDkX4EOvoXmjCt67OmJbmQuTSV10+ZZqA8KtjtYlwIyCIn/6B2oQ/rN01ew99jailr3TSQ+yzA8lisXNp4DQE/PXezLXKF7Xued/dM2IaG+oO+7OS9J9/YdA0jPl/YaDjEJcuajUzpzekrv014d3pzh/oHyhOgE/E/KOaTHNTnffrzI4G71dILHLp2qC/aN3o6NQ37KZdlX0tG9tsHMe1ygeqv9/xTG218xLURGkh/XlU0p87u8mc/7KZiW/zbbv6zLadfWb7rn7v97VywoIWc/yCZrPsxDYeAMniKVM87HxKQS9dEI/w9QryB65TfpCQd++pbSsELbYq1E3+PaKS/jkvmWEWzm9O5Ch+7fr9ZtOWnkDmTCZihh31S/wrlrUj/2Tw8kqc6kf4Qb7DXsb1yRe1pnOUvx8ZGTWF+ollHmV6R3vmz7Mj/cbGukS077rHDpi77t/nHRkZBfo+a9d1eSHhr17eYVacwma3MfKGoAfRQY7wHzdM2OaKF/YNma7u6mXUtX/YvNBV2eKnqEb6py9uN6cvaY+1XYvS3R+Z6Kca9Z+3cgbij4cnKnFqHCmdU2xs4PrkCy//XkOVzh4r8AM9la/SjUL6jQ0Fc/ErZpn21vrI23Pjlh5z+z0vJEL044n/onNmeSkfiBTtOLw+KOEHVZb5aq5L/qh1wVWvz3x0FCWb3m6aj0d76LkE/92fPedFEmU/9mcMcx4BjuC1QX6xoIT/Gq4LwvdLNXMAUUhfZZpR7bOjUf0t33na+zUN6Of87Nd3BlIhBOkUfquNP+O6IPuwZR+l9KPYM1/pmzSOmPXz3vaD3eau+zq5EcJHe+vMTpLwL7DRzHXJmfBrlO3g4Iipr6H3hS197aa5NaT9+UvC1ORsmrn7/n3mR3fsIcUTLppMujhJwid/D77p6atdEmFLX1suBL3Pjif7H+7OTEpEpaP6PEg/VC5KkvDJ3+eQWvfQKQRUaBOm9DWBq9Oxgpb9ZNsfpBF9HqSfD+EvsXEy1wP80hugHMKUvnL5QRyHmFXZI/1I0HY1pyZB+BdzLaAa6gIupQ9T+g/XuJtm1mVfLn1V8GT9c8bEBUkQ/nlcB6gG7ewYNGFJf+fu/qrLNPMi+/LPqzLTtE9IJ5BAXIvwIRYqWeGdJOk/vMH/oed5k305KjlVJRKj/cAIpPS9FuHr3MWjuQ6QNMKQvvac1+lYWZG9tkrQ1sgK/T4MVImk0b7kT26/Zuab4hY2NVHLlX4F1wCqQYuu6urC3QQtjF02df7tiQtbptxNM8my1y6Y2hNHoi9HP6vEHEa5qNI76zYeMCuWTTOrV3SE9oDJAefaeCyuEf5ZtD9UQ62LruIa6Xv77EyxAjfpsr/i0vlHyP7g/3vd/NB2xVS7SPyfuW2nt7pY9fuM+n3zsjhH+C+n/SHpBD3SV13+kkWt4+6mmWTZqx0ke/06GWvOn2P2dQ2FujBM+/F4ewfdscfbfVMnbumBM96DCIJ1brXCn2ECqgsFSJv0tVf92OMQtZvkd+zINak5+3NXzphS9gf/7qoZZtsPolkJfFD+JbF0NHjn7epnnTenccJ/d8LCyR8O+hoZTB2d6ty7L2rh6zjDAiqBPEpf++yoTLMkpDQsOvKzj71G2mqvOD6PHpylLaI3bpn472kfn1qZ6o2idOj7ZH1qsqMg589pqvghWyEF597boxb+ShQCeZb+feu7zGv/fE5qVpj6He1KVlnfAnmqz1fr51d/e/flxwT9prEyDuG/OM/i6Owa8ibvFs5rNnPtKC+O05Hipr6+LpU/d1DS13YLGmVqIjKLk499A0yo1tyGtl+onDdg4dfk3mp/khfl+UKqrFCrLxVCwp87u8ksnN+UqEOww6ShPr2fMQjpa6Xwbx/Y5x3CngaUJ680rSNRsWCqtrcpbw5hekMYE9GRC7/D5Pyw8rGTSRrtde/s9U5KErrY8+wr8QL7BjDZxFOe0ULbuhifGbVIX7J/6pn+1MheaNFYpcLP+7YIJWEf/G8r7hnTDr3Fl2R+2H9HN0GszSqn26jqIlXzU55po87AhOg1rrgys1h9UBz9W/nPbjQzp2ejcqCpsfrJqPa2evOMHUHG/ZZQjfTTKHuhuveli1qnlL5G9vet35/6/lk+sk6YsGtFHVUHm/82KuEvR+lFiataoxL090p/t7GhWG6W9vx/ISM1Wn6kn1bZl/jxHXu8XyeSftq2OFaFjEIyV5lmS9PkVTMZYnmUwj8d3WuEW93oVKs1s5L/1yh/YDD9k3uVSD/tshcSuVa5avS7Yln7wVGu/lwpH70FJH3UrkVaknvOF2mdUe0/rEb4pxjwXgNL0q6F8fL/Sv/oIZD0/H8tp1YVCsl6sE0m/SzIvhyVG6ah5FLXZKl9G6kkFZUzqnYwwq9W+CHl4kv5f/so8P77oPwTmP/3FudUWb6nN6SwzqINUvpZk30a0H4+SH5SlkUlfO2stJD2NpHl3svTP8r/lyZ/k5D/r6/P3tx9ufSH7bMM2UeDJk21k6Z21Ax4dWoWWehc7DsH51f4J9HW4Y7wJ0P5/61l6R8Jv/gG0BhL/r+WSh1NsB0YGk7ktZVwFBu39CL7kFEufpUVPaN538jF68IW/mLa+RB+KnXCQPl/lX5u2uoeQhHn/5tqeMAk+e2gu2fEPL4V2Yctem3Sxg6ZVbMkCuEvoZ0PMcuO8uMU/ljiyP9rpF5NHr+xoS72xVcTyV6HdQwNI/swUOpGB7Awoq+Zqgbffi2wiHYuH+E3HhxdJ5Eo8v/VTtzq3w3bEXSStmhA9uGh671qeYc5b9VMGiMYToxC+MfTzodQ3jwtjM3/l7Z/qDX/39xUXR5fKZ36ArLPA0rbrLlgDkcbBstxUQj/ONq5LC1hJSlxdrr9u9PEoe0fSm8rxdSP3/x/LRUVmvTVgwjZZ3dUr4NXVq+YTmMg/IyM8u0oOY3CH8uh7R+6D27/UGn+v9o8viZ9B2NuOmQfDtriQMcl5mSrg0wKX7tkkoAbg3bELG2SlhUm2v5hovx/a0t9VcJvbSmYAz3DsU3cIvtw0MKpi86eRT19uMx0Tva1050f4c+jjccb4Td6I+IkpCZCE+ME2z+X8v9trQXzQhWbtUoIkm1jQ/TGR/bhoAocUjjR6SdM4c+hfcdH1S8lGeaB8fL/qraZPq3eV/mnJm6RfTbQw1ujeo3uITJm23gC4Ucu/KZcCX8spbUIO3cXt02e3t7gyV9VGdPa66cURZTb8SL7cGR/xaXzyddHj28n+xH+XNp34hF+1tM6lVDaI7+re8iL7U/3exOz06c1mA4rfu1RM3Ynymlt9aa3bySSPD6yR/YZw3eanRF+gNLP8yh/ogeA5Lp336DZ2zlontzRZ9paCt4DQG8AR81u9E6/2r1n0IS9/grZI/sMMjtM4c+mfSdm0cIWhD8ZdcrZG9M/OGKee2HAPLu3eM6qRv7DVsKq2AmrqgPZhwOyjx1SOrG9W7lyRVW0QAX+dw+Anr5ie/X0jXhbLTQ31pnGxoL3IAhiQhfZhwM19ongqDCFT0qnglH+o5u7aYgqkPxVtSMt69jEZ54f9k5r1mrcpqY6+wBoMPU+XwCQfTio9JJqHISfe5YuakP4AVEa3Y+MjprevlHTdaDfK/3UJLD27+mYovoH2YeDdrmkzj4xhJrD55E+laSsjBYtbCWXHzBK/5T23pfAB7qHzd59Q96f6Q2gvfXw/D+yDwelcC45n3FfgugIU/icVFDRKB/hh42qf5qbig8AlcLu6TyU/xeqBkL2waO8PdslJArfTvZz9XiPqwCtNJ07m8msKFH+X6N9KV5x9NwmM3tmY9VbN8ORaNdLJmkTh28n+xnhN9O+lXH64nZz59oBGiImVOKpmDOzwYyMGNPbN+xVAXX3DNs3Akb+fpHoObgkkfh2sh/ht9K+lVHaWjhJxx/mFaV/tLhLoc3eJHyt7C0GD4BKWEPePrFjmzCFD4zyU4+qfxqn1Xsrfe1/mf6BUU/8egDoLYCDyw9H5ZekcrJDQ0h/l1E+o/x0vBM3qcyzwcx02dCS+EsPgTxT2gETEovvJ7EfibfTvozyM/+O7PL/ujXK8/+Sf/9Avh4AOnScqpxkd9cwhQ9VjPKpy08v5fl/kaf8v0TPAqvsgfDDHuUvafOOCsz71slZIE/5f0b3CF9HaXXQZP7QhmpajMWWC9ljbP5fDwCd0Zv2/D+je4QvGKJWPcpvN1t39rGTZk4eAKXbSnX/acz/Lz2xjdF9OvCdK/Yj/D4bM2jjal+Rp5s7175AQ+Tp7a4s/68J4OLoP/n5/9XLeZFPCb4rQvwIv5/2rR5N4Go3zU1be2iMHOKd9VuW/5fwu3uSl/9XzT1199nFj/DJR9SIyjQ1gUtqBzQBrH2Xkpb/X7GM6usUEWpK50AeW3RP56B3IwbFsUc3m0ce7w7kNCfIDmPz/9t29pmBwehH/SuWsQt6ivCddWFmZgpUZRMkGtUdO7/Zy+kCjEdf/0g8sj9lGpO16aIrTOHvz2OL6gbQSUtBsujYluKDhG1bYAyjtk8MDMTTMUjnpG9sEKbwcztpq/NUg+a0xW2GfbpgrOw1ENh3YCjy7z2jo8GcsIAzjlKG70G4H+HvyWurTmurD/xrNjTUmeVL280w87fgqC/Umd7+ES+lEzWrV1CKmUL2IvwQUEldGNKf1l5vTjquhXw+mKGhUa90d/fz0W+2p7Qlk7WpxLeT/Qj/uTy3rF55w8A7jm9GA/n8HFNXV2eOmdds9u0fthF9OoeVtanFt5P9XOW9eW5ZTdy2hHRG6rKT2orzBEg/lyP7GdPqTb3tWtt29cXyM5y3kgX0jPAD+OKM8v2MslpNE4du5wpN0h41q9EbXcc1ulcpZpj9GkIl1Bz+c3lvXd2YYY3yS5O4TY1IPw9osn6mFW0plRLX6J5SzFTzLCP8FI/ykX5+ZK8J++LJWia20b3KMCnFTDWkdNI8ykf6+ZH9jGmHqr7iGt2fu4rcfcoJNaXzLO1bZM6sxlC/PtLPj+z3dA4xuodqCTWlo1VdnbRxsWInjLp8pJ9dtNZC5bflshdP7ojnvGNG96mn04S80lY8RTsXmTW90RTqwt3x8jDpU7KZWlR6KdmXcvYltu3qj2VV7bIT2xjdp5+qXOxX+NtpZ9dwBRNJOZuk/+LTpplZLM5KJaMjh0ovy9GRh7t2x7M91UXnzOLCpJ+qXOxX+Dto50Po9KKWiGrntRpSq3LZhiEloh912yUc1TTuKtaNW3rN0HA8WyBTd88Iv1K20M6HM2tGY2Tf64SFLebEY1sMR6ckGz2UC4U677Cb+nHusJ27B2KZqNWD56KzGd1nhCejEP5m2vlwmhrrvAU0UaFR/mmL200zk7mJRJU4Orh8/pzxBwJK5WyPqQxz1fIO9szJDlW52O/Vf5x2PhK9IkdZTaPSvjOWtpuOtgYvdQDJGdnPmXlkJU45caVy1EfPWzWTi4Tww3+NyANzZoZftVOOJnNPW9JmFi0kxZOEUb12vJw/Qb6+RFypHLHmgjlcqGzxRBTC10HmO2nrI1Fqx6ukiRileDQR19bCkYlx0D8w6k3eK4VTP8nd1N0zElvNPWWYmWOnc3HowheP0d7jo8VYYS/IGg+NKpcva/cmCSG6Ub1SOGrzjvbJr7lSOH96ojuWn1N945LzGd1njE3V/kOEHzBakBXX6tiFVj5n2tF+qx3tU74ZDpozGRwctde5wSyY1zTpqL7Enzb3xLLASpy7cgYTtdljQ5TCf5T2nqRBC9Hn88eO6LTl7ZITWr0zUknzBIfq6hsb6syC+c2mrbWyW+fJHX2x5e2Vxlm9YjoXLns8EqXw19Pek6N8/tzZjbH+DEfZ779yeYeX40f6tTFoRV+alNWq2foK75rdewbNzphW0+rBz0RtZqnawdUIf51BIRXdcBrpx40Wa730DCt+KyuqefyLXrn6OTMavUlZje4rRZO0m7b0xPazK5XDitpMMuocHJnwuwwLsCoirkncsaiEU+J/yell4ueRXZHoF85vqjh9Uy77dRsPxPbzk8rJNE84B0cmfPEw7V4ZGuUnQfpHiL+U6kH8B1GJpVI31Yq+XPZxLK4qvVle9uq5XMzs8lAt/7gQxzdF+skQ/8teNN37VVVFea3q0eeW6DXBraobpW6qEb2Q5Ddt7YlN9kIlmFTlZJqaBtvVJvnup939oXLNgcFRG8kyq0b6igPdw94EY+f+Ia/0sC7jCX9JXjl5yT2IvZAk+fUbu82BnuHYPpPSOFpkBZnmvlr+cd1oBZuxbNp1xB/puJy9Nbwh5HY0uXvPQOKkP5bn9w6a52w83znoSTEr8tcDV5Wqba313mIpP5OwSZe9Kojeffkx3GQZV4iN2Tb2lf/h0gXhj/D1DVX8fzrXoHJUoz9/TpN5oWswVjlMhUo6lfZpbi6Ynt5h09s3Ynr7R7yjHevrU3R3jBQnYCX25iZVTQUn+RLK2WsVbVwLq4RSOJeTt88DG8bK3i+1vMv+HuFXJ/1SuWZSpd/ZNWT27hvy6s01Ei5tHSCpKUqpKe35XkjQO15J8Pq5Jfj21oI3mq8P6WeMe4K2hPL2lGDmgrW1foFahX8l16A6kir9ctmPN5IsnxCU/Put/Ie8MsZR7y1AD4CgR9HjIbFL8Po5VVnT3GQjZMEf9oq7f9j8aXN37LJXvT15+9zw+ziFfzftX7v0NRLd0zmYeNlPlEpoaT5SxNprpm9gxMv99/SOeA8AvRFIjvX1lT8M9BCR1FXhVErN6IGidNP09kLV1TS1ohW0cS6qKiHRs8d9rrgrTuFvVN+3MZ/rUD2SmVIje14YNCMxnmbiV/YTISmXql/ErAnW/wyrHHKcvLeEnuSyQu2NE9d2CeVokpZdMHOFXFvzxpW1Jv5+Y+ONXIvaaGspmAZ7A2ukH0cFT1Cy94O+V1wj9Grwtjje3BPbRmhj36w0SUu9fa74TRBfpNYecxfXIRi04ZoqeLyDTDIu+7ShfP196/YnRvZXXDqfSdr8EYhra+01v+A6BIfSGdpls+tAwZNL2CkeZD8123b1x3bo+HhcdPYsL50DuePXSRC+DjXXZj4ncz2CQ0fmaSQXZooH2U9O/8CIl8JJUhXVmvPneMdZQu7YYWo49OSwQWUAX+NnXI/gUYrnmLlNgSz7R/b+0GHjDz56IFGy17YJyD633B5YFiGAr/FTrkd4KFd7zNzmwI5NRPYTU1xI1e0dNh53fX05Ev1F58ziAuWXXwb1hardS6ecVhsv2OAE7ZDpOjBcU24f2Y+P5K5RfZJy9eWyX0P5ZZ7Ra+Y8U9y7bFyi2EunnF5TLBm6mGsTLsrtq26/mr14kP34aBHVk9uTNaJH9lDGvZPJ3i9BJYh/hvCjobQXj1I9WqylFa3I3j8qtdTe9XFueobsoQJ+EuQXCyKlI04xAc0igz8kLKV5JhI/sj9S9Nt29SWiph7ZQyXdwUxxaHnUKR2hJb8653Yx1ydaivvZNHni3989bHr6hpH9OCh1s/v5gUSLHtnDGJ6cSvZ+CbLm7z9s/B3XKE7xF8zQcIMntS1P9XnCV3lnXlFefvfzg2bXs/2JTd0ge5iE7wX9BRsC/uEQfszokBJtV/ybtZ2e5LQqc+G8ZtPelp9hvsord1rJa44jiZOx46E6e0ovIWzhB5XD976Wje02juU6xYfSFrf9cPcRI1qN/hdY8R81q8HbkjlraGXs8y8MpWY0Xw4raGEcnrJxvI0pBR1HDt+4H+y7Nq7jWiVL9kJ/pgVFT+4obsk8b05xFW+aR/4ayevc3b2dyT4yciL0ENbeOMgexuG7lcjedwYg4K/3TYSfPNmPRXI80NN7UDoq8VTM7KhP9Ohfo/jO/cXFZ15lUspG8mNlr10v2QgNJnFp4ASZ0imhDdWo1kmo7CsRUXtrvR351x98A2ioj37iV7l3jeD1cJLcu3uHUy34ciR57WfPFscwAap4XFLpX44rpVPiGzb+iWuWPtmL0kHl2qlze6mTWOHrAaCHgd4AvIog9yYwo6P6/fs1Yu/rH/XkLrEPu1+7baRlstUvOpZQJ1VxeAlM4dBQCGOEv8wEcBQXRC/7IJhs1FoU/Ehur5cOHOcMWqgALWTdmJYRvn5Q7f9wFtctX7IXSV/YFAcazWtUr9E9wBT83o/s/RJWEvHLCD9/socjIV8PVbgzNMJI6YjpNp62wZAG2ecWFlOBT3psHGOjy88/8pPSCWvmSD/w97l+yD6PKIVzmR3VI3vwyff9yt4vYb5n3mTjCq4hss8TJyxo8WRPFQ5UwRfC/gZhCv8eU9zpbTnXEdnnYVSvKhylcQCqQK78bZqFLz5v43NcS2Sf9VH9mgvmMDELtXBTFN8krEnbEh029K/ZLATZM6oHGJ8DNjT1ur+afxx3HX45+gAqM3o/1xTZZwnV1GtSllE9BMCXq5V90kb4QvvqaCEBs1jIPvVI8ErfKI0DEAC6ybU7weZqv0CSRvjGfZAf2Xgd1xbZpxWlb1Yt72BrBAiaH9Uie79E9T56I8JH9mlF+9Vr33pKLSEkN0ZGVMK/08b9NlZyfZF9WqD6BkLmAefGzAlffMzGt7nGyD4Noj931Qzy9BA2/yfqbxil8HUgr3JVHI6C7BE95J3NJoRDypMk/BH3RPsi1xrZI3pgdG8iv/GjKMssRwd46gjE45E9so8bTcauWNaO6CFqdJicjjAcCOKLJa0ssxx9wH8xOd9uAdnHhyptViybZlav6GAyFuLiX4KSfdJH+KVRvvJXxyF7iAodRLJ6eYdZemIb5ZUQJ0/ZODlI4Sd5hF8a5X/UFDdWQ/YQ6mhegpfoJXyABPDPcY3u4xrhi0YbG9yTLjds3NJj1m/s9n6F8NA+N0sXtXo5eoAEscUUDygPVPh+RvhxCV+81cZtebzqOuhb0l9n5a9RPwQneVI2kGDebuNrQX/RtAhfd+UfbZyR5x6A/JE85IJHbJxpQijFTIvwxSWmuHkQWJTb32Tlv+3pfu9Xcv2Hozy8SiiPX9DsyR4gRayx8eMwvnCahC9+aeNC+sORaMS/bVef2b6r3/s1bw8AlU2esLDFnHBMs/crZZSQUn5l45VhffG0CV+vOQ8a9suv+AGwe8+g9/sspYCUkpk/p8kbvZdG8qRpIANolKZNIx9KgvCTMGRSHv8rNt5J35gciXBseaEeAPu6hkzn/iHvTUC/al4gyUjmM6Y3mBnT6r2R+0w7cmf0DhnlK2HK3i9JGOGLo03xVCwOBw3wbaBvYMRs29nn/fez9q2glBLSQyLskXrpAdXcVFcUuhW8/pxRO+QInVWrMsydYX6TtI3wxTM2brDxcfpIcG8DpdF0JQ+GCf+fe0iUpD0ejNABxuWGsGWf1hG+0GKsde6JCACQZh6zscLGYNjfyM8IP0nv12qYD9BPACADfCAK2fslaQnVX9j4Fn0FAFLMt5zLEkcSZ9Cut9FJnwGAFLLPOSyRJFH4T9v4B/oNAKSQDzmHIXwffMHGvfQdAEgR9zp3JZakCl+1gO+y0UcfAoAU0O+clej9T5K8CkZlTf+TfgQAKeAG56xEk/Rlj1qI9QB9CQASjBz1sTT8oEkXvjaFeYchtQMAyaTPOWooDT9sGjY20cEB/0i/AoAE8o/OUakgLTtZ3WjjDvoWACSIO5ybUkNahK+Zb22fzIIsAEgCnc5JqTqVKE171W6zcQ39DAASwDXOSakibZuTa4+KW+hrABAjXzQp3fMrjadRaBe6DfQ5AIgBuee6tP7waRR+j403ul8BAHBPhoUvVAb1XvofAETIe02KSjCzJHzxVRs30wcBIAJuds5JNWk/UVr5fLZeAIAwecBk5DS+tAtfy5r/i43n6JMAEAJyy381GdnepZCBz/CUjctsDNA3ASBABpxbdmTlAxUy8jnusvG39E8ACJAPOrdkhkKGPstnbXyePgoAASCXfCZrH6qQsc/zfhu301cBoAZ+6VySObIm/GEbl9tYT58FgCqQOy5zLkH4KWCfKc6qU7kDAH6QM17vHJJJChn9XE/YuDjLFw4AAh8oXmJjc5Y/ZCHDn+1h97SmXBMAJmPAuWJt1j9oIeOf79c23mVjlD4NAOMw6hzx6zx82EIOPuPXbVxPvwaAcbjeOSIXFHLyOT9l4wb6NgCUcYNzQ24o5OizftjG/6WPA4BzwYfz9qELOfu8OqnmC/R1gFxzs0nxqVUIv3I0QaNDDL5EnwfIJbr3rzE5LeQo5PAz60K/x8ZX6PsAueIr7t7PbdVeIaefW8umr7RxK/cAQC641d3zw3luhEKOP7su/FWGnD5A1vmCu9eH894QhZx//lJOn+odgGzyaXePs/gS4R+Uvs6r/F80BUCm0D19LbJH+OPxT6ZYqkXnAEj/IO56d08Dwp8Qrbp7p41BmgIglQy6e/hGmgLhV4JKt9bYOEBTAKQK3bOXGkquEb5Pfm7jz2w8Q1MApIJn3D37M5oC4VfDgzbOtvEoTQGQaB519+qDNAXCr4UtNs6x8QuaAiCR/MLdo1toCoQfBDr67LU2bqIpABLFTe7e5ChThB8oQ6a4eONvDBU8AHGje/B97p4cojkQflh8zsaFNp6lKQBiQffeK218lqZA+FFwt42VNu6jKQAi5UF3791FUyD8KNlh4zxTPEgBAMJH99o57t4DhB85fTautvE2Gz00B0Ao6N76K3ev9dEcCD9ubrPxMhsbaAqAQNng7q2v0hQIP0k8Yoq5xVtoCoBAuMXdU4/QFAg/qa+eOmThL2100hwAVdHp7qGrDKlShJ8Cvm3jRTbuoCkAfHGHu3e+TVMg/DSxzRRrhT9omGgCmIo+d6+80t07gPBTx4iNTxhq9gEm434bq9y9MkJzIPy0o538zrLxtza6aQ4Aj243qn+5YWIW4WeMYRuftLHcFPfaB8gzP3f3wifcvQEIP5NoC9dX23i7jT00B+SMPa7vv9qwnTHCzxFfs3GqjW/QFJATvuH6/NdoCoSfR56z8VYbrzKs0oXsssH18be6Pg8IP9foxB7VHv83w8HpkB3Ul//O9W1OjEP4UMaAjX+zsdTGlwzlaZBeRlwfVl/+uOvbgPBhHJ62caUp1u7fSXNAyrjT9d0rXV8GhA8V8JCN8238hY31NAckHPXR17o++xDNgfChOn5qijlQ7bn/BM0BCeMJ1zfVR/+T5kD4UDvKiWrP/dNM8dBmTvyBuNnh+uJprm8y54TwIWA0+XWTjcXuZttOk0DEbHd9b7Hri0zIInyISPxLbLzHxkaaBEJms+trSxA9wof4xP9F91r9Oht30yQQMA/YeKONZa6vIXqEDzGj/OkPbZxnitvM/ruNIZoFauhPPzLFvelVYvkdQ44e4UMi0d7ibzbFHOuNNvbTJFAh6iufsXGKjUtt/IomyR51o6OjU/6lTbtoqJTS4R4AV7nRGsBYdDiPDgzX5mZs7ZFCli5A+HAkZ9p4tynWTc+gOXLNPlPctVKi/yPNgfARfnZptXG5k/+5NEeuuNtJXnn5XpoD4SP8fKF8rVI+bzHFvD9kD5VUKl3zTRuP0RwIH+GDWO3E/wYbx9IcqeYpG993ov8DzYHwET5M2CdsvMzG6538T6JJUsGTNr7nRC/Jj9IkCB/hg19Ot3GJi7Ns1NMkiUCHf99r48cuHqVJED7ChyCZY+OisjiOJokUpWp0etTtLvbQJIDwISo06XuhjXNcHE+TBIo2K7vHhRZCMekKCB8Sw0JT3OJBqZ+zTXGfdFJAlaEUzcM2fmeKqZq7bOykWQDhQ1rQSl9NAL/Uxgoby91bQWPO22XQjdZ1UtQ6U9ykTBOtbIUBCB8yRZONU538FVoBfIZ7O8giGqU/YoorWte72GDYeRJiEH4DzQURM+DkN3ZJv1YAn2hjUVmcVPb7OQn9PJo43eriybLfK7YYVrRCgkD4kBQkxj+5GI9p7i1gro35No62cZSNmWOiwz08WtzvS318ujlyPkF58y73e20prZRKn/tZ9PvOMfG8jWds7LbxnBu9s+EYIHyAgJFYNxpO+AKomopy+AAAkH44AAUAAOEDAADCBwAAhA8AAAgfAAAQPgAAIHwAAED4AACA8AEAAOEDAOST/y/AAIYJhszBd/XvAAAAAElFTkSuQmCC", - "loginImgUrl": "data:image/png;base64,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" - }, - "componentName": "Block", - "css": ".home-content {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\r\n \r\n}\r\n.home-content .btn {\r\n margin-top: 24px;\r\n \r\n }\r\n .home-content .btn button {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\r\n }\r\n\r\n .home-content .text {\r\n font-size: 18px;\r\n }\r\n\r\n .home-content .account {\r\n margin-top: 16px;\r\n \r\n \r\n }\r\n\r\n .home-content .account .sub-text {\r\n color: #575d6c;\r\n }\r\n .home-content .account .login {\r\n color: #1890ff;\r\n cursor: pointer;\r\n }\r\n .home-content .logo img{\r\n border-radius: 50%;\r\n overflow: hidden;\r\n }", - "props": {}, - "children": [ - { - "componentName": "div", - "props": { - "className": "home", - "style": "height: 100vh; display: flex;" - }, - "id": "357534ab", - "children": [ - { - "componentName": "TinyRow", - "props": { - "align": "middle", - "flex": true, - "style": "" - }, - "children": [ - { - "componentName": "TinyCol", - "props": { - "span": 6, - "style": "text-align: center; display: flex; justify-content: center;" - }, - "id": "f01b66ea", - "children": [ - { - "componentName": "div", - "props": { - "style": "width: 90%; height: 50%;" - }, - "id": "8197d016", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 100%; height: 100%;", - "src": { - "type": "JSExpression", - "value": "this.state.loginImgUrl" - } - }, - "id": "471e30f3" - } - ] - } - ] - }, - { - "componentName": "TinyCol", - "props": { - "span": "6", - "style": "text-align: center;" - }, - "id": "781d5b46", - "children": [ - { - "componentName": "div", - "props": { - "className": "home-content", - "style": "font-size: 14px;" - }, - "id": "08638b8a", - "children": [ - { - "componentName": "div", - "props": { - "className": "text" - }, - "id": "18712ee2", - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 16px;" - }, - "id": "07e6794c", - "children": [ - { - "componentName": "div", - "props": { - "className": "logo" - }, - "id": "07cad264", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 105px; height: 105px; border-radius: 100px;", - "src": { - "type": "JSExpression", - "value": "this.state.logoUrl" - } - }, - "id": "f4489e27" - } - ] - }, - { - "componentName": "Text", - "props": { - "text": "TinyLowCode 低代码平台", - "style": "display: block; font-size: 28px; margin-top: 12px; margin-bottom: 12px; font-weight: bold;", - "ref": "", - "className": "title" - }, - "id": "e82108ce" - }, - { - "componentName": "Text", - "props": { - "text": "致力于通过友好的用户交互提升业务的开发效率", - "style": "display: block; margin-bottom: 12px;" - }, - "id": "65a2f1ad" - }, - { - "componentName": "Text", - "props": { - "text": "欢迎一起来解锁~~", - "style": "margin-top: 12px;" - }, - "id": "bb879abb" - } - ] - }, - { - "componentName": "div", - "props": { - "className": "btn" - }, - "id": "44b2bcbd", - "children": [ - { - "componentName": "TinyButton", - "props": { - "text": "立即体验", - "round": true, - "type": "primary", - "style": "margin-top: 40px;" - }, - "id": "9580c5e7" - }, - { - "componentName": "div", - "props": { - "className": "account" - }, - "id": "6a8ffa3e", - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 14px; margin-top: 4px;" - }, - "id": "bfc6eb6c", - "children": [ - { - "componentName": "Text", - "props": { - "text": "已有团队?", - "style": "color: #777777;" - }, - "id": "3d993264" - }, - { - "componentName": "Text", - "props": { - "text": "立即进入", - "style": "color: #5e7ce0;", - "onClick": { - "type": "JSExpression", - "value": "this.handleClick(event)" - } - }, - "id": "21390118" - } - ] - } - ] - } - ] - } - ] - } - ] - } - ] - } - ], - "id": "4545fea2" - } - ] - } - ], - "methods": { - "handleClick": { - "type": "JSFunction", - "value": "function (event) {this.emit('goto-home', event)\n}" - } - }, - "fileName": "PortalHome", - "meta": { - "id": 1722, - "parentId": "0", - "group": "staticPages", - "title": null, - "occupier": null, - "isHome": false, - "description": "", - "router": "/", - "rootElement": "div", - "creator": "开发者", - "gmt_create": "2022-06-08 03:25:51", - "gmt_modified": "2022-06-09 05:19:09" - }, - "id": 1722, - "schema": { - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [] - } - ], - "events": { - "onGotoHome": { - "label": { - "zh_CN": "点击立即进入触发方法" - }, - "description": { - "zh_CN": "点击立即进入触发方法" - }, - "type": "event", - "functionInfo": { - "params": [], - "returns": {} - }, - "defaultValue": "", - "linked": { - "id": "21390118", - "componentName": "Text", - "event": "onClick" - } - } - }, - "slots": {} - }, - "dataSource": {}, - "i18n": {} - }, - "created_at": "2022-06-13T07:56:51.000Z", - "updated_at": "2023-01-13T08:12:51.000Z", - "assets": { - "material": [], - "scripts": [ - "http://localhost:9090/assets/js/989web-components.es.js", - "http://localhost:9090/assets/js/989web-components.umd.js" - ], - "styles": [] - }, - "createdBy": 86, - "description": null, - "tags": "", - "current_history": 1655, - "screenshot": "", - "path": "common/components/home", - "occupier": null, - "isOfficial": true, - "public": 1, - "isDefault": null, - "tiny_reserved": false, - "author": null, - "name_cn": null, - "created_app": null, - "content_blocks": null, - "current_version": "x" - }, - { - "id": 1005, - "label": "PortalBlock", - "framework": "Vue", - "content": { - "state": {}, - "methods": {}, - "componentName": "Block", - "fileName": "PortalBlock", - "css": "", - "props": {}, - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 18px; height: 40px; border-bottom: 1px solid rgb(223, 225, 230); margin-top: 20px;" - }, - "id": "d38cea57", - "children": [ - { - "componentName": "Icon", - "props": { - "name": "IconChevronLeft" - }, - "id": "86c6e6b0" - }, - { - "componentName": "Text", - "props": { - "text": "编辑物料资产包 | ", - "style": "margin-left: 10px; font-weight: bold;" - }, - "id": "38d9fbc8" - }, - { - "componentName": "Text", - "props": { - "text": { - "type": "JSExpression", - "value": "this.props.blockName" - }, - "style": "margin-left: 10px; font-weight: bold;" - }, - "id": "6cd76396" - } - ] - } - ], - "schema": { - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [ - { - "property": "blockName", - "type": "String", - "defaultValue": "MT0526-React 1.0", - "label": { - "text": { - "zh_CN": "区块名称" - } - }, - "cols": 12, - "rules": [], - "handle": { - "getter": "", - "setter": "" - }, - "hidden": false, - "required": true, - "readOnly": false, - "disabled": false, - "widget": { - "component": "MetaInput", - "props": { - "modelValue": "MT0526-React 1.0" - } - } - } - ] - } - ], - "events": {}, - "slots": {} - }, - "dataSource": {} - }, - "created_at": "2022-06-28T08:59:54.000Z", - "updated_at": "2023-01-13T08:20:09.000Z", - "assets": { - "material": [], - "scripts": [ - "http://localhost:9090/assets/js/1005web-components.es.js", - "http://localhost:9090/assets/js/1005web-components.umd.js" - ], - "styles": [] - }, - "createdBy": { - "id": 86, - "username": "开发者", - "resetPasswordToken": "developer" - }, - "description": null, - "tags": null, - "current_history": 1665, - "screenshot": "", - "path": "portal", - "occupier": { - "id": 86, - "username": "开发者", - "resetPasswordToken": "developer" - }, - "isOfficial": null, - "public": 1, - "isDefault": null, - "tiny_reserved": false, - "author": null, - "name_cn": null, - "created_app": null, - "content_blocks": null, - "categories": [], - "public_scope_tenants": [], - "histories_length": 1 - } - ] - } - ], - "locale": "zh-cn" -} diff --git a/mockServer/src/mock/get/material-center/blocks.json b/mockServer/src/mock/get/material-center/blocks.json deleted file mode 100644 index af51e73245..0000000000 --- a/mockServer/src/mock/get/material-center/blocks.json +++ /dev/null @@ -1,441 +0,0 @@ -{ - "data": [ - { - "id": 989, - "label": "PortalHome", - "framework": "Vue", - "content": { - "state": { - "logoUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXwAAAF8CAYAAADM5wDKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI5OEVGOTU4RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI5OEVGOTU5RTg2NDExRUM5MDhERjU4NjRDOUUxQTUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjk4RUY5NTZFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjk4RUY5NTdFODY0MTFFQzkwOERGNTg2NEM5RTFBNTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4dZkpJAAAvNElEQVR42uydCZRdVZnvd92aq1IZSQIJQ4AMTAkOSRQQugFBbQm+p2A7oK0igt2K0L5+/exeq/Xx1rP72bbic0IEXSpqO/ZzagdUEEQ0jCZgSAhkIoEACZVKap7e/p+7b3JTqeGee898fr+1vpUQkqq6++zzO/t8+9t7142OjhoAAMg+BZoAAADhAwAAwgcAAIQPAAAIHwAAED4AACB8AABA+AAAUDENlfylTbtoKACAJLJ0QcDCB0gAbTaOtTHPxlwbx9g4ysbMMTHdRrP7++02mty/b7HRWvb19tsYsjFiY5/7s14bfe73+1x0lsXzNp628ZyNZ208ZaOHSwOZGuEDRICEvMjGSe7XsTE34O/XUfb7OTV8Hcl/6zjxpPu1j0sLCB/ySqONU20sd7HCxhk2jkvp55nrYtUE/3+HjUdsrLexzv26wcYgXQEQPmQJpVTOsvESJ/blTvaNOWqD41y8puzPBp30Sw+BB23ca6ObLgNhUlfJbplM2kKFLLTxChvn2DjbxpkMKipG8wl/tPE7F3fb2EmzwFT4mbRF+FALp9i40AlecTxNEijbbdzj4lc2HqNJAOFDVMy2cZGLi0168+5pRfMBt9v4hft1L00CCB+C5HQbr7VxiSmmaeppkkQwbIqpn5/Y+LGNR2kShI/wwS91NlbauNzGG0yxTBKSj8pAv2fj+zb+YIOj7BA+wocJWW3jTU7y5OLTzXYn/m/aWEtzIHyED2KZjTfbeIuNJTRHJnncxjec/DfSHAgf4ecLbS9wmY132ziP5sgVd9m4xcZ3TXEbCUD4CD+jaOHTVTauMMU9ZyC/aF+g22x80RQXfgHCR/gZYJoppmw0ml9Nc8A4rHWjfqV8DtAcCB/hp4/FNt5v453m8E3CACZCu4d+2canbWymObIpfA5AyRbn2/iBKU7OXYvswQcdrs+o7/zQ9SXIGAg/G9dQk7D32fi1jUu5rlBjf1rj+tJ9rm/RnxA+xIwO9lBuXvurfMcUF0sBBMlK17cec32tiSZB+BC96K+2sckUqyyon4ewWeL6mvrcNYgf4UP4NDrRayHNTTZOoEkgYtTnPu/64NUmX+caIHyI7Bq91cafnOjZ9gDi5njXFze4volHED4EwKttPGSKi2QW0xyQME52ffMh11cB4UMVvNgU9zv/qSmukAVIMitcX/2l67uA8KECjrFxq437bbyS5oCUcaHru7e6vgwIH8ZBVQ8fNMVFL+/iukDKnaI+vMn1aSp6ED6UoaMCH7bxccPKWMgO01yfftj1cUD4uWauja/b+LmNU2kOyCinuj7+ddfnAeHnDm1RrJK2t9AUkBPe4vr822gKhJ8XFtn4mY2v2ZhDc0DOUJ//qrsHTqQ5EH5WqbdxnY1HbLyK5oCco3tgvbsn6mkOhJ8lTrPxOxuftNFOcwB4tLt74nfuHgGEn/q2vd7GA4bTpgAmYrW7R67HRwg/rWivEa2U/YSNFpoDYFJa3L1yu2GvKISfMnRgxB9tXEBTAPjiAnfvXEZTIPyk02bjZlM8MGImzQFQFTPdPXSzu6cA4SeOM0zxOLiraAqAQLjK3VNn0BQIP0loP/DfGyoNAIJG99Qf3D0GCD9Wmk3xEAjtB065JUA4tLl77AuGAgiEHxPH2rjbFI95A4DweY+Nu2wcR1Mg/Cg51xT3/F5FUwBEyip3751LUyD8KLjGxq9szKcpAGJhnrsH30tTIPywaLDxaRuft9FIcwDEiu7Bz9n4rLs3AeEHxgwbP7HxPpoCIFH8tbs3Z9AUCD8IFtm4x3BiD0BSudjdo4toCoRfCy+2ca+N02kKgERzurtXX0JTIPxqRw2/sXE0TQGQCnSv3snbOML3i44f/LHhQHGAtNHh7t0raAqEXwnXmuIRbFTiAKSTRncPX0tTIPzJ+LCNT9mooykAUk2du5c/QlMg/PE6xyfpHACZHMR9kkEcwi+XvRZvXEdXAMgk17l7HOnnXPj67F80LNEGyDrvdfd67jMaeW2Aehu32riSewEgF1zp7vlcSz+PH16vdtpb+x3cAwC5Qvf8zSbH6Z28CV8X+nOM7AFyPdL/XF6lnzfha8b+Gvo8QK6RA25E+NnmIzY+QF8HAFNcmPURhJ9N3m+KNbkAACU+bHK2IjcPwteJ95+ibwPAONzoHIHwM8AFNr5kWHQBAONT5xxxAcJPN8ttfN9GE30aACahybliOcJPJyfa+E/D0WcAUBlyxe02Tkb46btwP7BxLH0YAHww38Z/ZHmgmDXha8uEb+Xh1QwAQkHu+LZzCcJPOJ+28Sr6LADUwMXOJQg/wWj1HDtfAkAQyCV/jfCTybmGWnsACJZPOrcg/AShydnvGcovASBYmpxbMlMAknbhN5virPpc+iYAhIDc8v+caxB+zCiNs5I+CQAh8lKTkZRxmoX/NhtX0xcBIAKuds5B+DFwuo2b6IMAECE3Ofcg/AhpsfHvNtrofwAQIW3OPS0IPzr+1cYZ9D0AiAG552MIPxpeY+Nv6HMAECPvcy5C+CGijY2+bNjbHgDipc65aD7CD6+Bb0ljAwNAJpnvnJSqAWhahK99LS6hjwFAgpCTUrXfThqEf5qNj9O3ACCB/KtzFMIPAO1J/RUbrfQrAEggctNXbTQg/Nr5oGHrBABINi91rko8daOjo1P+pU27YvnZTrHxkEnxIgcAyA19Nl5s47Gov/HSBekf4evnuhXZA0BKkKu+ZBKeNUnqD/ceG2fThwAgRZxlEr6hYxKFf4yNf6bvAEAK+ahzGMKvkE/YmEm/AYAUMtM5DOFXgE6LfxN9BgBSzJucyxD+JDQaDiIHgGzwKec0hD8B15piKSYAQNo5xTktUSSlDv9oGxttTKefAEBG6HLifzrMb5LGOvz/jewBIGNMd25LDEkQ/pk23kHfgGrYubufRoAk81fOcQjf8XGT3sPUIWbZ3/PgPvPo4900BiQVue3fEH6Rv7DxSvoE+KWza8isXbff+/2mrb1mcHCURoGkcqFJyHkehZi/90fpC+AXyX3tui4zODRS/G/760MbDtAwkGQ+moABdqw/gBYnnEk/AL9I7p37hw77s607e71RP0BCWW4SsKg0LuFrQcIN9AHwi/L2kvtEDwKABHODiXkxVlzCv9LGyVx/8EN37/DBvP14PLd3wGx9qo+GgqRysnNfroTfZONDXHvwi2RfyttPxKObu5nAhSTzD86BuRH+u2wcz3UHP2jkrhF8JW8Bm7b20GCQVI5zDsyF8PVk+x9cc/CDRux+8vMq05T4ARLKh+Ia5Uct/LfbOIHrDX6Q7KdK5Rz2gLB/99HHGeVDYjneuTDTwtf3+u9ca/DDs3sGJ6zKmQz9G/1bgITy9zEMuCP9hq+3sYTrDH7QJGy1PLxhPw0ISWWxjTdkWfh/zzXOBwODo17UimruK5monQgtzqJMExJM5BmPqIT/5zZWcn3zwT4r2t3PD9Qs/YcDWEjl5f8p04RkstK5MXPCv45rmw+GhkdNT9+wGRkdrUn6GpkHUWmjCVzKNCHBROrGKISvXNUarms+2H/gkKRrkX4tufvxvhZlmpBQ1jhHZkb41xr2u88NB3oOF2s10g9qdF/Ow+yzA8mkYCI8+zZsEXfYeCfXNB/09I14gh+LX+kHObovoQlgyjQhobzTuTL1wr/CxjSuZz7o7pl4VF6p9CXlsNIv963v4iJBEpEj35YF4V/DtcwHIyPGm6yd9O9UIP0wRvcHH0jePju9XCxIIpG4Mkzhn2NjBdcxH0wl+0qkLyHXUndfCTr/ljJNSCDLnTNTK/yruYb5obev8r1uJpL+4xGMvr19djZz6Dnkc5QflvCnmxiWDUM8VJLOqUT6WyJaFau6fMo0IYG83rkzdcL/SxttXL980DcwUtW/K5e+SjH97IhZK5OdnAUQE23OnakT/ju4dvmht6/60XJJ+k/siHYyVXMFlGlCAgm1jD0M4S+zcTbXLUcj/P7aRuYa2WsOYGgo2slUyjQhgZzlHJoa4b+Fa5YftHeOoha6DgybjvZ6c9Ssxkilrzy+qnYAEkZoDkX4EOvoXmjCt67OmJbmQuTSV10+ZZqA8KtjtYlwIyCIn/6B2oQ/rN01ew99jailr3TSQ+yzA8lisXNp4DQE/PXezLXKF7Xued/dM2IaG+oO+7OS9J9/YdA0jPl/YaDjEJcuajUzpzekrv014d3pzh/oHyhOgE/E/KOaTHNTnffrzI4G71dILHLp2qC/aN3o6NQ37KZdlX0tG9tsHMe1ygeqv9/xTG218xLURGkh/XlU0p87u8mc/7KZiW/zbbv6zLadfWb7rn7v97VywoIWc/yCZrPsxDYeAMniKVM87HxKQS9dEI/w9QryB65TfpCQd++pbSsELbYq1E3+PaKS/jkvmWEWzm9O5Ch+7fr9ZtOWnkDmTCZihh31S/wrlrUj/2Tw8kqc6kf4Qb7DXsb1yRe1pnOUvx8ZGTWF+ollHmV6R3vmz7Mj/cbGukS077rHDpi77t/nHRkZBfo+a9d1eSHhr17eYVacwma3MfKGoAfRQY7wHzdM2OaKF/YNma7u6mXUtX/YvNBV2eKnqEb6py9uN6cvaY+1XYvS3R+Z6Kca9Z+3cgbij4cnKnFqHCmdU2xs4PrkCy//XkOVzh4r8AM9la/SjUL6jQ0Fc/ErZpn21vrI23Pjlh5z+z0vJEL044n/onNmeSkfiBTtOLw+KOEHVZb5aq5L/qh1wVWvz3x0FCWb3m6aj0d76LkE/92fPedFEmU/9mcMcx4BjuC1QX6xoIT/Gq4LwvdLNXMAUUhfZZpR7bOjUf0t33na+zUN6Of87Nd3BlIhBOkUfquNP+O6IPuwZR+l9KPYM1/pmzSOmPXz3vaD3eau+zq5EcJHe+vMTpLwL7DRzHXJmfBrlO3g4Iipr6H3hS197aa5NaT9+UvC1ORsmrn7/n3mR3fsIcUTLppMujhJwid/D77p6atdEmFLX1suBL3Pjif7H+7OTEpEpaP6PEg/VC5KkvDJ3+eQWvfQKQRUaBOm9DWBq9Oxgpb9ZNsfpBF9HqSfD+EvsXEy1wP80hugHMKUvnL5QRyHmFXZI/1I0HY1pyZB+BdzLaAa6gIupQ9T+g/XuJtm1mVfLn1V8GT9c8bEBUkQ/nlcB6gG7ewYNGFJf+fu/qrLNPMi+/LPqzLTtE9IJ5BAXIvwIRYqWeGdJOk/vMH/oed5k305KjlVJRKj/cAIpPS9FuHr3MWjuQ6QNMKQvvac1+lYWZG9tkrQ1sgK/T4MVImk0b7kT26/Zuab4hY2NVHLlX4F1wCqQYuu6urC3QQtjF02df7tiQtbptxNM8my1y6Y2hNHoi9HP6vEHEa5qNI76zYeMCuWTTOrV3SE9oDJAefaeCyuEf5ZtD9UQ62LruIa6Xv77EyxAjfpsr/i0vlHyP7g/3vd/NB2xVS7SPyfuW2nt7pY9fuM+n3zsjhH+C+n/SHpBD3SV13+kkWt4+6mmWTZqx0ke/06GWvOn2P2dQ2FujBM+/F4ewfdscfbfVMnbumBM96DCIJ1brXCn2ECqgsFSJv0tVf92OMQtZvkd+zINak5+3NXzphS9gf/7qoZZtsPolkJfFD+JbF0NHjn7epnnTenccJ/d8LCyR8O+hoZTB2d6ty7L2rh6zjDAiqBPEpf++yoTLMkpDQsOvKzj71G2mqvOD6PHpylLaI3bpn472kfn1qZ6o2idOj7ZH1qsqMg589pqvghWyEF597boxb+ShQCeZb+feu7zGv/fE5qVpj6He1KVlnfAnmqz1fr51d/e/flxwT9prEyDuG/OM/i6Owa8ibvFs5rNnPtKC+O05Hipr6+LpU/d1DS13YLGmVqIjKLk499A0yo1tyGtl+onDdg4dfk3mp/khfl+UKqrFCrLxVCwp87u8ksnN+UqEOww6ShPr2fMQjpa6Xwbx/Y5x3CngaUJ680rSNRsWCqtrcpbw5hekMYE9GRC7/D5Pyw8rGTSRrtde/s9U5KErrY8+wr8QL7BjDZxFOe0ULbuhifGbVIX7J/6pn+1MheaNFYpcLP+7YIJWEf/G8r7hnTDr3Fl2R+2H9HN0GszSqn26jqIlXzU55po87AhOg1rrgys1h9UBz9W/nPbjQzp2ejcqCpsfrJqPa2evOMHUHG/ZZQjfTTKHuhuveli1qnlL5G9vet35/6/lk+sk6YsGtFHVUHm/82KuEvR+lFiataoxL090p/t7GhWG6W9vx/ISM1Wn6kn1bZl/jxHXu8XyeSftq2OFaFjEIyV5lmS9PkVTMZYnmUwj8d3WuEW93oVKs1s5L/1yh/YDD9k3uVSD/tshcSuVa5avS7Yln7wVGu/lwpH70FJH3UrkVaknvOF2mdUe0/rEb4pxjwXgNL0q6F8fL/Sv/oIZD0/H8tp1YVCsl6sE0m/SzIvhyVG6ah5FLXZKl9G6kkFZUzqnYwwq9W+CHl4kv5f/so8P77oPwTmP/3FudUWb6nN6SwzqINUvpZk30a0H4+SH5SlkUlfO2stJD2NpHl3svTP8r/lyZ/k5D/r6/P3tx9ufSH7bMM2UeDJk21k6Z21Ax4dWoWWehc7DsH51f4J9HW4Y7wJ0P5/61l6R8Jv/gG0BhL/r+WSh1NsB0YGk7ktZVwFBu39CL7kFEufpUVPaN538jF68IW/mLa+RB+KnXCQPl/lX5u2uoeQhHn/5tqeMAk+e2gu2fEPL4V2Yctem3Sxg6ZVbMkCuEvoZ0PMcuO8uMU/ljiyP9rpF5NHr+xoS72xVcTyV6HdQwNI/swUOpGB7Awoq+Zqgbffi2wiHYuH+E3HhxdJ5Eo8v/VTtzq3w3bEXSStmhA9uGh671qeYc5b9VMGiMYToxC+MfTzodQ3jwtjM3/l7Z/qDX/39xUXR5fKZ36ArLPA0rbrLlgDkcbBstxUQj/ONq5LC1hJSlxdrr9u9PEoe0fSm8rxdSP3/x/LRUVmvTVgwjZZ3dUr4NXVq+YTmMg/IyM8u0oOY3CH8uh7R+6D27/UGn+v9o8viZ9B2NuOmQfDtriQMcl5mSrg0wKX7tkkoAbg3bELG2SlhUm2v5hovx/a0t9VcJvbSmYAz3DsU3cIvtw0MKpi86eRT19uMx0Tva1050f4c+jjccb4Td6I+IkpCZCE+ME2z+X8v9trQXzQhWbtUoIkm1jQ/TGR/bhoAocUjjR6SdM4c+hfcdH1S8lGeaB8fL/qraZPq3eV/mnJm6RfTbQw1ujeo3uITJm23gC4Ucu/KZcCX8spbUIO3cXt02e3t7gyV9VGdPa66cURZTb8SL7cGR/xaXzyddHj28n+xH+XNp34hF+1tM6lVDaI7+re8iL7U/3exOz06c1mA4rfu1RM3Ynymlt9aa3bySSPD6yR/YZw3eanRF+gNLP8yh/ogeA5Lp336DZ2zlontzRZ9paCt4DQG8AR81u9E6/2r1n0IS9/grZI/sMMjtM4c+mfSdm0cIWhD8ZdcrZG9M/OGKee2HAPLu3eM6qRv7DVsKq2AmrqgPZhwOyjx1SOrG9W7lyRVW0QAX+dw+Anr5ie/X0jXhbLTQ31pnGxoL3IAhiQhfZhwM19ongqDCFT0qnglH+o5u7aYgqkPxVtSMt69jEZ54f9k5r1mrcpqY6+wBoMPU+XwCQfTio9JJqHISfe5YuakP4AVEa3Y+MjprevlHTdaDfK/3UJLD27+mYovoH2YeDdrmkzj4xhJrD55E+laSsjBYtbCWXHzBK/5T23pfAB7qHzd59Q96f6Q2gvfXw/D+yDwelcC45n3FfgugIU/icVFDRKB/hh42qf5qbig8AlcLu6TyU/xeqBkL2waO8PdslJArfTvZz9XiPqwCtNJ07m8msKFH+X6N9KV5x9NwmM3tmY9VbN8ORaNdLJmkTh28n+xnhN9O+lXH64nZz59oBGiImVOKpmDOzwYyMGNPbN+xVAXX3DNs3Akb+fpHoObgkkfh2sh/ht9K+lVHaWjhJxx/mFaV/tLhLoc3eJHyt7C0GD4BKWEPePrFjmzCFD4zyU4+qfxqn1Xsrfe1/mf6BUU/8egDoLYCDyw9H5ZekcrJDQ0h/l1E+o/x0vBM3qcyzwcx02dCS+EsPgTxT2gETEovvJ7EfibfTvozyM/+O7PL/ujXK8/+Sf/9Avh4AOnScqpxkd9cwhQ9VjPKpy08v5fl/kaf8v0TPAqvsgfDDHuUvafOOCsz71slZIE/5f0b3CF9HaXXQZP7QhmpajMWWC9ljbP5fDwCd0Zv2/D+je4QvGKJWPcpvN1t39rGTZk4eAKXbSnX/acz/Lz2xjdF9OvCdK/Yj/D4bM2jjal+Rp5s7175AQ+Tp7a4s/68J4OLoP/n5/9XLeZFPCb4rQvwIv5/2rR5N4Go3zU1be2iMHOKd9VuW/5fwu3uSl/9XzT1199nFj/DJR9SIyjQ1gUtqBzQBrH2Xkpb/X7GM6usUEWpK50AeW3RP56B3IwbFsUc3m0ce7w7kNCfIDmPz/9t29pmBwehH/SuWsQt6ivCddWFmZgpUZRMkGtUdO7/Zy+kCjEdf/0g8sj9lGpO16aIrTOHvz2OL6gbQSUtBsujYluKDhG1bYAyjtk8MDMTTMUjnpG9sEKbwcztpq/NUg+a0xW2GfbpgrOw1ENh3YCjy7z2jo8GcsIAzjlKG70G4H+HvyWurTmurD/xrNjTUmeVL280w87fgqC/Umd7+ES+lEzWrV1CKmUL2IvwQUEldGNKf1l5vTjquhXw+mKGhUa90d/fz0W+2p7Qlk7WpxLeT/Qj/uTy3rF55w8A7jm9GA/n8HFNXV2eOmdds9u0fthF9OoeVtanFt5P9XOW9eW5ZTdy2hHRG6rKT2orzBEg/lyP7GdPqTb3tWtt29cXyM5y3kgX0jPAD+OKM8v2MslpNE4du5wpN0h41q9EbXcc1ulcpZpj9GkIl1Bz+c3lvXd2YYY3yS5O4TY1IPw9osn6mFW0plRLX6J5SzFTzLCP8FI/ykX5+ZK8J++LJWia20b3KMCnFTDWkdNI8ykf6+ZH9jGmHqr7iGt2fu4rcfcoJNaXzLO1bZM6sxlC/PtLPj+z3dA4xuodqCTWlo1VdnbRxsWInjLp8pJ9dtNZC5bflshdP7ojnvGNG96mn04S80lY8RTsXmTW90RTqwt3x8jDpU7KZWlR6KdmXcvYltu3qj2VV7bIT2xjdp5+qXOxX+NtpZ9dwBRNJOZuk/+LTpplZLM5KJaMjh0ovy9GRh7t2x7M91UXnzOLCpJ+qXOxX+Dto50Po9KKWiGrntRpSq3LZhiEloh912yUc1TTuKtaNW3rN0HA8WyBTd88Iv1K20M6HM2tGY2Tf64SFLebEY1sMR6ckGz2UC4U677Cb+nHusJ27B2KZqNWD56KzGd1nhCejEP5m2vlwmhrrvAU0UaFR/mmL200zk7mJRJU4Orh8/pzxBwJK5WyPqQxz1fIO9szJDlW52O/Vf5x2PhK9IkdZTaPSvjOWtpuOtgYvdQDJGdnPmXlkJU45caVy1EfPWzWTi4Tww3+NyANzZoZftVOOJnNPW9JmFi0kxZOEUb12vJw/Qb6+RFypHLHmgjlcqGzxRBTC10HmO2nrI1Fqx6ukiRileDQR19bCkYlx0D8w6k3eK4VTP8nd1N0zElvNPWWYmWOnc3HowheP0d7jo8VYYS/IGg+NKpcva/cmCSG6Ub1SOGrzjvbJr7lSOH96ojuWn1N945LzGd1njE3V/kOEHzBakBXX6tiFVj5n2tF+qx3tU74ZDpozGRwctde5wSyY1zTpqL7Enzb3xLLASpy7cgYTtdljQ5TCf5T2nqRBC9Hn88eO6LTl7ZITWr0zUknzBIfq6hsb6syC+c2mrbWyW+fJHX2x5e2Vxlm9YjoXLns8EqXw19Pek6N8/tzZjbH+DEfZ779yeYeX40f6tTFoRV+alNWq2foK75rdewbNzphW0+rBz0RtZqnawdUIf51BIRXdcBrpx40Wa730DCt+KyuqefyLXrn6OTMavUlZje4rRZO0m7b0xPazK5XDitpMMuocHJnwuwwLsCoirkncsaiEU+J/yell4ueRXZHoF85vqjh9Uy77dRsPxPbzk8rJNE84B0cmfPEw7V4ZGuUnQfpHiL+U6kH8B1GJpVI31Yq+XPZxLK4qvVle9uq5XMzs8lAt/7gQxzdF+skQ/8teNN37VVVFea3q0eeW6DXBraobpW6qEb2Q5Ddt7YlN9kIlmFTlZJqaBtvVJvnup939oXLNgcFRG8kyq0b6igPdw94EY+f+Ia/0sC7jCX9JXjl5yT2IvZAk+fUbu82BnuHYPpPSOFpkBZnmvlr+cd1oBZuxbNp1xB/puJy9Nbwh5HY0uXvPQOKkP5bn9w6a52w83znoSTEr8tcDV5Wqba313mIpP5OwSZe9Kojeffkx3GQZV4iN2Tb2lf/h0gXhj/D1DVX8fzrXoHJUoz9/TpN5oWswVjlMhUo6lfZpbi6Ynt5h09s3Ynr7R7yjHevrU3R3jBQnYCX25iZVTQUn+RLK2WsVbVwLq4RSOJeTt88DG8bK3i+1vMv+HuFXJ/1SuWZSpd/ZNWT27hvy6s01Ei5tHSCpKUqpKe35XkjQO15J8Pq5Jfj21oI3mq8P6WeMe4K2hPL2lGDmgrW1foFahX8l16A6kir9ctmPN5IsnxCU/Put/Ie8MsZR7y1AD4CgR9HjIbFL8Po5VVnT3GQjZMEf9oq7f9j8aXN37LJXvT15+9zw+ziFfzftX7v0NRLd0zmYeNlPlEpoaT5SxNprpm9gxMv99/SOeA8AvRFIjvX1lT8M9BCR1FXhVErN6IGidNP09kLV1TS1ohW0cS6qKiHRs8d9rrgrTuFvVN+3MZ/rUD2SmVIje14YNCMxnmbiV/YTISmXql/ErAnW/wyrHHKcvLeEnuSyQu2NE9d2CeVokpZdMHOFXFvzxpW1Jv5+Y+ONXIvaaGspmAZ7A2ukH0cFT1Cy94O+V1wj9Grwtjje3BPbRmhj36w0SUu9fa74TRBfpNYecxfXIRi04ZoqeLyDTDIu+7ShfP196/YnRvZXXDqfSdr8EYhra+01v+A6BIfSGdpls+tAwZNL2CkeZD8123b1x3bo+HhcdPYsL50DuePXSRC+DjXXZj4ncz2CQ0fmaSQXZooH2U9O/8CIl8JJUhXVmvPneMdZQu7YYWo49OSwQWUAX+NnXI/gUYrnmLlNgSz7R/b+0GHjDz56IFGy17YJyD633B5YFiGAr/FTrkd4KFd7zNzmwI5NRPYTU1xI1e0dNh53fX05Ev1F58ziAuWXXwb1hardS6ecVhsv2OAE7ZDpOjBcU24f2Y+P5K5RfZJy9eWyX0P5ZZ7Ra+Y8U9y7bFyi2EunnF5TLBm6mGsTLsrtq26/mr14kP34aBHVk9uTNaJH9lDGvZPJ3i9BJYh/hvCjobQXj1I9WqylFa3I3j8qtdTe9XFueobsoQJ+EuQXCyKlI04xAc0igz8kLKV5JhI/sj9S9Nt29SWiph7ZQyXdwUxxaHnUKR2hJb8653Yx1ydaivvZNHni3989bHr6hpH9OCh1s/v5gUSLHtnDGJ6cSvZ+CbLm7z9s/B3XKE7xF8zQcIMntS1P9XnCV3lnXlFefvfzg2bXs/2JTd0ge5iE7wX9BRsC/uEQfszokBJtV/ybtZ2e5LQqc+G8ZtPelp9hvsord1rJa44jiZOx46E6e0ovIWzhB5XD976Wje02juU6xYfSFrf9cPcRI1qN/hdY8R81q8HbkjlraGXs8y8MpWY0Xw4raGEcnrJxvI0pBR1HDt+4H+y7Nq7jWiVL9kJ/pgVFT+4obsk8b05xFW+aR/4ayevc3b2dyT4yciL0ENbeOMgexuG7lcjedwYg4K/3TYSfPNmPRXI80NN7UDoq8VTM7KhP9Ohfo/jO/cXFZ15lUspG8mNlr10v2QgNJnFp4ASZ0imhDdWo1kmo7CsRUXtrvR351x98A2ioj37iV7l3jeD1cJLcu3uHUy34ciR57WfPFscwAap4XFLpX44rpVPiGzb+iWuWPtmL0kHl2qlze6mTWOHrAaCHgd4AvIog9yYwo6P6/fs1Yu/rH/XkLrEPu1+7baRlstUvOpZQJ1VxeAlM4dBQCGOEv8wEcBQXRC/7IJhs1FoU/Ehur5cOHOcMWqgALWTdmJYRvn5Q7f9wFtctX7IXSV/YFAcazWtUr9E9wBT83o/s/RJWEvHLCD9/socjIV8PVbgzNMJI6YjpNp62wZAG2ecWFlOBT3psHGOjy88/8pPSCWvmSD/w97l+yD6PKIVzmR3VI3vwyff9yt4vYb5n3mTjCq4hss8TJyxo8WRPFQ5UwRfC/gZhCv8eU9zpbTnXEdnnYVSvKhylcQCqQK78bZqFLz5v43NcS2Sf9VH9mgvmMDELtXBTFN8krEnbEh029K/ZLATZM6oHGJ8DNjT1ur+afxx3HX45+gAqM3o/1xTZZwnV1GtSllE9BMCXq5V90kb4QvvqaCEBs1jIPvVI8ErfKI0DEAC6ybU7weZqv0CSRvjGfZAf2Xgd1xbZpxWlb1Yt72BrBAiaH9Uie79E9T56I8JH9mlF+9Vr33pKLSEkN0ZGVMK/08b9NlZyfZF9WqD6BkLmAefGzAlffMzGt7nGyD4Noj931Qzy9BA2/yfqbxil8HUgr3JVHI6C7BE95J3NJoRDypMk/BH3RPsi1xrZI3pgdG8iv/GjKMssRwd46gjE45E9so8bTcauWNaO6CFqdJicjjAcCOKLJa0ssxx9wH8xOd9uAdnHhyptViybZlav6GAyFuLiX4KSfdJH+KVRvvJXxyF7iAodRLJ6eYdZemIb5ZUQJ0/ZODlI4Sd5hF8a5X/UFDdWQ/YQ6mhegpfoJXyABPDPcY3u4xrhi0YbG9yTLjds3NJj1m/s9n6F8NA+N0sXtXo5eoAEscUUDygPVPh+RvhxCV+81cZtebzqOuhb0l9n5a9RPwQneVI2kGDebuNrQX/RtAhfd+UfbZyR5x6A/JE85IJHbJxpQijFTIvwxSWmuHkQWJTb32Tlv+3pfu9Xcv2Hozy8SiiPX9DsyR4gRayx8eMwvnCahC9+aeNC+sORaMS/bVef2b6r3/s1bw8AlU2esLDFnHBMs/crZZSQUn5l45VhffG0CV+vOQ8a9suv+AGwe8+g9/sspYCUkpk/p8kbvZdG8qRpIANolKZNIx9KgvCTMGRSHv8rNt5J35gciXBseaEeAPu6hkzn/iHvTUC/al4gyUjmM6Y3mBnT6r2R+0w7cmf0DhnlK2HK3i9JGOGLo03xVCwOBw3wbaBvYMRs29nn/fez9q2glBLSQyLskXrpAdXcVFcUuhW8/pxRO+QInVWrMsydYX6TtI3wxTM2brDxcfpIcG8DpdF0JQ+GCf+fe0iUpD0ejNABxuWGsGWf1hG+0GKsde6JCACQZh6zscLGYNjfyM8IP0nv12qYD9BPACADfCAK2fslaQnVX9j4Fn0FAFLMt5zLEkcSZ9Cut9FJnwGAFLLPOSyRJFH4T9v4B/oNAKSQDzmHIXwffMHGvfQdAEgR9zp3JZakCl+1gO+y0UcfAoAU0O+clej9T5K8CkZlTf+TfgQAKeAG56xEk/Rlj1qI9QB9CQASjBz1sTT8oEkXvjaFeYchtQMAyaTPOWooDT9sGjY20cEB/0i/AoAE8o/OUakgLTtZ3WjjDvoWACSIO5ybUkNahK+Zb22fzIIsAEgCnc5JqTqVKE171W6zcQ39DAASwDXOSakibZuTa4+KW+hrABAjXzQp3fMrjadRaBe6DfQ5AIgBuee6tP7waRR+j403ul8BAHBPhoUvVAb1XvofAETIe02KSjCzJHzxVRs30wcBIAJuds5JNWk/UVr5fLZeAIAwecBk5DS+tAtfy5r/i43n6JMAEAJyy381GdnepZCBz/CUjctsDNA3ASBABpxbdmTlAxUy8jnusvG39E8ACJAPOrdkhkKGPstnbXyePgoAASCXfCZrH6qQsc/zfhu301cBoAZ+6VySObIm/GEbl9tYT58FgCqQOy5zLkH4KWCfKc6qU7kDAH6QM17vHJJJChn9XE/YuDjLFw4AAh8oXmJjc5Y/ZCHDn+1h97SmXBMAJmPAuWJt1j9oIeOf79c23mVjlD4NAOMw6hzx6zx82EIOPuPXbVxPvwaAcbjeOSIXFHLyOT9l4wb6NgCUcYNzQ24o5OizftjG/6WPA4BzwYfz9qELOfu8OqnmC/R1gFxzs0nxqVUIv3I0QaNDDL5EnwfIJbr3rzE5LeQo5PAz60K/x8ZX6PsAueIr7t7PbdVeIaefW8umr7RxK/cAQC641d3zw3luhEKOP7su/FWGnD5A1vmCu9eH894QhZx//lJOn+odgGzyaXePs/gS4R+Uvs6r/F80BUCm0D19LbJH+OPxT6ZYqkXnAEj/IO56d08Dwp8Qrbp7p41BmgIglQy6e/hGmgLhV4JKt9bYOEBTAKQK3bOXGkquEb5Pfm7jz2w8Q1MApIJn3D37M5oC4VfDgzbOtvEoTQGQaB519+qDNAXCr4UtNs6x8QuaAiCR/MLdo1toCoQfBDr67LU2bqIpABLFTe7e5ChThB8oQ6a4eONvDBU8AHGje/B97p4cojkQflh8zsaFNp6lKQBiQffeK218lqZA+FFwt42VNu6jKQAi5UF3791FUyD8KNlh4zxTPEgBAMJH99o57t4DhB85fTautvE2Gz00B0Ao6N76K3ev9dEcCD9ubrPxMhsbaAqAQNng7q2v0hQIP0k8Yoq5xVtoCoBAuMXdU4/QFAg/qa+eOmThL2100hwAVdHp7qGrDKlShJ8Cvm3jRTbuoCkAfHGHu3e+TVMg/DSxzRRrhT9omGgCmIo+d6+80t07gPBTx4iNTxhq9gEm434bq9y9MkJzIPy0o538zrLxtza6aQ4Aj243qn+5YWIW4WeMYRuftLHcFPfaB8gzP3f3wifcvQEIP5NoC9dX23i7jT00B+SMPa7vv9qwnTHCzxFfs3GqjW/QFJATvuH6/NdoCoSfR56z8VYbrzKs0oXsssH18be6Pg8IP9foxB7VHv83w8HpkB3Ul//O9W1OjEP4UMaAjX+zsdTGlwzlaZBeRlwfVl/+uOvbgPBhHJ62caUp1u7fSXNAyrjT9d0rXV8GhA8V8JCN8238hY31NAckHPXR17o++xDNgfChOn5qijlQ7bn/BM0BCeMJ1zfVR/+T5kD4UDvKiWrP/dNM8dBmTvyBuNnh+uJprm8y54TwIWA0+XWTjcXuZttOk0DEbHd9b7Hri0zIInyISPxLbLzHxkaaBEJms+trSxA9wof4xP9F91r9Oht30yQQMA/YeKONZa6vIXqEDzGj/OkPbZxnitvM/ruNIZoFauhPPzLFvelVYvkdQ44e4UMi0d7ibzbFHOuNNvbTJFAh6iufsXGKjUtt/IomyR51o6OjU/6lTbtoqJTS4R4AV7nRGsBYdDiPDgzX5mZs7ZFCli5A+HAkZ9p4tynWTc+gOXLNPlPctVKi/yPNgfARfnZptXG5k/+5NEeuuNtJXnn5XpoD4SP8fKF8rVI+bzHFvD9kD5VUKl3zTRuP0RwIH+GDWO3E/wYbx9IcqeYpG993ov8DzYHwET5M2CdsvMzG6538T6JJUsGTNr7nRC/Jj9IkCB/hg19Ot3GJi7Ns1NMkiUCHf99r48cuHqVJED7ChyCZY+OisjiOJokUpWp0etTtLvbQJIDwISo06XuhjXNcHE+TBIo2K7vHhRZCMekKCB8Sw0JT3OJBqZ+zTXGfdFJAlaEUzcM2fmeKqZq7bOykWQDhQ1rQSl9NAL/Uxgoby91bQWPO22XQjdZ1UtQ6U9ykTBOtbIUBCB8yRZONU538FVoBfIZ7O8giGqU/YoorWte72GDYeRJiEH4DzQURM+DkN3ZJv1YAn2hjUVmcVPb7OQn9PJo43eriybLfK7YYVrRCgkD4kBQkxj+5GI9p7i1gro35No62cZSNmWOiwz08WtzvS318ujlyPkF58y73e20prZRKn/tZ9PvOMfG8jWds7LbxnBu9s+EYIHyAgJFYNxpO+AKomopy+AAAkH44AAUAAOEDAADCBwAAhA8AAAgfAAAQPgAAIHwAAED4AACA8AEAAOEDAOST/y/AAIYJhszBd/XvAAAAAElFTkSuQmCC", - "loginImgUrl": "data:image/png;base64,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" - }, - "componentName": "Block", - "css": ".home-content {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: calc(100vh - 262px);\r\n \r\n}\r\n.home-content .btn {\r\n margin-top: 24px;\r\n \r\n }\r\n .home-content .btn button {\r\n border: none;\r\n border-radius: 30px;\r\n background: #5e7ce0;\r\n \r\n font-size: 14px;\r\n color: #fff;\r\n \r\n cursor: pointer;\r\n }\r\n\r\n .home-content .text {\r\n font-size: 18px;\r\n }\r\n\r\n .home-content .account {\r\n margin-top: 16px;\r\n \r\n \r\n }\r\n\r\n .home-content .account .sub-text {\r\n color: #575d6c;\r\n }\r\n .home-content .account .login {\r\n color: #1890ff;\r\n cursor: pointer;\r\n }\r\n .home-content .logo img{\r\n border-radius: 50%;\r\n overflow: hidden;\r\n }", - "props": {}, - "children": [ - { - "componentName": "div", - "props": { - "className": "home", - "style": "height: 100vh; display: flex;" - }, - "id": "357534ab", - "children": [ - { - "componentName": "TinyRow", - "props": { - "align": "middle", - "flex": true, - "style": "" - }, - "children": [ - { - "componentName": "TinyCol", - "props": { - "span": 6, - "style": "text-align: center; display: flex; justify-content: center;" - }, - "id": "f01b66ea", - "children": [ - { - "componentName": "div", - "props": { - "style": "width: 90%; height: 50%;" - }, - "id": "8197d016", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 100%; height: 100%;", - "src": { - "type": "JSExpression", - "value": "this.state.loginImgUrl" - } - }, - "id": "471e30f3" - } - ] - } - ] - }, - { - "componentName": "TinyCol", - "props": { - "span": "6", - "style": "text-align: center;" - }, - "id": "781d5b46", - "children": [ - { - "componentName": "div", - "props": { - "className": "home-content", - "style": "font-size: 14px;" - }, - "id": "08638b8a", - "children": [ - { - "componentName": "div", - "props": { - "className": "text" - }, - "id": "18712ee2", - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 16px;" - }, - "id": "07e6794c", - "children": [ - { - "componentName": "div", - "props": { - "className": "logo" - }, - "id": "07cad264", - "children": [ - { - "componentName": "Img", - "props": { - "style": "width: 105px; height: 105px; border-radius: 100px;", - "src": { - "type": "JSExpression", - "value": "this.state.logoUrl" - } - }, - "id": "f4489e27" - } - ] - }, - { - "componentName": "Text", - "props": { - "text": "TinyLowCode 低代码平台", - "style": "display: block; font-size: 28px; margin-top: 12px; margin-bottom: 12px; font-weight: bold;", - "ref": "", - "className": "title" - }, - "id": "e82108ce" - }, - { - "componentName": "Text", - "props": { - "text": "致力于通过友好的用户交互提升业务的开发效率", - "style": "display: block; margin-bottom: 12px;" - }, - "id": "65a2f1ad" - }, - { - "componentName": "Text", - "props": { - "text": "欢迎一起来解锁~~", - "style": "margin-top: 12px;" - }, - "id": "bb879abb" - } - ] - }, - { - "componentName": "div", - "props": { - "className": "btn" - }, - "id": "44b2bcbd", - "children": [ - { - "componentName": "TinyButton", - "props": { - "text": "立即体验", - "round": true, - "type": "primary", - "style": "margin-top: 40px;" - }, - "id": "9580c5e7" - }, - { - "componentName": "div", - "props": { - "className": "account" - }, - "id": "6a8ffa3e", - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 14px; margin-top: 4px;" - }, - "id": "bfc6eb6c", - "children": [ - { - "componentName": "Text", - "props": { - "text": "已有团队?", - "style": "color: #777777;" - }, - "id": "3d993264" - }, - { - "componentName": "Text", - "props": { - "text": "立即进入", - "style": "color: #5e7ce0;", - "onClick": { - "type": "JSExpression", - "value": "this.handleClick(event)" - } - }, - "id": "21390118" - } - ] - } - ] - } - ] - } - ] - } - ] - } - ] - } - ], - "id": "4545fea2" - } - ] - } - ], - "methods": { - "handleClick": { - "type": "JSFunction", - "value": "function (event) {this.emit('goto-home', event)\n}" - } - }, - "fileName": "PortalHome", - "meta": { - "id": 1722, - "parentId": "0", - "group": "staticPages", - "title": null, - "occupier": null, - "isHome": false, - "description": "", - "router": "/", - "rootElement": "div", - "creator": "开发者", - "gmt_create": "2022-06-08 03:25:51", - "gmt_modified": "2022-06-09 05:19:09" - }, - "id": 1722, - "schema": { - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [] - } - ], - "events": { - "onGotoHome": { - "label": { - "zh_CN": "点击立即进入触发方法" - }, - "description": { - "zh_CN": "点击立即进入触发方法" - }, - "type": "event", - "functionInfo": { - "params": [], - "returns": {} - }, - "defaultValue": "", - "linked": { - "id": "21390118", - "componentName": "Text", - "event": "onClick" - } - } - }, - "slots": {} - }, - "dataSource": {}, - "i18n": {} - }, - "created_at": "2022-06-13T07:56:51.000Z", - "updated_at": "2023-01-13T08:12:51.000Z", - "assets": { - "material": [], - "scripts": [ - "http://localhost:9090/assets/js/989web-components.es.js", - "http://localhost:9090/assets/js/989web-components.umd.js" - ], - "styles": [] - }, - "createdBy": 86, - "description": null, - "tags": "", - "current_history": 1655, - "screenshot": "", - "path": "common/components/home", - "occupier": null, - "isOfficial": true, - "public": 1, - "isDefault": null, - "tiny_reserved": false, - "author": null, - "name_cn": null, - "created_app": null, - "content_blocks": null, - "current_version": "x", - "is_published": true - }, - { - "id": 1005, - "label": "PortalBlock", - "framework": "Vue", - "content": { - "state": {}, - "methods": {}, - "componentName": "Block", - "fileName": "PortalBlock", - "css": "", - "props": {}, - "children": [ - { - "componentName": "div", - "props": { - "style": "font-size: 18px; height: 40px; border-bottom: 1px solid rgb(223, 225, 230); margin-top: 20px;" - }, - "id": "d38cea57", - "children": [ - { - "componentName": "Icon", - "props": { - "name": "IconChevronLeft" - }, - "id": "86c6e6b0" - }, - { - "componentName": "Text", - "props": { - "text": "编辑物料资产包 | ", - "style": "margin-left: 10px; font-weight: bold;" - }, - "id": "38d9fbc8" - }, - { - "componentName": "Text", - "props": { - "text": { - "type": "JSExpression", - "value": "this.props.blockName" - }, - "style": "margin-left: 10px; font-weight: bold;" - }, - "id": "6cd76396" - } - ] - } - ], - "schema": { - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [ - { - "property": "blockName", - "type": "String", - "defaultValue": "MT0526-React 1.0", - "label": { - "text": { - "zh_CN": "区块名称" - } - }, - "cols": 12, - "rules": [], - "handle": { - "getter": "", - "setter": "" - }, - "hidden": false, - "required": true, - "readOnly": false, - "disabled": false, - "widget": { - "component": "MetaInput", - "props": { - "modelValue": "MT0526-React 1.0" - } - } - } - ] - } - ], - "events": {}, - "slots": {} - }, - "dataSource": {} - }, - "created_at": "2022-06-28T08:59:54.000Z", - "updated_at": "2023-01-13T08:20:09.000Z", - "assets": { - "material": [], - "scripts": [ - "http://localhost:9090/assets/js/1005web-components.es.js", - "http://localhost:9090/assets/js/1005web-components.umd.js" - ], - "styles": [] - }, - "createdBy": { - "id": 86, - "username": "开发者", - "resetPasswordToken": "developer" - }, - "description": null, - "tags": null, - "current_history": 1665, - "screenshot": "", - "path": "portal", - "occupier": { - "id": 86, - "username": "开发者", - "resetPasswordToken": "developer" - }, - "isOfficial": null, - "public": 1, - "isDefault": null, - "tiny_reserved": false, - "author": null, - "name_cn": null, - "created_app": null, - "content_blocks": null, - "categories": [], - "public_scope_tenants": [], - "histories_length": 1, - "is_published": true - } - ], - "locale": "zh-cn" -} diff --git a/mockServer/src/routes/main-routes.js b/mockServer/src/routes/main-routes.js index e6f6ef4499..0a66a8dfb7 100644 --- a/mockServer/src/routes/main-routes.js +++ b/mockServer/src/routes/main-routes.js @@ -1,31 +1,24 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import KoaRouter from 'koa-router' import * as glob from 'glob' import path from 'path' import fs from 'fs-extra' -import Schema2CodeServcice from '../services/schema2code' -import PageService from '../services/pages' -import AppService from '../services/app' -import BlockService from '../services/block' -import SourceService from '../services/source' +import MockService from '../services/mockService' +import { getResponseData } from '../tool/Common' const router = new KoaRouter() -const schema2codeService = new Schema2CodeServcice() -export const pageService = new PageService() -export const appService = new AppService() -export const blockService = new BlockService() -export const sourceService = new SourceService() +export const mockService = new MockService() const getJsonPathData = (jpath, method = 'get') => { const usefulPath = jpath.split(`${method}${path.sep}`)[1] const apipath = usefulPath.split(path.sep) @@ -63,50 +56,170 @@ glob.globSync(`${mockPath}/post/**/*.json`).forEach((jpath) => { }) router.get('/app-center/api/apps/canvas/lock', async (ctx) => { - ctx.body = await appService.lock(ctx.request.query) + ctx.body = await mockService.appService.lock(ctx.request.query) }) router.post('/app-center/api/schema2code', (ctx) => { const { pageInfo } = ctx.request.body - ctx.body = schema2codeService.schema2code(pageInfo) + ctx.body = mockService.schema2codeService.schema2code(pageInfo) }) router.get('/app-center/api/preview/metadata', (ctx) => { - ctx.body = appService.getAppPreviewMetaData() + ctx.body = mockService.appService.getAppPreviewMetaData() }) router.post('/app-center/api/pages/create', async (ctx) => { - ctx.body = await pageService.create(ctx.request.body) + ctx.body = await mockService.pageService.create(ctx.request.body) }) router.post('/app-center/api/pages/update/:id', async (ctx) => { const { id } = ctx.params const { body } = ctx.request - ctx.body = await pageService.update(id, body) + ctx.body = await mockService.pageService.update(id, body) }) router.get('/app-center/api/pages/list/:appId', async (ctx) => { const { appId } = ctx.params - ctx.body = await pageService.list(appId) + ctx.body = await mockService.pageService.list(appId) }) router.get('/app-center/api/pages/detail/:id', async (ctx) => { const { id } = ctx.params - ctx.body = await pageService.detail(id) + ctx.body = await mockService.pageService.detail(id) }) router.get('/app-center/api/pages/delete/:id', async (ctx) => { const { id } = ctx.params - ctx.body = await pageService.delete(id) + ctx.body = await mockService.pageService.delete(id) }) -router.get('/material-center/api/block', (ctx)=> { - ctx.body = blockService.find(ctx.request.query) +router.get('/material-center/api/block/detail/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockService.detail(id) +}) + +router.get('/material-center/api/blocks', async (ctx) => { + const { appId } = ctx.params + ctx.body = await mockService.blockService.list(appId) +}) + +router.post('/material-center/api/block/create', async (ctx) => { + const result = mockService.blockService.create(ctx.request.body) + const categoriesId = ctx.request.body.categories[0] + const _id = result.id + await mockService.blockCategoryService.update(categoriesId, { _id }) + ctx.body = getResponseData(result) +}) + +router.post('/material-center/api/block/update/:id', async (ctx) => { + const { id } = ctx.params + const { body } = ctx.request + ctx.body = await mockService.blockService.update(id, body) +}) + +router.get('/material-center/api/block/delete/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockService.delete(id) +}) + +router.post('/material-center/api/block-groups/create', async (ctx) => { + ctx.body = await mockService.blockGroupService.create(ctx.request.body) +}) + +router.post('/material-center/api/block-groups/update/:id', async (ctx) => { + const { id } = ctx.params + const { body } = ctx.request + ctx.body = await mockService.blockGroupService.update(id, body) +}) + +router.get('/material-center/api/block-groups/delete/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockGroupService.delete(id) +}) + +router.get('/material-center/api/block-groups', async (ctx) => { + const result = await mockService.blockGroupService.find(ctx.query) + let blockGroup + if (result.data.length > 1) { + blockGroup = await Promise.all( + result.data.map(async (group) => { + group.blocks = await Promise.all( + group.blocks.map(async (block) => { + const blockData = await mockService.blockService.detail(block.id) + return blockData + }) + ) + return group + }) + ) + ctx.body = getResponseData(blockGroup) + } else { + blockGroup = result.data[0] + const blocks = await Promise.all( + blockGroup.blocks.map(async (item) => { + const blockData = await mockService.blockService.detail(item) + return blockData + }) + ) + + blockGroup.blocks = blocks + ctx.body = getResponseData([blockGroup]) + } +}) + +router.post('/material-center/api/block-categories', async (ctx) => { + ctx.body = await mockService.blockCategoryService.create(ctx.request.body) +}) + +router.put('/material-center/api/block-categories/:id', async (ctx) => { + const { id } = ctx.params + const { body } = ctx.request + ctx.body = await mockService.blockCategoryService.update(id, body) +}) + +router.delete('/material-center/api/block-categories/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockCategoryService.delete(id) +}) + +router.get('/material-center/api/block-categories', async (ctx) => { + const result = await mockService.blockCategoryService.find(ctx.query) + const blockCategories = await Promise.all( + result.data.map(async (group) => { + const blocks = await Promise.all( + group.blocks.map(async (block) => { + const blockData = await mockService.blockService.detail(block) + return blockData + }) + ) + group.blocks = blocks + return group + }) + ) + ctx.body = getResponseData(blockCategories) }) router.get('/app-center/api/sources/detail/:id', async (ctx) => { const { id } = ctx.params - ctx.body = await sourceService.detail(id) + ctx.body = await mockService.sourceService.detail(id) +}) + +router.post('/material-center/api/block/deploy', async (ctx) => { + ctx.body = await mockService.blockBuildService.build(ctx.request.body) +}) + +router.get('/material-center/api/tasks/:id', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.taskService.detail(id) +}) + +router.get('/block-history', async (ctx) => { + const { id } = ctx.params + ctx.body = await mockService.blockHistoryService.find(id) +}) + +router.post('block-history/create', async (ctx) => { + ctx.body = await mockService.blockHistoryService.create(ctx.request.body) }) export default router diff --git a/mockServer/src/services/block.js b/mockServer/src/services/block.js index bde0266711..c8071fe106 100644 --- a/mockServer/src/services/block.js +++ b/mockServer/src/services/block.js @@ -1,20 +1,93 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ - + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import path from 'path' +import DateStore from '@seald-io/nedb' import { getResponseData } from '../tool/Common' -import blocks from './blocks.json' export default class BlockService { - find({label}) { - const blockData = blocks[label] || {} - return getResponseData(blockData) + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/blocks.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'label', + unique: true + }) + + this.userInfo = { + id: 86, + username: '开发者', + email: 'developer@lowcode.com', + resetPasswordToken: 'developer', + confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998', + is_admin: true + } + + this.blockModel = { + id: '', + label: '', + name_cn: '', + framework: [], + content: {}, + description: '', + path: '', + screenshot: '', + created_app: '', + tags: '', + categories: [], + occupier: { + id: 86, + username: '开发者', + resetPasswordToken: 'developer' + }, + isDefault: null, + isOfficial: null + } + } + + async create(params) { + const blockData = { ...this.blockModel, ...params } + const result = await this.db.insertAsync(blockData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return result + } + + async update(id, params) { + await this.db.updateAsync({ _id: id }, { $set: params }) + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async detail(blockId) { + const result = await this.db.findOneAsync({ _id: blockId }) + return result + } + + async delete(blockId) { + const result = await this.db.findOneAsync({ _id: blockId }) + await this.db.removeAsync({ _id: blockId }) + return getResponseData(result) + } + + async list(appId) { + const result = await this.db.findAsync() + return getResponseData(result) + } + + async find(params) { + const result = await this.db.findAsync(params) + return result } } diff --git a/mockServer/src/services/blockCategory.js b/mockServer/src/services/blockCategory.js new file mode 100644 index 0000000000..fcf5240f6e --- /dev/null +++ b/mockServer/src/services/blockCategory.js @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import path from 'path' +import DateStore from '@seald-io/nedb' +import { getResponseData } from '../tool/Common' +import appinfo from './appinfo.json' +export default class BlockCategoryService { + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/blockCategories.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'name', + unique: true + }) + + this.blockCategoriesModel = { + id: '', + app: '', + name: '', + desc: '', + blocks: [] + } + } + + async create(params) { + const blockCategoriesData = { ...this.blockCategoriesModel, ...params } + blockCategoriesData.app = appinfo.app + const result = await this.db.insertAsync(blockCategoriesData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return getResponseData(result) + } + + async update(id, params) { + if (params?._id) { + const categories = await this.db.findOneAsync({ _id: id }) + categories.blocks.push(params._id) + await this.db.updateAsync({ _id: id }, { $set: categories }) + return + } + params.app = appinfo.app + await this.db.updateAsync({ _id: id }, { $set: params }) + + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async find(params) { + const result = await this.db.findAsync() + return getResponseData(result) + } + + async delete(id) { + const result = await this.db.findOneAsync({ _id: id }) + await this.db.removeAsync({ _id: id }) + return getResponseData(result) + } + + async list(appId) { + const result = await this.db.findAsync() + return getResponseData(result) + } +} diff --git a/mockServer/src/services/blockGroup.js b/mockServer/src/services/blockGroup.js new file mode 100644 index 0000000000..01cd868f60 --- /dev/null +++ b/mockServer/src/services/blockGroup.js @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import path from 'path' +import DateStore from '@seald-io/nedb' +import { getResponseData } from '../tool/Common' +import appinfo from './appinfo.json' +export default class BlockGroupService { + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/blockGroups.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'name', + unique: true + }) + + this.blockGroupModel = { + id: '', + app: '', + name: '', + desc: '', + blocks: [] + } + } + + async create(params) { + const blockGroupData = { ...this.blockGroupModel, ...params } + blockGroupData.app = appinfo.app + const result = await this.db.insertAsync(blockGroupData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return getResponseData(result) + } + + async update(id, params) { + params.app = appinfo.app + await this.db.updateAsync({ _id: id }, { $set: params }) + + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async find(params) { + if (params?.app || !params?.id) { + const result = await this.db.findAsync() + return getResponseData(result) + } + const { id } = params + const blockGroup = await this.db.findOneAsync({ _id: id }) + return getResponseData([blockGroup]) + } + + async delete(blockGroupId) { + const result = await this.db.findOneAsync({ _id: blockGroupId }) + await this.db.removeAsync({ _id: blockGroupId }) + return getResponseData(result) + } + + async list(appId) { + const result = await this.db.findAsync() + return getResponseData(result) + } +} diff --git a/mockServer/src/services/mockService.js b/mockServer/src/services/mockService.js new file mode 100644 index 0000000000..5f05fd389b --- /dev/null +++ b/mockServer/src/services/mockService.js @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import PageService from './pages' +import AppService from './app' +import BlockService from './block' +import SourceService from './source' +import BlockGroupService from './blockGroup' +import BlockCategoryService from './blockCategory' +import Schema2CodeServcice from './schema2code' +export default class MockService { + schema2codeService + pageService + appService + blockService + sourceService + blockGroupService + blockCategoryService + + constructor() { + this.schema2codeService = new Schema2CodeServcice() + this.pageService = new PageService() + this.appService = new AppService() + this.blockService = new BlockService() + this.sourceService = new SourceService() + this.blockGroupService = new BlockGroupService() + this.blockCategoryService = new BlockCategoryService() + } +} diff --git a/package.json b/package.json index a58a4ade10..7829e7b220 100644 --- a/package.json +++ b/package.json @@ -1,105 +1,29 @@ { - "name": "@opentiny/tiny-engine", - "version": "1.0.0", - "publishConfig": { - "access": "public" - }, - "description": "TinyEngine enables developers to customize low-code platforms, build low-bit platforms online in real time, and support secondary development or integration of low-bit platform capabilities.", - "homepage": "https://opentiny.design/tiny-engine", - "keywords": [ - "vue", - "vue3", - "frontend", - "opentiny", - "lowcode", - "tiny-engine" - ], + "name": "tiny-engine", + "private": true, "scripts": { - "dev": "cross-env NODE_OPTIONS=--max-old-space-size=10240 VITE_API_MOCK=mock vite", - "serve": "cross-env NODE_OPTIONS=--max-old-space-size=10240 vite", - "build:plugin": "lerna run build --scope @opentiny/tiny-engine-*", - "build:alpha": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode alpha", - "build:prod": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode prod", + "preinstall": "npx only-allow pnpm", + "dev": "concurrently 'pnpm:serve:backend' 'pnpm:serve:frontend'", + "dev:mock": "pnpm --filter @opentiny/tiny-engine dev", + "serve:frontend": "pnpm --filter @opentiny/tiny-engine serve", + "serve:backend": "pnpm --filter @opentiny/tiny-engine-mock dev", + "build:plugin": "pnpm --filter @opentiny/tiny-engine-* build", + "build:alpha": "pnpm --filter @opentiny/tiny-engine build:alpha", + "build:prod": "pnpm --filter @opentiny/tiny-engine build:prod", "buildComponentSchemas": "node scripts/buildComponentSchemas.js", - "preview": "vite preview", + "preview": "pnpm --filter @opentiny/tiny-engine preview", "lint": "eslint . --ext .js,.vue,.jsx --fix", "format": "prettier --write **/*{.vue,.js,.ts,.html,.json}", - "publish:core": "npm publish", - "publish:plugin": "lerna exec npm publish --scope @opentiny/tiny-engine-*", - "version": "lerna exec npm version ${version}", - "clean": "lerna clean", - "prepare": "node -e \"if(require('fs').existsSync('.git')){process.exit(1)}\" || husky install" - }, - "dependencies": { - "@babel/core": "7.18.13", - "@babel/generator": "7.18.13", - "@babel/parser": "7.18.13", - "@babel/traverse": "7.18.13", - "@opentiny/vue": "~3.9.0", - "@opentiny/vue-design-smb": "~3.9.0", - "@vue/babel-plugin-jsx": "1.1.1", - "@vue/repl": "^1.3.0", - "@vueuse/core": "^9.6.0", - "element-resize-detector": "^1.2.4", - "file-saver": "^2.0.5", - "html2canvas": "^1.4.1", - "jszip": "^3.10.1", - "monaco-editor": "0.33.0", - "prettier": "2.7.1", - "sortablejs": "^1.14.0", - "vue": "3.2.45", - "vue-clipboard3": "^2.0.0", - "vue-draggable-next": "2.1.0", - "vue-i18n": "9.2.2", - "xlsx": "^0.18.5" + "prepare": "node -e \"if(require('fs').existsSync('.git')){process.exit(1)}\" || husky install", + "pub:premajor": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version premajor --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", + "pub:preminor": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version preminor --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", + "pub:prepatch": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version prepatch --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes", + "pub:prerelease": "pnpm run build:plugin && pnpm run build:alpha && pnpm lerna version prerelease --preid beta --no-push --yes && lerna publish from-package --pre-dist-tag beta --yes" }, "devDependencies": { "@babel/eslint-parser": "^7.21.3", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "@opentiny/tiny-engine-canvas": "file:src/canvas", - "@opentiny/tiny-engine-common": "file:src/common", - "@opentiny/tiny-engine-controller": "file:src/controller", - "@opentiny/tiny-engine-http": "file:src/http", - "@opentiny/tiny-engine-plugin-block": "file:src/plugins/packages/block", - "@opentiny/tiny-engine-plugin-bridge": "file:src/plugins/packages/bridge", - "@opentiny/tiny-engine-plugin-data": "file:src/plugins/packages/data", - "@opentiny/tiny-engine-plugin-datasource": "file:src/plugins/packages/datasource", - "@opentiny/tiny-engine-plugin-help": "file:src/plugins/packages/help", - "@opentiny/tiny-engine-plugin-i18n": "file:src/plugins/packages/i18n", - "@opentiny/tiny-engine-plugin-materials": "file:src/plugins/packages/materials", - "@opentiny/tiny-engine-plugin-page": "file:src/plugins/packages/page", - "@opentiny/tiny-engine-plugin-schema": "file:src/plugins/packages/schema", - "@opentiny/tiny-engine-plugin-script": "file:src/plugins/packages/script", - "@opentiny/tiny-engine-plugin-tree": "file:src/plugins/packages/tree", - "@opentiny/tiny-engine-plugin-tutorial": "file:src/plugins/packages/tutorial", - "@opentiny/tiny-engine-plugin-robot": "file:src/plugins/packages/robot", - "@opentiny/tiny-engine-setting-design": "file:src/settings/packages/design", - "@opentiny/tiny-engine-setting-events": "file:src/settings/packages/events", - "@opentiny/tiny-engine-setting-props": "file:src/settings/packages/props", - "@opentiny/tiny-engine-setting-styles": "file:src/settings/packages/styles", - "@opentiny/tiny-engine-svgs": "file:src/svgs", - "@opentiny/tiny-engine-theme-dark": "file:src/theme/packages/dark", - "@opentiny/tiny-engine-theme-light": "file:src/theme/packages/light", - "@opentiny/tiny-engine-toolbar-breadcrumb": "file:src/toolbars/packages/breadcrumb", - "@opentiny/tiny-engine-toolbar-checkinout": "file:src/toolbars/packages/lock", - "@opentiny/tiny-engine-toolbar-clean": "file:src/toolbars/packages/clean", - "@opentiny/tiny-engine-toolbar-collaboration": "file:src/toolbars/packages/collaboration", - "@opentiny/tiny-engine-toolbar-fullscreen": "file:src/toolbars/packages/fullscreen", - "@opentiny/tiny-engine-toolbar-generate-vue": "file:src/toolbars/packages/generate-vue", - "@opentiny/tiny-engine-toolbar-lang": "file:src/toolbars/packages/lang", - "@opentiny/tiny-engine-toolbar-layout": "file:src/toolbars/packages/layout", - "@opentiny/tiny-engine-toolbar-logo": "file:src/toolbars/packages/logo", - "@opentiny/tiny-engine-toolbar-logout": "file:src/toolbars/packages/logout", - "@opentiny/tiny-engine-toolbar-media": "file:src/toolbars/packages/media", - "@opentiny/tiny-engine-toolbar-preview": "file:src/toolbars/packages/preview", - "@opentiny/tiny-engine-toolbar-redoundo": "file:src/toolbars/packages/redoundo", - "@opentiny/tiny-engine-toolbar-refresh": "file:src/toolbars/packages/refresh", - "@opentiny/tiny-engine-toolbar-save": "file:src/toolbars/packages/save", - "@opentiny/tiny-engine-toolbar-setting": "file:src/toolbars/packages/setting", - "@opentiny/tiny-engine-utils": "file:src/utils", - "@opentiny/tiny-engine-webcomponent-core": "file:src/webcomponent", - "@opentiny/tiny-engine-i18n-host": "file:src/i18n", "@types/node": "^18.0.0", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^1.3.2", @@ -110,7 +34,8 @@ "eslint-plugin-vue": "^8.0.0", "fs-extra": "^10.1.0", "husky": "^8.0.0", - "lerna": "^5.1.8", + "concurrently": "^8.2.0", + "lerna": "^7.2.0", "less": "^4.1.2", "lint-staged": "^13.2.0", "path": "^0.12.7", @@ -128,5 +53,9 @@ "> 1%", "last 2 versions", "not dead" - ] + ], + "engines": { + "node": ">=14", + "pnpm": ">=7" + } } diff --git a/src/canvas/.eslintrc.js b/packages/canvas/.eslintrc.js similarity index 100% rename from src/canvas/.eslintrc.js rename to packages/canvas/.eslintrc.js diff --git a/src/canvas/.gitignore b/packages/canvas/.gitignore similarity index 100% rename from src/canvas/.gitignore rename to packages/canvas/.gitignore diff --git a/src/canvas/README.md b/packages/canvas/README.md similarity index 100% rename from src/canvas/README.md rename to packages/canvas/README.md diff --git a/src/canvas/canvas.html b/packages/canvas/canvas.html similarity index 100% rename from src/canvas/canvas.html rename to packages/canvas/canvas.html diff --git a/src/canvas/index.html b/packages/canvas/index.html similarity index 100% rename from src/canvas/index.html rename to packages/canvas/index.html diff --git a/packages/canvas/package.json b/packages/canvas/package.json new file mode 100644 index 0000000000..f2081572d1 --- /dev/null +++ b/packages/canvas/package.json @@ -0,0 +1,39 @@ +{ + "name": "@opentiny/tiny-engine-canvas", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist" + ], + "dependencies": { + "@babel/core": "7.18.13", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-i18n-host": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/tiny-engine-webcomponent-core": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", + "@vue/babel-plugin-jsx": "1.1.1", + "@vue/shared": "^3.3.4", + "@vueuse/core": "^9.6.0", + "vue": "3.2.45", + "vue-i18n": "9.2.2" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^1.3.10", + "rollup-plugin-terser": "^7.0.2", + "vite": "^4.3.7" + } +} diff --git a/src/app/public/favicon.ico b/packages/canvas/public/favicon.ico similarity index 100% rename from src/app/public/favicon.ico rename to packages/canvas/public/favicon.ico diff --git a/src/canvas/src/Design.vue b/packages/canvas/src/Design.vue similarity index 100% rename from src/canvas/src/Design.vue rename to packages/canvas/src/Design.vue diff --git a/src/canvas/src/assets/logo.png b/packages/canvas/src/assets/logo.png similarity index 100% rename from src/canvas/src/assets/logo.png rename to packages/canvas/src/assets/logo.png diff --git a/src/canvas/src/canvas.js b/packages/canvas/src/canvas.js similarity index 100% rename from src/canvas/src/canvas.js rename to packages/canvas/src/canvas.js diff --git a/src/canvas/src/components/builtin/CanvasBox.vue b/packages/canvas/src/components/builtin/CanvasBox.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasBox.vue rename to packages/canvas/src/components/builtin/CanvasBox.vue diff --git a/src/canvas/src/components/builtin/CanvasCol.vue b/packages/canvas/src/components/builtin/CanvasCol.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasCol.vue rename to packages/canvas/src/components/builtin/CanvasCol.vue diff --git a/src/canvas/src/components/builtin/CanvasCollection.js b/packages/canvas/src/components/builtin/CanvasCollection.js similarity index 100% rename from src/canvas/src/components/builtin/CanvasCollection.js rename to packages/canvas/src/components/builtin/CanvasCollection.js diff --git a/src/canvas/src/components/builtin/CanvasCollection.vue b/packages/canvas/src/components/builtin/CanvasCollection.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasCollection.vue rename to packages/canvas/src/components/builtin/CanvasCollection.vue diff --git a/src/canvas/src/components/builtin/CanvasIcon.vue b/packages/canvas/src/components/builtin/CanvasIcon.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasIcon.vue rename to packages/canvas/src/components/builtin/CanvasIcon.vue diff --git a/src/canvas/src/components/builtin/CanvasImg.vue b/packages/canvas/src/components/builtin/CanvasImg.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasImg.vue rename to packages/canvas/src/components/builtin/CanvasImg.vue diff --git a/src/canvas/src/components/builtin/CanvasPlaceholder.vue b/packages/canvas/src/components/builtin/CanvasPlaceholder.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasPlaceholder.vue rename to packages/canvas/src/components/builtin/CanvasPlaceholder.vue diff --git a/src/canvas/src/components/builtin/CanvasRow.vue b/packages/canvas/src/components/builtin/CanvasRow.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasRow.vue rename to packages/canvas/src/components/builtin/CanvasRow.vue diff --git a/src/canvas/src/components/builtin/CanvasRowColContainer.vue b/packages/canvas/src/components/builtin/CanvasRowColContainer.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasRowColContainer.vue rename to packages/canvas/src/components/builtin/CanvasRowColContainer.vue diff --git a/src/canvas/src/components/builtin/CanvasSlot.vue b/packages/canvas/src/components/builtin/CanvasSlot.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasSlot.vue rename to packages/canvas/src/components/builtin/CanvasSlot.vue diff --git a/src/canvas/src/components/builtin/CanvasText.vue b/packages/canvas/src/components/builtin/CanvasText.vue similarity index 100% rename from src/canvas/src/components/builtin/CanvasText.vue rename to packages/canvas/src/components/builtin/CanvasText.vue diff --git a/src/canvas/src/components/builtin/builtin.json b/packages/canvas/src/components/builtin/builtin.json similarity index 100% rename from src/canvas/src/components/builtin/builtin.json rename to packages/canvas/src/components/builtin/builtin.json diff --git a/src/canvas/src/components/builtin/helper.js b/packages/canvas/src/components/builtin/helper.js similarity index 100% rename from src/canvas/src/components/builtin/helper.js rename to packages/canvas/src/components/builtin/helper.js diff --git a/src/canvas/src/components/builtin/index.js b/packages/canvas/src/components/builtin/index.js similarity index 100% rename from src/canvas/src/components/builtin/index.js rename to packages/canvas/src/components/builtin/index.js diff --git a/src/canvas/src/components/common/index.js b/packages/canvas/src/components/common/index.js similarity index 100% rename from src/canvas/src/components/common/index.js rename to packages/canvas/src/components/common/index.js diff --git a/src/canvas/src/components/container/CanvasAction.vue b/packages/canvas/src/components/container/CanvasAction.vue similarity index 100% rename from src/canvas/src/components/container/CanvasAction.vue rename to packages/canvas/src/components/container/CanvasAction.vue diff --git a/src/canvas/src/components/container/CanvasContainer.vue b/packages/canvas/src/components/container/CanvasContainer.vue similarity index 100% rename from src/canvas/src/components/container/CanvasContainer.vue rename to packages/canvas/src/components/container/CanvasContainer.vue diff --git a/src/canvas/src/components/container/CanvasDivider.vue b/packages/canvas/src/components/container/CanvasDivider.vue similarity index 100% rename from src/canvas/src/components/container/CanvasDivider.vue rename to packages/canvas/src/components/container/CanvasDivider.vue diff --git a/src/canvas/src/components/container/CanvasDragItem.vue b/packages/canvas/src/components/container/CanvasDragItem.vue similarity index 100% rename from src/canvas/src/components/container/CanvasDragItem.vue rename to packages/canvas/src/components/container/CanvasDragItem.vue diff --git a/src/canvas/src/components/container/CanvasFooter.vue b/packages/canvas/src/components/container/CanvasFooter.vue similarity index 100% rename from src/canvas/src/components/container/CanvasFooter.vue rename to packages/canvas/src/components/container/CanvasFooter.vue diff --git a/src/canvas/src/components/container/CanvasMenu.vue b/packages/canvas/src/components/container/CanvasMenu.vue similarity index 100% rename from src/canvas/src/components/container/CanvasMenu.vue rename to packages/canvas/src/components/container/CanvasMenu.vue diff --git a/src/canvas/src/components/container/CanvasResize.vue b/packages/canvas/src/components/container/CanvasResize.vue similarity index 100% rename from src/canvas/src/components/container/CanvasResize.vue rename to packages/canvas/src/components/container/CanvasResize.vue diff --git a/src/canvas/src/components/container/CanvasResizeBorder.vue b/packages/canvas/src/components/container/CanvasResizeBorder.vue similarity index 100% rename from src/canvas/src/components/container/CanvasResizeBorder.vue rename to packages/canvas/src/components/container/CanvasResizeBorder.vue diff --git a/src/canvas/src/components/container/container.js b/packages/canvas/src/components/container/container.js similarity index 100% rename from src/canvas/src/components/container/container.js rename to packages/canvas/src/components/container/container.js diff --git a/src/canvas/src/components/container/keyboard.js b/packages/canvas/src/components/container/keyboard.js similarity index 100% rename from src/canvas/src/components/container/keyboard.js rename to packages/canvas/src/components/container/keyboard.js diff --git a/src/canvas/src/components/container/shortCutPopover.vue b/packages/canvas/src/components/container/shortCutPopover.vue similarity index 100% rename from src/canvas/src/components/container/shortCutPopover.vue rename to packages/canvas/src/components/container/shortCutPopover.vue diff --git a/src/canvas/src/components/render/CanvasEmpty.vue b/packages/canvas/src/components/render/CanvasEmpty.vue similarity index 100% rename from src/canvas/src/components/render/CanvasEmpty.vue rename to packages/canvas/src/components/render/CanvasEmpty.vue diff --git a/src/canvas/src/components/render/RenderMain.js b/packages/canvas/src/components/render/RenderMain.js similarity index 100% rename from src/canvas/src/components/render/RenderMain.js rename to packages/canvas/src/components/render/RenderMain.js diff --git a/src/canvas/src/components/render/context.js b/packages/canvas/src/components/render/context.js similarity index 100% rename from src/canvas/src/components/render/context.js rename to packages/canvas/src/components/render/context.js diff --git a/src/canvas/src/components/render/render.js b/packages/canvas/src/components/render/render.js similarity index 100% rename from src/canvas/src/components/render/render.js rename to packages/canvas/src/components/render/render.js diff --git a/src/canvas/src/components/render/runner.js b/packages/canvas/src/components/render/runner.js similarity index 98% rename from src/canvas/src/components/render/runner.js rename to packages/canvas/src/components/render/runner.js index 0998436756..012b89029d 100644 --- a/src/canvas/src/components/render/runner.js +++ b/packages/canvas/src/components/render/runner.js @@ -135,6 +135,4 @@ export const createRender = (config) => { ]).finally(create) } -createRender(window.parent.TinyGlobalConfig) - document.addEventListener('updateDependencies', updateDependencies) diff --git a/src/canvas/src/i18n.js b/packages/canvas/src/i18n.js similarity index 100% rename from src/canvas/src/i18n.js rename to packages/canvas/src/i18n.js diff --git a/src/canvas/src/i18n/en.json b/packages/canvas/src/i18n/en.json similarity index 100% rename from src/canvas/src/i18n/en.json rename to packages/canvas/src/i18n/en.json diff --git a/src/canvas/src/i18n/zh.json b/packages/canvas/src/i18n/zh.json similarity index 100% rename from src/canvas/src/i18n/zh.json rename to packages/canvas/src/i18n/zh.json diff --git a/src/canvas/src/index.js b/packages/canvas/src/index.js similarity index 73% rename from src/canvas/src/index.js rename to packages/canvas/src/index.js index 4b79100c4a..ff64476c16 100644 --- a/src/canvas/src/index.js +++ b/packages/canvas/src/index.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import CanvasContainer from './components/container/CanvasContainer.vue' import CanvasAction from './components/container/CanvasAction.vue' @@ -17,6 +17,7 @@ import CanvasFooter from './components/container/CanvasFooter.vue' import CanvasResize from './components/container/CanvasResize.vue' import Builtin from './components/builtin/builtin.json' import RenderMain, { api as renderApi } from './components/render/RenderMain' +import { createRender } from './components/render/runner' import { dragStart, updateRect, @@ -90,7 +91,8 @@ export { setGlobalState, getGlobalState, getDocument, - canvasDispatch + canvasDispatch, + createRender } export default CanvasContainer diff --git a/src/canvas/src/locale.js b/packages/canvas/src/locale.js similarity index 100% rename from src/canvas/src/locale.js rename to packages/canvas/src/locale.js diff --git a/src/canvas/src/lowcode.js b/packages/canvas/src/lowcode.js similarity index 100% rename from src/canvas/src/lowcode.js rename to packages/canvas/src/lowcode.js diff --git a/src/canvas/src/main.js b/packages/canvas/src/main.js similarity index 100% rename from src/canvas/src/main.js rename to packages/canvas/src/main.js diff --git a/src/canvas/test/form.json b/packages/canvas/test/form.json similarity index 100% rename from src/canvas/test/form.json rename to packages/canvas/test/form.json diff --git a/src/canvas/test/group.json b/packages/canvas/test/group.json similarity index 100% rename from src/canvas/test/group.json rename to packages/canvas/test/group.json diff --git a/src/canvas/test/jsslot.json b/packages/canvas/test/jsslot.json similarity index 100% rename from src/canvas/test/jsslot.json rename to packages/canvas/test/jsslot.json diff --git a/src/canvas/vite.config.js b/packages/canvas/vite.config.js similarity index 94% rename from src/canvas/vite.config.js rename to packages/canvas/vite.config.js index 85ac557f9f..1f4a573a98 100644 --- a/src/canvas/vite.config.js +++ b/packages/canvas/vite.config.js @@ -24,7 +24,7 @@ export default defineConfig({ } }, define: { - 'process.env': process.env + 'process.env': {} }, plugins: [ vue({ @@ -66,7 +66,7 @@ export default defineConfig({ formats: ['es'] }, rollupOptions: { - external: ['vue', 'vue-i18n', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] + external: ['vue', '@vueuse/core', 'vue-i18n', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] }, minify: true } diff --git a/src/common/component/BindI18n.vue b/packages/common/component/BindI18n.vue similarity index 100% rename from src/common/component/BindI18n.vue rename to packages/common/component/BindI18n.vue diff --git a/src/common/component/BlockDeployDialog.vue b/packages/common/component/BlockDeployDialog.vue similarity index 99% rename from src/common/component/BlockDeployDialog.vue rename to packages/common/component/BlockDeployDialog.vue index 4c2721865e..f5aa6c96cd 100644 --- a/src/common/component/BlockDeployDialog.vue +++ b/packages/common/component/BlockDeployDialog.vue @@ -81,10 +81,10 @@ import { Popover as TinyPopover, FormItem as TinyFormItem } from '@opentiny/vue' -import { VueMonaco } from '@opentiny/tiny-engine-common' import { theme } from '@opentiny/tiny-engine-controller/adapter' import { useLayout } from '@opentiny/tiny-engine-controller' import { getSchema, setSchema } from '@opentiny/tiny-engine-canvas' +import VueMonaco from './VueMonaco.vue' export default { components: { diff --git a/src/common/component/BlockDescription.vue b/packages/common/component/BlockDescription.vue similarity index 100% rename from src/common/component/BlockDescription.vue rename to packages/common/component/BlockDescription.vue diff --git a/src/common/component/BlockHistoryList.vue b/packages/common/component/BlockHistoryList.vue similarity index 100% rename from src/common/component/BlockHistoryList.vue rename to packages/common/component/BlockHistoryList.vue diff --git a/src/common/component/BlockHistoryTemplate.vue b/packages/common/component/BlockHistoryTemplate.vue similarity index 100% rename from src/common/component/BlockHistoryTemplate.vue rename to packages/common/component/BlockHistoryTemplate.vue diff --git a/src/common/component/BlockLinkEvent.vue b/packages/common/component/BlockLinkEvent.vue similarity index 100% rename from src/common/component/BlockLinkEvent.vue rename to packages/common/component/BlockLinkEvent.vue diff --git a/src/common/component/BlockLinkField.vue b/packages/common/component/BlockLinkField.vue similarity index 100% rename from src/common/component/BlockLinkField.vue rename to packages/common/component/BlockLinkField.vue diff --git a/src/common/component/ButtonGroup.vue b/packages/common/component/ButtonGroup.vue similarity index 100% rename from src/common/component/ButtonGroup.vue rename to packages/common/component/ButtonGroup.vue diff --git a/src/common/component/CloseIcon.vue b/packages/common/component/CloseIcon.vue similarity index 100% rename from src/common/component/CloseIcon.vue rename to packages/common/component/CloseIcon.vue diff --git a/src/common/component/ConfigCollapse.vue b/packages/common/component/ConfigCollapse.vue similarity index 100% rename from src/common/component/ConfigCollapse.vue rename to packages/common/component/ConfigCollapse.vue diff --git a/src/common/component/ConfigGroup.vue b/packages/common/component/ConfigGroup.vue similarity index 100% rename from src/common/component/ConfigGroup.vue rename to packages/common/component/ConfigGroup.vue diff --git a/src/common/component/ConfigItem.vue b/packages/common/component/ConfigItem.vue similarity index 100% rename from src/common/component/ConfigItem.vue rename to packages/common/component/ConfigItem.vue diff --git a/src/common/component/ConfigRender.vue b/packages/common/component/ConfigRender.vue similarity index 100% rename from src/common/component/ConfigRender.vue rename to packages/common/component/ConfigRender.vue diff --git a/src/common/component/EmptyTip.vue b/packages/common/component/EmptyTip.vue similarity index 100% rename from src/common/component/EmptyTip.vue rename to packages/common/component/EmptyTip.vue diff --git a/src/common/component/LifeCycles.vue b/packages/common/component/LifeCycles.vue similarity index 99% rename from src/common/component/LifeCycles.vue rename to packages/common/component/LifeCycles.vue index a1b67e0758..967efa02bc 100644 --- a/src/common/component/LifeCycles.vue +++ b/packages/common/component/LifeCycles.vue @@ -81,7 +81,7 @@ import { Button, DialogBox, Popover, Search, Alert } from '@opentiny/vue' import { getGlobalConfig, useModal, usePage, useNotify } from '@opentiny/tiny-engine-controller' import { theme } from '@opentiny/tiny-engine-controller/adapter' import { getSchema } from '@opentiny/tiny-engine-canvas' -import { MetaListItems } from '@opentiny/tiny-engine-common' +import MetaListItems from './MetaListItems.vue' import { iconYes } from '@opentiny/vue-icon' import VueMonaco from './VueMonaco.vue' import { initCompletion } from '../js/completion' diff --git a/src/common/component/MaskModal.vue b/packages/common/component/MaskModal.vue similarity index 100% rename from src/common/component/MaskModal.vue rename to packages/common/component/MaskModal.vue diff --git a/src/common/component/MetaArrayItem.vue b/packages/common/component/MetaArrayItem.vue similarity index 100% rename from src/common/component/MetaArrayItem.vue rename to packages/common/component/MetaArrayItem.vue diff --git a/src/common/component/MetaBindI18n.vue b/packages/common/component/MetaBindI18n.vue similarity index 100% rename from src/common/component/MetaBindI18n.vue rename to packages/common/component/MetaBindI18n.vue diff --git a/src/common/component/MetaBindVariable.vue b/packages/common/component/MetaBindVariable.vue similarity index 99% rename from src/common/component/MetaBindVariable.vue rename to packages/common/component/MetaBindVariable.vue index 16bfbc4313..f5e5e2ad24 100644 --- a/src/common/component/MetaBindVariable.vue +++ b/packages/common/component/MetaBindVariable.vue @@ -126,9 +126,9 @@ import { useHttp } from '@opentiny/tiny-engine-http' import { getSchema, getGlobalState, setState, getNode, getCurrent } from '@opentiny/tiny-engine-canvas' import { useCanvas, useResource, useLayout, useApp, useProperties, useData } from '@opentiny/tiny-engine-controller' import { theme } from '@opentiny/tiny-engine-controller/adapter' -import { SvgButton } from '@opentiny/tiny-engine-common' -import { parse, traverse, generate } from '@opentiny/tiny-engine-common/js/ast' import { constants } from '@opentiny/tiny-engine-utils' +import SvgButton from './SvgButton.vue' +import { parse, traverse, generate } from '../js/ast' import { DEFAULT_LOOP_NAME } from '../js/constants.js' import MonacoEditor from './VueMonaco.vue' import { formatString } from '../js/ast.js' diff --git a/src/common/component/MetaButtonGroup.vue b/packages/common/component/MetaButtonGroup.vue similarity index 97% rename from src/common/component/MetaButtonGroup.vue rename to packages/common/component/MetaButtonGroup.vue index 059fb0ed42..7a70ea52a9 100644 --- a/src/common/component/MetaButtonGroup.vue +++ b/packages/common/component/MetaButtonGroup.vue @@ -11,7 +11,7 @@ + diff --git a/src/app/config/addons.js b/packages/design-core/config/addons.js similarity index 100% rename from src/app/config/addons.js rename to packages/design-core/config/addons.js diff --git a/src/app/config/lowcode.config.js b/packages/design-core/config/lowcode.config.js similarity index 100% rename from src/app/config/lowcode.config.js rename to packages/design-core/config/lowcode.config.js diff --git a/index.html b/packages/design-core/index.html similarity index 97% rename from index.html rename to packages/design-core/index.html index 7a968872fd..f4e14a6d27 100644 --- a/index.html +++ b/packages/design-core/index.html @@ -126,6 +126,6 @@

Loading

- + diff --git a/packages/design-core/package.json b/packages/design-core/package.json new file mode 100644 index 0000000000..6933a8c853 --- /dev/null +++ b/packages/design-core/package.json @@ -0,0 +1,122 @@ +{ + "name": "@opentiny/tiny-engine", + "version": "1.0.0", + "description": "TinyEngine enables developers to customize low-code platforms, build low-bit platforms online in real time, and support secondary development or integration of low-bit platform capabilities.", + "homepage": "https://opentiny.design/tiny-engine", + "keywords": [ + "vue", + "vue3", + "frontend", + "opentiny", + "lowcode", + "tiny-engine" + ], + "scripts": { + "dev": "cross-env NODE_OPTIONS=--max-old-space-size=10240 VITE_API_MOCK=mock vite", + "serve": "cross-env NODE_OPTIONS=--max-old-space-size=10240 vite", + "build:alpha": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode alpha", + "build:prod": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode prod", + "preview": "vite preview", + "lint": "eslint . --ext .js,.vue,.jsx --fix" + }, + "dependencies": { + "@babel/core": "7.18.13", + "@babel/generator": "7.18.13", + "@babel/parser": "7.18.13", + "@babel/traverse": "7.18.13", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/tiny-engine-i18n-host": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-block": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-bridge": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-data": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-datasource": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-help": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-i18n": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-materials": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-page": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-robot": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-schema": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-script": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-tree": "workspace:^1.0.0", + "@opentiny/tiny-engine-plugin-tutorial": "workspace:^1.0.0", + "@opentiny/tiny-engine-setting-design": "workspace:^1.0.0", + "@opentiny/tiny-engine-setting-events": "workspace:^1.0.0", + "@opentiny/tiny-engine-setting-props": "workspace:^1.0.0", + "@opentiny/tiny-engine-setting-styles": "workspace:^1.0.0", + "@opentiny/tiny-engine-svgs": "workspace:^1.0.0", + "@opentiny/tiny-engine-theme-dark": "workspace:^1.0.0", + "@opentiny/tiny-engine-theme-light": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-breadcrumb": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-checkinout": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-clean": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-collaboration": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-fullscreen": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-generate-vue": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-lang": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-layout": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-logo": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-logout": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-media": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-preview": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-redoundo": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-refresh": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-save": "workspace:^1.0.0", + "@opentiny/tiny-engine-toolbar-setting": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/tiny-engine-webcomponent-core": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-design-smb": "~3.10.0", + "@opentiny/vue-theme": "~3.10.0", + "@vue/babel-plugin-jsx": "1.1.1", + "@vue/repl": "^1.3.0", + "@vueuse/core": "^9.6.0", + "element-resize-detector": "^1.2.4", + "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", + "jszip": "^3.10.1", + "monaco-editor": "0.33.0", + "prettier": "2.7.1", + "sortablejs": "^1.14.0", + "vue": "3.2.45", + "vue-clipboard3": "^2.0.0", + "vue-draggable-next": "2.1.0", + "vue-i18n": "9.2.2", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.21.3", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "@types/node": "^18.0.0", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^1.3.2", + "assert": "^2.0.0", + "buffer": "^6.0.3", + "cross-env": "^7.0.3", + "eslint": "^8.38.0", + "eslint-plugin-vue": "^8.0.0", + "fs-extra": "^10.1.0", + "husky": "^8.0.0", + "lerna": "^7.2.0", + "less": "^4.1.2", + "lint-staged": "^13.2.0", + "path": "^0.12.7", + "rimraf": "^3.0.2", + "rollup-plugin-polyfill-node": "^0.12.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-visualizer": "^5.8.3", + "svg-sprite-loader": "^6.0.11", + "vite": "^4.3.7", + "vite-plugin-monaco-editor": "^1.0.10", + "vite-plugin-svg-icons": "^2.0.1", + "vue-eslint-parser": "^8.0.1" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/preview.html b/packages/design-core/preview.html similarity index 81% rename from preview.html rename to packages/design-core/preview.html index 5cbbbd2df0..fb55265342 100644 --- a/preview.html +++ b/packages/design-core/preview.html @@ -8,6 +8,6 @@
- + diff --git a/previewApp.html b/packages/design-core/previewApp.html similarity index 79% rename from previewApp.html rename to packages/design-core/previewApp.html index 6e7f9b1f92..6dd44c0643 100644 --- a/previewApp.html +++ b/packages/design-core/previewApp.html @@ -8,6 +8,6 @@
- + diff --git a/src/canvas/public/favicon.ico b/packages/design-core/public/favicon.ico similarity index 100% rename from src/canvas/public/favicon.ico rename to packages/design-core/public/favicon.ico diff --git a/src/app/public/i18n-mock/i18n-template-for-batch-import.zip b/packages/design-core/public/i18n-mock/i18n-template-for-batch-import.zip similarity index 100% rename from src/app/public/i18n-mock/i18n-template-for-batch-import.zip rename to packages/design-core/public/i18n-mock/i18n-template-for-batch-import.zip diff --git a/src/app/public/img/bgcModal.png b/packages/design-core/public/img/bgcModal.png similarity index 100% rename from src/app/public/img/bgcModal.png rename to packages/design-core/public/img/bgcModal.png diff --git a/src/app/public/img/defaultAvator.png b/packages/design-core/public/img/defaultAvator.png similarity index 100% rename from src/app/public/img/defaultAvator.png rename to packages/design-core/public/img/defaultAvator.png diff --git a/src/app/public/img/divider.png b/packages/design-core/public/img/divider.png similarity index 100% rename from src/app/public/img/divider.png rename to packages/design-core/public/img/divider.png diff --git a/src/app/public/img/dividerActive.png b/packages/design-core/public/img/dividerActive.png similarity index 100% rename from src/app/public/img/dividerActive.png rename to packages/design-core/public/img/dividerActive.png diff --git a/src/app/public/img/rocket.jpg b/packages/design-core/public/img/rocket.jpg similarity index 100% rename from src/app/public/img/rocket.jpg rename to packages/design-core/public/img/rocket.jpg diff --git a/src/app/public/img/webNova.jpg b/packages/design-core/public/img/webNova.jpg similarity index 100% rename from src/app/public/img/webNova.jpg rename to packages/design-core/public/img/webNova.jpg diff --git a/src/app/public/mock/bundle.json b/packages/design-core/public/mock/bundle.json similarity index 100% rename from src/app/public/mock/bundle.json rename to packages/design-core/public/mock/bundle.json diff --git a/src/app/public/monaco-linter/eslint.worker.js b/packages/design-core/public/monaco-linter/eslint.worker.js similarity index 100% rename from src/app/public/monaco-linter/eslint.worker.js rename to packages/design-core/public/monaco-linter/eslint.worker.js diff --git a/src/app/public/tiny-vue.css b/packages/design-core/public/tiny-vue.css similarity index 100% rename from src/app/public/tiny-vue.css rename to packages/design-core/public/tiny-vue.css diff --git a/scripts/externalDeps.js b/packages/design-core/scripts/externalDeps.js similarity index 72% rename from scripts/externalDeps.js rename to packages/design-core/scripts/externalDeps.js index 7d7bd2a03f..418fec751f 100644 --- a/scripts/externalDeps.js +++ b/packages/design-core/scripts/externalDeps.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ /** * 嵌入 + diff --git a/src/app/src/App.vue b/packages/design-core/src/App.vue similarity index 100% rename from src/app/src/App.vue rename to packages/design-core/src/App.vue diff --git a/src/app/src/DesignCanvas.vue b/packages/design-core/src/DesignCanvas.vue similarity index 100% rename from src/app/src/DesignCanvas.vue rename to packages/design-core/src/DesignCanvas.vue diff --git a/src/app/src/DesignPlugins.vue b/packages/design-core/src/DesignPlugins.vue similarity index 100% rename from src/app/src/DesignPlugins.vue rename to packages/design-core/src/DesignPlugins.vue diff --git a/src/app/src/DesignSettings.vue b/packages/design-core/src/DesignSettings.vue similarity index 100% rename from src/app/src/DesignSettings.vue rename to packages/design-core/src/DesignSettings.vue diff --git a/src/app/src/DesignToolbars.vue b/packages/design-core/src/DesignToolbars.vue similarity index 100% rename from src/app/src/DesignToolbars.vue rename to packages/design-core/src/DesignToolbars.vue diff --git a/packages/design-core/src/canvas.js b/packages/design-core/src/canvas.js new file mode 100644 index 0000000000..118254a0d3 --- /dev/null +++ b/packages/design-core/src/canvas.js @@ -0,0 +1,3 @@ +import { createRender } from '@opentiny/tiny-engine-canvas' + +createRender(window.parent.TinyGlobalConfig) diff --git a/src/app/src/main.js b/packages/design-core/src/main.js similarity index 100% rename from src/app/src/main.js rename to packages/design-core/src/main.js diff --git a/src/preview/src/App.vue b/packages/design-core/src/preview/src/App.vue similarity index 100% rename from src/preview/src/App.vue rename to packages/design-core/src/preview/src/App.vue diff --git a/src/preview/src/Toolbar.vue b/packages/design-core/src/preview/src/Toolbar.vue similarity index 100% rename from src/preview/src/Toolbar.vue rename to packages/design-core/src/preview/src/Toolbar.vue diff --git a/src/preview/src/constant/index.js b/packages/design-core/src/preview/src/constant/index.js similarity index 100% rename from src/preview/src/constant/index.js rename to packages/design-core/src/preview/src/constant/index.js diff --git a/src/preview/src/main.js b/packages/design-core/src/preview/src/main.js similarity index 100% rename from src/preview/src/main.js rename to packages/design-core/src/preview/src/main.js diff --git a/src/preview/src/preview/Preview.vue b/packages/design-core/src/preview/src/preview/Preview.vue similarity index 100% rename from src/preview/src/preview/Preview.vue rename to packages/design-core/src/preview/src/preview/Preview.vue diff --git a/src/preview/src/preview/generate.js b/packages/design-core/src/preview/src/preview/generate.js similarity index 100% rename from src/preview/src/preview/generate.js rename to packages/design-core/src/preview/src/preview/generate.js diff --git a/src/preview/src/preview/http.js b/packages/design-core/src/preview/src/preview/http.js similarity index 100% rename from src/preview/src/preview/http.js rename to packages/design-core/src/preview/src/preview/http.js diff --git a/src/preview/src/preview/importMap.js b/packages/design-core/src/preview/src/preview/importMap.js similarity index 100% rename from src/preview/src/preview/importMap.js rename to packages/design-core/src/preview/src/preview/importMap.js diff --git a/src/preview/src/preview/srcFiles.js b/packages/design-core/src/preview/src/preview/srcFiles.js similarity index 100% rename from src/preview/src/preview/srcFiles.js rename to packages/design-core/src/preview/src/preview/srcFiles.js diff --git a/src/preview/src/preview/srcFiles/App.vue b/packages/design-core/src/preview/src/preview/srcFiles/App.vue similarity index 100% rename from src/preview/src/preview/srcFiles/App.vue rename to packages/design-core/src/preview/src/preview/srcFiles/App.vue diff --git a/src/preview/src/preview/srcFiles/Login.vue b/packages/design-core/src/preview/src/preview/srcFiles/Login.vue similarity index 100% rename from src/preview/src/preview/srcFiles/Login.vue rename to packages/design-core/src/preview/src/preview/srcFiles/Login.vue diff --git a/src/preview/src/preview/srcFiles/Main.vue b/packages/design-core/src/preview/src/preview/srcFiles/Main.vue similarity index 100% rename from src/preview/src/preview/srcFiles/Main.vue rename to packages/design-core/src/preview/src/preview/srcFiles/Main.vue diff --git a/src/preview/src/preview/srcFiles/app.js b/packages/design-core/src/preview/src/preview/srcFiles/app.js similarity index 100% rename from src/preview/src/preview/srcFiles/app.js rename to packages/design-core/src/preview/src/preview/srcFiles/app.js diff --git a/src/preview/src/preview/srcFiles/bridge.js b/packages/design-core/src/preview/src/preview/srcFiles/bridge.js similarity index 100% rename from src/preview/src/preview/srcFiles/bridge.js rename to packages/design-core/src/preview/src/preview/srcFiles/bridge.js diff --git a/src/preview/src/preview/srcFiles/constant/index.js b/packages/design-core/src/preview/src/preview/srcFiles/constant/index.js similarity index 100% rename from src/preview/src/preview/srcFiles/constant/index.js rename to packages/design-core/src/preview/src/preview/srcFiles/constant/index.js diff --git a/src/preview/src/preview/srcFiles/dataSource.js b/packages/design-core/src/preview/src/preview/srcFiles/dataSource.js similarity index 100% rename from src/preview/src/preview/srcFiles/dataSource.js rename to packages/design-core/src/preview/src/preview/srcFiles/dataSource.js diff --git a/src/preview/src/preview/srcFiles/dataSourceMap.js b/packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js similarity index 100% rename from src/preview/src/preview/srcFiles/dataSourceMap.js rename to packages/design-core/src/preview/src/preview/srcFiles/dataSourceMap.js diff --git a/src/preview/src/preview/srcFiles/injectGlobal.js b/packages/design-core/src/preview/src/preview/srcFiles/injectGlobal.js similarity index 100% rename from src/preview/src/preview/srcFiles/injectGlobal.js rename to packages/design-core/src/preview/src/preview/srcFiles/injectGlobal.js diff --git a/src/preview/src/preview/srcFiles/locales.js b/packages/design-core/src/preview/src/preview/srcFiles/locales.js similarity index 100% rename from src/preview/src/preview/srcFiles/locales.js rename to packages/design-core/src/preview/src/preview/srcFiles/locales.js diff --git a/src/preview/src/preview/srcFiles/lowcode.js b/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js similarity index 100% rename from src/preview/src/preview/srcFiles/lowcode.js rename to packages/design-core/src/preview/src/preview/srcFiles/lowcode.js diff --git a/src/preview/src/preview/srcFiles/stores.js b/packages/design-core/src/preview/src/preview/srcFiles/stores.js similarity index 100% rename from src/preview/src/preview/srcFiles/stores.js rename to packages/design-core/src/preview/src/preview/srcFiles/stores.js diff --git a/src/preview/src/preview/srcFiles/storesHelper.js b/packages/design-core/src/preview/src/preview/srcFiles/storesHelper.js similarity index 100% rename from src/preview/src/preview/srcFiles/storesHelper.js rename to packages/design-core/src/preview/src/preview/srcFiles/storesHelper.js diff --git a/src/preview/src/preview/srcFiles/utils.js b/packages/design-core/src/preview/src/preview/srcFiles/utils.js similarity index 100% rename from src/preview/src/preview/srcFiles/utils.js rename to packages/design-core/src/preview/src/preview/srcFiles/utils.js diff --git a/src/preview/src/previewApp.js b/packages/design-core/src/preview/src/previewApp.js similarity index 100% rename from src/preview/src/previewApp.js rename to packages/design-core/src/preview/src/previewApp.js diff --git a/src/preview/src/previewApp.vue b/packages/design-core/src/preview/src/previewApp.vue similarity index 100% rename from src/preview/src/previewApp.vue rename to packages/design-core/src/preview/src/previewApp.vue diff --git a/vite.config.js b/packages/design-core/vite.config.js similarity index 71% rename from vite.config.js rename to packages/design-core/vite.config.js index c1e2f4f224..882e229e9e 100644 --- a/vite.config.js +++ b/packages/design-core/vite.config.js @@ -6,7 +6,7 @@ import vueJsx from '@vitejs/plugin-vue-jsx' import nodeGlobalsPolyfillPlugin from '@esbuild-plugins/node-globals-polyfill' import nodeModulesPolyfillPlugin from '@esbuild-plugins/node-modules-polyfill' import nodePolyfill from 'rollup-plugin-polyfill-node' -import lowcodeConfig from './src/app/config/lowcode.config' +import lowcodeConfig from './config/lowcode.config' import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' import { importmapPlugin } from './scripts/externalDeps' import visualizer from 'rollup-plugin-visualizer' @@ -14,7 +14,7 @@ import visualizer from 'rollup-plugin-visualizer' const origin = 'http://localhost:9090/' const config = { base: './', - publicDir: path.resolve(__dirname, './src/app/public'), + publicDir: path.resolve(__dirname, './public'), resolve: { extensions: ['.js', '.jsx', '.vue'], alias: {} @@ -22,7 +22,7 @@ const config = { server: { // 这里保证本地启动服务是localhost,支持js多线程和谷歌浏览器读写本地文件api port: 8080, - open: true, + open: '/?type=app&id=918&tenant=1', proxy: { '/app-center/v1/api': { target: origin, @@ -63,8 +63,8 @@ const config = { vueJsx(), createSvgIconsPlugin({ iconDirs: [ - path.resolve(process.cwd(), 'src/app/assets/rf-resources/'), // 脚手架执行构建时将图元图片拷贝到此目录 - path.resolve(process.cwd(), 'src/app/assets/') + path.resolve(__dirname, './assets/rf-resources/'), // 脚手架执行构建时将图元图片拷贝到此目录 + path.resolve(__dirname, './assets/') ], symbolId: 'icon-[name]', inject: 'body-last' @@ -82,7 +82,7 @@ const config = { } }, define: { - 'process.env': process.env + 'process.env': {} }, build: { commonjsOptions: { @@ -118,7 +118,6 @@ const config = { } } } - const importMapVersions = { prettier: '2.7.1', vue: '3', @@ -126,58 +125,58 @@ const importMapVersions = { } const devAlias = { - // 有第三方依赖时,需要打开下行。因为第三方CDN依赖的vue来自importmap,本地项目来自node_modules,导致不是同一实例。在预览时需要注释掉。 - // vue: `https://unpkg.com/vue@${importMapVersions.vue}/dist/vue.runtime.esm-browser.js`, - '@opentiny/tiny-engine-common/js': path.resolve(__dirname, 'src/common/js'), - '@opentiny/tiny-engine-common/component': path.resolve(__dirname, 'src/common/component'), - '@opentiny/tiny-engine-common': path.resolve(__dirname, 'src/common/index.js'), - '@opentiny/tiny-engine-controller/utils': path.resolve(__dirname, 'src/controller/utils.js'), - '@opentiny/tiny-engine-controller/adapter': path.resolve(__dirname, 'src/controller/adapter.js'), - '@opentiny/tiny-engine-controller': path.resolve(__dirname, 'src/controller/src/index.js'), - '@opentiny/tiny-engine-plugin-materials': path.resolve(__dirname, 'src/plugins/packages/materials/index.js'), - '@opentiny/tiny-engine-plugin-block': path.resolve(__dirname, 'src/plugins/packages/block/index.js'), - '@opentiny/tiny-engine-plugin-data': path.resolve(__dirname, 'src/plugins/packages/data/index.js'), - '@opentiny/tiny-engine-plugin-datasource': path.resolve(__dirname, 'src/plugins/packages/datasource/index.js'), - '@opentiny/tiny-engine-plugin-script': path.resolve(__dirname, 'src/plugins/packages/script/index.js'), - '@opentiny/tiny-engine-plugin-tree': path.resolve(__dirname, 'src/plugins/packages/tree/index.js'), - '@opentiny/tiny-engine-plugin-help': path.resolve(__dirname, 'src/plugins/packages/help/index.js'), - '@opentiny/tiny-engine-plugin-schema': path.resolve(__dirname, 'src/plugins/packages/schema/index.js'), - '@opentiny/tiny-engine-plugin-page': path.resolve(__dirname, 'src/plugins/packages/page/index.js'), - '@opentiny/tiny-engine-plugin-i18n': path.resolve(__dirname, 'src/plugins/packages/i18n/index.js'), - '@opentiny/tiny-engine-plugin-bridge': path.resolve(__dirname, 'src/plugins/packages/bridge/index.js'), - '@opentiny/tiny-engine-plugin-tutorial': path.resolve(__dirname, 'src/plugins/packages/tutorial/index.js'), - '@opentiny/tiny-engine-plugin-robot': path.resolve(__dirname, 'src/plugins/packages/robot/index.js'), - '@opentiny/tiny-engine-setting-events': path.resolve(__dirname, 'src/settings/packages/events/index.js'), - '@opentiny/tiny-engine-setting-props': path.resolve(__dirname, 'src/settings/packages/props/index.js'), - '@opentiny/tiny-engine-setting-styles': path.resolve(__dirname, 'src/settings/packages/styles/index.js'), - '@opentiny/tiny-engine-toolbar-breadcrumb': path.resolve(__dirname, 'src/toolbars/packages/breadcrumb/index.js'), - '@opentiny/tiny-engine-toolbar-fullscreen': path.resolve(__dirname, 'src/toolbars/packages/fullscreen/index.js'), - '@opentiny/tiny-engine-toolbar-lang': path.resolve(__dirname, 'src/toolbars/packages/lang/index.js'), - '@opentiny/tiny-engine-toolbar-layout': path.resolve(__dirname, 'src/toolbars/packages/layout/index.js'), - '@opentiny/tiny-engine-toolbar-checkinout': path.resolve(__dirname, 'src/toolbars/packages/lock/index.js'), - '@opentiny/tiny-engine-toolbar-logo': path.resolve(__dirname, 'src/toolbars/packages/logo/index.js'), - '@opentiny/tiny-engine-toolbar-logout': path.resolve(__dirname, 'src/toolbars/packages/logout/index.js'), - '@opentiny/tiny-engine-toolbar-media': path.resolve(__dirname, 'src/toolbars/packages/media/index.js'), - '@opentiny/tiny-engine-toolbar-preview': path.resolve(__dirname, 'src/toolbars/packages/preview/index.js'), - '@opentiny/tiny-engine-toolbar-generate-vue': path.resolve(__dirname, 'src/toolbars/packages/generate-vue/index.js'), - '@opentiny/tiny-engine-toolbar-refresh': path.resolve(__dirname, 'src/toolbars/packages/refresh/index.js'), - '@opentiny/tiny-engine-toolbar-redoundo': path.resolve(__dirname, 'src/toolbars/packages/redoundo/index.js'), - '@opentiny/tiny-engine-toolbar-clean': path.resolve(__dirname, 'src/toolbars/packages/clean/index.js'), - '@opentiny/tiny-engine-toolbar-save': path.resolve(__dirname, 'src/toolbars/packages/save/index.js'), - '@opentiny/tiny-engine-toolbar-setting': path.resolve(__dirname, 'src/toolbars/packages/setting/index.js'), - '@opentiny/tiny-engine-toolbar-collaboration': path.resolve( - __dirname, - 'src/toolbars/packages/collaboration/index.js' - ), - '@opentiny/tiny-engine-theme-dark': path.resolve(__dirname, 'src/theme/packages/dark/index.less'), - '@opentiny/tiny-engine-theme-light': path.resolve(__dirname, 'src/theme/packages/light/index.less'), - '@opentiny/tiny-engine-svgs': path.resolve(__dirname, 'src/svgs/index.js'), - '@opentiny/tiny-engine-http': path.resolve(__dirname, 'src/http/src/index.js'), - '@opentiny/tiny-engine-canvas': path.resolve(__dirname, 'src/canvas/src/index.js'), - '@opentiny/tiny-engine-theme': path.resolve(__dirname, `src/theme/packages/${lowcodeConfig.theme}/index.less`), - '@opentiny/tiny-engine-utils': path.resolve(__dirname, 'src/utils/src/index.js'), - '@opentiny/tiny-engine-webcomponent-core': path.resolve(__dirname, 'src/webcomponent/src/lib.js'), - '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, 'src/i18n/src/lib.js') + '@opentiny/tiny-engine-common/js': path.resolve(__dirname, '../common/js'), + '@opentiny/tiny-engine-common/component': path.resolve(__dirname, '../common/component'), + '@opentiny/tiny-engine-common': path.resolve(__dirname, '../common/index.js'), + '@opentiny/tiny-engine-controller/utils': path.resolve(__dirname, '../controller/utils.js'), + '@opentiny/tiny-engine-controller/adapter': path.resolve(__dirname, '../controller/adapter.js'), + '@opentiny/tiny-engine-controller': path.resolve(__dirname, '../controller/src/index.js'), + '@opentiny/tiny-engine-plugin-materials': path.resolve(__dirname, '../plugins/materials/index.js'), + '@opentiny/tiny-engine-plugin-block': path.resolve(__dirname, '../plugins/block/index.js'), + '@opentiny/tiny-engine-plugin-data': path.resolve(__dirname, '../plugins/data/index.js'), + '@opentiny/tiny-engine-plugin-datasource': path.resolve(__dirname, '../plugins/datasource/index.js'), + '@opentiny/tiny-engine-plugin-script': path.resolve(__dirname, '../plugins/script/index.js'), + '@opentiny/tiny-engine-plugin-tree': path.resolve(__dirname, '../plugins/tree/index.js'), + '@opentiny/tiny-engine-plugin-help': path.resolve(__dirname, '../plugins/help/index.js'), + '@opentiny/tiny-engine-plugin-schema': path.resolve(__dirname, '../plugins/schema/index.js'), + '@opentiny/tiny-engine-plugin-page': path.resolve(__dirname, '../plugins/page/index.js'), + '@opentiny/tiny-engine-plugin-i18n': path.resolve(__dirname, '../plugins/i18n/index.js'), + '@opentiny/tiny-engine-plugin-bridge': path.resolve(__dirname, '../plugins/bridge/index.js'), + '@opentiny/tiny-engine-plugin-tutorial': path.resolve(__dirname, '../plugins/tutorial/index.js'), + '@opentiny/tiny-engine-plugin-robot': path.resolve(__dirname, '../plugins/robot/index.js'), + '@opentiny/tiny-engine-setting-events': path.resolve(__dirname, '../settings/events/index.js'), + '@opentiny/tiny-engine-setting-props': path.resolve(__dirname, '../settings/props/index.js'), + '@opentiny/tiny-engine-setting-styles': path.resolve(__dirname, '../settings/styles/index.js'), + '@opentiny/tiny-engine-toolbar-breadcrumb': path.resolve(__dirname, '../toolbars/breadcrumb/index.js'), + '@opentiny/tiny-engine-toolbar-fullscreen': path.resolve(__dirname, '../toolbars/fullscreen/index.js'), + '@opentiny/tiny-engine-toolbar-lang': path.resolve(__dirname, '../toolbars/lang/index.js'), + '@opentiny/tiny-engine-toolbar-layout': path.resolve(__dirname, '../toolbars/layout/index.js'), + '@opentiny/tiny-engine-toolbar-checkinout': path.resolve(__dirname, '../toolbars/lock/index.js'), + '@opentiny/tiny-engine-toolbar-logo': path.resolve(__dirname, '../toolbars/logo/index.js'), + '@opentiny/tiny-engine-toolbar-logout': path.resolve(__dirname, '../toolbars/logout/index.js'), + '@opentiny/tiny-engine-toolbar-media': path.resolve(__dirname, '../toolbars/media/index.js'), + '@opentiny/tiny-engine-toolbar-preview': path.resolve(__dirname, '../toolbars/preview/index.js'), + '@opentiny/tiny-engine-toolbar-generate-vue': path.resolve(__dirname, '../toolbars/generate-vue/index.js'), + '@opentiny/tiny-engine-toolbar-refresh': path.resolve(__dirname, '../toolbars/refresh/index.js'), + '@opentiny/tiny-engine-toolbar-redoundo': path.resolve(__dirname, '../toolbars/redoundo/index.js'), + '@opentiny/tiny-engine-toolbar-clean': path.resolve(__dirname, '../toolbars/clean/index.js'), + '@opentiny/tiny-engine-toolbar-save': path.resolve(__dirname, '../toolbars/save/index.js'), + '@opentiny/tiny-engine-toolbar-setting': path.resolve(__dirname, '../toolbars/setting/index.js'), + '@opentiny/tiny-engine-toolbar-collaboration': path.resolve(__dirname, '../toolbars/collaboration/index.js'), + '@opentiny/tiny-engine-theme-dark': path.resolve(__dirname, '../theme/dark/index.less'), + '@opentiny/tiny-engine-theme-light': path.resolve(__dirname, '../theme/light/index.less'), + '@opentiny/tiny-engine-svgs': path.resolve(__dirname, '../svgs/index.js'), + '@opentiny/tiny-engine-http': path.resolve(__dirname, '../http/src/index.js'), + '@opentiny/tiny-engine-canvas': path.resolve(__dirname, '../canvas/src/index.js'), + '@opentiny/tiny-engine-theme': path.resolve(__dirname, `../theme/${lowcodeConfig.theme}/index.less`), + '@opentiny/tiny-engine-utils': path.resolve(__dirname, '../utils/src/index.js'), + '@opentiny/tiny-engine-webcomponent-core': path.resolve(__dirname, '../webcomponent/src/lib.js'), + '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../i18n/src/lib.js') +} + +const devVueAlias = { + find: /^vue$/, + replacement: `https://unpkg.com/vue@${importMapVersions.vue}/dist/vue.runtime.esm-browser.js` } const prodAlias = { @@ -188,7 +187,7 @@ const prodAlias = { } const commonAlias = { - '@opentiny/tiny-engine-app-addons': path.resolve(__dirname, 'src/app/config/addons.js') + '@opentiny/tiny-engine-app-addons': path.resolve(__dirname, './config/addons.js') } const importmap = { @@ -248,12 +247,17 @@ export default defineConfig(({ command, mode }) => { } } - Object.assign(config.resolve.alias, commonAlias) if (command === 'serve') { - Object.assign(config.resolve.alias, devAlias) + config.resolve.alias = [ + devVueAlias, + ...Object.entries({ ...commonAlias, ...devAlias }).map(([find, replacement]) => ({ + find, + replacement + })) + ] } else { // command === 'build' - Object.assign(config.resolve.alias, prodAlias) + config.resolve.alias = { ...commonAlias, ...prodAlias } monacoEditorPluginInstance = monacoEditorPlugin({ publicPath: monacoPublicPath[mode] }) diff --git a/src/http/package.json b/packages/http/package.json similarity index 64% rename from src/http/package.json rename to packages/http/package.json index a3e656888b..b1a753f3d4 100644 --- a/src/http/package.json +++ b/packages/http/package.json @@ -13,12 +13,13 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-utils": "^1.0.0", - "@opentiny/vue": "^3.8.0", - "vue": "3.2.45", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@vueuse/core": "^9.6.0", "axios": "^0.27.2", - "axios-mock-adapter": "^1.21.5" + "axios-mock-adapter": "^1.21.5", + "vue": "3.2.45" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", diff --git a/src/http/src/Login.vue b/packages/http/src/Login.vue similarity index 100% rename from src/http/src/Login.vue rename to packages/http/src/Login.vue diff --git a/src/http/src/axios.js b/packages/http/src/axios.js similarity index 100% rename from src/http/src/axios.js rename to packages/http/src/axios.js diff --git a/src/http/src/config.js b/packages/http/src/config.js similarity index 100% rename from src/http/src/config.js rename to packages/http/src/config.js diff --git a/src/http/src/index.js b/packages/http/src/index.js similarity index 100% rename from src/http/src/index.js rename to packages/http/src/index.js diff --git a/src/http/src/mock.js b/packages/http/src/mock.js similarity index 100% rename from src/http/src/mock.js rename to packages/http/src/mock.js diff --git a/src/http/vite.config.js b/packages/http/vite.config.js similarity index 100% rename from src/http/vite.config.js rename to packages/http/vite.config.js diff --git a/src/i18n/README.md b/packages/i18n/README.md similarity index 100% rename from src/i18n/README.md rename to packages/i18n/README.md diff --git a/src/i18n/index.html b/packages/i18n/index.html similarity index 100% rename from src/i18n/index.html rename to packages/i18n/index.html diff --git a/src/i18n/package.json b/packages/i18n/package.json similarity index 93% rename from src/i18n/package.json rename to packages/i18n/package.json index 67040ef237..5f018abe14 100644 --- a/src/i18n/package.json +++ b/packages/i18n/package.json @@ -19,7 +19,7 @@ "main": "dist/lowcode-design-i18n-host.umd.js", "module": "dist/lowcode-design-i18n-host.es.js", "dependencies": { - "@opentiny/tiny-engine-webcomponent-core": "^1.0.0", + "@opentiny/tiny-engine-webcomponent-core": "workspace:^1.0.0", "vue": "^3.2.1", "vue-i18n": "^9.2.0-beta.32" }, diff --git a/src/i18n/src/App.vue b/packages/i18n/src/App.vue similarity index 100% rename from src/i18n/src/App.vue rename to packages/i18n/src/App.vue diff --git a/src/i18n/src/I18nHost.vue b/packages/i18n/src/I18nHost.vue similarity index 100% rename from src/i18n/src/I18nHost.vue rename to packages/i18n/src/I18nHost.vue diff --git a/src/i18n/src/i18n.js b/packages/i18n/src/i18n.js similarity index 100% rename from src/i18n/src/i18n.js rename to packages/i18n/src/i18n.js diff --git a/src/i18n/src/lib.js b/packages/i18n/src/lib.js similarity index 100% rename from src/i18n/src/lib.js rename to packages/i18n/src/lib.js diff --git a/src/i18n/src/main.js b/packages/i18n/src/main.js similarity index 100% rename from src/i18n/src/main.js rename to packages/i18n/src/main.js diff --git a/src/i18n/src/test/TestVueInject.vue b/packages/i18n/src/test/TestVueInject.vue similarity index 100% rename from src/i18n/src/test/TestVueInject.vue rename to packages/i18n/src/test/TestVueInject.vue diff --git a/src/i18n/src/test/TestVueUse.vue b/packages/i18n/src/test/TestVueUse.vue similarity index 100% rename from src/i18n/src/test/TestVueUse.vue rename to packages/i18n/src/test/TestVueUse.vue diff --git a/src/i18n/src/test/TestWebcomponent.vue b/packages/i18n/src/test/TestWebcomponent.vue similarity index 100% rename from src/i18n/src/test/TestWebcomponent.vue rename to packages/i18n/src/test/TestWebcomponent.vue diff --git a/src/i18n/vite.config.js b/packages/i18n/vite.config.js similarity index 100% rename from src/i18n/vite.config.js rename to packages/i18n/vite.config.js diff --git a/src/plugins/packages/block/index.js b/packages/plugins/block/index.js similarity index 100% rename from src/plugins/packages/block/index.js rename to packages/plugins/block/index.js diff --git a/src/plugins/packages/block/mock/test.js b/packages/plugins/block/mock/test.js similarity index 100% rename from src/plugins/packages/block/mock/test.js rename to packages/plugins/block/mock/test.js diff --git a/src/plugins/packages/block/package.json b/packages/plugins/block/package.json similarity index 51% rename from src/plugins/packages/block/package.json rename to packages/plugins/block/package.json index fab3ec3ed0..035830b5b3 100644 --- a/src/plugins/packages/block/package.json +++ b/packages/plugins/block/package.json @@ -13,11 +13,15 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", + "html2canvas": "^1.4.1", "pinyin-pro": "^3.13.0", "vue": "3.2.45" }, diff --git a/src/plugins/packages/block/src/BlockConfig.vue b/packages/plugins/block/src/BlockConfig.vue similarity index 100% rename from src/plugins/packages/block/src/BlockConfig.vue rename to packages/plugins/block/src/BlockConfig.vue diff --git a/src/plugins/packages/block/src/BlockEvent.vue b/packages/plugins/block/src/BlockEvent.vue similarity index 100% rename from src/plugins/packages/block/src/BlockEvent.vue rename to packages/plugins/block/src/BlockEvent.vue diff --git a/src/plugins/packages/block/src/BlockEventForm.vue b/packages/plugins/block/src/BlockEventForm.vue similarity index 100% rename from src/plugins/packages/block/src/BlockEventForm.vue rename to packages/plugins/block/src/BlockEventForm.vue diff --git a/src/plugins/packages/block/src/BlockEventList.vue b/packages/plugins/block/src/BlockEventList.vue similarity index 100% rename from src/plugins/packages/block/src/BlockEventList.vue rename to packages/plugins/block/src/BlockEventList.vue diff --git a/src/plugins/packages/block/src/BlockGroupArrange.vue b/packages/plugins/block/src/BlockGroupArrange.vue similarity index 100% rename from src/plugins/packages/block/src/BlockGroupArrange.vue rename to packages/plugins/block/src/BlockGroupArrange.vue diff --git a/src/plugins/packages/block/src/BlockGuide.vue b/packages/plugins/block/src/BlockGuide.vue similarity index 100% rename from src/plugins/packages/block/src/BlockGuide.vue rename to packages/plugins/block/src/BlockGuide.vue diff --git a/src/plugins/packages/block/src/BlockProperty.vue b/packages/plugins/block/src/BlockProperty.vue similarity index 100% rename from src/plugins/packages/block/src/BlockProperty.vue rename to packages/plugins/block/src/BlockProperty.vue diff --git a/src/plugins/packages/block/src/BlockPropertyForm.vue b/packages/plugins/block/src/BlockPropertyForm.vue similarity index 100% rename from src/plugins/packages/block/src/BlockPropertyForm.vue rename to packages/plugins/block/src/BlockPropertyForm.vue diff --git a/src/plugins/packages/block/src/BlockPropertyList.vue b/packages/plugins/block/src/BlockPropertyList.vue similarity index 100% rename from src/plugins/packages/block/src/BlockPropertyList.vue rename to packages/plugins/block/src/BlockPropertyList.vue diff --git a/src/plugins/packages/block/src/BlockSetting.vue b/packages/plugins/block/src/BlockSetting.vue similarity index 100% rename from src/plugins/packages/block/src/BlockSetting.vue rename to packages/plugins/block/src/BlockSetting.vue diff --git a/src/plugins/packages/block/src/CategoryEdit.vue b/packages/plugins/block/src/CategoryEdit.vue similarity index 100% rename from src/plugins/packages/block/src/CategoryEdit.vue rename to packages/plugins/block/src/CategoryEdit.vue diff --git a/src/plugins/packages/block/src/Main.vue b/packages/plugins/block/src/Main.vue similarity index 100% rename from src/plugins/packages/block/src/Main.vue rename to packages/plugins/block/src/Main.vue diff --git a/src/plugins/packages/block/src/js/blockPropertyForm.js b/packages/plugins/block/src/js/blockPropertyForm.js similarity index 100% rename from src/plugins/packages/block/src/js/blockPropertyForm.js rename to packages/plugins/block/src/js/blockPropertyForm.js diff --git a/src/plugins/packages/block/src/js/blockSetting.jsx b/packages/plugins/block/src/js/blockSetting.jsx similarity index 100% rename from src/plugins/packages/block/src/js/blockSetting.jsx rename to packages/plugins/block/src/js/blockSetting.jsx diff --git a/src/plugins/packages/block/src/js/http.js b/packages/plugins/block/src/js/http.js similarity index 100% rename from src/plugins/packages/block/src/js/http.js rename to packages/plugins/block/src/js/http.js diff --git a/src/plugins/packages/block/test/test.js b/packages/plugins/block/test/test.js similarity index 100% rename from src/plugins/packages/block/test/test.js rename to packages/plugins/block/test/test.js diff --git a/src/plugins/packages/block/vite.config.js b/packages/plugins/block/vite.config.js similarity index 100% rename from src/plugins/packages/block/vite.config.js rename to packages/plugins/block/vite.config.js diff --git a/src/plugins/packages/bridge/assets/test.png b/packages/plugins/bridge/assets/test.png similarity index 100% rename from src/plugins/packages/bridge/assets/test.png rename to packages/plugins/bridge/assets/test.png diff --git a/src/plugins/packages/bridge/index.js b/packages/plugins/bridge/index.js similarity index 100% rename from src/plugins/packages/bridge/index.js rename to packages/plugins/bridge/index.js diff --git a/src/plugins/packages/bridge/mock/test.js b/packages/plugins/bridge/mock/test.js similarity index 100% rename from src/plugins/packages/bridge/mock/test.js rename to packages/plugins/bridge/mock/test.js diff --git a/src/plugins/packages/bridge/package.json b/packages/plugins/bridge/package.json similarity index 59% rename from src/plugins/packages/bridge/package.json rename to packages/plugins/bridge/package.json index 653f790744..2772e635ee 100644 --- a/src/plugins/packages/bridge/package.json +++ b/packages/plugins/bridge/package.json @@ -13,10 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/bridge/src/BridgeManage.vue b/packages/plugins/bridge/src/BridgeManage.vue similarity index 100% rename from src/plugins/packages/bridge/src/BridgeManage.vue rename to packages/plugins/bridge/src/BridgeManage.vue diff --git a/src/plugins/packages/bridge/src/BridgeSetting.vue b/packages/plugins/bridge/src/BridgeSetting.vue similarity index 100% rename from src/plugins/packages/bridge/src/BridgeSetting.vue rename to packages/plugins/bridge/src/BridgeSetting.vue diff --git a/src/plugins/packages/bridge/src/Main.vue b/packages/plugins/bridge/src/Main.vue similarity index 100% rename from src/plugins/packages/bridge/src/Main.vue rename to packages/plugins/bridge/src/Main.vue diff --git a/src/plugins/packages/bridge/src/http.js b/packages/plugins/bridge/src/http.js similarity index 100% rename from src/plugins/packages/bridge/src/http.js rename to packages/plugins/bridge/src/http.js diff --git a/src/plugins/packages/bridge/src/js/resource.js b/packages/plugins/bridge/src/js/resource.js similarity index 100% rename from src/plugins/packages/bridge/src/js/resource.js rename to packages/plugins/bridge/src/js/resource.js diff --git a/src/plugins/packages/bridge/test/test.js b/packages/plugins/bridge/test/test.js similarity index 100% rename from src/plugins/packages/bridge/test/test.js rename to packages/plugins/bridge/test/test.js diff --git a/src/plugins/packages/bridge/vite.config.js b/packages/plugins/bridge/vite.config.js similarity index 100% rename from src/plugins/packages/bridge/vite.config.js rename to packages/plugins/bridge/vite.config.js diff --git a/src/plugins/packages/data/assets/test.png b/packages/plugins/data/assets/test.png similarity index 100% rename from src/plugins/packages/data/assets/test.png rename to packages/plugins/data/assets/test.png diff --git a/src/plugins/packages/data/index.js b/packages/plugins/data/index.js similarity index 100% rename from src/plugins/packages/data/index.js rename to packages/plugins/data/index.js diff --git a/src/plugins/packages/data/mock/test.js b/packages/plugins/data/mock/test.js similarity index 100% rename from src/plugins/packages/data/mock/test.js rename to packages/plugins/data/mock/test.js diff --git a/src/plugins/packages/data/package.json b/packages/plugins/data/package.json similarity index 56% rename from src/plugins/packages/data/package.json rename to packages/plugins/data/package.json index c2355ca57f..c0876b2f58 100644 --- a/src/plugins/packages/data/package.json +++ b/packages/plugins/data/package.json @@ -13,10 +13,13 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", "monaco-editor": "0.33.0", "vue": "3.2.45" }, diff --git a/src/plugins/packages/data/src/CreateRemoteAPI.vue b/packages/plugins/data/src/CreateRemoteAPI.vue similarity index 100% rename from src/plugins/packages/data/src/CreateRemoteAPI.vue rename to packages/plugins/data/src/CreateRemoteAPI.vue diff --git a/src/plugins/packages/data/src/CreateRemoteFunction.vue b/packages/plugins/data/src/CreateRemoteFunction.vue similarity index 100% rename from src/plugins/packages/data/src/CreateRemoteFunction.vue rename to packages/plugins/data/src/CreateRemoteFunction.vue diff --git a/src/plugins/packages/data/src/CreateStore.vue b/packages/plugins/data/src/CreateStore.vue similarity index 100% rename from src/plugins/packages/data/src/CreateStore.vue rename to packages/plugins/data/src/CreateStore.vue diff --git a/src/plugins/packages/data/src/CreateVariable.vue b/packages/plugins/data/src/CreateVariable.vue similarity index 100% rename from src/plugins/packages/data/src/CreateVariable.vue rename to packages/plugins/data/src/CreateVariable.vue diff --git a/src/plugins/packages/data/src/DataSourceList.vue b/packages/plugins/data/src/DataSourceList.vue similarity index 100% rename from src/plugins/packages/data/src/DataSourceList.vue rename to packages/plugins/data/src/DataSourceList.vue diff --git a/src/plugins/packages/data/src/DataSourceRightPanel.vue b/packages/plugins/data/src/DataSourceRightPanel.vue similarity index 100% rename from src/plugins/packages/data/src/DataSourceRightPanel.vue rename to packages/plugins/data/src/DataSourceRightPanel.vue diff --git a/src/plugins/packages/data/src/EditorFunctionTool.vue b/packages/plugins/data/src/EditorFunctionTool.vue similarity index 100% rename from src/plugins/packages/data/src/EditorFunctionTool.vue rename to packages/plugins/data/src/EditorFunctionTool.vue diff --git a/src/plugins/packages/data/src/EditorI18nTool.vue b/packages/plugins/data/src/EditorI18nTool.vue similarity index 100% rename from src/plugins/packages/data/src/EditorI18nTool.vue rename to packages/plugins/data/src/EditorI18nTool.vue diff --git a/src/plugins/packages/data/src/Main.vue b/packages/plugins/data/src/Main.vue similarity index 100% rename from src/plugins/packages/data/src/Main.vue rename to packages/plugins/data/src/Main.vue diff --git a/src/plugins/packages/data/src/js/common.js b/packages/plugins/data/src/js/common.js similarity index 100% rename from src/plugins/packages/data/src/js/common.js rename to packages/plugins/data/src/js/common.js diff --git a/src/plugins/packages/data/src/js/constants.js b/packages/plugins/data/src/js/constants.js similarity index 100% rename from src/plugins/packages/data/src/js/constants.js rename to packages/plugins/data/src/js/constants.js diff --git a/src/plugins/packages/data/src/js/http.js b/packages/plugins/data/src/js/http.js similarity index 100% rename from src/plugins/packages/data/src/js/http.js rename to packages/plugins/data/src/js/http.js diff --git a/src/plugins/packages/data/test/test.js b/packages/plugins/data/test/test.js similarity index 100% rename from src/plugins/packages/data/test/test.js rename to packages/plugins/data/test/test.js diff --git a/src/plugins/packages/data/vite.config.js b/packages/plugins/data/vite.config.js similarity index 100% rename from src/plugins/packages/data/vite.config.js rename to packages/plugins/data/vite.config.js diff --git a/src/plugins/packages/datasource/index.js b/packages/plugins/datasource/index.js similarity index 100% rename from src/plugins/packages/datasource/index.js rename to packages/plugins/datasource/index.js diff --git a/packages/plugins/datasource/package.json b/packages/plugins/datasource/package.json new file mode 100644 index 0000000000..ed7112b202 --- /dev/null +++ b/packages/plugins/datasource/package.json @@ -0,0 +1,35 @@ +{ + "name": "@opentiny/tiny-engine-plugin-datasource", + "version": "1.0.1", + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "vite build" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist" + ], + "dependencies": { + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", + "@vue/shared": "^3.3.4", + "axios": "^0.27.2", + "vue": "3.2.45", + "vue-clipboard3": "^2.0.0", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^1.3.10", + "vite": "^4.3.7" + } +} diff --git a/src/plugins/packages/datasource/src/DataSourceField.vue b/packages/plugins/datasource/src/DataSourceField.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceField.vue rename to packages/plugins/datasource/src/DataSourceField.vue diff --git a/src/plugins/packages/datasource/src/DataSourceFieldCheck.vue b/packages/plugins/datasource/src/DataSourceFieldCheck.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceFieldCheck.vue rename to packages/plugins/datasource/src/DataSourceFieldCheck.vue diff --git a/src/plugins/packages/datasource/src/DataSourceFieldCheckMultipleLine.vue b/packages/plugins/datasource/src/DataSourceFieldCheckMultipleLine.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceFieldCheckMultipleLine.vue rename to packages/plugins/datasource/src/DataSourceFieldCheckMultipleLine.vue diff --git a/src/plugins/packages/datasource/src/DataSourceFieldCheckRanger.vue b/packages/plugins/datasource/src/DataSourceFieldCheckRanger.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceFieldCheckRanger.vue rename to packages/plugins/datasource/src/DataSourceFieldCheckRanger.vue diff --git a/src/plugins/packages/datasource/src/DataSourceFieldForm.vue b/packages/plugins/datasource/src/DataSourceFieldForm.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceFieldForm.vue rename to packages/plugins/datasource/src/DataSourceFieldForm.vue diff --git a/src/plugins/packages/datasource/src/DataSourceFieldList.vue b/packages/plugins/datasource/src/DataSourceFieldList.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceFieldList.vue rename to packages/plugins/datasource/src/DataSourceFieldList.vue diff --git a/src/plugins/packages/datasource/src/DataSourceFieldType.vue b/packages/plugins/datasource/src/DataSourceFieldType.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceFieldType.vue rename to packages/plugins/datasource/src/DataSourceFieldType.vue diff --git a/src/plugins/packages/datasource/src/DataSourceForm.vue b/packages/plugins/datasource/src/DataSourceForm.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceForm.vue rename to packages/plugins/datasource/src/DataSourceForm.vue diff --git a/src/plugins/packages/datasource/src/DataSourceGlobalDataHandler.vue b/packages/plugins/datasource/src/DataSourceGlobalDataHandler.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceGlobalDataHandler.vue rename to packages/plugins/datasource/src/DataSourceGlobalDataHandler.vue diff --git a/src/plugins/packages/datasource/src/DataSourceList.vue b/packages/plugins/datasource/src/DataSourceList.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceList.vue rename to packages/plugins/datasource/src/DataSourceList.vue diff --git a/src/plugins/packages/datasource/src/DataSourceName.vue b/packages/plugins/datasource/src/DataSourceName.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceName.vue rename to packages/plugins/datasource/src/DataSourceName.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRecordForm.vue b/packages/plugins/datasource/src/DataSourceRecordForm.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRecordForm.vue rename to packages/plugins/datasource/src/DataSourceRecordForm.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRecordList.vue b/packages/plugins/datasource/src/DataSourceRecordList.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRecordList.vue rename to packages/plugins/datasource/src/DataSourceRecordList.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRecordUpload.vue b/packages/plugins/datasource/src/DataSourceRecordUpload.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRecordUpload.vue rename to packages/plugins/datasource/src/DataSourceRecordUpload.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRemoteAutoload.vue b/packages/plugins/datasource/src/DataSourceRemoteAutoload.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRemoteAutoload.vue rename to packages/plugins/datasource/src/DataSourceRemoteAutoload.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRemoteDataAdapter.vue b/packages/plugins/datasource/src/DataSourceRemoteDataAdapter.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRemoteDataAdapter.vue rename to packages/plugins/datasource/src/DataSourceRemoteDataAdapter.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRemoteDataResult.vue b/packages/plugins/datasource/src/DataSourceRemoteDataResult.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRemoteDataResult.vue rename to packages/plugins/datasource/src/DataSourceRemoteDataResult.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRemoteForm.vue b/packages/plugins/datasource/src/DataSourceRemoteForm.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRemoteForm.vue rename to packages/plugins/datasource/src/DataSourceRemoteForm.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRemoteMapping.vue b/packages/plugins/datasource/src/DataSourceRemoteMapping.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRemoteMapping.vue rename to packages/plugins/datasource/src/DataSourceRemoteMapping.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRemotePanel.vue b/packages/plugins/datasource/src/DataSourceRemotePanel.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRemotePanel.vue rename to packages/plugins/datasource/src/DataSourceRemotePanel.vue diff --git a/src/plugins/packages/datasource/src/DataSourceRemoteParameter.vue b/packages/plugins/datasource/src/DataSourceRemoteParameter.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceRemoteParameter.vue rename to packages/plugins/datasource/src/DataSourceRemoteParameter.vue diff --git a/src/plugins/packages/datasource/src/DataSourceTemplate.vue b/packages/plugins/datasource/src/DataSourceTemplate.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceTemplate.vue rename to packages/plugins/datasource/src/DataSourceTemplate.vue diff --git a/src/plugins/packages/datasource/src/DataSourceType.vue b/packages/plugins/datasource/src/DataSourceType.vue similarity index 100% rename from src/plugins/packages/datasource/src/DataSourceType.vue rename to packages/plugins/datasource/src/DataSourceType.vue diff --git a/src/plugins/packages/datasource/src/Main.vue b/packages/plugins/datasource/src/Main.vue similarity index 100% rename from src/plugins/packages/datasource/src/Main.vue rename to packages/plugins/datasource/src/Main.vue diff --git a/src/plugins/packages/datasource/src/RemoteDataAdapterForm.vue b/packages/plugins/datasource/src/RemoteDataAdapterForm.vue similarity index 100% rename from src/plugins/packages/datasource/src/RemoteDataAdapterForm.vue rename to packages/plugins/datasource/src/RemoteDataAdapterForm.vue diff --git a/src/plugins/packages/datasource/src/config.js b/packages/plugins/datasource/src/config.js similarity index 100% rename from src/plugins/packages/datasource/src/config.js rename to packages/plugins/datasource/src/config.js diff --git a/src/plugins/packages/datasource/src/js/datasource.js b/packages/plugins/datasource/src/js/datasource.js similarity index 96% rename from src/plugins/packages/datasource/src/js/datasource.js rename to packages/plugins/datasource/src/js/datasource.js index 114609dc31..27184f40f9 100644 --- a/src/plugins/packages/datasource/src/js/datasource.js +++ b/packages/plugins/datasource/src/js/datasource.js @@ -13,9 +13,9 @@ import axios from 'axios' import { useResource } from '@opentiny/tiny-engine-controller' import { generateFunction } from '@opentiny/tiny-engine-controller/utils' -import { utils as commonUtils } from '@opentiny/tiny-engine-utils' +import { isMock } from '@opentiny/tiny-engine-common/js/environments' +import { utils as commonUtils, constants } from '@opentiny/tiny-engine-utils' import { read, utils, writeFileXLSX } from 'xlsx' -import { constants } from '@opentiny/tiny-engine-utils' const { DEFAULT_INTERCEPTOR } = constants @@ -92,7 +92,7 @@ export const getRequest = (config) => { http.interceptors.response.use(dataHandler, errorHandler) - if (process.env.API_MOCK === 'mock') { + if (isMock) { http.mock([ { url: config.options.uri, diff --git a/src/plugins/packages/datasource/src/js/http.js b/packages/plugins/datasource/src/js/http.js similarity index 100% rename from src/plugins/packages/datasource/src/js/http.js rename to packages/plugins/datasource/src/js/http.js diff --git a/src/plugins/packages/datasource/vite.config.js b/packages/plugins/datasource/vite.config.js similarity index 100% rename from src/plugins/packages/datasource/vite.config.js rename to packages/plugins/datasource/vite.config.js diff --git a/src/plugins/packages/help/assets/test.png b/packages/plugins/help/assets/test.png similarity index 100% rename from src/plugins/packages/help/assets/test.png rename to packages/plugins/help/assets/test.png diff --git a/src/plugins/packages/help/index.js b/packages/plugins/help/index.js similarity index 100% rename from src/plugins/packages/help/index.js rename to packages/plugins/help/index.js diff --git a/src/plugins/packages/help/mock/test.js b/packages/plugins/help/mock/test.js similarity index 100% rename from src/plugins/packages/help/mock/test.js rename to packages/plugins/help/mock/test.js diff --git a/src/plugins/packages/help/package.json b/packages/plugins/help/package.json similarity index 67% rename from src/plugins/packages/help/package.json rename to packages/plugins/help/package.json index 6b8693857d..66dc32160a 100644 --- a/src/plugins/packages/help/package.json +++ b/packages/plugins/help/package.json @@ -13,10 +13,10 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/help/src/HelpIcon.vue b/packages/plugins/help/src/HelpIcon.vue similarity index 100% rename from src/plugins/packages/help/src/HelpIcon.vue rename to packages/plugins/help/src/HelpIcon.vue diff --git a/src/plugins/packages/help/test/test.js b/packages/plugins/help/test/test.js similarity index 100% rename from src/plugins/packages/help/test/test.js rename to packages/plugins/help/test/test.js diff --git a/src/plugins/packages/help/vite.config.js b/packages/plugins/help/vite.config.js similarity index 100% rename from src/plugins/packages/help/vite.config.js rename to packages/plugins/help/vite.config.js diff --git a/src/plugins/packages/i18n/assets/test.png b/packages/plugins/i18n/assets/test.png similarity index 100% rename from src/plugins/packages/i18n/assets/test.png rename to packages/plugins/i18n/assets/test.png diff --git a/src/plugins/packages/i18n/index.js b/packages/plugins/i18n/index.js similarity index 100% rename from src/plugins/packages/i18n/index.js rename to packages/plugins/i18n/index.js diff --git a/src/plugins/packages/i18n/mock/test.js b/packages/plugins/i18n/mock/test.js similarity index 100% rename from src/plugins/packages/i18n/mock/test.js rename to packages/plugins/i18n/mock/test.js diff --git a/src/plugins/packages/i18n/package.json b/packages/plugins/i18n/package.json similarity index 53% rename from src/plugins/packages/i18n/package.json rename to packages/plugins/i18n/package.json index 966838fa2e..cd392467e6 100644 --- a/src/plugins/packages/i18n/package.json +++ b/packages/plugins/i18n/package.json @@ -13,11 +13,14 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", - "vue": "3.2.45" + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "vue": "3.2.45", + "vue-clipboard3": "^2.0.0" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", diff --git a/src/plugins/packages/i18n/src/Main.vue b/packages/plugins/i18n/src/Main.vue similarity index 100% rename from src/plugins/packages/i18n/src/Main.vue rename to packages/plugins/i18n/src/Main.vue diff --git a/src/plugins/packages/i18n/test/test.js b/packages/plugins/i18n/test/test.js similarity index 100% rename from src/plugins/packages/i18n/test/test.js rename to packages/plugins/i18n/test/test.js diff --git a/src/plugins/packages/i18n/vite.config.js b/packages/plugins/i18n/vite.config.js similarity index 100% rename from src/plugins/packages/i18n/vite.config.js rename to packages/plugins/i18n/vite.config.js diff --git a/src/plugins/packages/materials/assets/test.png b/packages/plugins/materials/assets/test.png similarity index 100% rename from src/plugins/packages/materials/assets/test.png rename to packages/plugins/materials/assets/test.png diff --git a/src/plugins/packages/materials/index.js b/packages/plugins/materials/index.js similarity index 100% rename from src/plugins/packages/materials/index.js rename to packages/plugins/materials/index.js diff --git a/src/plugins/packages/materials/mock/test.js b/packages/plugins/materials/mock/test.js similarity index 100% rename from src/plugins/packages/materials/mock/test.js rename to packages/plugins/materials/mock/test.js diff --git a/src/plugins/packages/materials/package.json b/packages/plugins/materials/package.json similarity index 62% rename from src/plugins/packages/materials/package.json rename to packages/plugins/materials/package.json index ebff07dd1e..ce9df47f36 100644 --- a/src/plugins/packages/materials/package.json +++ b/packages/plugins/materials/package.json @@ -13,11 +13,11 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/materials/src/Main.vue b/packages/plugins/materials/src/Main.vue similarity index 100% rename from src/plugins/packages/materials/src/Main.vue rename to packages/plugins/materials/src/Main.vue diff --git a/src/plugins/packages/materials/src/block/BlockDetail.vue b/packages/plugins/materials/src/block/BlockDetail.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockDetail.vue rename to packages/plugins/materials/src/block/BlockDetail.vue diff --git a/src/plugins/packages/materials/src/block/BlockGroup.vue b/packages/plugins/materials/src/block/BlockGroup.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockGroup.vue rename to packages/plugins/materials/src/block/BlockGroup.vue diff --git a/src/plugins/packages/materials/src/block/BlockGroupArrange.vue b/packages/plugins/materials/src/block/BlockGroupArrange.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockGroupArrange.vue rename to packages/plugins/materials/src/block/BlockGroupArrange.vue diff --git a/src/plugins/packages/materials/src/block/BlockGroupFilters.vue b/packages/plugins/materials/src/block/BlockGroupFilters.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockGroupFilters.vue rename to packages/plugins/materials/src/block/BlockGroupFilters.vue diff --git a/src/plugins/packages/materials/src/block/BlockGroupPanel.vue b/packages/plugins/materials/src/block/BlockGroupPanel.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockGroupPanel.vue rename to packages/plugins/materials/src/block/BlockGroupPanel.vue diff --git a/src/plugins/packages/materials/src/block/BlockGroupSort.vue b/packages/plugins/materials/src/block/BlockGroupSort.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockGroupSort.vue rename to packages/plugins/materials/src/block/BlockGroupSort.vue diff --git a/src/plugins/packages/materials/src/block/BlockGroupTransfer.vue b/packages/plugins/materials/src/block/BlockGroupTransfer.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockGroupTransfer.vue rename to packages/plugins/materials/src/block/BlockGroupTransfer.vue diff --git a/src/plugins/packages/materials/src/block/BlockGroupTransferPanel.vue b/packages/plugins/materials/src/block/BlockGroupTransferPanel.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockGroupTransferPanel.vue rename to packages/plugins/materials/src/block/BlockGroupTransferPanel.vue diff --git a/src/plugins/packages/materials/src/block/BlockList.vue b/packages/plugins/materials/src/block/BlockList.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockList.vue rename to packages/plugins/materials/src/block/BlockList.vue diff --git a/src/plugins/packages/materials/src/block/BlockVersionSelect.vue b/packages/plugins/materials/src/block/BlockVersionSelect.vue similarity index 100% rename from src/plugins/packages/materials/src/block/BlockVersionSelect.vue rename to packages/plugins/materials/src/block/BlockVersionSelect.vue diff --git a/src/plugins/packages/materials/src/block/Main.vue b/packages/plugins/materials/src/block/Main.vue similarity index 100% rename from src/plugins/packages/materials/src/block/Main.vue rename to packages/plugins/materials/src/block/Main.vue diff --git a/src/plugins/packages/materials/src/block/http.js b/packages/plugins/materials/src/block/http.js similarity index 100% rename from src/plugins/packages/materials/src/block/http.js rename to packages/plugins/materials/src/block/http.js diff --git a/src/plugins/packages/materials/src/block/js/usePanel.js b/packages/plugins/materials/src/block/js/usePanel.js similarity index 100% rename from src/plugins/packages/materials/src/block/js/usePanel.js rename to packages/plugins/materials/src/block/js/usePanel.js diff --git a/src/plugins/packages/materials/src/component/Main.vue b/packages/plugins/materials/src/component/Main.vue similarity index 100% rename from src/plugins/packages/materials/src/component/Main.vue rename to packages/plugins/materials/src/component/Main.vue diff --git a/src/plugins/packages/materials/test/test.js b/packages/plugins/materials/test/test.js similarity index 100% rename from src/plugins/packages/materials/test/test.js rename to packages/plugins/materials/test/test.js diff --git a/src/plugins/packages/materials/vite.config.js b/packages/plugins/materials/vite.config.js similarity index 100% rename from src/plugins/packages/materials/vite.config.js rename to packages/plugins/materials/vite.config.js diff --git a/src/plugins/packages/page/assets/test.png b/packages/plugins/page/assets/test.png similarity index 100% rename from src/plugins/packages/page/assets/test.png rename to packages/plugins/page/assets/test.png diff --git a/src/plugins/packages/page/index.js b/packages/plugins/page/index.js similarity index 100% rename from src/plugins/packages/page/index.js rename to packages/plugins/page/index.js diff --git a/src/plugins/packages/page/mock/test.js b/packages/plugins/page/mock/test.js similarity index 100% rename from src/plugins/packages/page/mock/test.js rename to packages/plugins/page/mock/test.js diff --git a/src/plugins/packages/page/package.json b/packages/plugins/page/package.json similarity index 58% rename from src/plugins/packages/page/package.json rename to packages/plugins/page/package.json index 1f62fd21cf..c3ef9deec2 100644 --- a/src/plugins/packages/page/package.json +++ b/packages/plugins/page/package.json @@ -13,10 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/page/src/Main.vue b/packages/plugins/page/src/Main.vue similarity index 100% rename from src/plugins/packages/page/src/Main.vue rename to packages/plugins/page/src/Main.vue diff --git a/src/plugins/packages/page/src/PageFolderSetting.vue b/packages/plugins/page/src/PageFolderSetting.vue similarity index 100% rename from src/plugins/packages/page/src/PageFolderSetting.vue rename to packages/plugins/page/src/PageFolderSetting.vue diff --git a/src/plugins/packages/page/src/PageGeneral.vue b/packages/plugins/page/src/PageGeneral.vue similarity index 100% rename from src/plugins/packages/page/src/PageGeneral.vue rename to packages/plugins/page/src/PageGeneral.vue diff --git a/src/plugins/packages/page/src/PageHistory.vue b/packages/plugins/page/src/PageHistory.vue similarity index 100% rename from src/plugins/packages/page/src/PageHistory.vue rename to packages/plugins/page/src/PageHistory.vue diff --git a/src/plugins/packages/page/src/PageHome.vue b/packages/plugins/page/src/PageHome.vue similarity index 100% rename from src/plugins/packages/page/src/PageHome.vue rename to packages/plugins/page/src/PageHome.vue diff --git a/src/plugins/packages/page/src/PageInputOutput.vue b/packages/plugins/page/src/PageInputOutput.vue similarity index 100% rename from src/plugins/packages/page/src/PageInputOutput.vue rename to packages/plugins/page/src/PageInputOutput.vue diff --git a/src/plugins/packages/page/src/PageSetting.vue b/packages/plugins/page/src/PageSetting.vue similarity index 100% rename from src/plugins/packages/page/src/PageSetting.vue rename to packages/plugins/page/src/PageSetting.vue diff --git a/src/plugins/packages/page/src/PageTree.vue b/packages/plugins/page/src/PageTree.vue similarity index 100% rename from src/plugins/packages/page/src/PageTree.vue rename to packages/plugins/page/src/PageTree.vue diff --git a/src/plugins/packages/page/src/http.js b/packages/plugins/page/src/http.js similarity index 100% rename from src/plugins/packages/page/src/http.js rename to packages/plugins/page/src/http.js diff --git a/src/plugins/packages/page/test/test.js b/packages/plugins/page/test/test.js similarity index 100% rename from src/plugins/packages/page/test/test.js rename to packages/plugins/page/test/test.js diff --git a/src/plugins/packages/page/vite.config.js b/packages/plugins/page/vite.config.js similarity index 100% rename from src/plugins/packages/page/vite.config.js rename to packages/plugins/page/vite.config.js diff --git a/src/plugins/packages/robot/assets/AI.png b/packages/plugins/robot/assets/AI.png similarity index 100% rename from src/plugins/packages/robot/assets/AI.png rename to packages/plugins/robot/assets/AI.png diff --git a/src/plugins/packages/robot/assets/test.png b/packages/plugins/robot/assets/test.png similarity index 100% rename from src/plugins/packages/robot/assets/test.png rename to packages/plugins/robot/assets/test.png diff --git a/src/plugins/packages/robot/index.js b/packages/plugins/robot/index.js similarity index 100% rename from src/plugins/packages/robot/index.js rename to packages/plugins/robot/index.js diff --git a/src/plugins/packages/robot/mock/test.js b/packages/plugins/robot/mock/test.js similarity index 100% rename from src/plugins/packages/robot/mock/test.js rename to packages/plugins/robot/mock/test.js diff --git a/src/plugins/packages/robot/package.json b/packages/plugins/robot/package.json similarity index 58% rename from src/plugins/packages/robot/package.json rename to packages/plugins/robot/package.json index f96cee78ae..738ed9cd73 100644 --- a/src/plugins/packages/robot/package.json +++ b/packages/plugins/robot/package.json @@ -13,11 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/robot/src/Main.vue b/packages/plugins/robot/src/Main.vue similarity index 100% rename from src/plugins/packages/robot/src/Main.vue rename to packages/plugins/robot/src/Main.vue diff --git a/src/plugins/packages/robot/src/js/robotSetting.js b/packages/plugins/robot/src/js/robotSetting.js similarity index 100% rename from src/plugins/packages/robot/src/js/robotSetting.js rename to packages/plugins/robot/src/js/robotSetting.js diff --git a/src/plugins/packages/robot/test/test.js b/packages/plugins/robot/test/test.js similarity index 100% rename from src/plugins/packages/robot/test/test.js rename to packages/plugins/robot/test/test.js diff --git a/src/plugins/packages/robot/vite.config.js b/packages/plugins/robot/vite.config.js similarity index 100% rename from src/plugins/packages/robot/vite.config.js rename to packages/plugins/robot/vite.config.js diff --git a/src/plugins/packages/schema/assets/test.png b/packages/plugins/schema/assets/test.png similarity index 100% rename from src/plugins/packages/schema/assets/test.png rename to packages/plugins/schema/assets/test.png diff --git a/src/plugins/packages/schema/index.js b/packages/plugins/schema/index.js similarity index 100% rename from src/plugins/packages/schema/index.js rename to packages/plugins/schema/index.js diff --git a/src/plugins/packages/schema/mock/test.js b/packages/plugins/schema/mock/test.js similarity index 100% rename from src/plugins/packages/schema/mock/test.js rename to packages/plugins/schema/mock/test.js diff --git a/src/plugins/packages/schema/package.json b/packages/plugins/schema/package.json similarity index 62% rename from src/plugins/packages/schema/package.json rename to packages/plugins/schema/package.json index 20a21b250f..829250d6ec 100644 --- a/src/plugins/packages/schema/package.json +++ b/packages/plugins/schema/package.json @@ -13,11 +13,11 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/schema/src/Main.vue b/packages/plugins/schema/src/Main.vue similarity index 100% rename from src/plugins/packages/schema/src/Main.vue rename to packages/plugins/schema/src/Main.vue diff --git a/src/plugins/packages/schema/test/test.js b/packages/plugins/schema/test/test.js similarity index 100% rename from src/plugins/packages/schema/test/test.js rename to packages/plugins/schema/test/test.js diff --git a/src/plugins/packages/schema/vite.config.js b/packages/plugins/schema/vite.config.js similarity index 100% rename from src/plugins/packages/schema/vite.config.js rename to packages/plugins/schema/vite.config.js diff --git a/src/plugins/packages/script/assets/test.png b/packages/plugins/script/assets/test.png similarity index 100% rename from src/plugins/packages/script/assets/test.png rename to packages/plugins/script/assets/test.png diff --git a/src/plugins/packages/script/index.js b/packages/plugins/script/index.js similarity index 100% rename from src/plugins/packages/script/index.js rename to packages/plugins/script/index.js diff --git a/src/plugins/packages/script/mock/test.js b/packages/plugins/script/mock/test.js similarity index 100% rename from src/plugins/packages/script/mock/test.js rename to packages/plugins/script/mock/test.js diff --git a/src/plugins/packages/script/package.json b/packages/plugins/script/package.json similarity index 58% rename from src/plugins/packages/script/package.json rename to packages/plugins/script/package.json index 908b3a3dc1..49b7115453 100644 --- a/src/plugins/packages/script/package.json +++ b/packages/plugins/script/package.json @@ -13,10 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/script/src/Main.vue b/packages/plugins/script/src/Main.vue similarity index 100% rename from src/plugins/packages/script/src/Main.vue rename to packages/plugins/script/src/Main.vue diff --git a/src/plugins/packages/script/src/js/method.js b/packages/plugins/script/src/js/method.js similarity index 100% rename from src/plugins/packages/script/src/js/method.js rename to packages/plugins/script/src/js/method.js diff --git a/src/plugins/packages/script/test/test.js b/packages/plugins/script/test/test.js similarity index 100% rename from src/plugins/packages/script/test/test.js rename to packages/plugins/script/test/test.js diff --git a/src/plugins/packages/script/vite.config.js b/packages/plugins/script/vite.config.js similarity index 100% rename from src/plugins/packages/script/vite.config.js rename to packages/plugins/script/vite.config.js diff --git a/src/plugins/packages/tree/assets/test.png b/packages/plugins/tree/assets/test.png similarity index 100% rename from src/plugins/packages/tree/assets/test.png rename to packages/plugins/tree/assets/test.png diff --git a/src/plugins/packages/tree/index.js b/packages/plugins/tree/index.js similarity index 100% rename from src/plugins/packages/tree/index.js rename to packages/plugins/tree/index.js diff --git a/src/plugins/packages/tree/mock/test.js b/packages/plugins/tree/mock/test.js similarity index 100% rename from src/plugins/packages/tree/mock/test.js rename to packages/plugins/tree/mock/test.js diff --git a/src/plugins/packages/tree/package.json b/packages/plugins/tree/package.json similarity index 55% rename from src/plugins/packages/tree/package.json rename to packages/plugins/tree/package.json index f3e30fcb20..6a6c94d253 100644 --- a/src/plugins/packages/tree/package.json +++ b/packages/plugins/tree/package.json @@ -13,10 +13,13 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/plugins/packages/tree/src/Main.vue b/packages/plugins/tree/src/Main.vue similarity index 100% rename from src/plugins/packages/tree/src/Main.vue rename to packages/plugins/tree/src/Main.vue diff --git a/src/plugins/packages/tree/test/test.js b/packages/plugins/tree/test/test.js similarity index 100% rename from src/plugins/packages/tree/test/test.js rename to packages/plugins/tree/test/test.js diff --git a/src/plugins/packages/tree/vite.config.js b/packages/plugins/tree/vite.config.js similarity index 100% rename from src/plugins/packages/tree/vite.config.js rename to packages/plugins/tree/vite.config.js diff --git a/src/plugins/packages/tutorial/assets/test.png b/packages/plugins/tutorial/assets/test.png similarity index 100% rename from src/plugins/packages/tutorial/assets/test.png rename to packages/plugins/tutorial/assets/test.png diff --git a/src/plugins/packages/tutorial/index.js b/packages/plugins/tutorial/index.js similarity index 100% rename from src/plugins/packages/tutorial/index.js rename to packages/plugins/tutorial/index.js diff --git a/src/plugins/packages/tutorial/mock/test.js b/packages/plugins/tutorial/mock/test.js similarity index 100% rename from src/plugins/packages/tutorial/mock/test.js rename to packages/plugins/tutorial/mock/test.js diff --git a/src/plugins/packages/tutorial/package.json b/packages/plugins/tutorial/package.json similarity index 62% rename from src/plugins/packages/tutorial/package.json rename to packages/plugins/tutorial/package.json index b77e6a0f7e..bf657c8527 100644 --- a/src/plugins/packages/tutorial/package.json +++ b/packages/plugins/tutorial/package.json @@ -13,12 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", - "vue": "3.2.45", - "marked": "^4.0.17" + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "marked": "^4.0.17", + "vue": "3.2.45" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", diff --git a/src/plugins/packages/tutorial/src/Main.vue b/packages/plugins/tutorial/src/Main.vue similarity index 100% rename from src/plugins/packages/tutorial/src/Main.vue rename to packages/plugins/tutorial/src/Main.vue diff --git a/src/plugins/packages/tutorial/src/TutorialVideoPanel.vue b/packages/plugins/tutorial/src/TutorialVideoPanel.vue similarity index 100% rename from src/plugins/packages/tutorial/src/TutorialVideoPanel.vue rename to packages/plugins/tutorial/src/TutorialVideoPanel.vue diff --git a/src/plugins/packages/tutorial/src/js/http.js b/packages/plugins/tutorial/src/js/http.js similarity index 100% rename from src/plugins/packages/tutorial/src/js/http.js rename to packages/plugins/tutorial/src/js/http.js diff --git a/src/plugins/packages/tutorial/test/test.js b/packages/plugins/tutorial/test/test.js similarity index 100% rename from src/plugins/packages/tutorial/test/test.js rename to packages/plugins/tutorial/test/test.js diff --git a/src/plugins/packages/tutorial/vite.config.js b/packages/plugins/tutorial/vite.config.js similarity index 100% rename from src/plugins/packages/tutorial/vite.config.js rename to packages/plugins/tutorial/vite.config.js diff --git a/src/settings/packages/design/package.json b/packages/settings/design/package.json similarity index 78% rename from src/settings/packages/design/package.json rename to packages/settings/design/package.json index 67aa48c68f..d7c513aff3 100644 --- a/src/settings/packages/design/package.json +++ b/packages/settings/design/package.json @@ -13,8 +13,9 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "sortablejs": "^1.14.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/settings/packages/design/src/App.vue b/packages/settings/design/src/App.vue similarity index 100% rename from src/settings/packages/design/src/App.vue rename to packages/settings/design/src/App.vue diff --git a/src/settings/packages/design/src/assets/materials/ng-bundle.json b/packages/settings/design/src/assets/materials/ng-bundle.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-bundle.json rename to packages/settings/design/src/assets/materials/ng-bundle.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/accordion.json b/packages/settings/design/src/assets/materials/ng-components/accordion.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/accordion.json rename to packages/settings/design/src/assets/materials/ng-components/accordion.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/alert.json b/packages/settings/design/src/assets/materials/ng-components/alert.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/alert.json rename to packages/settings/design/src/assets/materials/ng-components/alert.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/button.json b/packages/settings/design/src/assets/materials/ng-components/button.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/button.json rename to packages/settings/design/src/assets/materials/ng-components/button.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/checkbox.json b/packages/settings/design/src/assets/materials/ng-components/checkbox.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/checkbox.json rename to packages/settings/design/src/assets/materials/ng-components/checkbox.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/container.json b/packages/settings/design/src/assets/materials/ng-components/container.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/container.json rename to packages/settings/design/src/assets/materials/ng-components/container.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/date.json b/packages/settings/design/src/assets/materials/ng-components/date.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/date.json rename to packages/settings/design/src/assets/materials/ng-components/date.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/daterange.json b/packages/settings/design/src/assets/materials/ng-components/daterange.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/daterange.json rename to packages/settings/design/src/assets/materials/ng-components/daterange.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/form.json b/packages/settings/design/src/assets/materials/ng-components/form.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/form.json rename to packages/settings/design/src/assets/materials/ng-components/form.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/formfield.json b/packages/settings/design/src/assets/materials/ng-components/formfield.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/formfield.json rename to packages/settings/design/src/assets/materials/ng-components/formfield.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/halfmodal.json b/packages/settings/design/src/assets/materials/ng-components/halfmodal.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/halfmodal.json rename to packages/settings/design/src/assets/materials/ng-components/halfmodal.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/image.json b/packages/settings/design/src/assets/materials/ng-components/image.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/image.json rename to packages/settings/design/src/assets/materials/ng-components/image.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/index.js b/packages/settings/design/src/assets/materials/ng-components/index.js similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/index.js rename to packages/settings/design/src/assets/materials/ng-components/index.js diff --git a/src/settings/packages/design/src/assets/materials/ng-components/input.json b/packages/settings/design/src/assets/materials/ng-components/input.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/input.json rename to packages/settings/design/src/assets/materials/ng-components/input.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/radio.json b/packages/settings/design/src/assets/materials/ng-components/radio.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/radio.json rename to packages/settings/design/src/assets/materials/ng-components/radio.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/select.json b/packages/settings/design/src/assets/materials/ng-components/select.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/select.json rename to packages/settings/design/src/assets/materials/ng-components/select.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/swiper.json b/packages/settings/design/src/assets/materials/ng-components/swiper.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/swiper.json rename to packages/settings/design/src/assets/materials/ng-components/swiper.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/switch.json b/packages/settings/design/src/assets/materials/ng-components/switch.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/switch.json rename to packages/settings/design/src/assets/materials/ng-components/switch.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/tab.json b/packages/settings/design/src/assets/materials/ng-components/tab.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/tab.json rename to packages/settings/design/src/assets/materials/ng-components/tab.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/table.json b/packages/settings/design/src/assets/materials/ng-components/table.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/table.json rename to packages/settings/design/src/assets/materials/ng-components/table.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/tablefilter.json b/packages/settings/design/src/assets/materials/ng-components/tablefilter.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/tablefilter.json rename to packages/settings/design/src/assets/materials/ng-components/tablefilter.json diff --git a/src/settings/packages/design/src/assets/materials/ng-components/tag.json b/packages/settings/design/src/assets/materials/ng-components/tag.json similarity index 100% rename from src/settings/packages/design/src/assets/materials/ng-components/tag.json rename to packages/settings/design/src/assets/materials/ng-components/tag.json diff --git a/src/settings/packages/design/src/components/ArrayConfigItemForm.vue b/packages/settings/design/src/components/ArrayConfigItemForm.vue similarity index 100% rename from src/settings/packages/design/src/components/ArrayConfigItemForm.vue rename to packages/settings/design/src/components/ArrayConfigItemForm.vue diff --git a/src/settings/packages/design/src/components/ComponentList.vue b/packages/settings/design/src/components/ComponentList.vue similarity index 100% rename from src/settings/packages/design/src/components/ComponentList.vue rename to packages/settings/design/src/components/ComponentList.vue diff --git a/src/settings/packages/design/src/components/PropertyCanvas.vue b/packages/settings/design/src/components/PropertyCanvas.vue similarity index 100% rename from src/settings/packages/design/src/components/PropertyCanvas.vue rename to packages/settings/design/src/components/PropertyCanvas.vue diff --git a/src/settings/packages/design/src/components/PropertyList.vue b/packages/settings/design/src/components/PropertyList.vue similarity index 100% rename from src/settings/packages/design/src/components/PropertyList.vue rename to packages/settings/design/src/components/PropertyList.vue diff --git a/src/settings/packages/design/src/components/SettingPanel.vue b/packages/settings/design/src/components/SettingPanel.vue similarity index 100% rename from src/settings/packages/design/src/components/SettingPanel.vue rename to packages/settings/design/src/components/SettingPanel.vue diff --git a/src/settings/packages/design/src/components/SourceEditor.vue b/packages/settings/design/src/components/SourceEditor.vue similarity index 100% rename from src/settings/packages/design/src/components/SourceEditor.vue rename to packages/settings/design/src/components/SourceEditor.vue diff --git a/src/settings/packages/design/src/components/widgets/index.js b/packages/settings/design/src/components/widgets/index.js similarity index 100% rename from src/settings/packages/design/src/components/widgets/index.js rename to packages/settings/design/src/components/widgets/index.js diff --git a/src/settings/packages/design/src/convertToSchema.js b/packages/settings/design/src/convertToSchema.js similarity index 100% rename from src/settings/packages/design/src/convertToSchema.js rename to packages/settings/design/src/convertToSchema.js diff --git a/src/settings/packages/design/src/lib.js b/packages/settings/design/src/lib.js similarity index 100% rename from src/settings/packages/design/src/lib.js rename to packages/settings/design/src/lib.js diff --git a/src/settings/packages/design/src/main.js b/packages/settings/design/src/main.js similarity index 100% rename from src/settings/packages/design/src/main.js rename to packages/settings/design/src/main.js diff --git a/src/settings/packages/design/src/ng-properties/accordion.json b/packages/settings/design/src/ng-properties/accordion.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/accordion.json rename to packages/settings/design/src/ng-properties/accordion.json diff --git a/src/settings/packages/design/src/ng-properties/alert.json b/packages/settings/design/src/ng-properties/alert.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/alert.json rename to packages/settings/design/src/ng-properties/alert.json diff --git a/src/settings/packages/design/src/ng-properties/button.json b/packages/settings/design/src/ng-properties/button.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/button.json rename to packages/settings/design/src/ng-properties/button.json diff --git a/src/settings/packages/design/src/ng-properties/checkbox.json b/packages/settings/design/src/ng-properties/checkbox.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/checkbox.json rename to packages/settings/design/src/ng-properties/checkbox.json diff --git a/src/settings/packages/design/src/ng-properties/container.json b/packages/settings/design/src/ng-properties/container.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/container.json rename to packages/settings/design/src/ng-properties/container.json diff --git a/src/settings/packages/design/src/ng-properties/date.json b/packages/settings/design/src/ng-properties/date.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/date.json rename to packages/settings/design/src/ng-properties/date.json diff --git a/src/settings/packages/design/src/ng-properties/daterange.json b/packages/settings/design/src/ng-properties/daterange.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/daterange.json rename to packages/settings/design/src/ng-properties/daterange.json diff --git a/src/settings/packages/design/src/ng-properties/form.json b/packages/settings/design/src/ng-properties/form.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/form.json rename to packages/settings/design/src/ng-properties/form.json diff --git a/src/settings/packages/design/src/ng-properties/formfield.json b/packages/settings/design/src/ng-properties/formfield.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/formfield.json rename to packages/settings/design/src/ng-properties/formfield.json diff --git a/src/settings/packages/design/src/ng-properties/halfmodal.json b/packages/settings/design/src/ng-properties/halfmodal.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/halfmodal.json rename to packages/settings/design/src/ng-properties/halfmodal.json diff --git a/src/settings/packages/design/src/ng-properties/image.json b/packages/settings/design/src/ng-properties/image.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/image.json rename to packages/settings/design/src/ng-properties/image.json diff --git a/src/settings/packages/design/src/ng-properties/index.js b/packages/settings/design/src/ng-properties/index.js similarity index 100% rename from src/settings/packages/design/src/ng-properties/index.js rename to packages/settings/design/src/ng-properties/index.js diff --git a/src/settings/packages/design/src/ng-properties/input.json b/packages/settings/design/src/ng-properties/input.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/input.json rename to packages/settings/design/src/ng-properties/input.json diff --git a/src/settings/packages/design/src/ng-properties/radio.json b/packages/settings/design/src/ng-properties/radio.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/radio.json rename to packages/settings/design/src/ng-properties/radio.json diff --git a/src/settings/packages/design/src/ng-properties/select.json b/packages/settings/design/src/ng-properties/select.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/select.json rename to packages/settings/design/src/ng-properties/select.json diff --git a/src/settings/packages/design/src/ng-properties/swiper.json b/packages/settings/design/src/ng-properties/swiper.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/swiper.json rename to packages/settings/design/src/ng-properties/swiper.json diff --git a/src/settings/packages/design/src/ng-properties/switch.json b/packages/settings/design/src/ng-properties/switch.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/switch.json rename to packages/settings/design/src/ng-properties/switch.json diff --git a/src/settings/packages/design/src/ng-properties/tab.json b/packages/settings/design/src/ng-properties/tab.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/tab.json rename to packages/settings/design/src/ng-properties/tab.json diff --git a/src/settings/packages/design/src/ng-properties/table.json b/packages/settings/design/src/ng-properties/table.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/table.json rename to packages/settings/design/src/ng-properties/table.json diff --git a/src/settings/packages/design/src/ng-properties/tablefilter.json b/packages/settings/design/src/ng-properties/tablefilter.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/tablefilter.json rename to packages/settings/design/src/ng-properties/tablefilter.json diff --git a/src/settings/packages/design/src/ng-properties/tag.json b/packages/settings/design/src/ng-properties/tag.json similarity index 100% rename from src/settings/packages/design/src/ng-properties/tag.json rename to packages/settings/design/src/ng-properties/tag.json diff --git a/src/settings/packages/design/src/properties/alert.json b/packages/settings/design/src/properties/alert.json similarity index 100% rename from src/settings/packages/design/src/properties/alert.json rename to packages/settings/design/src/properties/alert.json diff --git a/src/settings/packages/design/src/properties/amount.json b/packages/settings/design/src/properties/amount.json similarity index 100% rename from src/settings/packages/design/src/properties/amount.json rename to packages/settings/design/src/properties/amount.json diff --git a/src/settings/packages/design/src/properties/area.json b/packages/settings/design/src/properties/area.json similarity index 100% rename from src/settings/packages/design/src/properties/area.json rename to packages/settings/design/src/properties/area.json diff --git a/src/settings/packages/design/src/properties/autocomplete.json b/packages/settings/design/src/properties/autocomplete.json similarity index 100% rename from src/settings/packages/design/src/properties/autocomplete.json rename to packages/settings/design/src/properties/autocomplete.json diff --git a/src/settings/packages/design/src/properties/badge.json b/packages/settings/design/src/properties/badge.json similarity index 100% rename from src/settings/packages/design/src/properties/badge.json rename to packages/settings/design/src/properties/badge.json diff --git a/src/settings/packages/design/src/properties/breadcrumb-item.json b/packages/settings/design/src/properties/breadcrumb-item.json similarity index 100% rename from src/settings/packages/design/src/properties/breadcrumb-item.json rename to packages/settings/design/src/properties/breadcrumb-item.json diff --git a/src/settings/packages/design/src/properties/breadcrumb.json b/packages/settings/design/src/properties/breadcrumb.json similarity index 100% rename from src/settings/packages/design/src/properties/breadcrumb.json rename to packages/settings/design/src/properties/breadcrumb.json diff --git a/src/settings/packages/design/src/properties/bulletin-board.json b/packages/settings/design/src/properties/bulletin-board.json similarity index 100% rename from src/settings/packages/design/src/properties/bulletin-board.json rename to packages/settings/design/src/properties/bulletin-board.json diff --git a/src/settings/packages/design/src/properties/button-group.json b/packages/settings/design/src/properties/button-group.json similarity index 100% rename from src/settings/packages/design/src/properties/button-group.json rename to packages/settings/design/src/properties/button-group.json diff --git a/src/settings/packages/design/src/properties/button.json b/packages/settings/design/src/properties/button.json similarity index 100% rename from src/settings/packages/design/src/properties/button.json rename to packages/settings/design/src/properties/button.json diff --git a/src/settings/packages/design/src/properties/calendar.json b/packages/settings/design/src/properties/calendar.json similarity index 100% rename from src/settings/packages/design/src/properties/calendar.json rename to packages/settings/design/src/properties/calendar.json diff --git a/src/settings/packages/design/src/properties/carousel-item.json b/packages/settings/design/src/properties/carousel-item.json similarity index 100% rename from src/settings/packages/design/src/properties/carousel-item.json rename to packages/settings/design/src/properties/carousel-item.json diff --git a/src/settings/packages/design/src/properties/carousel.json b/packages/settings/design/src/properties/carousel.json similarity index 100% rename from src/settings/packages/design/src/properties/carousel.json rename to packages/settings/design/src/properties/carousel.json diff --git a/src/settings/packages/design/src/properties/cascader-panel.json b/packages/settings/design/src/properties/cascader-panel.json similarity index 100% rename from src/settings/packages/design/src/properties/cascader-panel.json rename to packages/settings/design/src/properties/cascader-panel.json diff --git a/src/settings/packages/design/src/properties/cascader-props.json b/packages/settings/design/src/properties/cascader-props.json similarity index 100% rename from src/settings/packages/design/src/properties/cascader-props.json rename to packages/settings/design/src/properties/cascader-props.json diff --git a/src/settings/packages/design/src/properties/cascader.json b/packages/settings/design/src/properties/cascader.json similarity index 100% rename from src/settings/packages/design/src/properties/cascader.json rename to packages/settings/design/src/properties/cascader.json diff --git a/src/settings/packages/design/src/properties/chart-data.json b/packages/settings/design/src/properties/chart-data.json similarity index 100% rename from src/settings/packages/design/src/properties/chart-data.json rename to packages/settings/design/src/properties/chart-data.json diff --git a/src/settings/packages/design/src/properties/chart-pie.json b/packages/settings/design/src/properties/chart-pie.json similarity index 100% rename from src/settings/packages/design/src/properties/chart-pie.json rename to packages/settings/design/src/properties/chart-pie.json diff --git a/src/settings/packages/design/src/properties/chart.json b/packages/settings/design/src/properties/chart.json similarity index 100% rename from src/settings/packages/design/src/properties/chart.json rename to packages/settings/design/src/properties/chart.json diff --git a/src/settings/packages/design/src/properties/checkbox-button.json b/packages/settings/design/src/properties/checkbox-button.json similarity index 100% rename from src/settings/packages/design/src/properties/checkbox-button.json rename to packages/settings/design/src/properties/checkbox-button.json diff --git a/src/settings/packages/design/src/properties/checkbox-group.json b/packages/settings/design/src/properties/checkbox-group.json similarity index 100% rename from src/settings/packages/design/src/properties/checkbox-group.json rename to packages/settings/design/src/properties/checkbox-group.json diff --git a/src/settings/packages/design/src/properties/checkbox.json b/packages/settings/design/src/properties/checkbox.json similarity index 100% rename from src/settings/packages/design/src/properties/checkbox.json rename to packages/settings/design/src/properties/checkbox.json diff --git a/src/settings/packages/design/src/properties/col.json b/packages/settings/design/src/properties/col.json similarity index 100% rename from src/settings/packages/design/src/properties/col.json rename to packages/settings/design/src/properties/col.json diff --git a/src/settings/packages/design/src/properties/collapse-item.json b/packages/settings/design/src/properties/collapse-item.json similarity index 100% rename from src/settings/packages/design/src/properties/collapse-item.json rename to packages/settings/design/src/properties/collapse-item.json diff --git a/src/settings/packages/design/src/properties/collapse.json b/packages/settings/design/src/properties/collapse.json similarity index 100% rename from src/settings/packages/design/src/properties/collapse.json rename to packages/settings/design/src/properties/collapse.json diff --git a/src/settings/packages/design/src/properties/company.json b/packages/settings/design/src/properties/company.json similarity index 100% rename from src/settings/packages/design/src/properties/company.json rename to packages/settings/design/src/properties/company.json diff --git a/src/settings/packages/design/src/properties/container.json b/packages/settings/design/src/properties/container.json similarity index 100% rename from src/settings/packages/design/src/properties/container.json rename to packages/settings/design/src/properties/container.json diff --git a/src/settings/packages/design/src/properties/country.json b/packages/settings/design/src/properties/country.json similarity index 100% rename from src/settings/packages/design/src/properties/country.json rename to packages/settings/design/src/properties/country.json diff --git a/src/settings/packages/design/src/properties/credit-card-form.json b/packages/settings/design/src/properties/credit-card-form.json similarity index 100% rename from src/settings/packages/design/src/properties/credit-card-form.json rename to packages/settings/design/src/properties/credit-card-form.json diff --git a/src/settings/packages/design/src/properties/crop.json b/packages/settings/design/src/properties/crop.json similarity index 100% rename from src/settings/packages/design/src/properties/crop.json rename to packages/settings/design/src/properties/crop.json diff --git a/src/settings/packages/design/src/properties/currency.json b/packages/settings/design/src/properties/currency.json similarity index 100% rename from src/settings/packages/design/src/properties/currency.json rename to packages/settings/design/src/properties/currency.json diff --git a/src/settings/packages/design/src/properties/date-picker-date-format.json b/packages/settings/design/src/properties/date-picker-date-format.json similarity index 100% rename from src/settings/packages/design/src/properties/date-picker-date-format.json rename to packages/settings/design/src/properties/date-picker-date-format.json diff --git a/src/settings/packages/design/src/properties/date-picker-options.json b/packages/settings/design/src/properties/date-picker-options.json similarity index 100% rename from src/settings/packages/design/src/properties/date-picker-options.json rename to packages/settings/design/src/properties/date-picker-options.json diff --git a/src/settings/packages/design/src/properties/date-picker-shortcuts.json b/packages/settings/design/src/properties/date-picker-shortcuts.json similarity index 100% rename from src/settings/packages/design/src/properties/date-picker-shortcuts.json rename to packages/settings/design/src/properties/date-picker-shortcuts.json diff --git a/src/settings/packages/design/src/properties/date-picker.json b/packages/settings/design/src/properties/date-picker.json similarity index 100% rename from src/settings/packages/design/src/properties/date-picker.json rename to packages/settings/design/src/properties/date-picker.json diff --git a/src/settings/packages/design/src/properties/dept.json b/packages/settings/design/src/properties/dept.json similarity index 100% rename from src/settings/packages/design/src/properties/dept.json rename to packages/settings/design/src/properties/dept.json diff --git a/src/settings/packages/design/src/properties/detail-page.json b/packages/settings/design/src/properties/detail-page.json similarity index 100% rename from src/settings/packages/design/src/properties/detail-page.json rename to packages/settings/design/src/properties/detail-page.json diff --git a/src/settings/packages/design/src/properties/dialog-box.json b/packages/settings/design/src/properties/dialog-box.json similarity index 100% rename from src/settings/packages/design/src/properties/dialog-box.json rename to packages/settings/design/src/properties/dialog-box.json diff --git a/src/settings/packages/design/src/properties/drop-roles.json b/packages/settings/design/src/properties/drop-roles.json similarity index 100% rename from src/settings/packages/design/src/properties/drop-roles.json rename to packages/settings/design/src/properties/drop-roles.json diff --git a/src/settings/packages/design/src/properties/drop-times.json b/packages/settings/design/src/properties/drop-times.json similarity index 100% rename from src/settings/packages/design/src/properties/drop-times.json rename to packages/settings/design/src/properties/drop-times.json diff --git a/src/settings/packages/design/src/properties/edoc.json b/packages/settings/design/src/properties/edoc.json similarity index 100% rename from src/settings/packages/design/src/properties/edoc.json rename to packages/settings/design/src/properties/edoc.json diff --git a/src/settings/packages/design/src/properties/espace.json b/packages/settings/design/src/properties/espace.json similarity index 100% rename from src/settings/packages/design/src/properties/espace.json rename to packages/settings/design/src/properties/espace.json diff --git a/src/settings/packages/design/src/properties/fall-menu.json b/packages/settings/design/src/properties/fall-menu.json similarity index 100% rename from src/settings/packages/design/src/properties/fall-menu.json rename to packages/settings/design/src/properties/fall-menu.json diff --git a/src/settings/packages/design/src/properties/file-upload.json b/packages/settings/design/src/properties/file-upload.json similarity index 100% rename from src/settings/packages/design/src/properties/file-upload.json rename to packages/settings/design/src/properties/file-upload.json diff --git a/src/settings/packages/design/src/properties/floatbar.json b/packages/settings/design/src/properties/floatbar.json similarity index 100% rename from src/settings/packages/design/src/properties/floatbar.json rename to packages/settings/design/src/properties/floatbar.json diff --git a/src/settings/packages/design/src/properties/flow-chart.json b/packages/settings/design/src/properties/flow-chart.json similarity index 100% rename from src/settings/packages/design/src/properties/flow-chart.json rename to packages/settings/design/src/properties/flow-chart.json diff --git a/src/settings/packages/design/src/properties/form-item.json b/packages/settings/design/src/properties/form-item.json similarity index 100% rename from src/settings/packages/design/src/properties/form-item.json rename to packages/settings/design/src/properties/form-item.json diff --git a/src/settings/packages/design/src/properties/form.json b/packages/settings/design/src/properties/form.json similarity index 100% rename from src/settings/packages/design/src/properties/form.json rename to packages/settings/design/src/properties/form.json diff --git a/src/settings/packages/design/src/properties/gantt.json b/packages/settings/design/src/properties/gantt.json similarity index 100% rename from src/settings/packages/design/src/properties/gantt.json rename to packages/settings/design/src/properties/gantt.json diff --git a/src/settings/packages/design/src/properties/grid-column.json b/packages/settings/design/src/properties/grid-column.json similarity index 100% rename from src/settings/packages/design/src/properties/grid-column.json rename to packages/settings/design/src/properties/grid-column.json diff --git a/src/settings/packages/design/src/properties/grid-toolbar.json b/packages/settings/design/src/properties/grid-toolbar.json similarity index 100% rename from src/settings/packages/design/src/properties/grid-toolbar.json rename to packages/settings/design/src/properties/grid-toolbar.json diff --git a/src/settings/packages/design/src/properties/grid.json b/packages/settings/design/src/properties/grid.json similarity index 100% rename from src/settings/packages/design/src/properties/grid.json rename to packages/settings/design/src/properties/grid.json diff --git a/src/settings/packages/design/src/properties/hrapprover.json b/packages/settings/design/src/properties/hrapprover.json similarity index 100% rename from src/settings/packages/design/src/properties/hrapprover.json rename to packages/settings/design/src/properties/hrapprover.json diff --git a/src/settings/packages/design/src/properties/image.json b/packages/settings/design/src/properties/image.json similarity index 100% rename from src/settings/packages/design/src/properties/image.json rename to packages/settings/design/src/properties/image.json diff --git a/src/settings/packages/design/src/properties/index.js b/packages/settings/design/src/properties/index.js similarity index 100% rename from src/settings/packages/design/src/properties/index.js rename to packages/settings/design/src/properties/index.js diff --git a/src/settings/packages/design/src/properties/input.json b/packages/settings/design/src/properties/input.json similarity index 100% rename from src/settings/packages/design/src/properties/input.json rename to packages/settings/design/src/properties/input.json diff --git a/src/settings/packages/design/src/properties/ip-address.json b/packages/settings/design/src/properties/ip-address.json similarity index 100% rename from src/settings/packages/design/src/properties/ip-address.json rename to packages/settings/design/src/properties/ip-address.json diff --git a/src/settings/packages/design/src/properties/layout.json b/packages/settings/design/src/properties/layout.json similarity index 100% rename from src/settings/packages/design/src/properties/layout.json rename to packages/settings/design/src/properties/layout.json diff --git a/src/settings/packages/design/src/properties/link-menu.json b/packages/settings/design/src/properties/link-menu.json similarity index 100% rename from src/settings/packages/design/src/properties/link-menu.json rename to packages/settings/design/src/properties/link-menu.json diff --git a/src/settings/packages/design/src/properties/link.json b/packages/settings/design/src/properties/link.json similarity index 100% rename from src/settings/packages/design/src/properties/link.json rename to packages/settings/design/src/properties/link.json diff --git a/src/settings/packages/design/src/properties/loading.json b/packages/settings/design/src/properties/loading.json similarity index 100% rename from src/settings/packages/design/src/properties/loading.json rename to packages/settings/design/src/properties/loading.json diff --git a/src/settings/packages/design/src/properties/locales.json b/packages/settings/design/src/properties/locales.json similarity index 100% rename from src/settings/packages/design/src/properties/locales.json rename to packages/settings/design/src/properties/locales.json diff --git a/src/settings/packages/design/src/properties/logon-user.json b/packages/settings/design/src/properties/logon-user.json similarity index 100% rename from src/settings/packages/design/src/properties/logon-user.json rename to packages/settings/design/src/properties/logon-user.json diff --git a/src/settings/packages/design/src/properties/logout.json b/packages/settings/design/src/properties/logout.json similarity index 100% rename from src/settings/packages/design/src/properties/logout.json rename to packages/settings/design/src/properties/logout.json diff --git a/src/settings/packages/design/src/properties/menu-bar.json b/packages/settings/design/src/properties/menu-bar.json similarity index 100% rename from src/settings/packages/design/src/properties/menu-bar.json rename to packages/settings/design/src/properties/menu-bar.json diff --git a/src/settings/packages/design/src/properties/milestone.json b/packages/settings/design/src/properties/milestone.json similarity index 100% rename from src/settings/packages/design/src/properties/milestone.json rename to packages/settings/design/src/properties/milestone.json diff --git a/src/settings/packages/design/src/properties/modal.json b/packages/settings/design/src/properties/modal.json similarity index 100% rename from src/settings/packages/design/src/properties/modal.json rename to packages/settings/design/src/properties/modal.json diff --git a/src/settings/packages/design/src/properties/nav-menu.json b/packages/settings/design/src/properties/nav-menu.json similarity index 100% rename from src/settings/packages/design/src/properties/nav-menu.json rename to packages/settings/design/src/properties/nav-menu.json diff --git a/src/settings/packages/design/src/properties/numeric.json b/packages/settings/design/src/properties/numeric.json similarity index 100% rename from src/settings/packages/design/src/properties/numeric.json rename to packages/settings/design/src/properties/numeric.json diff --git a/src/settings/packages/design/src/properties/option-group.json b/packages/settings/design/src/properties/option-group.json similarity index 100% rename from src/settings/packages/design/src/properties/option-group.json rename to packages/settings/design/src/properties/option-group.json diff --git a/src/settings/packages/design/src/properties/option.json b/packages/settings/design/src/properties/option.json similarity index 100% rename from src/settings/packages/design/src/properties/option.json rename to packages/settings/design/src/properties/option.json diff --git a/src/settings/packages/design/src/properties/pager.json b/packages/settings/design/src/properties/pager.json similarity index 100% rename from src/settings/packages/design/src/properties/pager.json rename to packages/settings/design/src/properties/pager.json diff --git a/src/settings/packages/design/src/properties/panel.json b/packages/settings/design/src/properties/panel.json similarity index 100% rename from src/settings/packages/design/src/properties/panel.json rename to packages/settings/design/src/properties/panel.json diff --git a/src/settings/packages/design/src/properties/pop-upload.json b/packages/settings/design/src/properties/pop-upload.json similarity index 100% rename from src/settings/packages/design/src/properties/pop-upload.json rename to packages/settings/design/src/properties/pop-upload.json diff --git a/src/settings/packages/design/src/properties/popeditor.json b/packages/settings/design/src/properties/popeditor.json similarity index 100% rename from src/settings/packages/design/src/properties/popeditor.json rename to packages/settings/design/src/properties/popeditor.json diff --git a/src/settings/packages/design/src/properties/popover.json b/packages/settings/design/src/properties/popover.json similarity index 100% rename from src/settings/packages/design/src/properties/popover.json rename to packages/settings/design/src/properties/popover.json diff --git a/src/settings/packages/design/src/properties/progress.json b/packages/settings/design/src/properties/progress.json similarity index 100% rename from src/settings/packages/design/src/properties/progress.json rename to packages/settings/design/src/properties/progress.json diff --git a/src/settings/packages/design/src/properties/radio-button.json b/packages/settings/design/src/properties/radio-button.json similarity index 100% rename from src/settings/packages/design/src/properties/radio-button.json rename to packages/settings/design/src/properties/radio-button.json diff --git a/src/settings/packages/design/src/properties/radio-group.json b/packages/settings/design/src/properties/radio-group.json similarity index 100% rename from src/settings/packages/design/src/properties/radio-group.json rename to packages/settings/design/src/properties/radio-group.json diff --git a/src/settings/packages/design/src/properties/radio.json b/packages/settings/design/src/properties/radio.json similarity index 100% rename from src/settings/packages/design/src/properties/radio.json rename to packages/settings/design/src/properties/radio.json diff --git a/src/settings/packages/design/src/properties/rate.json b/packages/settings/design/src/properties/rate.json similarity index 100% rename from src/settings/packages/design/src/properties/rate.json rename to packages/settings/design/src/properties/rate.json diff --git a/src/settings/packages/design/src/properties/rich-text.json b/packages/settings/design/src/properties/rich-text.json similarity index 100% rename from src/settings/packages/design/src/properties/rich-text.json rename to packages/settings/design/src/properties/rich-text.json diff --git a/src/settings/packages/design/src/properties/roles.json b/packages/settings/design/src/properties/roles.json similarity index 100% rename from src/settings/packages/design/src/properties/roles.json rename to packages/settings/design/src/properties/roles.json diff --git a/src/settings/packages/design/src/properties/row.json b/packages/settings/design/src/properties/row.json similarity index 100% rename from src/settings/packages/design/src/properties/row.json rename to packages/settings/design/src/properties/row.json diff --git a/src/settings/packages/design/src/properties/scroll-text.json b/packages/settings/design/src/properties/scroll-text.json similarity index 100% rename from src/settings/packages/design/src/properties/scroll-text.json rename to packages/settings/design/src/properties/scroll-text.json diff --git a/src/settings/packages/design/src/properties/search.json b/packages/settings/design/src/properties/search.json similarity index 100% rename from src/settings/packages/design/src/properties/search.json rename to packages/settings/design/src/properties/search.json diff --git a/src/settings/packages/design/src/properties/select.json b/packages/settings/design/src/properties/select.json similarity index 100% rename from src/settings/packages/design/src/properties/select.json rename to packages/settings/design/src/properties/select.json diff --git a/src/settings/packages/design/src/properties/slide-bar.json b/packages/settings/design/src/properties/slide-bar.json similarity index 100% rename from src/settings/packages/design/src/properties/slide-bar.json rename to packages/settings/design/src/properties/slide-bar.json diff --git a/src/settings/packages/design/src/properties/slider.json b/packages/settings/design/src/properties/slider.json similarity index 100% rename from src/settings/packages/design/src/properties/slider.json rename to packages/settings/design/src/properties/slider.json diff --git a/src/settings/packages/design/src/properties/split.json b/packages/settings/design/src/properties/split.json similarity index 100% rename from src/settings/packages/design/src/properties/split.json rename to packages/settings/design/src/properties/split.json diff --git a/src/settings/packages/design/src/properties/steps.json b/packages/settings/design/src/properties/steps.json similarity index 100% rename from src/settings/packages/design/src/properties/steps.json rename to packages/settings/design/src/properties/steps.json diff --git a/src/settings/packages/design/src/properties/svg-icon.json b/packages/settings/design/src/properties/svg-icon.json similarity index 100% rename from src/settings/packages/design/src/properties/svg-icon.json rename to packages/settings/design/src/properties/svg-icon.json diff --git a/src/settings/packages/design/src/properties/switch.json b/packages/settings/design/src/properties/switch.json similarity index 100% rename from src/settings/packages/design/src/properties/switch.json rename to packages/settings/design/src/properties/switch.json diff --git a/src/settings/packages/design/src/properties/tabs.json b/packages/settings/design/src/properties/tabs.json similarity index 100% rename from src/settings/packages/design/src/properties/tabs.json rename to packages/settings/design/src/properties/tabs.json diff --git a/src/settings/packages/design/src/properties/tag.json b/packages/settings/design/src/properties/tag.json similarity index 100% rename from src/settings/packages/design/src/properties/tag.json rename to packages/settings/design/src/properties/tag.json diff --git a/src/settings/packages/design/src/properties/text-popup.json b/packages/settings/design/src/properties/text-popup.json similarity index 100% rename from src/settings/packages/design/src/properties/text-popup.json rename to packages/settings/design/src/properties/text-popup.json diff --git a/src/settings/packages/design/src/properties/time-line.json b/packages/settings/design/src/properties/time-line.json similarity index 100% rename from src/settings/packages/design/src/properties/time-line.json rename to packages/settings/design/src/properties/time-line.json diff --git a/src/settings/packages/design/src/properties/time-picker-options.json b/packages/settings/design/src/properties/time-picker-options.json similarity index 100% rename from src/settings/packages/design/src/properties/time-picker-options.json rename to packages/settings/design/src/properties/time-picker-options.json diff --git a/src/settings/packages/design/src/properties/time-picker.json b/packages/settings/design/src/properties/time-picker.json similarity index 100% rename from src/settings/packages/design/src/properties/time-picker.json rename to packages/settings/design/src/properties/time-picker.json diff --git a/src/settings/packages/design/src/properties/time-select-options.json b/packages/settings/design/src/properties/time-select-options.json similarity index 100% rename from src/settings/packages/design/src/properties/time-select-options.json rename to packages/settings/design/src/properties/time-select-options.json diff --git a/src/settings/packages/design/src/properties/time-select.json b/packages/settings/design/src/properties/time-select.json similarity index 100% rename from src/settings/packages/design/src/properties/time-select.json rename to packages/settings/design/src/properties/time-select.json diff --git a/src/settings/packages/design/src/properties/toggle-menu.json b/packages/settings/design/src/properties/toggle-menu.json similarity index 100% rename from src/settings/packages/design/src/properties/toggle-menu.json rename to packages/settings/design/src/properties/toggle-menu.json diff --git a/src/settings/packages/design/src/properties/tooltip.json b/packages/settings/design/src/properties/tooltip.json similarity index 100% rename from src/settings/packages/design/src/properties/tooltip.json rename to packages/settings/design/src/properties/tooltip.json diff --git a/src/settings/packages/design/src/properties/transfer.json b/packages/settings/design/src/properties/transfer.json similarity index 100% rename from src/settings/packages/design/src/properties/transfer.json rename to packages/settings/design/src/properties/transfer.json diff --git a/src/settings/packages/design/src/properties/tree-menu.json b/packages/settings/design/src/properties/tree-menu.json similarity index 100% rename from src/settings/packages/design/src/properties/tree-menu.json rename to packages/settings/design/src/properties/tree-menu.json diff --git a/src/settings/packages/design/src/properties/tree.json b/packages/settings/design/src/properties/tree.json similarity index 100% rename from src/settings/packages/design/src/properties/tree.json rename to packages/settings/design/src/properties/tree.json diff --git a/src/settings/packages/design/src/properties/user-account.json b/packages/settings/design/src/properties/user-account.json similarity index 100% rename from src/settings/packages/design/src/properties/user-account.json rename to packages/settings/design/src/properties/user-account.json diff --git a/src/settings/packages/design/src/properties/user-contact.json b/packages/settings/design/src/properties/user-contact.json similarity index 100% rename from src/settings/packages/design/src/properties/user-contact.json rename to packages/settings/design/src/properties/user-contact.json diff --git a/src/settings/packages/design/src/properties/user-head.json b/packages/settings/design/src/properties/user-head.json similarity index 100% rename from src/settings/packages/design/src/properties/user-head.json rename to packages/settings/design/src/properties/user-head.json diff --git a/src/settings/packages/design/src/properties/user-link.json b/packages/settings/design/src/properties/user-link.json similarity index 100% rename from src/settings/packages/design/src/properties/user-link.json rename to packages/settings/design/src/properties/user-link.json diff --git a/src/settings/packages/design/src/properties/user.json b/packages/settings/design/src/properties/user.json similarity index 100% rename from src/settings/packages/design/src/properties/user.json rename to packages/settings/design/src/properties/user.json diff --git a/src/settings/packages/design/src/properties/wizard.json b/packages/settings/design/src/properties/wizard.json similarity index 100% rename from src/settings/packages/design/src/properties/wizard.json rename to packages/settings/design/src/properties/wizard.json diff --git a/src/settings/packages/design/src/schema/carousel-item.json b/packages/settings/design/src/schema/carousel-item.json similarity index 100% rename from src/settings/packages/design/src/schema/carousel-item.json rename to packages/settings/design/src/schema/carousel-item.json diff --git a/src/settings/packages/design/src/schema/carousel.json b/packages/settings/design/src/schema/carousel.json similarity index 100% rename from src/settings/packages/design/src/schema/carousel.json rename to packages/settings/design/src/schema/carousel.json diff --git a/src/settings/packages/design/src/schemas/button.json b/packages/settings/design/src/schemas/button.json similarity index 100% rename from src/settings/packages/design/src/schemas/button.json rename to packages/settings/design/src/schemas/button.json diff --git a/src/settings/packages/design/src/schemas/checkbox.json b/packages/settings/design/src/schemas/checkbox.json similarity index 100% rename from src/settings/packages/design/src/schemas/checkbox.json rename to packages/settings/design/src/schemas/checkbox.json diff --git a/src/settings/packages/design/src/schemas/checkboxbutton.json b/packages/settings/design/src/schemas/checkboxbutton.json similarity index 100% rename from src/settings/packages/design/src/schemas/checkboxbutton.json rename to packages/settings/design/src/schemas/checkboxbutton.json diff --git a/src/settings/packages/design/src/schemas/checkboxgroup.json b/packages/settings/design/src/schemas/checkboxgroup.json similarity index 100% rename from src/settings/packages/design/src/schemas/checkboxgroup.json rename to packages/settings/design/src/schemas/checkboxgroup.json diff --git a/src/settings/packages/design/src/schemas/collapse.json b/packages/settings/design/src/schemas/collapse.json similarity index 100% rename from src/settings/packages/design/src/schemas/collapse.json rename to packages/settings/design/src/schemas/collapse.json diff --git a/src/settings/packages/design/src/schemas/collapseitem.json b/packages/settings/design/src/schemas/collapseitem.json similarity index 100% rename from src/settings/packages/design/src/schemas/collapseitem.json rename to packages/settings/design/src/schemas/collapseitem.json diff --git a/src/settings/packages/design/src/schemas/dialogbox.json b/packages/settings/design/src/schemas/dialogbox.json similarity index 100% rename from src/settings/packages/design/src/schemas/dialogbox.json rename to packages/settings/design/src/schemas/dialogbox.json diff --git a/src/settings/packages/design/src/schemas/floatbar.json b/packages/settings/design/src/schemas/floatbar.json similarity index 100% rename from src/settings/packages/design/src/schemas/floatbar.json rename to packages/settings/design/src/schemas/floatbar.json diff --git a/src/settings/packages/design/src/schemas/form.json b/packages/settings/design/src/schemas/form.json similarity index 100% rename from src/settings/packages/design/src/schemas/form.json rename to packages/settings/design/src/schemas/form.json diff --git a/src/settings/packages/design/src/schemas/formitem.json b/packages/settings/design/src/schemas/formitem.json similarity index 100% rename from src/settings/packages/design/src/schemas/formitem.json rename to packages/settings/design/src/schemas/formitem.json diff --git a/src/settings/packages/design/src/schemas/grid.json b/packages/settings/design/src/schemas/grid.json similarity index 100% rename from src/settings/packages/design/src/schemas/grid.json rename to packages/settings/design/src/schemas/grid.json diff --git a/src/settings/packages/design/src/schemas/gridcolumn.json b/packages/settings/design/src/schemas/gridcolumn.json similarity index 100% rename from src/settings/packages/design/src/schemas/gridcolumn.json rename to packages/settings/design/src/schemas/gridcolumn.json diff --git a/src/settings/packages/design/src/schemas/index.js b/packages/settings/design/src/schemas/index.js similarity index 100% rename from src/settings/packages/design/src/schemas/index.js rename to packages/settings/design/src/schemas/index.js diff --git a/src/settings/packages/design/src/schemas/input.json b/packages/settings/design/src/schemas/input.json similarity index 100% rename from src/settings/packages/design/src/schemas/input.json rename to packages/settings/design/src/schemas/input.json diff --git a/src/settings/packages/design/src/schemas/pager.json b/packages/settings/design/src/schemas/pager.json similarity index 100% rename from src/settings/packages/design/src/schemas/pager.json rename to packages/settings/design/src/schemas/pager.json diff --git a/src/settings/packages/design/src/schemas/popeditor.json b/packages/settings/design/src/schemas/popeditor.json similarity index 100% rename from src/settings/packages/design/src/schemas/popeditor.json rename to packages/settings/design/src/schemas/popeditor.json diff --git a/src/settings/packages/design/src/schemas/popover.json b/packages/settings/design/src/schemas/popover.json similarity index 100% rename from src/settings/packages/design/src/schemas/popover.json rename to packages/settings/design/src/schemas/popover.json diff --git a/src/settings/packages/design/src/schemas/radio.json b/packages/settings/design/src/schemas/radio.json similarity index 100% rename from src/settings/packages/design/src/schemas/radio.json rename to packages/settings/design/src/schemas/radio.json diff --git a/src/settings/packages/design/src/schemas/search.json b/packages/settings/design/src/schemas/search.json similarity index 100% rename from src/settings/packages/design/src/schemas/search.json rename to packages/settings/design/src/schemas/search.json diff --git a/src/settings/packages/design/src/schemas/select.json b/packages/settings/design/src/schemas/select.json similarity index 100% rename from src/settings/packages/design/src/schemas/select.json rename to packages/settings/design/src/schemas/select.json diff --git a/src/settings/packages/design/src/schemas/switch.json b/packages/settings/design/src/schemas/switch.json similarity index 100% rename from src/settings/packages/design/src/schemas/switch.json rename to packages/settings/design/src/schemas/switch.json diff --git a/src/settings/packages/design/src/schemas/tabitem.json b/packages/settings/design/src/schemas/tabitem.json similarity index 100% rename from src/settings/packages/design/src/schemas/tabitem.json rename to packages/settings/design/src/schemas/tabitem.json diff --git a/src/settings/packages/design/src/schemas/tabs.json b/packages/settings/design/src/schemas/tabs.json similarity index 100% rename from src/settings/packages/design/src/schemas/tabs.json rename to packages/settings/design/src/schemas/tabs.json diff --git a/src/settings/packages/design/src/schemas/time-line.json b/packages/settings/design/src/schemas/time-line.json similarity index 100% rename from src/settings/packages/design/src/schemas/time-line.json rename to packages/settings/design/src/schemas/time-line.json diff --git a/src/settings/packages/design/src/schemas/tooltip.json b/packages/settings/design/src/schemas/tooltip.json similarity index 100% rename from src/settings/packages/design/src/schemas/tooltip.json rename to packages/settings/design/src/schemas/tooltip.json diff --git a/src/settings/packages/design/src/schemas/tree.json b/packages/settings/design/src/schemas/tree.json similarity index 100% rename from src/settings/packages/design/src/schemas/tree.json rename to packages/settings/design/src/schemas/tree.json diff --git a/src/settings/packages/design/src/store/index.js b/packages/settings/design/src/store/index.js similarity index 100% rename from src/settings/packages/design/src/store/index.js rename to packages/settings/design/src/store/index.js diff --git a/src/settings/packages/design/vite.config.js b/packages/settings/design/vite.config.js similarity index 100% rename from src/settings/packages/design/vite.config.js rename to packages/settings/design/vite.config.js diff --git a/src/settings/packages/events/index.js b/packages/settings/events/index.js similarity index 100% rename from src/settings/packages/events/index.js rename to packages/settings/events/index.js diff --git a/src/settings/packages/events/package.json b/packages/settings/events/package.json similarity index 59% rename from src/settings/packages/events/package.json rename to packages/settings/events/package.json index b523d06091..e7c563c30c 100644 --- a/src/settings/packages/events/package.json +++ b/packages/settings/events/package.json @@ -13,11 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/settings/packages/events/src/Main.vue b/packages/settings/events/src/Main.vue similarity index 100% rename from src/settings/packages/events/src/Main.vue rename to packages/settings/events/src/Main.vue diff --git a/src/settings/packages/events/src/commonjs/events.js b/packages/settings/events/src/commonjs/events.js similarity index 100% rename from src/settings/packages/events/src/commonjs/events.js rename to packages/settings/events/src/commonjs/events.js diff --git a/src/settings/packages/events/src/components/AdvanceConfig.vue b/packages/settings/events/src/components/AdvanceConfig.vue similarity index 100% rename from src/settings/packages/events/src/components/AdvanceConfig.vue rename to packages/settings/events/src/components/AdvanceConfig.vue diff --git a/src/settings/packages/events/src/components/BindEvents.vue b/packages/settings/events/src/components/BindEvents.vue similarity index 100% rename from src/settings/packages/events/src/components/BindEvents.vue rename to packages/settings/events/src/components/BindEvents.vue diff --git a/src/settings/packages/events/src/components/BindEventsDialog.vue b/packages/settings/events/src/components/BindEventsDialog.vue similarity index 100% rename from src/settings/packages/events/src/components/BindEventsDialog.vue rename to packages/settings/events/src/components/BindEventsDialog.vue diff --git a/src/settings/packages/events/vite.config.js b/packages/settings/events/vite.config.js similarity index 100% rename from src/settings/packages/events/vite.config.js rename to packages/settings/events/vite.config.js diff --git a/src/settings/packages/props/index.js b/packages/settings/props/index.js similarity index 100% rename from src/settings/packages/props/index.js rename to packages/settings/props/index.js diff --git a/src/settings/packages/props/package.json b/packages/settings/props/package.json similarity index 61% rename from src/settings/packages/props/package.json rename to packages/settings/props/package.json index 08d1fdff8c..414f0d5583 100644 --- a/src/settings/packages/props/package.json +++ b/packages/settings/props/package.json @@ -13,11 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", + "@vueuse/core": "^9.6.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/settings/packages/props/src/Main.vue b/packages/settings/props/src/Main.vue similarity index 100% rename from src/settings/packages/props/src/Main.vue rename to packages/settings/props/src/Main.vue diff --git a/src/settings/packages/props/src/components/Empty.vue b/packages/settings/props/src/components/Empty.vue similarity index 100% rename from src/settings/packages/props/src/components/Empty.vue rename to packages/settings/props/src/components/Empty.vue diff --git a/src/settings/packages/props/src/components/groups/LifeCycle.vue b/packages/settings/props/src/components/groups/LifeCycle.vue similarity index 100% rename from src/settings/packages/props/src/components/groups/LifeCycle.vue rename to packages/settings/props/src/components/groups/LifeCycle.vue diff --git a/src/settings/packages/props/src/components/groups/TableColumn.vue b/packages/settings/props/src/components/groups/TableColumn.vue similarity index 100% rename from src/settings/packages/props/src/components/groups/TableColumn.vue rename to packages/settings/props/src/components/groups/TableColumn.vue diff --git a/src/settings/packages/props/src/components/groups/TablePager.vue b/packages/settings/props/src/components/groups/TablePager.vue similarity index 100% rename from src/settings/packages/props/src/components/groups/TablePager.vue rename to packages/settings/props/src/components/groups/TablePager.vue diff --git a/src/settings/packages/props/src/components/index.js b/packages/settings/props/src/components/index.js similarity index 100% rename from src/settings/packages/props/src/components/index.js rename to packages/settings/props/src/components/index.js diff --git a/src/settings/packages/props/src/components/inputs/BindFunction.vue b/packages/settings/props/src/components/inputs/BindFunction.vue similarity index 95% rename from src/settings/packages/props/src/components/inputs/BindFunction.vue rename to packages/settings/props/src/components/inputs/BindFunction.vue index afa384dcb8..f950db1cd7 100644 --- a/src/settings/packages/props/src/components/inputs/BindFunction.vue +++ b/packages/settings/props/src/components/inputs/BindFunction.vue @@ -13,7 +13,7 @@ import { reactive, ref } from 'vue' import { Button } from '@opentiny/vue' import { useProperties, useResource, useCanvas } from '@opentiny/tiny-engine-controller' -import BindEventsDialog from '@/settings/packages/events/src/components/BindEventsDialog.vue' +import BindEventsDialog from '@/settings/events/src/components/BindEventsDialog.vue' export default { components: { diff --git a/src/settings/packages/props/src/components/inputs/CheckValue.vue b/packages/settings/props/src/components/inputs/CheckValue.vue similarity index 100% rename from src/settings/packages/props/src/components/inputs/CheckValue.vue rename to packages/settings/props/src/components/inputs/CheckValue.vue diff --git a/src/settings/packages/props/src/components/inputs/CodeEditor.vue b/packages/settings/props/src/components/inputs/CodeEditor.vue similarity index 100% rename from src/settings/packages/props/src/components/inputs/CodeEditor.vue rename to packages/settings/props/src/components/inputs/CodeEditor.vue diff --git a/src/settings/packages/props/src/components/inputs/DraggableOptions.vue b/packages/settings/props/src/components/inputs/DraggableOptions.vue similarity index 100% rename from src/settings/packages/props/src/components/inputs/DraggableOptions.vue rename to packages/settings/props/src/components/inputs/DraggableOptions.vue diff --git a/src/settings/packages/props/src/components/inputs/NumericSelect.vue b/packages/settings/props/src/components/inputs/NumericSelect.vue similarity index 100% rename from src/settings/packages/props/src/components/inputs/NumericSelect.vue rename to packages/settings/props/src/components/inputs/NumericSelect.vue diff --git a/src/settings/packages/props/src/components/inputs/SelectOption.vue b/packages/settings/props/src/components/inputs/SelectOption.vue similarity index 100% rename from src/settings/packages/props/src/components/inputs/SelectOption.vue rename to packages/settings/props/src/components/inputs/SelectOption.vue diff --git a/src/settings/packages/props/src/components/inputs/SwitchValue.vue b/packages/settings/props/src/components/inputs/SwitchValue.vue similarity index 100% rename from src/settings/packages/props/src/components/inputs/SwitchValue.vue rename to packages/settings/props/src/components/inputs/SwitchValue.vue diff --git a/src/settings/packages/props/src/components/modal/ModalContent.vue b/packages/settings/props/src/components/modal/ModalContent.vue similarity index 100% rename from src/settings/packages/props/src/components/modal/ModalContent.vue rename to packages/settings/props/src/components/modal/ModalContent.vue diff --git a/src/settings/packages/props/vite.config.js b/packages/settings/props/vite.config.js similarity index 100% rename from src/settings/packages/props/vite.config.js rename to packages/settings/props/vite.config.js diff --git a/src/settings/packages/styles/assets/test.png b/packages/settings/styles/assets/test.png similarity index 100% rename from src/settings/packages/styles/assets/test.png rename to packages/settings/styles/assets/test.png diff --git a/src/settings/packages/styles/index.js b/packages/settings/styles/index.js similarity index 100% rename from src/settings/packages/styles/index.js rename to packages/settings/styles/index.js diff --git a/src/settings/packages/styles/mock/test.js b/packages/settings/styles/mock/test.js similarity index 100% rename from src/settings/packages/styles/mock/test.js rename to packages/settings/styles/mock/test.js diff --git a/src/settings/packages/styles/package.json b/packages/settings/styles/package.json similarity index 58% rename from src/settings/packages/styles/package.json rename to packages/settings/styles/package.json index 79992b126f..179e94d15f 100644 --- a/src/settings/packages/styles/package.json +++ b/packages/settings/styles/package.json @@ -13,11 +13,12 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-canvas": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-http": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-renderless": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/settings/packages/styles/src/Main.vue b/packages/settings/styles/src/Main.vue similarity index 100% rename from src/settings/packages/styles/src/Main.vue rename to packages/settings/styles/src/Main.vue diff --git a/src/settings/packages/styles/src/components/background/BackgroundGroup.vue b/packages/settings/styles/src/components/background/BackgroundGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/BackgroundGroup.vue rename to packages/settings/styles/src/components/background/BackgroundGroup.vue diff --git a/src/settings/packages/styles/src/components/background/BackgroundImageGradient.vue b/packages/settings/styles/src/components/background/BackgroundImageGradient.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/BackgroundImageGradient.vue rename to packages/settings/styles/src/components/background/BackgroundImageGradient.vue diff --git a/src/settings/packages/styles/src/components/background/BackgroundImageSetting.vue b/packages/settings/styles/src/components/background/BackgroundImageSetting.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/BackgroundImageSetting.vue rename to packages/settings/styles/src/components/background/BackgroundImageSetting.vue diff --git a/src/settings/packages/styles/src/components/background/ColorOverlay.vue b/packages/settings/styles/src/components/background/ColorOverlay.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/ColorOverlay.vue rename to packages/settings/styles/src/components/background/ColorOverlay.vue diff --git a/src/settings/packages/styles/src/components/background/ImageSetting.vue b/packages/settings/styles/src/components/background/ImageSetting.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/ImageSetting.vue rename to packages/settings/styles/src/components/background/ImageSetting.vue diff --git a/src/settings/packages/styles/src/components/background/LinearGradient.vue b/packages/settings/styles/src/components/background/LinearGradient.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/LinearGradient.vue rename to packages/settings/styles/src/components/background/LinearGradient.vue diff --git a/src/settings/packages/styles/src/components/background/PositionOrigin.vue b/packages/settings/styles/src/components/background/PositionOrigin.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/PositionOrigin.vue rename to packages/settings/styles/src/components/background/PositionOrigin.vue diff --git a/src/settings/packages/styles/src/components/background/RadialGradient.vue b/packages/settings/styles/src/components/background/RadialGradient.vue similarity index 100% rename from src/settings/packages/styles/src/components/background/RadialGradient.vue rename to packages/settings/styles/src/components/background/RadialGradient.vue diff --git a/src/settings/packages/styles/src/components/border/BorderGroup.vue b/packages/settings/styles/src/components/border/BorderGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/border/BorderGroup.vue rename to packages/settings/styles/src/components/border/BorderGroup.vue diff --git a/src/settings/packages/styles/src/components/effects/EffectGroup.vue b/packages/settings/styles/src/components/effects/EffectGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/effects/EffectGroup.vue rename to packages/settings/styles/src/components/effects/EffectGroup.vue diff --git a/src/settings/packages/styles/src/components/index.js b/packages/settings/styles/src/components/index.js similarity index 100% rename from src/settings/packages/styles/src/components/index.js rename to packages/settings/styles/src/components/index.js diff --git a/src/settings/packages/styles/src/components/inputs/ImageSelect.vue b/packages/settings/styles/src/components/inputs/ImageSelect.vue similarity index 100% rename from src/settings/packages/styles/src/components/inputs/ImageSelect.vue rename to packages/settings/styles/src/components/inputs/ImageSelect.vue diff --git a/src/settings/packages/styles/src/components/inputs/InputSelect.vue b/packages/settings/styles/src/components/inputs/InputSelect.vue similarity index 100% rename from src/settings/packages/styles/src/components/inputs/InputSelect.vue rename to packages/settings/styles/src/components/inputs/InputSelect.vue diff --git a/src/settings/packages/styles/src/components/inputs/ModalMask.vue b/packages/settings/styles/src/components/inputs/ModalMask.vue similarity index 100% rename from src/settings/packages/styles/src/components/inputs/ModalMask.vue rename to packages/settings/styles/src/components/inputs/ModalMask.vue diff --git a/src/settings/packages/styles/src/components/inputs/NumericSelect.vue b/packages/settings/styles/src/components/inputs/NumericSelect.vue similarity index 100% rename from src/settings/packages/styles/src/components/inputs/NumericSelect.vue rename to packages/settings/styles/src/components/inputs/NumericSelect.vue diff --git a/src/settings/packages/styles/src/components/inputs/ResetButton.vue b/packages/settings/styles/src/components/inputs/ResetButton.vue similarity index 100% rename from src/settings/packages/styles/src/components/inputs/ResetButton.vue rename to packages/settings/styles/src/components/inputs/ResetButton.vue diff --git a/src/settings/packages/styles/src/components/layout/FlexBox.vue b/packages/settings/styles/src/components/layout/FlexBox.vue similarity index 100% rename from src/settings/packages/styles/src/components/layout/FlexBox.vue rename to packages/settings/styles/src/components/layout/FlexBox.vue diff --git a/src/settings/packages/styles/src/components/layout/GridBox.vue b/packages/settings/styles/src/components/layout/GridBox.vue similarity index 100% rename from src/settings/packages/styles/src/components/layout/GridBox.vue rename to packages/settings/styles/src/components/layout/GridBox.vue diff --git a/src/settings/packages/styles/src/components/layout/LayoutGroup.vue b/packages/settings/styles/src/components/layout/LayoutGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/layout/LayoutGroup.vue rename to packages/settings/styles/src/components/layout/LayoutGroup.vue diff --git a/src/settings/packages/styles/src/components/position/PositionGroup.vue b/packages/settings/styles/src/components/position/PositionGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/position/PositionGroup.vue rename to packages/settings/styles/src/components/position/PositionGroup.vue diff --git a/src/settings/packages/styles/src/components/shadow/BoxShadowGroup.vue b/packages/settings/styles/src/components/shadow/BoxShadowGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/shadow/BoxShadowGroup.vue rename to packages/settings/styles/src/components/shadow/BoxShadowGroup.vue diff --git a/src/settings/packages/styles/src/components/size/SizeGroup.vue b/packages/settings/styles/src/components/size/SizeGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/size/SizeGroup.vue rename to packages/settings/styles/src/components/size/SizeGroup.vue diff --git a/src/settings/packages/styles/src/components/spacing/SpacingGroup.vue b/packages/settings/styles/src/components/spacing/SpacingGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/spacing/SpacingGroup.vue rename to packages/settings/styles/src/components/spacing/SpacingGroup.vue diff --git a/src/settings/packages/styles/src/components/spacing/SpacingSetting.vue b/packages/settings/styles/src/components/spacing/SpacingSetting.vue similarity index 100% rename from src/settings/packages/styles/src/components/spacing/SpacingSetting.vue rename to packages/settings/styles/src/components/spacing/SpacingSetting.vue diff --git a/src/settings/packages/styles/src/components/typography/TypographyGroup.vue b/packages/settings/styles/src/components/typography/TypographyGroup.vue similarity index 100% rename from src/settings/packages/styles/src/components/typography/TypographyGroup.vue rename to packages/settings/styles/src/components/typography/TypographyGroup.vue diff --git a/src/settings/packages/styles/src/components/typography/TypographyMore.vue b/packages/settings/styles/src/components/typography/TypographyMore.vue similarity index 100% rename from src/settings/packages/styles/src/components/typography/TypographyMore.vue rename to packages/settings/styles/src/components/typography/TypographyMore.vue diff --git a/src/settings/packages/styles/src/js/cssConvert.js b/packages/settings/styles/src/js/cssConvert.js similarity index 100% rename from src/settings/packages/styles/src/js/cssConvert.js rename to packages/settings/styles/src/js/cssConvert.js diff --git a/src/settings/packages/styles/src/js/cssType.js b/packages/settings/styles/src/js/cssType.js similarity index 100% rename from src/settings/packages/styles/src/js/cssType.js rename to packages/settings/styles/src/js/cssType.js diff --git a/src/settings/packages/styles/src/js/styleProperty.js b/packages/settings/styles/src/js/styleProperty.js similarity index 100% rename from src/settings/packages/styles/src/js/styleProperty.js rename to packages/settings/styles/src/js/styleProperty.js diff --git a/src/settings/packages/styles/src/js/useEditor.js b/packages/settings/styles/src/js/useEditor.js similarity index 100% rename from src/settings/packages/styles/src/js/useEditor.js rename to packages/settings/styles/src/js/useEditor.js diff --git a/src/settings/packages/styles/src/js/useEvent.js b/packages/settings/styles/src/js/useEvent.js similarity index 100% rename from src/settings/packages/styles/src/js/useEvent.js rename to packages/settings/styles/src/js/useEvent.js diff --git a/src/settings/packages/styles/src/js/useLayout.js b/packages/settings/styles/src/js/useLayout.js similarity index 100% rename from src/settings/packages/styles/src/js/useLayout.js rename to packages/settings/styles/src/js/useLayout.js diff --git a/src/settings/packages/styles/src/js/useStyle.js b/packages/settings/styles/src/js/useStyle.js similarity index 100% rename from src/settings/packages/styles/src/js/useStyle.js rename to packages/settings/styles/src/js/useStyle.js diff --git a/src/settings/packages/styles/test/test.js b/packages/settings/styles/test/test.js similarity index 100% rename from src/settings/packages/styles/test/test.js rename to packages/settings/styles/test/test.js diff --git a/src/settings/packages/styles/vite.config.js b/packages/settings/styles/vite.config.js similarity index 100% rename from src/settings/packages/styles/vite.config.js rename to packages/settings/styles/vite.config.js diff --git a/src/svgs/index.js b/packages/svgs/index.js similarity index 100% rename from src/svgs/index.js rename to packages/svgs/index.js diff --git a/src/svgs/mock/test.js b/packages/svgs/mock/test.js similarity index 100% rename from src/svgs/mock/test.js rename to packages/svgs/mock/test.js diff --git a/src/svgs/package.json b/packages/svgs/package.json similarity index 85% rename from src/svgs/package.json rename to packages/svgs/package.json index 11dc6ca5ce..38a45c1204 100644 --- a/src/svgs/package.json +++ b/packages/svgs/package.json @@ -13,7 +13,8 @@ "dist" ], "dependencies": { - "@opentiny/vue": "^3.8.0", + "@opentiny/vue": "~3.10.0", + "@opentiny/vue-icon": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/svgs/src/Main.vue b/packages/svgs/src/Main.vue similarity index 100% rename from src/svgs/src/Main.vue rename to packages/svgs/src/Main.vue diff --git a/src/svgs/test/test.js b/packages/svgs/test/test.js similarity index 100% rename from src/svgs/test/test.js rename to packages/svgs/test/test.js diff --git a/src/svgs/vite.config.js b/packages/svgs/vite.config.js similarity index 100% rename from src/svgs/vite.config.js rename to packages/svgs/vite.config.js diff --git a/src/theme/packages/common/base.less b/packages/theme/common/base.less similarity index 100% rename from src/theme/packages/common/base.less rename to packages/theme/common/base.less diff --git a/src/theme/packages/common/global.less b/packages/theme/common/global.less similarity index 100% rename from src/theme/packages/common/global.less rename to packages/theme/common/global.less diff --git a/src/theme/packages/dark/base.less b/packages/theme/dark/base.less similarity index 100% rename from src/theme/packages/dark/base.less rename to packages/theme/dark/base.less diff --git a/src/theme/packages/dark/block.less b/packages/theme/dark/block.less similarity index 100% rename from src/theme/packages/dark/block.less rename to packages/theme/dark/block.less diff --git a/src/theme/packages/dark/bridge.less b/packages/theme/dark/bridge.less similarity index 100% rename from src/theme/packages/dark/bridge.less rename to packages/theme/dark/bridge.less diff --git a/src/theme/packages/dark/button.less b/packages/theme/dark/button.less similarity index 100% rename from src/theme/packages/dark/button.less rename to packages/theme/dark/button.less diff --git a/src/theme/packages/dark/canvas.less b/packages/theme/dark/canvas.less similarity index 100% rename from src/theme/packages/dark/canvas.less rename to packages/theme/dark/canvas.less diff --git a/src/theme/packages/dark/datasource.less b/packages/theme/dark/datasource.less similarity index 100% rename from src/theme/packages/dark/datasource.less rename to packages/theme/dark/datasource.less diff --git a/src/theme/packages/dark/events.less b/packages/theme/dark/events.less similarity index 100% rename from src/theme/packages/dark/events.less rename to packages/theme/dark/events.less diff --git a/src/theme/packages/dark/gpt-dialog.less b/packages/theme/dark/gpt-dialog.less similarity index 100% rename from src/theme/packages/dark/gpt-dialog.less rename to packages/theme/dark/gpt-dialog.less diff --git a/src/theme/packages/dark/help.less b/packages/theme/dark/help.less similarity index 100% rename from src/theme/packages/dark/help.less rename to packages/theme/dark/help.less diff --git a/src/theme/packages/dark/i18n.less b/packages/theme/dark/i18n.less similarity index 100% rename from src/theme/packages/dark/i18n.less rename to packages/theme/dark/i18n.less diff --git a/src/theme/packages/dark/index.less b/packages/theme/dark/index.less similarity index 100% rename from src/theme/packages/dark/index.less rename to packages/theme/dark/index.less diff --git a/src/theme/packages/dark/life-cycles.less b/packages/theme/dark/life-cycles.less similarity index 100% rename from src/theme/packages/dark/life-cycles.less rename to packages/theme/dark/life-cycles.less diff --git a/src/theme/packages/dark/materials.less b/packages/theme/dark/materials.less similarity index 100% rename from src/theme/packages/dark/materials.less rename to packages/theme/dark/materials.less diff --git a/src/theme/packages/dark/metaComponent.less b/packages/theme/dark/metaComponent.less similarity index 100% rename from src/theme/packages/dark/metaComponent.less rename to packages/theme/dark/metaComponent.less diff --git a/src/theme/packages/dark/package.json b/packages/theme/dark/package.json similarity index 100% rename from src/theme/packages/dark/package.json rename to packages/theme/dark/package.json diff --git a/src/theme/packages/dark/pageManage.less b/packages/theme/dark/pageManage.less similarity index 100% rename from src/theme/packages/dark/pageManage.less rename to packages/theme/dark/pageManage.less diff --git a/src/theme/packages/dark/plugin-js.less b/packages/theme/dark/plugin-js.less similarity index 100% rename from src/theme/packages/dark/plugin-js.less rename to packages/theme/dark/plugin-js.less diff --git a/src/theme/packages/dark/radio.less b/packages/theme/dark/radio.less similarity index 100% rename from src/theme/packages/dark/radio.less rename to packages/theme/dark/radio.less diff --git a/src/theme/packages/dark/scrollbar.less b/packages/theme/dark/scrollbar.less similarity index 100% rename from src/theme/packages/dark/scrollbar.less rename to packages/theme/dark/scrollbar.less diff --git a/src/theme/packages/dark/settings.less b/packages/theme/dark/settings.less similarity index 100% rename from src/theme/packages/dark/settings.less rename to packages/theme/dark/settings.less diff --git a/src/theme/packages/dark/tiny-checkbox.less b/packages/theme/dark/tiny-checkbox.less similarity index 100% rename from src/theme/packages/dark/tiny-checkbox.less rename to packages/theme/dark/tiny-checkbox.less diff --git a/src/theme/packages/dark/tiny-collapse.less b/packages/theme/dark/tiny-collapse.less similarity index 100% rename from src/theme/packages/dark/tiny-collapse.less rename to packages/theme/dark/tiny-collapse.less diff --git a/src/theme/packages/dark/tiny-dialog-box.less b/packages/theme/dark/tiny-dialog-box.less similarity index 100% rename from src/theme/packages/dark/tiny-dialog-box.less rename to packages/theme/dark/tiny-dialog-box.less diff --git a/src/theme/packages/dark/tiny-grid.less b/packages/theme/dark/tiny-grid.less similarity index 100% rename from src/theme/packages/dark/tiny-grid.less rename to packages/theme/dark/tiny-grid.less diff --git a/src/theme/packages/dark/tiny-input.less b/packages/theme/dark/tiny-input.less similarity index 100% rename from src/theme/packages/dark/tiny-input.less rename to packages/theme/dark/tiny-input.less diff --git a/src/theme/packages/dark/tiny-modal.less b/packages/theme/dark/tiny-modal.less similarity index 100% rename from src/theme/packages/dark/tiny-modal.less rename to packages/theme/dark/tiny-modal.less diff --git a/src/theme/packages/dark/tiny-notify.less b/packages/theme/dark/tiny-notify.less similarity index 100% rename from src/theme/packages/dark/tiny-notify.less rename to packages/theme/dark/tiny-notify.less diff --git a/src/theme/packages/dark/tiny-numeric.less b/packages/theme/dark/tiny-numeric.less similarity index 100% rename from src/theme/packages/dark/tiny-numeric.less rename to packages/theme/dark/tiny-numeric.less diff --git a/src/theme/packages/dark/tiny-search.less b/packages/theme/dark/tiny-search.less similarity index 100% rename from src/theme/packages/dark/tiny-search.less rename to packages/theme/dark/tiny-search.less diff --git a/src/theme/packages/dark/tiny-switch.less b/packages/theme/dark/tiny-switch.less similarity index 100% rename from src/theme/packages/dark/tiny-switch.less rename to packages/theme/dark/tiny-switch.less diff --git a/src/theme/packages/dark/tiny-tabs.less b/packages/theme/dark/tiny-tabs.less similarity index 100% rename from src/theme/packages/dark/tiny-tabs.less rename to packages/theme/dark/tiny-tabs.less diff --git a/src/theme/packages/dark/toolbar.less b/packages/theme/dark/toolbar.less similarity index 100% rename from src/theme/packages/dark/toolbar.less rename to packages/theme/dark/toolbar.less diff --git a/src/theme/packages/dark/tree.less b/packages/theme/dark/tree.less similarity index 100% rename from src/theme/packages/dark/tree.less rename to packages/theme/dark/tree.less diff --git a/src/theme/packages/dark/tutorial.less b/packages/theme/dark/tutorial.less similarity index 100% rename from src/theme/packages/dark/tutorial.less rename to packages/theme/dark/tutorial.less diff --git a/src/theme/packages/dark/variable.less b/packages/theme/dark/variable.less similarity index 100% rename from src/theme/packages/dark/variable.less rename to packages/theme/dark/variable.less diff --git a/src/theme/packages/dark/vite.config.js b/packages/theme/dark/vite.config.js similarity index 100% rename from src/theme/packages/dark/vite.config.js rename to packages/theme/dark/vite.config.js diff --git a/src/theme/packages/light/base.less b/packages/theme/light/base.less similarity index 100% rename from src/theme/packages/light/base.less rename to packages/theme/light/base.less diff --git a/src/theme/packages/light/block.less b/packages/theme/light/block.less similarity index 100% rename from src/theme/packages/light/block.less rename to packages/theme/light/block.less diff --git a/src/theme/packages/light/bridge.less b/packages/theme/light/bridge.less similarity index 100% rename from src/theme/packages/light/bridge.less rename to packages/theme/light/bridge.less diff --git a/src/theme/packages/light/button.less b/packages/theme/light/button.less similarity index 100% rename from src/theme/packages/light/button.less rename to packages/theme/light/button.less diff --git a/src/theme/packages/light/canvas.less b/packages/theme/light/canvas.less similarity index 100% rename from src/theme/packages/light/canvas.less rename to packages/theme/light/canvas.less diff --git a/src/theme/packages/light/datasource.less b/packages/theme/light/datasource.less similarity index 100% rename from src/theme/packages/light/datasource.less rename to packages/theme/light/datasource.less diff --git a/src/theme/packages/light/events.less b/packages/theme/light/events.less similarity index 100% rename from src/theme/packages/light/events.less rename to packages/theme/light/events.less diff --git a/src/theme/packages/light/gpt-dialog.less b/packages/theme/light/gpt-dialog.less similarity index 100% rename from src/theme/packages/light/gpt-dialog.less rename to packages/theme/light/gpt-dialog.less diff --git a/src/theme/packages/light/help.less b/packages/theme/light/help.less similarity index 100% rename from src/theme/packages/light/help.less rename to packages/theme/light/help.less diff --git a/src/theme/packages/light/i18n.less b/packages/theme/light/i18n.less similarity index 100% rename from src/theme/packages/light/i18n.less rename to packages/theme/light/i18n.less diff --git a/src/theme/packages/light/index.less b/packages/theme/light/index.less similarity index 100% rename from src/theme/packages/light/index.less rename to packages/theme/light/index.less diff --git a/src/theme/packages/light/life-cycles.less b/packages/theme/light/life-cycles.less similarity index 100% rename from src/theme/packages/light/life-cycles.less rename to packages/theme/light/life-cycles.less diff --git a/src/theme/packages/light/materials.less b/packages/theme/light/materials.less similarity index 100% rename from src/theme/packages/light/materials.less rename to packages/theme/light/materials.less diff --git a/src/theme/packages/light/metaComponent.less b/packages/theme/light/metaComponent.less similarity index 100% rename from src/theme/packages/light/metaComponent.less rename to packages/theme/light/metaComponent.less diff --git a/src/theme/packages/light/package.json b/packages/theme/light/package.json similarity index 100% rename from src/theme/packages/light/package.json rename to packages/theme/light/package.json diff --git a/src/theme/packages/light/pageManage.less b/packages/theme/light/pageManage.less similarity index 100% rename from src/theme/packages/light/pageManage.less rename to packages/theme/light/pageManage.less diff --git a/src/theme/packages/light/plugin-js.less b/packages/theme/light/plugin-js.less similarity index 100% rename from src/theme/packages/light/plugin-js.less rename to packages/theme/light/plugin-js.less diff --git a/src/theme/packages/light/radio.less b/packages/theme/light/radio.less similarity index 100% rename from src/theme/packages/light/radio.less rename to packages/theme/light/radio.less diff --git a/src/theme/packages/light/scrollbar.less b/packages/theme/light/scrollbar.less similarity index 100% rename from src/theme/packages/light/scrollbar.less rename to packages/theme/light/scrollbar.less diff --git a/src/theme/packages/light/settings.less b/packages/theme/light/settings.less similarity index 100% rename from src/theme/packages/light/settings.less rename to packages/theme/light/settings.less diff --git a/src/theme/packages/light/tiny-collapse.less b/packages/theme/light/tiny-collapse.less similarity index 100% rename from src/theme/packages/light/tiny-collapse.less rename to packages/theme/light/tiny-collapse.less diff --git a/src/theme/packages/light/tiny-dialog-box.less b/packages/theme/light/tiny-dialog-box.less similarity index 100% rename from src/theme/packages/light/tiny-dialog-box.less rename to packages/theme/light/tiny-dialog-box.less diff --git a/src/theme/packages/light/tiny-grid.less b/packages/theme/light/tiny-grid.less similarity index 100% rename from src/theme/packages/light/tiny-grid.less rename to packages/theme/light/tiny-grid.less diff --git a/src/theme/packages/light/tiny-input.less b/packages/theme/light/tiny-input.less similarity index 100% rename from src/theme/packages/light/tiny-input.less rename to packages/theme/light/tiny-input.less diff --git a/src/theme/packages/light/tiny-modal.less b/packages/theme/light/tiny-modal.less similarity index 100% rename from src/theme/packages/light/tiny-modal.less rename to packages/theme/light/tiny-modal.less diff --git a/src/theme/packages/light/tiny-notify.less b/packages/theme/light/tiny-notify.less similarity index 100% rename from src/theme/packages/light/tiny-notify.less rename to packages/theme/light/tiny-notify.less diff --git a/src/theme/packages/light/tiny-numeric.less b/packages/theme/light/tiny-numeric.less similarity index 100% rename from src/theme/packages/light/tiny-numeric.less rename to packages/theme/light/tiny-numeric.less diff --git a/src/theme/packages/light/tiny-search.less b/packages/theme/light/tiny-search.less similarity index 100% rename from src/theme/packages/light/tiny-search.less rename to packages/theme/light/tiny-search.less diff --git a/src/theme/packages/light/tiny-switch.less b/packages/theme/light/tiny-switch.less similarity index 100% rename from src/theme/packages/light/tiny-switch.less rename to packages/theme/light/tiny-switch.less diff --git a/src/theme/packages/light/toolbar.less b/packages/theme/light/toolbar.less similarity index 100% rename from src/theme/packages/light/toolbar.less rename to packages/theme/light/toolbar.less diff --git a/src/theme/packages/light/tree.less b/packages/theme/light/tree.less similarity index 100% rename from src/theme/packages/light/tree.less rename to packages/theme/light/tree.less diff --git a/src/theme/packages/light/tutorial.less b/packages/theme/light/tutorial.less similarity index 100% rename from src/theme/packages/light/tutorial.less rename to packages/theme/light/tutorial.less diff --git a/src/theme/packages/light/variable.less b/packages/theme/light/variable.less similarity index 100% rename from src/theme/packages/light/variable.less rename to packages/theme/light/variable.less diff --git a/src/theme/packages/light/vite.config.js b/packages/theme/light/vite.config.js similarity index 100% rename from src/theme/packages/light/vite.config.js rename to packages/theme/light/vite.config.js diff --git a/src/toolbars/packages/breadcrumb/assets/test.png b/packages/toolbars/breadcrumb/assets/test.png similarity index 100% rename from src/toolbars/packages/breadcrumb/assets/test.png rename to packages/toolbars/breadcrumb/assets/test.png diff --git a/src/toolbars/packages/breadcrumb/index.js b/packages/toolbars/breadcrumb/index.js similarity index 100% rename from src/toolbars/packages/breadcrumb/index.js rename to packages/toolbars/breadcrumb/index.js diff --git a/src/toolbars/packages/breadcrumb/mock/test.js b/packages/toolbars/breadcrumb/mock/test.js similarity index 100% rename from src/toolbars/packages/breadcrumb/mock/test.js rename to packages/toolbars/breadcrumb/mock/test.js diff --git a/src/toolbars/packages/breadcrumb/package.json b/packages/toolbars/breadcrumb/package.json similarity index 74% rename from src/toolbars/packages/breadcrumb/package.json rename to packages/toolbars/breadcrumb/package.json index 5f93d1f043..baab6242b7 100644 --- a/src/toolbars/packages/breadcrumb/package.json +++ b/packages/toolbars/breadcrumb/package.json @@ -13,8 +13,9 @@ "dist" ], "dependencies": { - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/toolbars/packages/breadcrumb/src/Main.vue b/packages/toolbars/breadcrumb/src/Main.vue similarity index 100% rename from src/toolbars/packages/breadcrumb/src/Main.vue rename to packages/toolbars/breadcrumb/src/Main.vue diff --git a/src/toolbars/packages/breadcrumb/test/test.js b/packages/toolbars/breadcrumb/test/test.js similarity index 100% rename from src/toolbars/packages/breadcrumb/test/test.js rename to packages/toolbars/breadcrumb/test/test.js diff --git a/src/toolbars/packages/breadcrumb/vite.config.js b/packages/toolbars/breadcrumb/vite.config.js similarity index 100% rename from src/toolbars/packages/breadcrumb/vite.config.js rename to packages/toolbars/breadcrumb/vite.config.js diff --git a/src/toolbars/packages/clean/assets/test.png b/packages/toolbars/clean/assets/test.png similarity index 100% rename from src/toolbars/packages/clean/assets/test.png rename to packages/toolbars/clean/assets/test.png diff --git a/src/toolbars/packages/clean/index.js b/packages/toolbars/clean/index.js similarity index 100% rename from src/toolbars/packages/clean/index.js rename to packages/toolbars/clean/index.js diff --git a/src/toolbars/packages/clean/mock/test.js b/packages/toolbars/clean/mock/test.js similarity index 100% rename from src/toolbars/packages/clean/mock/test.js rename to packages/toolbars/clean/mock/test.js diff --git a/src/toolbars/packages/clean/package.json b/packages/toolbars/clean/package.json similarity index 74% rename from src/toolbars/packages/clean/package.json rename to packages/toolbars/clean/package.json index 948485cbbb..bd8268e3c7 100644 --- a/src/toolbars/packages/clean/package.json +++ b/packages/toolbars/clean/package.json @@ -13,7 +13,9 @@ "dist" ], "dependencies": { - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/toolbars/packages/clean/src/Main.vue b/packages/toolbars/clean/src/Main.vue similarity index 100% rename from src/toolbars/packages/clean/src/Main.vue rename to packages/toolbars/clean/src/Main.vue diff --git a/src/toolbars/packages/clean/test/test.js b/packages/toolbars/clean/test/test.js similarity index 100% rename from src/toolbars/packages/clean/test/test.js rename to packages/toolbars/clean/test/test.js diff --git a/src/toolbars/packages/clean/vite.config.js b/packages/toolbars/clean/vite.config.js similarity index 100% rename from src/toolbars/packages/clean/vite.config.js rename to packages/toolbars/clean/vite.config.js diff --git a/src/toolbars/packages/collaboration/assets/test.png b/packages/toolbars/collaboration/assets/test.png similarity index 100% rename from src/toolbars/packages/collaboration/assets/test.png rename to packages/toolbars/collaboration/assets/test.png diff --git a/src/toolbars/packages/collaboration/index.js b/packages/toolbars/collaboration/index.js similarity index 100% rename from src/toolbars/packages/collaboration/index.js rename to packages/toolbars/collaboration/index.js diff --git a/src/toolbars/packages/collaboration/mock/test.js b/packages/toolbars/collaboration/mock/test.js similarity index 100% rename from src/toolbars/packages/collaboration/mock/test.js rename to packages/toolbars/collaboration/mock/test.js diff --git a/src/toolbars/packages/collaboration/package.json b/packages/toolbars/collaboration/package.json similarity index 82% rename from src/toolbars/packages/collaboration/package.json rename to packages/toolbars/collaboration/package.json index a59c661134..f8b592ddcf 100644 --- a/src/toolbars/packages/collaboration/package.json +++ b/packages/toolbars/collaboration/package.json @@ -13,7 +13,8 @@ "dist" ], "dependencies": { - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/toolbars/packages/collaboration/src/Main.vue b/packages/toolbars/collaboration/src/Main.vue similarity index 100% rename from src/toolbars/packages/collaboration/src/Main.vue rename to packages/toolbars/collaboration/src/Main.vue diff --git a/src/toolbars/packages/collaboration/test/test.js b/packages/toolbars/collaboration/test/test.js similarity index 100% rename from src/toolbars/packages/collaboration/test/test.js rename to packages/toolbars/collaboration/test/test.js diff --git a/src/toolbars/packages/collaboration/vite.config.js b/packages/toolbars/collaboration/vite.config.js similarity index 100% rename from src/toolbars/packages/collaboration/vite.config.js rename to packages/toolbars/collaboration/vite.config.js diff --git a/src/toolbars/packages/fullscreen/assets/test.png b/packages/toolbars/fullscreen/assets/test.png similarity index 100% rename from src/toolbars/packages/fullscreen/assets/test.png rename to packages/toolbars/fullscreen/assets/test.png diff --git a/src/toolbars/packages/fullscreen/index.js b/packages/toolbars/fullscreen/index.js similarity index 100% rename from src/toolbars/packages/fullscreen/index.js rename to packages/toolbars/fullscreen/index.js diff --git a/src/toolbars/packages/fullscreen/mock/test.js b/packages/toolbars/fullscreen/mock/test.js similarity index 100% rename from src/toolbars/packages/fullscreen/mock/test.js rename to packages/toolbars/fullscreen/mock/test.js diff --git a/src/toolbars/packages/fullscreen/package.json b/packages/toolbars/fullscreen/package.json similarity index 83% rename from src/toolbars/packages/fullscreen/package.json rename to packages/toolbars/fullscreen/package.json index 37b9bb6891..888a4d5b20 100644 --- a/src/toolbars/packages/fullscreen/package.json +++ b/packages/toolbars/fullscreen/package.json @@ -13,7 +13,8 @@ "dist" ], "dependencies": { - "@opentiny/vue": "^3.8.0", + "@opentiny/tiny-engine-common": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "vue": "3.2.45" }, "devDependencies": { diff --git a/src/toolbars/packages/fullscreen/src/Main.vue b/packages/toolbars/fullscreen/src/Main.vue similarity index 100% rename from src/toolbars/packages/fullscreen/src/Main.vue rename to packages/toolbars/fullscreen/src/Main.vue diff --git a/src/toolbars/packages/fullscreen/test/test.js b/packages/toolbars/fullscreen/test/test.js similarity index 100% rename from src/toolbars/packages/fullscreen/test/test.js rename to packages/toolbars/fullscreen/test/test.js diff --git a/src/toolbars/packages/fullscreen/vite.config.js b/packages/toolbars/fullscreen/vite.config.js similarity index 100% rename from src/toolbars/packages/fullscreen/vite.config.js rename to packages/toolbars/fullscreen/vite.config.js diff --git a/src/toolbars/packages/generate-vue/index.js b/packages/toolbars/generate-vue/index.js similarity index 100% rename from src/toolbars/packages/generate-vue/index.js rename to packages/toolbars/generate-vue/index.js diff --git a/src/toolbars/packages/generate-vue/package.json b/packages/toolbars/generate-vue/package.json similarity index 64% rename from src/toolbars/packages/generate-vue/package.json rename to packages/toolbars/generate-vue/package.json index b5a6382aa5..0427cb0f14 100644 --- a/src/toolbars/packages/generate-vue/package.json +++ b/packages/toolbars/generate-vue/package.json @@ -13,11 +13,11 @@ "dist" ], "dependencies": { - "@opentiny/vue": "^3.8.0", - "@opentiny/tiny-engine-controller": "^1.0.0", - "@opentiny/tiny-engine-common": "^1.0.0", - "@opentiny/tiny-engine-utils": "^1.0.0", - "@opentiny/tiny-engine-canvas": "^1.0.0", + "@opentiny/tiny-engine-canvas": "workspace:^1.0.0", + "@opentiny/tiny-engine-controller": "workspace:^1.0.0", + "@opentiny/tiny-engine-http": "workspace:^1.0.0", + "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/vue": "~3.10.0", "prettier": "2.7.1", "vue": "3.2.45" }, diff --git a/src/toolbars/packages/generate-vue/src/FileSelector.vue b/packages/toolbars/generate-vue/src/FileSelector.vue similarity index 98% rename from src/toolbars/packages/generate-vue/src/FileSelector.vue rename to packages/toolbars/generate-vue/src/FileSelector.vue index 8a105f0383..7d98f5f682 100644 --- a/src/toolbars/packages/generate-vue/src/FileSelector.vue +++ b/packages/toolbars/generate-vue/src/FileSelector.vue @@ -35,9 +35,8 @@ diff --git a/packages/plugins/materials/src/component/Main.vue b/packages/plugins/materials/src/component/Main.vue index 5a53125ac3..fc8f6f670e 100644 --- a/packages/plugins/materials/src/component/Main.vue +++ b/packages/plugins/materials/src/component/Main.vue @@ -117,6 +117,8 @@ export default { diff --git a/packages/builtinComponent/src/components/CanvasRow.vue b/packages/builtinComponent/src/components/CanvasRow.vue new file mode 100644 index 0000000000..5c7ba54d59 --- /dev/null +++ b/packages/builtinComponent/src/components/CanvasRow.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/packages/builtinComponent/src/components/CanvasRowColContainer.vue b/packages/builtinComponent/src/components/CanvasRowColContainer.vue new file mode 100644 index 0000000000..ad46e409dd --- /dev/null +++ b/packages/builtinComponent/src/components/CanvasRowColContainer.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/packages/builtinComponent/src/components/helper.js b/packages/builtinComponent/src/components/helper.js new file mode 100644 index 0000000000..59200272ed --- /dev/null +++ b/packages/builtinComponent/src/components/helper.js @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +export const getStyleValue = (value) => { + if (typeof value === 'number' || /^\d+\.?\d*$/.test(value)) { + return `${value}px` + } + + if (/^\d+\.?\d*(px|%|pt|em|rem|vw|vh)$/.test(value)) { + return value + } + + return '' +} + +export const alignMap = { + 'flex-start': 'flex-start', + 'flex-end': 'flex-end', + center: 'center', + stretch: 'stretch', + start: 'start', + end: 'end' +} + +export const justAlignMap = { + 'space-between': 'space-between', + 'space-around': 'space-around', + 'space-evenly': 'space-evenly', + 'flex-start': 'flex-start', + 'flex-end': 'flex-end', + stretch: 'stretch', + center: 'center', + start: 'start', + end: 'end', + left: 'left', + right: 'right' +} diff --git a/packages/builtinComponent/src/meta/CanvasCol.json b/packages/builtinComponent/src/meta/CanvasCol.json new file mode 100644 index 0000000000..33c68b5dff --- /dev/null +++ b/packages/builtinComponent/src/meta/CanvasCol.json @@ -0,0 +1,196 @@ +{ + "components": { + "icon": "Box", + "name": { + "zh_CN": "CanvasCol" + }, + "component": "CanvasCol", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "widthType", + "type": "String", + "defaultValue": "auto", + "label": { + "text": { + "zh_CN": "宽度类型" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaRadioGroup", + "props": { + "options": [ + { "label": "auto", "text": "自适应" }, + { "label": "fixed", "text": "固定" } + ], + "type": "button" + } + } + }, + { + "property": "flexBasis", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "固定宽度" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "rowGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "行间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "colGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "align", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "副轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "stretch", "label": "拉伸对齐" } + ], + "type": "button" + } + } + }, + { + "property": "justAlign", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "主轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "space-between", "label": "两端对齐" }, + { "value": "space-evenly", "label": "均分对齐" } + ], + "type": "button" + } + } + }, + { + "property": "grow", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "增长" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "shrink", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "收缩" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSwitch", + "props": {} + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true, + "isContainer": true, + "nestingRule": { + "childWhitelist": [], + "descendantBlacklist": [] + } + } + } +} diff --git a/packages/builtinComponent/src/meta/CanvasRow.json b/packages/builtinComponent/src/meta/CanvasRow.json new file mode 100644 index 0000000000..5033b30ba6 --- /dev/null +++ b/packages/builtinComponent/src/meta/CanvasRow.json @@ -0,0 +1,142 @@ +{ + "components": { + "icon": "Box", + "name": { + "zh_CN": "CanvasRow" + }, + "component": "CanvasRow", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "minHeight", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "最小高度" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "rowGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "行间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "colGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + }, + { + "property": "align", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "副轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "stretch", "label": "拉伸对齐" } + ], + "type": "button" + } + } + }, + { + "property": "justAlign", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "主轴对齐" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaSelect", + "props": { + "options": [ + { "value": "flex-start", "label": "头部对齐" }, + { "value": "center", "label": "中间对齐" }, + { "value": "flex-end", "label": "尾端对齐" }, + { "value": "space-between", "label": "两端对齐" }, + { "value": "space-evenly", "label": "均分对齐" } + ], + "type": "button" + } + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true, + "isContainer": true, + "nestingRule": { + "childWhitelist": [], + "descendantBlacklist": [] + } + } + } +} diff --git a/packages/builtinComponent/src/meta/CanvasRowColContainer.json b/packages/builtinComponent/src/meta/CanvasRowColContainer.json new file mode 100644 index 0000000000..e363530f6f --- /dev/null +++ b/packages/builtinComponent/src/meta/CanvasRowColContainer.json @@ -0,0 +1,96 @@ +{ + "components": { + "icon": "Box", + "name": { + "zh_CN": "行列容器" + }, + "component": "CanvasRowColContainer", + "schema": { + "slots": {}, + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "rowGap", + "type": "String", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "行间距" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "MetaInput", + "props": {} + } + } + ] + } + ], + "events": {}, + "shortcuts": { + "properties": [] + }, + "contentMenu": { + "actions": [] + } + }, + "configure": { + "loop": true, + "isContainer": true, + "nestingRule": { + "childWhitelist": [], + "descendantBlacklist": [] + } + } + }, + "snippets": { + "name": { + "zh_CN": "行列容器" + }, + "screenshot": "", + "snippetName": "CanvasRowColContainer", + "icon": "Box", + "schema": { + "componentName": "CanvasRowColContainer", + "props": { + "rowGap": "20px" + }, + "children": [ + { + "componentName": "CanvasRow", + "props": { + "rowGap": "20px", + "colGap": "20px" + }, + "children": [ + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + } + } + ] + } + ] + } + } +} diff --git a/packages/builtinComponent/src/meta/index.js b/packages/builtinComponent/src/meta/index.js new file mode 100644 index 0000000000..fa2fca60d1 --- /dev/null +++ b/packages/builtinComponent/src/meta/index.js @@ -0,0 +1,18 @@ +import CanvasCol from './CanvasCol.json' +import CanvasRow from './CanvasRow.json' +import CanvasRowColContainer from './CanvasRowColContainer.json' + +export default { + components: [ + { + group: '内置组件', + children: [{ ...CanvasCol.components }, { ...CanvasRow.components }, { ...CanvasRowColContainer.components }] + } + ], + snippets: [ + { + group: '内置组件', + children: [{ ...CanvasRowColContainer.snippets }] + } + ] +} diff --git a/packages/builtinComponent/vite.config.js b/packages/builtinComponent/vite.config.js new file mode 100644 index 0000000000..62ca318c05 --- /dev/null +++ b/packages/builtinComponent/vite.config.js @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' + +export default defineConfig({ + plugins: [vue(), vueJsx()], + publicDir: false, + build: { + cssCodeSplit: false, + lib: { + entry: path.resolve(__dirname, './index.js'), + name: 'builtinComponent', + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + output: { + banner: 'import "./style.css"' + }, + external: ['vue'] + } + } +}) diff --git a/packages/canvas/package.json b/packages/canvas/package.json index 46d96690a5..50205d607f 100644 --- a/packages/canvas/package.json +++ b/packages/canvas/package.json @@ -32,6 +32,7 @@ "@opentiny/tiny-engine-i18n-host": "workspace:^1.0.0", "@opentiny/tiny-engine-utils": "workspace:^1.0.0", "@opentiny/tiny-engine-webcomponent-core": "workspace:^1.0.0", + "@opentiny/tiny-engine-builtin-component": "workspace:*", "@opentiny/vue": "~3.10.0", "@opentiny/vue-icon": "~3.10.0", "@opentiny/vue-renderless": "~3.10.0", diff --git a/packages/canvas/src/components/builtin/builtin.json b/packages/canvas/src/components/builtin/builtin.json index 44aaa49f3a..9673698c8f 100644 --- a/packages/canvas/src/components/builtin/builtin.json +++ b/packages/canvas/src/components/builtin/builtin.json @@ -432,399 +432,6 @@ "configure": { "loop": true } - }, - { - "icon": "Box", - "name": { - "zh_CN": "CanvasRow" - }, - "component": "CanvasRow", - "schema": { - "slots": {}, - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [ - { - "property": "minHeight", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "最小高度" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaInput", - "props": {} - } - }, - { - "property": "rowGap", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "行间距" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaInput", - "props": {} - } - }, - { - "property": "colGap", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "列间距" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaInput", - "props": {} - } - }, - { - "property": "align", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "副轴对齐" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaSelect", - "props": { - "options": [ - { "value": "flex-start", "label": "头部对齐" }, - { "value": "center", "label": "中间对齐" }, - { "value": "flex-end", "label": "尾端对齐" }, - { "value": "stretch", "label": "拉伸对齐" } - ], - "type": "button" - } - } - }, - { - "property": "justAlign", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "主轴对齐" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaSelect", - "props": { - "options": [ - { "value": "flex-start", "label": "头部对齐" }, - { "value": "center", "label": "中间对齐" }, - { "value": "flex-end", "label": "尾端对齐" }, - { "value": "space-between", "label": "两端对齐" }, - { "value": "space-evenly", "label": "均分对齐" } - ], - "type": "button" - } - } - } - ] - } - ], - "events": {}, - "shortcuts": { - "properties": [] - }, - "contentMenu": { - "actions": [] - } - }, - "configure": { - "loop": true, - "isContainer": true, - "nestingRule": { - "childWhitelist": [], - "descendantBlacklist": [] - } - } - }, - { - "icon": "Box", - "name": { - "zh_CN": "CanvasCol" - }, - "component": "CanvasCol", - "schema": { - "slots": {}, - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [ - { - "property": "widthType", - "type": "String", - "defaultValue": "auto", - "label": { - "text": { - "zh_CN": "宽度类型" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaRadioGroup", - "props": { - "options": [ - { "label": "auto", "text": "自适应" }, - { "label": "fixed", "text": "固定" } - ], - "type": "button" - } - } - }, - { - "property": "flexBasis", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "固定宽度" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaInput", - "props": {} - } - }, - { - "property": "rowGap", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "行间距" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaInput", - "props": {} - } - }, - { - "property": "colGap", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "列间距" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaInput", - "props": {} - } - }, - { - "property": "align", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "副轴对齐" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaSelect", - "props": { - "options": [ - { "value": "flex-start", "label": "头部对齐" }, - { "value": "center", "label": "中间对齐" }, - { "value": "flex-end", "label": "尾端对齐" }, - { "value": "stretch", "label": "拉伸对齐" } - ], - "type": "button" - } - } - }, - { - "property": "justAlign", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "主轴对齐" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaSelect", - "props": { - "options": [ - { "value": "flex-start", "label": "头部对齐" }, - { "value": "center", "label": "中间对齐" }, - { "value": "flex-end", "label": "尾端对齐" }, - { "value": "space-between", "label": "两端对齐" }, - { "value": "space-evenly", "label": "均分对齐" } - ], - "type": "button" - } - } - }, - { - "property": "grow", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "增长" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaSwitch", - "props": {} - } - }, - { - "property": "shrink", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "收缩" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaSwitch", - "props": {} - } - } - ] - } - ], - "events": {}, - "shortcuts": { - "properties": [] - }, - "contentMenu": { - "actions": [] - } - }, - "configure": { - "loop": true, - "isContainer": true, - "nestingRule": { - "childWhitelist": [], - "descendantBlacklist": [] - } - } - }, - { - "icon": "Box", - "name": { - "zh_CN": "行列容器" - }, - "component": "CanvasRowColContainer", - "schema": { - "slots": {}, - "properties": [ - { - "label": { - "zh_CN": "基础信息" - }, - "description": { - "zh_CN": "基础信息" - }, - "collapse": { - "number": 6, - "text": { - "zh_CN": "显示更多" - } - }, - "content": [ - { - "property": "rowGap", - "type": "String", - "defaultValue": "", - "label": { - "text": { - "zh_CN": "行间距" - } - }, - "cols": 12, - "rules": [], - "widget": { - "component": "MetaInput", - "props": {} - } - } - ] - } - ], - "events": {}, - "shortcuts": { - "properties": [] - }, - "contentMenu": { - "actions": [] - } - }, - "configure": { - "loop": true, - "isContainer": true, - "nestingRule": { - "childWhitelist": [], - "descendantBlacklist": [] - } - } } ] } @@ -911,41 +518,6 @@ "style": "width: 200px; height: 200px" } } - }, - { - "name": { - "zh_CN": "行列容器" - }, - "screenshot": "", - "snippetName": "CanvasRowColContainer", - "icon": "Box", - "schema": { - "componentName": "CanvasRowColContainer", - "props": { - "rowGap": "20px" - }, - "children": [ - { - "componentName": "CanvasRow", - "props": { - "rowGap": "20px", - "colGap": "20px" - }, - "children": [ - { - "componentName": "CanvasCol", - "props": { - "rowGap": "20px", - "colGap": "20px", - "grow": true, - "shrink": true, - "widthType": "auto" - } - } - ] - } - ] - } } ] } diff --git a/packages/canvas/src/components/builtin/index.js b/packages/canvas/src/components/builtin/index.js index 42be89f5c3..f857ff1a18 100644 --- a/packages/canvas/src/components/builtin/index.js +++ b/packages/canvas/src/components/builtin/index.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import CanvasText from './CanvasText.vue' import CanvasBox from './CanvasBox.vue' @@ -16,18 +16,6 @@ import CanvasCollection from './CanvasCollection.vue' import CanvasIcon from './CanvasIcon.vue' import CanvasSlot from './CanvasSlot.vue' import CanvasImg from './CanvasImg.vue' -import CanvasRow from './CanvasRow.vue' -import CanvasCol from './CanvasCol.vue' -import CanvasRowColContainer from './CanvasRowColContainer.vue' +import CanvasPlaceholder from './CanvasPlaceholder.vue' -export { - CanvasText, - CanvasBox, - CanvasCollection, - CanvasIcon, - CanvasSlot, - CanvasImg, - CanvasRow, - CanvasCol, - CanvasRowColContainer -} +export { CanvasText, CanvasBox, CanvasCollection, CanvasIcon, CanvasSlot, CanvasImg, CanvasPlaceholder } diff --git a/packages/canvas/src/components/render/render.js b/packages/canvas/src/components/render/render.js index dacd2a9f66..f6d36f9ba9 100644 --- a/packages/canvas/src/components/render/render.js +++ b/packages/canvas/src/components/render/render.js @@ -17,6 +17,7 @@ import { constants, utils } from '@opentiny/tiny-engine-utils' import babelPluginJSX from '@vue/babel-plugin-jsx' import { transformSync } from '@babel/core' import i18nHost from '@opentiny/tiny-engine-i18n-host' +import { CanvasRow, CanvasCol, CanvasRowColContainer } from '@opentiny/tiny-engine-builtin-component' import { context, conditions, setNode } from './context' import { CanvasBox, @@ -25,9 +26,7 @@ import { CanvasText, CanvasSlot, CanvasImg, - CanvasRow, - CanvasCol, - CanvasRowColContainer + CanvasPlaceholder } from '../builtin' import { NODE_UID as DESIGN_UIDKEY, NODE_TAG as DESIGN_TAGKEY, NODE_LOOP as DESIGN_LOOPID } from '../common' @@ -61,7 +60,8 @@ const Mapper = { Img: CanvasImg, CanvasRow, CanvasCol, - CanvasRowColContainer + CanvasRowColContainer, + CanvasPlaceholder } const { post } = useBroadcastChannel({ name: BROADCAST_CHANNEL.Notify }) @@ -495,7 +495,6 @@ const stopEvent = (event) => { return false } - const generateSlotGroup = (children, isCustomElm) => { const slotGroup = {} @@ -538,6 +537,10 @@ const getBindProps = (schema, scope) => { const { id, componentName } = schema const invalidity = configure[componentName]?.invalidity || [] + if (componentName === 'CanvasPlaceholder') { + return {} + } + const bindProps = { ...parseData(schema.props, scope), [DESIGN_UIDKEY]: id, @@ -612,21 +615,34 @@ const renderGroup = (children, scope, parent) => { }) } +const ContainerComponent = ['CanvasCol', 'CanvasRow', 'CanvasRowColContainer'] + const getChildren = (schema, mergeScope) => { const { componentName, children } = schema + let renderChildren = children + + if (ContainerComponent.includes(componentName) && !renderChildren?.length) { + renderChildren = [ + { + componentName: 'CanvasPlaceholder' + } + ] + } const isNative = typeof component === 'string' const isCustomElm = customElements[componentName] const isGroup = checkGroup(componentName) - if (Array.isArray(children)) { + if (Array.isArray(renderChildren)) { if (isNative || isCustomElm) { - return renderDefault(children, mergeScope, schema) + return renderDefault(renderChildren, mergeScope, schema) } else { - return isGroup ? renderGroup(children, mergeScope, schema) : renderSlot(children, mergeScope, schema, isCustomElm) + return isGroup + ? renderGroup(renderChildren, mergeScope, schema) + : renderSlot(renderChildren, mergeScope, schema, isCustomElm) } } else { - return parseData(children, mergeScope) + return parseData(renderChildren, mergeScope) } } diff --git a/packages/controller/package.json b/packages/controller/package.json index 52711a1826..195ef2baab 100644 --- a/packages/controller/package.json +++ b/packages/controller/package.json @@ -33,6 +33,7 @@ "@opentiny/tiny-engine-common": "workspace:^1.0.0", "@opentiny/tiny-engine-http": "workspace:^1.0.0", "@opentiny/tiny-engine-utils": "workspace:^1.0.0", + "@opentiny/tiny-engine-builtin-component": "workspace:*", "@opentiny/vue": "~3.10.0", "@opentiny/vue-renderless": "~3.10.0", "@vue/shared": "^3.3.4", diff --git a/packages/controller/src/useResource.js b/packages/controller/src/useResource.js index 597a7489cc..cce041c57f 100644 --- a/packages/controller/src/useResource.js +++ b/packages/controller/src/useResource.js @@ -15,13 +15,14 @@ import { getGlobalConfig } from './globalConfig' import { useHttp } from '@opentiny/tiny-engine-http' import { utils, constants } from '@opentiny/tiny-engine-utils' import { Builtin, addScript, addStyle, canvasDispatch } from '@opentiny/tiny-engine-canvas' +import { getCanvasStatus } from '@opentiny/tiny-engine-common/js/index' +import { meta as BuiltinComponentMaterials } from '@opentiny/tiny-engine-builtin-component' import useApp from './useApp' import useCanvas from './useCanvas' import useTranslate from './useTranslate' import useEditorInfo from './useEditorInfo' import useBreadcrumb from './useBreadcrumb' import useLayout from './useLayout' -import { getCanvasStatus } from '@opentiny/tiny-engine-common/js/index' import useBlock from './useBlock' import useNotify from './useNotify' @@ -371,8 +372,15 @@ const fetchResource = async ({ isInit = true } = {}) => { const { id, type } = useEditorInfo().useInfo() useApp().appInfoState.selectedId = id - Builtin.data.materials.components[0]?.children.map(registerComponent) - resState.components.push(...Builtin.data.materials.snippets) + Builtin.data.materials.components[0].children.map(registerComponent) + BuiltinComponentMaterials.components[0].children.map(registerComponent) + + const builtinSnippets = { + group: '内置组件', + children: [...Builtin.data.materials.snippets[0].children, ...BuiltinComponentMaterials.snippets[0].children] + } + + resState.components.push(builtinSnippets) const appData = await useHttp().get(`/app-center/v1/api/apps/schema/${id}`) resState.pageTree = appData.componentsTree diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js index 6c9c858f81..24599c9df9 100644 --- a/packages/design-core/vite.config.js +++ b/packages/design-core/vite.config.js @@ -171,7 +171,8 @@ const devAlias = { '@opentiny/tiny-engine-theme': path.resolve(__dirname, `../theme/${lowcodeConfig.theme}/index.less`), '@opentiny/tiny-engine-utils': path.resolve(__dirname, '../utils/src/index.js'), '@opentiny/tiny-engine-webcomponent-core': path.resolve(__dirname, '../webcomponent/src/lib.js'), - '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../i18n/src/lib.js') + '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../i18n/src/lib.js'), + '@opentiny/tiny-engine-builtin-component': path.resolve(__dirname, '../builtinComponent/index.js') } const devVueAlias = { diff --git a/packages/vue-generator/.gitignore b/packages/vue-generator/.gitignore new file mode 100644 index 0000000000..d180ec5e28 --- /dev/null +++ b/packages/vue-generator/.gitignore @@ -0,0 +1 @@ +test/testcases/full/**/result/* diff --git a/packages/vue-generator/package.json b/packages/vue-generator/package.json index db8abc3e8f..742c1b98b5 100644 --- a/packages/vue-generator/package.json +++ b/packages/vue-generator/package.json @@ -26,6 +26,7 @@ "license": "MIT", "homepage": "https://opentiny.design/tiny-engine", "dependencies": { + "@opentiny/tiny-engine-builtin-component": "workspace:*", "@vue/compiler-sfc": "3.2.45", "@vue/shared": "^3.3.4", "vue": "3.2.45", diff --git a/packages/vue-generator/src/constant/index.js b/packages/vue-generator/src/constant/index.js index 987a5c26ff..e0d66e209f 100644 --- a/packages/vue-generator/src/constant/index.js +++ b/packages/vue-generator/src/constant/index.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ /** * 组件映射关系,默认使用 Tiny Vue 组件,支持传入其它组件库的映射关系 @@ -2173,6 +2173,31 @@ const DEFAULT_COMPONENTS_MAP = [ } ] +// 内置组件映射关系 +const BUILTIN_COMPONENTS_MAP = [ + { + componentName: 'CanvasRow', + exportName: 'CanvasRow', + package: '@opentiny/tiny-engine-builtin-component', + version: '^0.1.0', + destructuring: true + }, + { + componentName: 'CanvasCol', + exportName: 'CanvasCol', + package: '@opentiny/tiny-engine-builtin-component', + version: '^0.1.0', + destructuring: true + }, + { + componentName: 'CanvasRowColContainer', + exportName: 'CanvasRowColContainer', + package: '@opentiny/tiny-engine-builtin-component', + version: '^0.1.0', + destructuring: true + } +] + /** * 内部保留组件名称,出码时可能需要特殊处理 */ @@ -2210,4 +2235,4 @@ export const [JS_EXPRESSION, JS_FUNCTION, JS_I18N, JS_RESOURCE, JS_SLOT] = [ 'JSSlot' ] -export { DEFAULT_COMPONENTS_MAP, BUILTIN_COMPONENT_NAME, TINY_ICON, UNWRAP_QUOTES } +export { DEFAULT_COMPONENTS_MAP, BUILTIN_COMPONENT_NAME, TINY_ICON, UNWRAP_QUOTES, BUILTIN_COMPONENTS_MAP } diff --git a/packages/vue-generator/src/generator/page.js b/packages/vue-generator/src/generator/page.js index 2bf835f818..d331e20a81 100644 --- a/packages/vue-generator/src/generator/page.js +++ b/packages/vue-generator/src/generator/page.js @@ -31,7 +31,8 @@ import { JS_FUNCTION, JS_RESOURCE, JS_SLOT, - TINY_ICON + TINY_ICON, + BUILTIN_COMPONENTS_MAP } from '../constant' function recurseChildren(children, state, description, result) { @@ -269,7 +270,7 @@ const generateImports = (description, moduleName, type, componentsMap) => { return exportName } - return exportName ? `${exportName} as ${componentName}` : `${componentName}` + return exportName && exportName !== componentName ? `${exportName} as ${componentName}` : `${componentName}` }) imports.push(`import { ${items.join(',')} } from '${pkgName}'`) @@ -496,7 +497,7 @@ const generateCode = ({ pageInfo, componentsMap = [], blocksData = [] }) => { const validComponents = componentsMap.filter( ({ componentName, package: pkg, main }) => componentName && (pkg || typeof main === 'string') ) - const allComponents = [...validComponents, ...DEFAULT_COMPONENTS_MAP] + const allComponents = [...validComponents, ...DEFAULT_COMPONENTS_MAP, ...BUILTIN_COMPONENTS_MAP] // 对象数组,去重 const allComponentsMap = new Map() diff --git a/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/blocks.schema.json b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/blocks.schema.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/blocks.schema.json @@ -0,0 +1 @@ +[] diff --git a/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/components-map.json b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/components-map.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/components-map.json @@ -0,0 +1 @@ +[] diff --git a/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/page.schema.json b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/page.schema.json new file mode 100644 index 0000000000..a66f018a39 --- /dev/null +++ b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/input/page.schema.json @@ -0,0 +1,161 @@ +{ + "state": {}, + "methods": {}, + "componentName": "Page", + "fileName": "createVm", + "css": "", + "props": {}, + "lifeCycles": {}, + "children": [ + { + "componentName": "CanvasRowColContainer", + "props": { + "rowGap": "20px" + }, + "children": [ + { + "componentName": "CanvasRow", + "props": { + "rowGap": "20px", + "colGap": "20px" + }, + "children": [ + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + }, + "id": "4514b344" + }, + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + }, + "children": [], + "id": "3664a254" + } + ], + "id": "63553246" + }, + { + "componentName": "CanvasRow", + "props": { + "rowGap": "20px", + "colGap": "20px" + }, + "children": [ + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + }, + "id": "2c13444f", + "children": [ + { + "componentName": "CanvasRow", + "props": { + "rowGap": "20px", + "colGap": "20px" + }, + "children": [ + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + }, + "children": [], + "id": "24256327" + } + ], + "id": "56453426" + }, + { + "componentName": "CanvasRow", + "props": { + "rowGap": "20px", + "colGap": "20px" + }, + "children": [ + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + }, + "id": "5451f224" + } + ], + "id": "26364626" + }, + { + "componentName": "CanvasRow", + "props": { + "rowGap": "20px", + "colGap": "20px" + }, + "children": [ + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + }, + "children": [], + "id": "26232436" + } + ], + "id": "52555445" + } + ] + }, + { + "componentName": "CanvasCol", + "props": { + "rowGap": "20px", + "colGap": "20px", + "grow": true, + "shrink": true, + "widthType": "auto" + }, + "children": [], + "id": "53553563" + } + ], + "id": "53b5fe13" + } + ], + "id": "25452c43" + } + ], + "dataSource": { + "list": [] + }, + "bridge": { + "imports": [] + }, + "inputs": [], + "outputs": [] +} diff --git a/packages/vue-generator/test/testcases/full/case4_canvasrow-component/output/BuiltInComponent.vue b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/output/BuiltInComponent.vue new file mode 100644 index 0000000000..4ac5f6aad0 --- /dev/null +++ b/packages/vue-generator/test/testcases/full/case4_canvasrow-component/output/BuiltInComponent.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/packages/vue-generator/test/testcases/full/index.config.js b/packages/vue-generator/test/testcases/full/index.config.js index 2a6ccea621..6d6c8a064e 100644 --- a/packages/vue-generator/test/testcases/full/index.config.js +++ b/packages/vue-generator/test/testcases/full/index.config.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ module.exports = { description: @@ -28,6 +28,11 @@ module.exports = { name: 'case3_state-accessor', pageName: 'UseStateAccessor', description: '测试区块的 state 支持 accessor 协议' + }, + { + name: 'case4_canvasrow-component', + pageName: 'BuiltInComponent', + description: '测试内置组件 CanvasRow、CanvasCol、CanvasRowColContainer' } ], input: { diff --git a/packages/vue-generator/test/testcases/full/index.js b/packages/vue-generator/test/testcases/full/index.js index bddead5472..7f9d2b8ea0 100644 --- a/packages/vue-generator/test/testcases/full/index.js +++ b/packages/vue-generator/test/testcases/full/index.js @@ -1,20 +1,20 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ const path = require('path') const fs = require('fs-extra') const prettier = require('prettier') const { execSync } = require('child_process') -const { generateCode } = require('../../../dist/lowcode-dsl-vue.cjs.js') +const { generateCode } = require('../../../dist/tiny-engine-dsl-vue.cjs') const { logger } = require('../../utils/logger') const getPageData = (testCaseFile) => { From 5260f7d95900b92c5b39968f7e0fa3fbdce76fb4 Mon Sep 17 00:00:00 2001 From: wenmine Date: Thu, 23 Nov 2023 19:20:19 +0800 Subject: [PATCH 037/322] =?UTF-8?q?=E6=B7=BB=E5=8A=A0eslint&=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8C=96=E6=9E=84=E5=BB=BA=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintignore | 2 + .github/PULL_REQUEST_TEMPLATE.md | 15 +++- .../PULL_REQUEST_TEMPLATE.zh-CN.md | 52 ++++++++++++ .github/workflows/push-check.yml | 36 ++++++++ CONTRIBUTING.md | 9 +- CONTRIBUTING.zh-CN.md | 17 ++-- README.en-US.md | 84 ------------------- 7 files changed, 112 insertions(+), 103 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md create mode 100644 .github/workflows/push-check.yml delete mode 100644 README.en-US.md diff --git a/.eslintignore b/.eslintignore index a5f9925b3a..997d732c11 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,3 +5,5 @@ package-lock.json **/node_modules/** tmp temp +mockServer +packages/vue-generator/**/output/** diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 74fb168b16..f4e2f220ca 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,3 +1,5 @@ +English | [简体中文](https://github.com/opentiny/tiny-engine/blob/develop/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md) + # PR ## PR Checklist @@ -7,6 +9,7 @@ Please check if your PR fulfills the following requirements: - [ ] The commit message follows our [Commit Message Guidelines](https://github.com/opentiny/tiny-engine/blob/develop/CONTRIBUTING.md) - [ ] Tests for the changes have been added (for bug fixes / features) - [ ] Docs have been added / updated (for bug fixes / features) +- [ ] Built its own designer, fully self-validated ## PR Type @@ -23,13 +26,21 @@ What kind of change does this PR introduce? - [ ] Documentation content changes - [ ] Other... Please describe: -## What is the current behavior? +## Background and solution + + +### What is the current behavior? Issue Number: N/A -## What is the new behavior? +### What is the new behavior? + ## Does this PR introduce a breaking change? diff --git a/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md b/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md new file mode 100644 index 0000000000..6ceff4df4d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.zh-CN.md @@ -0,0 +1,52 @@ +[English](https://github.com/opentiny/tiny-engine/blob/develop/.github/PULL_REQUEST_TEMPLATE.md) | 简体中文 + +# PR + +## PR Checklist + +请检查您的 PR 是否满足以下要求: + +- [ ] commit message遵循我们的[提交贡献指南](https://github.com/opentiny/tiny-engine/blob/develop/CONTRIBUTING.md) +- [ ] 添加了更改内容的测试用例(用于bugfix/功能) +- [ ] 文档已添加/更新(用于bugfix/功能) +- [ ] 是否构建了自己的设计器,经过了充分的自验证 + +## PR 类型 + +这个PR的类型是? + +- [ ] 日常 bug 修复 +- [ ] 新特性支持 +- [ ] 代码风格优化 +- [ ] 重构 +- [ ] 构建优化 +- [ ] 测试用例 +- [ ] 文档更新 +- [ ] 分支合并 +- [ ] 其他改动(请补充) + + +## 需求背景和解决方案 + + + + +Issue Number: N/A + +### 修改前 + + +### 修改后 + +## 此PR是否含有 breaking change? + +- [ ] 是 +- [ ] 否 + + + +## Other information diff --git a/.github/workflows/push-check.yml b/.github/workflows/push-check.yml new file mode 100644 index 0000000000..7f0d4ed41a --- /dev/null +++ b/.github/workflows/push-check.yml @@ -0,0 +1,36 @@ +name: Push And Create PR Check + +on: + push: + branches: [] + pull_request: + branches: [develop,main] + +jobs: + push-check: + runs-on: ubuntu-latest # windows-latest || macos-latest + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 16 + + - name: Install pnpm + run: npm i -g pnpm + + - name: Install dependencies + run: pnpm i + + - name: Get changed files + id: get_changed_files + uses: tj-actions/changed-files@v40 + with: + files: | + **.js + **.vue + **.jsx + - name: Run ESLint + run: npx eslint ${{steps.get_changed_files.outputs.all_changed_files}} + - name: Run Build + run: pnpm run build:plugin && pnpm run build:alpha diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4a462f49cd..3070a8ccec 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,14 +51,11 @@ Local startup steps: git clone git@github.com:username/tiny-engine.git cd tiny-engine git remote add upstream git@github.com:opentiny/tiny-engine.git -npm i +pnpm i # Start the project. -$ npm run serve +$ pnpm dev -# start another terminal -$ cd mockServer -$ npm run dev ``` To submit a PR: @@ -67,7 +64,7 @@ To submit a PR: - Local coding. - Submit according to [Commit Message Format](https://www.conventionalcommits.org/zh-hans/v1.0.0/) specification. PR that do not conform to the submission specification will not be merged. - Submit to remote repository: `git push origin branchName`. -- (Optional) Synchronize upstream repository dev branch latest code: `git pull upstream dev`. +- (Optional) Synchronize upstream repository dev branch latest code: `git pull upstream develop`. - Open the [Pull requests](https://github.com/opentiny/tiny-engine/pulls) link of the TinyEngine code repository and click the New pull request button to submit the PR. - Project Committer conducts Code Review and makes comments. - The PR author adjusts the code according to the opinion. Please note that when a branch initiates PR, the subsequent commit will be synchronized automatically, and there is no need to resubmit the PR. diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md index 171f91b225..6729ec5857 100644 --- a/CONTRIBUTING.zh-CN.md +++ b/CONTRIBUTING.zh-CN.md @@ -42,23 +42,18 @@ - 点击 [TinyEngine](https://github.com/opentiny/tiny-engine) 代码仓库右上角的 Fork 按钮,将上游仓库 Fork 到个人仓库 - Clone 个人仓库到本地 -- 在 TinyEngine 根目录下运行 `npm install`, 安装依赖 -- 在 TinyEngine mockServer 运行 `npm install`, 安装依赖 -- 在 TinyEngine 根目录下运行 `npm run serve`,再到 mockServer 目录下运行 `npm run dev`,启动本地开发 +- 在 TinyEngine 根目录下运行 `pnpm i`, 安装依赖 +- 在 TinyEngine 根目录下运行 `pnpm dev`,启动本地开发 ```shell # username 为用户名,执行前请替换 git clone git@github.com:username/tiny-engine.git cd tiny-engine git remote add upstream git@github.com:opentiny/tiny-engine.git -npm i +pnpm i # 启动项目 -$ npm run serve - -# start another terminal -$ cd mockServer -$ npm run dev +$ pnpm dev ``` @@ -68,7 +63,7 @@ $ npm run dev - 本地编码 - 遵循 Commit Message Format 规范进行提交,不符合提交规范的 PR 将不会被合并 - 提交到远程仓库:git push origin branchName -- (可选)同步上游仓库 dev 分支最新代码:git pull upstream dev +- (可选)同步上游仓库 develop 分支最新代码:git pull upstream develop - 打开 TinyEngine 代码仓库的 [Pull requests](https://github.com/opentiny/tiny-engine/pulls) 链接,点击 New pull request 按钮提交 PR - 项目 Committer 进行 Code Review,并提出意见 - PR 作者根据意见调整代码,请注意一个分支发起了 PR 后,后续的 commit 会自动同步,无需重新提交 PR @@ -81,4 +76,4 @@ $ npm run dev 如果你对我们的开源项目感兴趣,欢迎通过以下方式加入我们的开源社区。 - 添加官方小助手微信:opentiny-official,加入我们的技术交流群 -- 加入邮件列表:opentiny@googlegroups.com +- 加入邮件列表:opentiny@googlegroups.com \ No newline at end of file diff --git a/README.en-US.md b/README.en-US.md deleted file mode 100644 index 90d6690e66..0000000000 --- a/README.en-US.md +++ /dev/null @@ -1,84 +0,0 @@ -

- - OpenTiny Logo - -

- -

TinyEngine enables developers to customize low-code platforms, build low-bit platforms online in real time, and support secondary development or integration of low-bit platform capabilities.

- -English | [简体中文](README.zh-CN.md) - -🌈 Features: - -- Cross-end cross-frame front-end components -- Supports online real-time construction, secondary development, or being integrated. -- Directly generate deployable source code without engine support. -- Allows access to third-party components and customized extension plug-ins. -- Supports high-code and low-code, and hybrid development and deployment of applications. -- The platform accesses AI big model capabilities to help developers build applications. - -## Documentation - -- intro:https://opentiny.design/tiny-engine#/home -- tutorial:https://opentiny.design/tiny-engine#/help-center/course/engine -- playground:https://opentiny.design/tiny-engine#/tiny-engine-editor - -## Development - -### Dependencies required for installation - -```sh -$ pnpm install -``` - -### Local development: Start the local mock server and use the mock data of the local mock server. - -```sh -$ pnpm dev -``` - -Open a browser: `http://localhost:8080/?type=app&id=918&tenant=1&pageid=NTJ4MjvqoVj8OVsc` -`url search` Parameters: - -- `type=app` Application type -- `id=xxx` Application ID -- `tenant=xxx` Organization ID -- `pageid=xxx` Page ID - -## Build - -```sh -# Build all plug-ins first -pnpm build:plugin - -# Build Designer -pnpm build:alpha or build:prod - -``` - -## Milestones - -```mermaid -gantt -dateFormat YYYY-MM-DD -axisFormat %Y-%m-%d - - 1.0.0-beta.x version :active,2023-09-25, 2024-03-31 - 1.0.0-rc version : 2024-04-01, 2024-06-30 - 1.0.0 version : 2024-07-01, 2024-07-31 - -``` - - -## 🤝 Participation and Contribution - -If you are interested in our open source project, please join us! 🎉 - -Please read the [Contribution Guide](CONTRIBUTING.md) before participating in the contribution. - -- Add official assistant WeChat opentiny-official and join the technical exchange group -- Join the mailing list opentiny@googlegroups.com - -## License - -[MIT](LICENSE) From fad8b190c0f8082d82d7c67f6f40bc0673b2f389 Mon Sep 17 00:00:00 2001 From: yaoyun8 <142570291+yaoyun8@users.noreply.github.com> Date: Tue, 28 Nov 2023 11:14:25 +0800 Subject: [PATCH 038/322] =?UTF-8?q?fix=EF=BC=9A=E7=BB=84=E4=BB=B6=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E7=BB=91=E5=AE=9A=E5=B7=A5=E5=85=B7=E7=B1=BButils?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E9=A2=84=E8=A7=88=E5=87=BA=E7=A0=81?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=20(#93)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mockServer/src/mock/get/app-center/apps/extension/list.json | 2 +- mockServer/src/mock/get/app-center/v1/apps/schema/918.json | 2 +- mockServer/src/services/appinfo.json | 2 +- .../design-core/src/preview/src/preview/srcFiles/lowcode.js | 2 +- packages/vue-generator/src/generator/page.js | 6 +++++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/mockServer/src/mock/get/app-center/apps/extension/list.json b/mockServer/src/mock/get/app-center/apps/extension/list.json index 67a3ac8a3f..d3f2008dd4 100644 --- a/mockServer/src/mock/get/app-center/apps/extension/list.json +++ b/mockServer/src/mock/get/app-center/apps/extension/list.json @@ -102,7 +102,7 @@ "type": "function", "content": { "type": "JSFunction", - "value": "function util() {\r\n console.log(3211)\r\n}" + "value": "function test() {\r\n return 'test'\r\n}" }, "app": 918, "category": "utils", diff --git a/mockServer/src/mock/get/app-center/v1/apps/schema/918.json b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json index 7df5f36e39..92e9376214 100644 --- a/mockServer/src/mock/get/app-center/v1/apps/schema/918.json +++ b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json @@ -1404,7 +1404,7 @@ "type": "function", "content": { "type": "JSFunction", - "value": "function util() {\r\n console.log(3211)\r\n}" + "value": "function test() {\r\n return 'test'\r\n}" } }, { diff --git a/mockServer/src/services/appinfo.json b/mockServer/src/services/appinfo.json index 72f04d5803..ccd0654d88 100644 --- a/mockServer/src/services/appinfo.json +++ b/mockServer/src/services/appinfo.json @@ -1057,7 +1057,7 @@ "type": "function", "content": { "type": "JSFunction", - "value": "function util() {\r\n console.log(3211)\r\n}" + "value": "function test() {\r\n return 'test'\r\n}" }, "app": 918, "category": "utils", diff --git a/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js b/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js index 99491ac237..22d96c1b60 100644 --- a/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js +++ b/packages/design-core/src/preview/src/preview/srcFiles/lowcode.js @@ -88,5 +88,5 @@ export default () => { const stores = useStores() - return { t: i18n.global.t, stores, lowcodeWrap, utils } + return { t: i18n.global.t, stores, lowcodeWrap } } diff --git a/packages/vue-generator/src/generator/page.js b/packages/vue-generator/src/generator/page.js index d331e20a81..5bc535d578 100644 --- a/packages/vue-generator/src/generator/page.js +++ b/packages/vue-generator/src/generator/page.js @@ -41,6 +41,10 @@ function recurseChildren(children, state, description, result) { result.push(subTemplate) } else if (children?.type === 'JSExpression') { result.push(`{{ ${children.value.replace(/this\.(props\.)?/g, '')} }}`) + + for (const key in description.jsResource) { + description.jsResource[key] = description.jsResource[key] || children.value.includes(`.${key}.`) + } } else if (children?.type === 'i18n') { result.push(`{{ t('${children.key}') }}`) } else { @@ -398,7 +402,7 @@ ${imports.join('\n')} const props = defineProps({${propsArr.join(',\n')}}) const emit = defineEmits(${JSON.stringify(emitsArr)}) -const { t, lowcodeWrap, stores, utils } = vue.inject(I18nInjectionKey).lowcode() +const { t, lowcodeWrap, stores } = vue.inject(I18nInjectionKey).lowcode() const wrap = lowcodeWrap(props, { emit }, t) ${iconStatement} From ad4c154fa052b16a7eedc374c5a8688f0eda87b9 Mon Sep 17 00:00:00 2001 From: gargameljyh <58694428+gargameljyh@users.noreply.github.com> Date: Wed, 29 Nov 2023 17:30:11 -0800 Subject: [PATCH 039/322] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=A9=BA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=89=A7=E8=A1=8C=E5=8F=B3=E9=94=AE=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=92=8C=E5=8F=B3=E9=94=AE=E5=A4=8D=E5=88=B6=E6=97=B6?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#103)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修复空页面执行右键删除和右键复制时控制台报错的问题 * fix: 修复空页面执行右建操作时控制台报错的问题 * refactor: 简化operations空判断代码 * fix: verify operations copy id * fix: verify operations copy id * fix: verify operations copy id * fix: copyNode function verify params * fix: 不可操作的菜单项disabled * fix: 点击disabled菜单项 不关闭菜单 --- .../src/components/container/CanvasMenu.vue | 57 +++++++++++++------ .../src/components/container/container.js | 3 + 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/packages/canvas/src/components/container/CanvasMenu.vue b/packages/canvas/src/components/container/CanvasMenu.vue index c1f568dac8..26ce7ce3a4 100644 --- a/packages/canvas/src/components/container/CanvasMenu.vue +++ b/packages/canvas/src/components/container/CanvasMenu.vue @@ -4,9 +4,12 @@
  • {{ item.name }} @@ -98,7 +101,8 @@ export default { items: [ { name: '文字提示', code: 'wrap', value: 'TinyTooltip' }, { name: '弹出框', code: 'wrap', value: 'TinyPopover' } - ] + ], + code: 'addParent' }, { name: '删除', code: 'del' }, { name: '复制', code: 'copy' }, @@ -111,10 +115,10 @@ export default { const operations = { del() { - removeNodeById(getCurrent().schema.id) + removeNodeById(getCurrent().schema?.id) }, copy() { - copyNode(getCurrent().schema.id) + copyNode(getCurrent().schema?.id) }, config() { useLayout().activeSetting('props') @@ -128,17 +132,19 @@ export default { wrap({ value, name }) { const componentName = value || name const { schema, parent } = getCurrent() - const index = parent.children.indexOf(schema) - const wrapSchema = { - componentName, - id: null, - props: {}, - children: [schema] + if (schema && parent) { + const index = parent.children.indexOf(schema) + const wrapSchema = { + componentName, + id: null, + props: {}, + children: [schema] + } + + parent.children.splice(index, 1, wrapSchema) + + getController().addHistory() } - - parent.children.splice(index, 1, wrapSchema) - - getController().addHistory() }, createBlock() { if (useCanvas().isSaved()) { @@ -152,16 +158,25 @@ export default { } } + const actionDisabled = (actionItem) => { + const actions = ['del', 'copy', 'addParent'] + return actions.includes(actionItem.code) && !getCurrent().schema?.id + } + + const onShowChildrenMenu = (menuItem) => { + current.value = !actionDisabled(menuItem) ? menuItem : null + } + const close = () => { boxVisibility.value = false } const doOperation = (item) => { - if (item.check && !item.check?.()) { + if ((item.check && !item.check?.()) || actionDisabled(item)) { return } if (item?.code) { - operations[item.code](item) + operations[item.code]?.(item) closeMenu() } } @@ -173,7 +188,9 @@ export default { boxVisibility, close, current, - menuDom + menuDom, + actionDisabled, + onShowChildrenMenu } } } @@ -196,6 +213,10 @@ export default { .li-item { border-bottom: 1px solid var(--ti-lowcode-canvas-menu-border-color); } + .li-item-disabled { + cursor: not-allowed; + color: var(--ti-lowcode-canvas-menu-item-disabled-color); + } li { & > div { display: flex; diff --git a/packages/canvas/src/components/container/container.js b/packages/canvas/src/components/container/container.js index e65549fefe..10fd4d3419 100644 --- a/packages/canvas/src/components/container/container.js +++ b/packages/canvas/src/components/container/container.js @@ -249,6 +249,9 @@ export const addComponent = (data, position) => { } export const copyNode = (id) => { + if (!id) { + return + } const { node, parent } = getNode(id, true) inserAfter({ parent, node, data: copyObject(node) }) From 5dc217aa2962d01fc1b1e8c8124b0bb398104473 Mon Sep 17 00:00:00 2001 From: lizhijie429 <632163606@qq.com> Date: Thu, 30 Nov 2023 14:23:10 +0800 Subject: [PATCH 040/322] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=B1=9E=E6=80=A7=E6=96=B0=E5=A2=9E=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20(#108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix:修复自定义属性新增功能 * fix: 修复MetaHtmlText组件控制台警告 * fix:调整透传Attributes警告解决方案 * fix:调整透传Attributes警告解决方案 * fix:调整透传Attributes警告解决方案 --- packages/common/component/MetaHtmlAttributes.vue | 9 ++++++--- packages/common/component/MetaHtmlText.vue | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/common/component/MetaHtmlAttributes.vue b/packages/common/component/MetaHtmlAttributes.vue index 08c27f978f..f98c7f3bac 100644 --- a/packages/common/component/MetaHtmlAttributes.vue +++ b/packages/common/component/MetaHtmlAttributes.vue @@ -49,11 +49,12 @@ + + + diff --git a/packages/settings/styles/src/components/effects/EffectGroup.vue b/packages/settings/styles/src/components/effects/EffectGroup.vue index 7d46ea1b53..95c66a02a4 100644 --- a/packages/settings/styles/src/components/effects/EffectGroup.vue +++ b/packages/settings/styles/src/components/effects/EffectGroup.vue @@ -388,7 +388,6 @@ export default { const { setPosition } = useModal() const { getSettingFlag, getProperty } = useProperties({ - props, names: Object.values(EFFECTS_PROPERTY), parseNumber: true }) diff --git a/packages/settings/styles/src/components/index.js b/packages/settings/styles/src/components/index.js index 31d6d66b65..ec2f4c1c78 100644 --- a/packages/settings/styles/src/components/index.js +++ b/packages/settings/styles/src/components/index.js @@ -1,41 +1,28 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ -import BackgroundGroup from './background/BackgroundGroup.vue' -import BorderGroup from './border/BorderGroup.vue' -import EffectGroup from './effects/EffectGroup.vue' -import ImageSelect from './inputs/ImageSelect.vue' -import ResetButton from './inputs/ResetButton.vue' -import LayoutGroup from './layout/LayoutGroup.vue' -import PositionGroup from './position/PositionGroup.vue' -import BoxShadowGroup from './shadow/BoxShadowGroup.vue' -import SizeGroup from './size/SizeGroup.vue' -import SpacingGroup from './spacing/SpacingGroup.vue' -import SpacingSetting from './spacing/SpacingSetting.vue' -import TypographyGroup from './typography/TypographyGroup.vue' -import TypographyMore from './typography/TypographyMore.vue' - -export default { - BackgroundGroup, - BorderGroup, - EffectGroup, - ImageSelect, - ResetButton, - LayoutGroup, - PositionGroup, - BoxShadowGroup, - SizeGroup, - SpacingGroup, - SpacingSetting, - TypographyGroup, - TypographyMore -} +export { default as BackgroundGroup } from './background/BackgroundGroup.vue' +export { default as BorderGroup } from './border/BorderGroup.vue' +export { default as EffectGroup } from './effects/EffectGroup.vue' +export { default as ImageSelect } from './inputs/ImageSelect.vue' +export { default as ResetButton } from './inputs/ResetButton.vue' +export { default as LayoutGroup } from './layout/LayoutGroup.vue' +export { default as PositionGroup } from './position/PositionGroup.vue' +export { default as BoxShadowGroup } from './shadow/BoxShadowGroup.vue' +export { default as SizeGroup } from './size/SizeGroup.vue' +export { default as SpacingGroup } from './spacing/SpacingGroup.vue' +export { default as SpacingSetting } from './spacing/SpacingSetting.vue' +export { default as TypographyGroup } from './typography/TypographyGroup.vue' +export { default as TypographyMore } from './typography/TypographyMore.vue' +export { default as FlexBox } from './layout/FlexBox.vue' +export { default as GridBox } from './layout/GridBox.vue' +export { default as ClassNamesContainer } from './classNamesContainer/index.vue' diff --git a/packages/settings/styles/src/components/layout/FlexBox.vue b/packages/settings/styles/src/components/layout/FlexBox.vue index a92beacec8..7aa410a205 100644 --- a/packages/settings/styles/src/components/layout/FlexBox.vue +++ b/packages/settings/styles/src/components/layout/FlexBox.vue @@ -176,7 +176,6 @@ export default { const showModal = ref(false) const { getSettingFlag } = useProperties({ - props, names: Object.values(FLEX_PROPERTY), parseNumber: true }) diff --git a/packages/settings/styles/src/components/layout/GridBox.vue b/packages/settings/styles/src/components/layout/GridBox.vue index ae377015b4..5f07cefcf8 100644 --- a/packages/settings/styles/src/components/layout/GridBox.vue +++ b/packages/settings/styles/src/components/layout/GridBox.vue @@ -361,7 +361,6 @@ export default { }) const { getProperty, getSettingFlag } = useProperties({ - props, names: Object.values(GRID_PROPERTY), parseNumber: true }) diff --git a/packages/settings/styles/src/components/position/PositionGroup.vue b/packages/settings/styles/src/components/position/PositionGroup.vue index a8e1664204..f103ff021e 100644 --- a/packages/settings/styles/src/components/position/PositionGroup.vue +++ b/packages/settings/styles/src/components/position/PositionGroup.vue @@ -221,7 +221,6 @@ import { reactive, watchEffect } from 'vue' import { Tooltip } from '@opentiny/vue' import { MetaSelect } from '@opentiny/tiny-engine-common' -import { camelize } from '@opentiny/tiny-engine-controller/utils' import { push } from '@opentiny/vue-renderless/common/array' import ModalMask, { useModal } from '../inputs/ModalMask.vue' import SpacingSetting from '../spacing/SpacingSetting.vue' @@ -368,7 +367,6 @@ export default { } const { getProperty, getSettingFlag, getPropertyValue, getPropertyText } = useProperties({ - props, names: Object.values(POSITION_PROPERTY), parseNumber: true }) @@ -413,7 +411,6 @@ export default { } const openDirectionSetting = (type, styleName) => { - styleName = camelize(styleName) state.property = { type, diff --git a/packages/settings/styles/src/components/size/SizeGroup.vue b/packages/settings/styles/src/components/size/SizeGroup.vue index b440f0765c..84165a5b15 100644 --- a/packages/settings/styles/src/components/size/SizeGroup.vue +++ b/packages/settings/styles/src/components/size/SizeGroup.vue @@ -339,7 +339,6 @@ export default { }) const { getProperty, getSettingFlag, getPropertyValue } = useProperties({ - props, names: Object.values(SIZE_PROPERTY), parseNumber: true }) diff --git a/packages/settings/styles/src/components/spacing/SpacingGroup.vue b/packages/settings/styles/src/components/spacing/SpacingGroup.vue index bb45f860b6..57dc55861d 100644 --- a/packages/settings/styles/src/components/spacing/SpacingGroup.vue +++ b/packages/settings/styles/src/components/spacing/SpacingGroup.vue @@ -397,7 +397,6 @@ + + diff --git a/packages/blockToWebComponentTemplate/src/lib.js b/packages/blockToWebComponentTemplate/src/lib.js new file mode 100644 index 0000000000..61a538b096 --- /dev/null +++ b/packages/blockToWebComponentTemplate/src/lib.js @@ -0,0 +1,20 @@ +import { hyphenate } from '@vue/shared' +import { defineCustomElement } from '@opentiny/tiny-engine-webcomponent-core' +import block from './BlockFileName.vue' + +window.TinyLowcodeResource = window.TinyLowcodeResource || {} + +const blockName = hyphenate('BlockFileName') + +if (customElements.get(blockName)) { + if (window.TinyLowcodeResource[blockName]) { + Object.assign(window.TinyLowcodeResource[blockName], block) + } +} else { + block.links = process.env.VUE_APP_UI_LIB_FULL_STYLE_FILE_URL + block.styles = ['svg { width: 10px; height: 10px;}', ...(block.styles || [])] + window.TinyLowcodeResource[blockName] = block + customElements.define(blockName, defineCustomElement(block)) +} + +export default block diff --git a/packages/blockToWebComponentTemplate/vite.config.js b/packages/blockToWebComponentTemplate/vite.config.js new file mode 100644 index 0000000000..db65f1cc6a --- /dev/null +++ b/packages/blockToWebComponentTemplate/vite.config.js @@ -0,0 +1,66 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import path from 'path' + +const config = { + define: {}, + resolve: { + alias: {} + }, + build: { + cssCodeSplit: false, + minify: false, + commonjsOptions: { + transformMixedEsModules: true + }, + rollupOptions: { + external: [ + 'vue', + 'vue-i18n', + '@opentiny/tiny-engine-i18n-host', + '@opentiny/tiny-engine-webcomponent-core', + '@opentiny/vue', + '@opentiny/vue-icon' + ], + output: { + globals: { + vue: 'Vue', + 'vue-i18n': 'VueI18n', + '@opentiny/tiny-engine-i18n-host': 'TinyI18nHost', + '@opentiny/tiny-engine-webcomponent-core': 'TinyWebcomponentCore', + '@opentiny/vue': 'TinyVue', + '@opentiny/vue-icon': 'TinyVueIcon' + } + } + } + } +} + +export default defineConfig(({ command, mode }) => { + if (command !== 'build' || mode !== 'block') { + return + } + + const vuePluginConfig = {} + const styleLinks = ['https://registry.npmmirror.com/@opentiny/vue-theme/3.11/files/index.css'] + + config.publicDir = false + + config.build.lib = { + entry: path.resolve(__dirname, './src/lib.js'), + name: 'TinyVueBlock', + formats: ['umd', 'es'], + fileName: (format) => `js/web-component.${format}.js` + } + + vuePluginConfig.customElement = true + + config.plugins = [vue(vuePluginConfig), vueJsx()] + + config.define['process.env'] = { + VUE_APP_UI_LIB_FULL_STYLE_FILE_URL: styleLinks + } + + return config +}) From 3f6adc8ae38b25ab2ea66312004ba61e636a6af2 Mon Sep 17 00:00:00 2001 From: yaoyun8 <142570291+yaoyun8@users.noreply.github.com> Date: Fri, 15 Dec 2023 15:41:15 +0800 Subject: [PATCH 052/322] =?UTF-8?q?fix=EF=BC=9A=E5=88=A0=E9=99=A4lowcodeWr?= =?UTF-8?q?ap=E5=A4=9A=E4=BD=99=E5=8F=82=E6=95=B0=20(#119)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/vue-generator/src/generator/page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue-generator/src/generator/page.js b/packages/vue-generator/src/generator/page.js index e30fb68ce4..fad6884fd4 100644 --- a/packages/vue-generator/src/generator/page.js +++ b/packages/vue-generator/src/generator/page.js @@ -407,7 +407,7 @@ const props = defineProps({${propsArr.join(',\n')}}) const emit = defineEmits(${JSON.stringify(emitsArr)}) const { t, lowcodeWrap, stores } = vue.inject(I18nInjectionKey).lowcode() -const wrap = lowcodeWrap(props, { emit }, t) +const wrap = lowcodeWrap(props, { emit }) ${iconStatement} From e07dee64e90bba5fb1217ea562c52eaacf648fab Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Fri, 15 Dec 2023 00:08:26 -0800 Subject: [PATCH 053/322] fix(chore): replace unpkg with npmmirror (#149) * fix(chore): replace unpkg with npmmirror * fix(dev): dev environment use node_moduels * fix(chore): sync version * fix(preview): use npmmirror link * fix(preview): devtoolapi use unpkg link * fix(preview): import map add esm cdn * fix(version): fix tiny-vue version * fix(version): fix tiny-vue version * fix(version): fix tiny-vue version --- packages/design-core/canvas.html | 2 +- packages/design-core/package.json | 2 + .../src/preview/src/preview/importMap.js | 37 ++++++++++--------- .../src/preview/src/preview/srcFiles/app.js | 24 ++++++------ packages/design-core/vite.config.js | 10 +++-- 5 files changed, 41 insertions(+), 34 deletions(-) diff --git a/packages/design-core/canvas.html b/packages/design-core/canvas.html index 17a98930fd..c07062ef32 100644 --- a/packages/design-core/canvas.html +++ b/packages/design-core/canvas.html @@ -4,7 +4,7 @@ - + diff --git a/packages/plugins/bridge/src/js/resource.js b/packages/plugins/bridge/src/js/resource.js index 6b43658b5a..d46f49b1cf 100644 --- a/packages/plugins/bridge/src/js/resource.js +++ b/packages/plugins/bridge/src/js/resource.js @@ -13,7 +13,7 @@ import { reactive } from 'vue' import { useApp, useResource, useNotify } from '@opentiny/tiny-engine-controller' import { isVsCodeEnv } from '@opentiny/tiny-engine-common/js/environments' -import { setUtils } from '@opentiny/tiny-engine-canvas' +import { updateUtils, deleteUtils } from '@opentiny/tiny-engine-canvas' import { fetchResourceList, requestDeleteReSource, @@ -183,7 +183,7 @@ export const saveResource = (data, callback, emit) => { useResource().resState[data.category][index] = result // 更新画布工具函数环境,保证渲染最新工具类返回值, 并触发画布的强制刷新 - setUtils([result], false, true) + updateUtils([result]) generateBridgeUtil(useApp().appInfoState.selectedId) useNotify({ @@ -201,6 +201,8 @@ export const saveResource = (data, callback, emit) => { if (result) { useResource().resState[data.category].push(result) + // 更新画布工具函数环境,保证渲染最新工具类返回值, 并触发画布的强制刷新 + updateUtils([result]) generateBridgeUtil(useApp().appInfoState.selectedId) useNotify({ type: 'success', @@ -221,6 +223,7 @@ export const deleteData = (name, callback, emit) => { const index = useResource().resState[state.type].findIndex((item) => item.name === data.name) useResource().resState[state.type].splice(index, 1) + deleteUtils([data]) generateBridgeUtil(useApp().appInfoState.selectedId) useNotify({ type: 'success', diff --git a/packages/theme/dark/bridge.less b/packages/theme/dark/bridge.less index 31cabae79d..44dea9e3bd 100644 --- a/packages/theme/dark/bridge.less +++ b/packages/theme/dark/bridge.less @@ -4,4 +4,8 @@ --ti-lowcode-bridge-list-bg: #3c3c3c; --ti-lowcode-birdge-editor-border-color: #262626; --ti-lowcode-birdge-input-label-color: #adb0b8; + + // npm工具类中代码预览的主题 + --ti-lowcode-birdge-code-preview-color: var(--ti-lowcode-base-gray-20); + --ti-lowcode-birdge-code-preview-bg-color: #262626; } diff --git a/packages/theme/light/bridge.less b/packages/theme/light/bridge.less index a5fc60052b..2b23ddc8bf 100644 --- a/packages/theme/light/bridge.less +++ b/packages/theme/light/bridge.less @@ -4,4 +4,8 @@ --ti-lowcode-bridge-list-bg: var(--ti-lowcode-base-gray-10); --ti-lowcode-birdge-editor-border-color: var(--ti-lowcode-base-gray-20); --ti-lowcode-birdge-input-label-color: var(--ti-lowcode-base-text-color-1); + + // npm工具类中代码预览的主题 + --ti-lowcode-birdge-code-preview-color: var(--ti-lowcode-base-text-color); + --ti-lowcode-birdge-code-preview-bg-color: #f0f0f0; } diff --git a/packages/toolbars/generate-vue/src/generateCode.js b/packages/toolbars/generate-vue/src/generateCode.js index fe4eb25e56..097e4e9aca 100644 --- a/packages/toolbars/generate-vue/src/generateCode.js +++ b/packages/toolbars/generate-vue/src/generateCode.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import prettier from 'prettier' import parserHtml from 'prettier/parser-html' @@ -214,7 +214,14 @@ function getImportStrsFromImports(imports) { } if (Array.isArray(value.destructurings) && value.destructurings.length) { - list.push(`{ ${value.destructurings.join(', ')} }`) + const destructuringsWithAliases = value.destructurings.map((destructuring, index) => { + const alias = value.aliases[index] + if (destructuring === alias) { + return destructuring + } + return `${destructuring} as ${alias}` + }) + list.push(`{ ${destructuringsWithAliases.join(', ')} }`) } result.push(`import ${list.join(', ')} from '${key}'`) @@ -234,11 +241,13 @@ function parseExportInfo(utilItem, imports, exportNames, functionStrs) { if (utilItem.content.destructuring) { importItem.destructurings = importItem.destructurings || [] importItem.destructurings.push(utilItem.content.exportName) + importItem.aliases = importItem.aliases || [] + importItem.aliases.push(utilItem.name) } else { - importItem.exportName = utilItem.content.exportName + importItem.exportName = utilItem.name } - exportNames.push(utilItem.content.exportName) + exportNames.push(utilItem.name) } } else if (utilItem.type === 'function') { functionStrs.push(`const ${utilItem.name} = ${utilItem.content.value}`) From 24b6957fd30daf19f7b290f00d1d59a518d7b359 Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Fri, 22 Dec 2023 03:20:27 -0800 Subject: [PATCH 060/322] fix(preview): upgrade vue repl version (#170) * fix(preview): upgrade vue repl version * fix(preview): optimized by review comment --- packages/design-core/package.json | 2 +- .../src/preview/src/preview/Preview.vue | 31 +++++++------------ 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/packages/design-core/package.json b/packages/design-core/package.json index 46556bba53..7010d4ac82 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -82,7 +82,7 @@ "@opentiny/vue-renderless": "~3.10.0", "@opentiny/vue-theme": "~3.10.0", "@vue/babel-plugin-jsx": "1.1.1", - "@vue/repl": "^1.3.0", + "@vue/repl": "^2.9.0", "@vueuse/core": "^9.6.0", "element-resize-detector": "^1.2.4", "file-saver": "^2.0.5", diff --git a/packages/design-core/src/preview/src/preview/Preview.vue b/packages/design-core/src/preview/src/preview/Preview.vue index dbb768ee58..facd066768 100644 --- a/packages/design-core/src/preview/src/preview/Preview.vue +++ b/packages/design-core/src/preview/src/preview/Preview.vue @@ -1,5 +1,6 @@ - - - - - diff --git a/designer-demo/src/canvas.js b/designer-demo/src/canvas.js index 118254a0d3..b867bf53f0 100644 --- a/designer-demo/src/canvas.js +++ b/designer-demo/src/canvas.js @@ -1,3 +1,15 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + import { createRender } from '@opentiny/tiny-engine-canvas' createRender(window.parent.TinyGlobalConfig) diff --git a/designer-demo/src/defineEntry.js b/designer-demo/src/defineEntry.js deleted file mode 100644 index 2d7ea2064e..0000000000 --- a/designer-demo/src/defineEntry.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -import registry from '../registry.js' -import { defineEntry } from '@opentiny/tiny-engine-entry' -defineEntry(registry) diff --git a/designer-demo/src/main.js b/designer-demo/src/main.js index ac35c0ac72..b7eec3b257 100644 --- a/designer-demo/src/main.js +++ b/designer-demo/src/main.js @@ -1,6 +1,6 @@ /** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. * * Use of this source code is governed by an MIT-style license. * @@ -10,8 +10,9 @@ * */ -import './defineEntry.js' -import { createApp } from 'vue' -import App from './App.vue' +import registry from '../registry.js' +import { defineEntry } from '@opentiny/tiny-engine-entry' +import { init } from '@opentiny/tiny-engine' -createApp(App).mount('#app') +defineEntry(registry) +init() diff --git a/designer-demo/vite.config.js b/designer-demo/vite.config.js new file mode 100644 index 0000000000..1a424c307e --- /dev/null +++ b/designer-demo/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig, mergeConfig } from 'vite' +import getDefaultConfig from '@opentiny/tiny-engine/vite.config.js' + +export default defineConfig((options) => { + const defaultConfig = getDefaultConfig(options) + const config = { + server: { + port: 8090 + } + } + + return mergeConfig(defaultConfig, config) +}) diff --git a/package.json b/package.json index 285319f457..24c3f77dfd 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "preinstall": "npx only-allow pnpm", "dev": "pnpm run setup && concurrently 'pnpm:serve:backend' 'pnpm:serve:frontend'", "dev:mock": "pnpm --filter @opentiny/tiny-engine dev", - "dev:demo": "concurrently 'pnpm:serve:backend' 'pnpm:dev:demo:frontend'", + "dev:demo": "pnpm run setup && concurrently 'pnpm:serve:backend' 'pnpm:dev:demo:frontend'", "serve:frontend": "pnpm --filter @opentiny/tiny-engine serve", "dev:demo:frontend": "pnpm --filter designer-demo dev", "serve:backend": "pnpm --filter @opentiny/tiny-engine-mock dev", diff --git a/packages/build/vite-plugin-generate-comments/package.json b/packages/build/vite-plugin-generate-comments/package.json index 3c245b597b..4225a192d0 100644 --- a/packages/build/vite-plugin-generate-comments/package.json +++ b/packages/build/vite-plugin-generate-comments/package.json @@ -2,6 +2,7 @@ "name": "@opentiny/vite-plugin-generate-comments", "version": "1.0.0", "description": "", + "type": "module", "main": "dist/index.cjs", "module": "dist/index.js", "files": [ diff --git a/packages/design-core/index.js b/packages/design-core/index.js index 59a5fbdec0..e7fdbd7e25 100644 --- a/packages/design-core/index.js +++ b/packages/design-core/index.js @@ -1,79 +1 @@ -/** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -import { defineEntry } from '@opentiny/tiny-engine-entry' -import { createApp } from 'vue' -import EngineApp from './src/index.js' -import defaultRegistry from './registry.js' -import { merge } from 'lodash-es' -import initSvgs from '@opentiny/tiny-engine-svgs' -import { setGlobalConfig } from '@opentiny/tiny-engine-controller' -import i18n from '@opentiny/tiny-engine-controller/js/i18n' -import globalConfig from './config/lowcode.config' -import { initMonitor } from '@opentiny/tiny-engine-controller/js/monitor' -import { injectGlobalComponents } from '@opentiny/tiny-engine-common' -import { initHttp } from '@opentiny/tiny-engine-http' -import 'virtual:svg-icons-register' - -import TinyThemeTool from '@opentiny/vue-theme/theme-tool' -import { tinySmbTheme } from '@opentiny/vue-theme/theme' // SMB 主题 - -const type = (obj) => { - return Object.prototype.toString.call(obj).match(/\[object (.*)\]/)[1] -} - -const mergeRegistry = (registry) => { - Object.entries(registry).forEach(([key, value]) => { - const defaultConfig = defaultRegistry[key] - if (Array.isArray(value) && defaultConfig) { - value.forEach((meta, index) => { - const defaultMeta = defaultConfig.find((item) => item.id === meta.id) - if (defaultMeta) { - value[index] = merge(defaultMeta, meta) - } - }) - } - - if (type(value) === 'Object' && defaultConfig) { - registry[key] = merge(defaultConfig, registry[key]) - } - }) - console.log('default registry:', defaultRegistry) - console.log('merged registry:', registry) - return registry -} - -const init = (selector, registry) => { - // 合并用户自定义注册表 - const newRegistry = mergeRegistry(registry) - - // 在common层注入合并后的注册表 - defineEntry(newRegistry) - const app = createApp(EngineApp) - initHttp({ env: import.meta.env }) - - // eslint-disable-next-line no-new - new TinyThemeTool(tinySmbTheme, 'smbtheme') // 初始化主题 - - if (import.meta.env.VITE_ERROR_MONITOR === 'true' && import.meta.env.VITE_ERROR_MONITOR_URL) { - initMonitor(import.meta.env.VITE_ERROR_MONITOR_URL) - } - - window.TinyGlobalConfig = globalConfig - setGlobalConfig(globalConfig) - - initSvgs(app) - window.lowcodeI18n = i18n - app.use(i18n).use(injectGlobalComponents).mount('#app') - app.mount(selector) -} -export { init } +export { init } from './src/init' \ No newline at end of file diff --git a/packages/design-core/src/index.js b/packages/design-core/src/index.js deleted file mode 100644 index 1a7837280c..0000000000 --- a/packages/design-core/src/index.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -import component from './App.vue' - -export default component diff --git a/packages/design-core/src/init.js b/packages/design-core/src/init.js new file mode 100644 index 0000000000..72f2dc9f7c --- /dev/null +++ b/packages/design-core/src/init.js @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { createApp } from 'vue' +import { merge } from 'lodash-es' +import initSvgs from '@opentiny/tiny-engine-svgs' +import { setGlobalConfig } from '@opentiny/tiny-engine-controller' +import i18n from '@opentiny/tiny-engine-controller/js/i18n' +import globalConfig from '../config/lowcode.config' +import { initMonitor } from '@opentiny/tiny-engine-controller/js/monitor' +import { injectGlobalComponents } from '@opentiny/tiny-engine-common' +import { initHttp } from '@opentiny/tiny-engine-http' +import TinyThemeTool from '@opentiny/vue-theme/theme-tool' +import { tinySmbTheme } from '@opentiny/vue-theme/theme' // SMB 主题 +import { utils } from '@opentiny/tiny-engine-utils' +import { defineEntry } from '@opentiny/tiny-engine-entry' +import App from './App.vue' +import defaultRegistry from '../registry.js' + +import 'virtual:svg-icons-register' + +const { getType } = utils + +const mergeRegistry = (registry) => { + for (const [key, value] of Object.entries(registry)) { + const defaultConfig = defaultRegistry[key] + if (Array.isArray(value) && defaultConfig) { + value.forEach((meta, index) => { + const defaultMeta = defaultConfig.find((item) => item.id === meta.id) + if (defaultMeta) { + value[index] = merge(defaultMeta, meta) + } + }) + } + + if (getType(value) === 'Object' && defaultConfig) { + registry[key] = merge(defaultConfig, registry[key]) + } + } + if (process.env.NODE_ENV === 'development') { + console.log('default registry:', defaultRegistry) // eslint-disable-line + console.log('merged registry:', registry) // eslint-disable-line + } + return registry +} + +const defaultLifeCycles = { + beforeAppCreate: ({ registry }) => { + // 合并用户自定义注册表 + const newRegistry = mergeRegistry(registry) + + // 在common层注入合并后的注册表 + defineEntry(newRegistry) + + initHttp({ env: import.meta.env }) + + // eslint-disable-next-line no-new + new TinyThemeTool(tinySmbTheme, 'smbtheme') // 初始化主题 + + if (import.meta.env.VITE_ERROR_MONITOR === 'true' && import.meta.env.VITE_ERROR_MONITOR_URL) { + initMonitor(import.meta.env.VITE_ERROR_MONITOR_URL) + } + + window.TinyGlobalConfig = globalConfig + setGlobalConfig(globalConfig) + }, + appCreated: ({ app }) => { + initSvgs(app) + window.lowcodeI18n = i18n + app.use(i18n).use(injectGlobalComponents) + } +} + +export const init = (selector = '#app', registry = defaultRegistry, lifeCycles = {}) => { + const { beforeAppCreate, appCreated, appMounted } = lifeCycles + + defaultLifeCycles.beforeAppCreate({ registry }) + beforeAppCreate?.({ registry }) + const app = createApp(App) + defaultLifeCycles.appCreated({ app }) + appCreated?.({ app }) + + app.mount(selector) + appMounted?.({ app }) +} diff --git a/packages/design-core/src/main.js b/packages/design-core/src/main.js index 8cfa2c0af7..9ee12b07c6 100644 --- a/packages/design-core/src/main.js +++ b/packages/design-core/src/main.js @@ -10,37 +10,6 @@ * */ -import { createApp } from 'vue' -import initSvgs from '@opentiny/tiny-engine-svgs' -import { setGlobalConfig } from '@opentiny/tiny-engine-controller' -import i18n from '@opentiny/tiny-engine-controller/js/i18n' -import App from './App.vue' -import globalConfig from '../config/lowcode.config' -import { initMonitor } from '@opentiny/tiny-engine-controller/js/monitor' -import { injectGlobalComponents } from '@opentiny/tiny-engine-common' -import { initHttp } from '@opentiny/tiny-engine-http' -import 'virtual:svg-icons-register' +import { init } from './init' -import TinyThemeTool from '@opentiny/vue-theme/theme-tool' -import { tinySmbTheme } from '@opentiny/vue-theme/theme' // SMB 主题 -import { defineEntry } from '@opentiny/tiny-engine-entry' -import defaultRegistry from '../registry.js' - -defineEntry(defaultRegistry) -initHttp({ env: import.meta.env }) - -// eslint-disable-next-line no-new -new TinyThemeTool(tinySmbTheme, 'smbtheme') // 初始化主题 - -if (import.meta.env.VITE_ERROR_MONITOR === 'true' && import.meta.env.VITE_ERROR_MONITOR_URL) { - initMonitor(import.meta.env.VITE_ERROR_MONITOR_URL) -} - -window.TinyGlobalConfig = globalConfig -setGlobalConfig(globalConfig) - -const app = createApp(App) - -initSvgs(app) -window.lowcodeI18n = i18n -app.use(i18n).use(injectGlobalComponents).mount('#app') +init() diff --git a/scripts/setup.js b/scripts/setup.js index e68188dac9..1ce9872932 100644 --- a/scripts/setup.js +++ b/scripts/setup.js @@ -1,3 +1,3 @@ -const { exec } = require('child_process') +const { exec } = require('node:child_process') -exec('pnpm -F @opentiny/tiny-engine-controller -F @opentiny/tiny-engine-dsl-vue build') +exec('pnpm -F @opentiny/vite-plugin-generate-comments -F @opentiny/tiny-engine-controller -F @opentiny/tiny-engine-dsl-vue build') From c2348ce19875004b7b918a31e856f6e3b17b9aba Mon Sep 17 00:00:00 2001 From: Hexqi Date: Tue, 28 May 2024 21:01:13 +0800 Subject: [PATCH 186/322] fix: comments plugin build error (#517) --- packages/build/vite-plugin-generate-comments/vite.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/build/vite-plugin-generate-comments/vite.config.js b/packages/build/vite-plugin-generate-comments/vite.config.js index 2ca3655eb5..f4646c17ce 100644 --- a/packages/build/vite-plugin-generate-comments/vite.config.js +++ b/packages/build/vite-plugin-generate-comments/vite.config.js @@ -26,7 +26,7 @@ export default defineConfig({ formats: ['es', 'cjs'] }, rollupOptions: { - external: ['vue', /@babel\/.*/, /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] + external: ['node:fs', 'node:path', 'vue', /@babel\/.*/, /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } -}) \ No newline at end of file +}) From a6c37df99cb157a73d524235440cc63831d61156 Mon Sep 17 00:00:00 2001 From: Gene Date: Wed, 29 May 2024 00:30:23 -0700 Subject: [PATCH 187/322] fix: call defineEntry before importing tiny-engine (#520) --- designer-demo/src/defineEntry.js | 16 ++++++++++++++++ designer-demo/src/main.js | 5 ++--- 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 designer-demo/src/defineEntry.js diff --git a/designer-demo/src/defineEntry.js b/designer-demo/src/defineEntry.js new file mode 100644 index 0000000000..f93377c856 --- /dev/null +++ b/designer-demo/src/defineEntry.js @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import registry from '../registry.js' +import { defineEntry } from '@opentiny/tiny-engine-entry' + +defineEntry(registry) diff --git a/designer-demo/src/main.js b/designer-demo/src/main.js index b7eec3b257..25243cd9c8 100644 --- a/designer-demo/src/main.js +++ b/designer-demo/src/main.js @@ -10,9 +10,8 @@ * */ -import registry from '../registry.js' -import { defineEntry } from '@opentiny/tiny-engine-entry' +// 导入@opentiny/tiny-engine时,内部的依赖包也会逐个导入,可能会执行useComplie,此时需要templateHashMap。所以需要先执行一次defineEntry +import './defineEntry.js' import { init } from '@opentiny/tiny-engine' -defineEntry(registry) init() From fc0497c9f96e4edca22282caf7f2acad7cc194b0 Mon Sep 17 00:00:00 2001 From: Hexqi Date: Wed, 29 May 2024 20:56:03 +0800 Subject: [PATCH 188/322] fix: init registry error (#522) --- .eslintignore | 1 + designer-demo/src/defineEntry.js | 2 ++ designer-demo/src/main.js | 4 ++-- packages/design-core/index.js | 2 +- packages/design-core/src/init.js | 2 +- packages/entry/vite.config.js | 2 +- packages/vue-generator/src/parser/jsx-slot.js | 20 +++++++++---------- packages/vue-generator/src/parser/state.js | 20 +++++++++---------- 8 files changed, 28 insertions(+), 25 deletions(-) diff --git a/.eslintignore b/.eslintignore index 997d732c11..3175ee692d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,3 +7,4 @@ tmp temp mockServer packages/vue-generator/**/output/** +packages/build/vite-plugin-generate-comments/src/test/code/** diff --git a/designer-demo/src/defineEntry.js b/designer-demo/src/defineEntry.js index f93377c856..80637321d4 100644 --- a/designer-demo/src/defineEntry.js +++ b/designer-demo/src/defineEntry.js @@ -14,3 +14,5 @@ import registry from '../registry.js' import { defineEntry } from '@opentiny/tiny-engine-entry' defineEntry(registry) + +export { registry } diff --git a/designer-demo/src/main.js b/designer-demo/src/main.js index 25243cd9c8..f94c13b040 100644 --- a/designer-demo/src/main.js +++ b/designer-demo/src/main.js @@ -11,7 +11,7 @@ */ // 导入@opentiny/tiny-engine时,内部的依赖包也会逐个导入,可能会执行useComplie,此时需要templateHashMap。所以需要先执行一次defineEntry -import './defineEntry.js' +import { registry } from './defineEntry.js' import { init } from '@opentiny/tiny-engine' -init() +init({ registry }) diff --git a/packages/design-core/index.js b/packages/design-core/index.js index e7fdbd7e25..1c4e700fc0 100644 --- a/packages/design-core/index.js +++ b/packages/design-core/index.js @@ -1 +1 @@ -export { init } from './src/init' \ No newline at end of file +export { init } from './src/init' diff --git a/packages/design-core/src/init.js b/packages/design-core/src/init.js index 72f2dc9f7c..f3be02085a 100644 --- a/packages/design-core/src/init.js +++ b/packages/design-core/src/init.js @@ -80,7 +80,7 @@ const defaultLifeCycles = { } } -export const init = (selector = '#app', registry = defaultRegistry, lifeCycles = {}) => { +export const init = ({ selector = '#app', registry = defaultRegistry, lifeCycles = {} } = {}) => { const { beforeAppCreate, appCreated, appMounted } = lifeCycles defaultLifeCycles.beforeAppCreate({ registry }) diff --git a/packages/entry/vite.config.js b/packages/entry/vite.config.js index 0805bf1331..e235c7e9cb 100644 --- a/packages/entry/vite.config.js +++ b/packages/entry/vite.config.js @@ -29,4 +29,4 @@ export default defineConfig({ external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] } } -}) \ No newline at end of file +}) diff --git a/packages/vue-generator/src/parser/jsx-slot.js b/packages/vue-generator/src/parser/jsx-slot.js index 6d3639b1f1..09243c64c4 100644 --- a/packages/vue-generator/src/parser/jsx-slot.js +++ b/packages/vue-generator/src/parser/jsx-slot.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { BUILTIN_COMPONENT_NAME, TINY_ICON } from '../constant' import { addIconRecord, handleIconInProps } from '../utils' diff --git a/packages/vue-generator/src/parser/state.js b/packages/vue-generator/src/parser/state.js index 9d375682e5..6db415ffc5 100644 --- a/packages/vue-generator/src/parser/state.js +++ b/packages/vue-generator/src/parser/state.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { UNWRAP_QUOTES } from '../constant' import { transformType } from './state-type' From 6d8598b43e6ea0babc1a2e20142576241659cc75 Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Wed, 29 May 2024 05:56:46 -0700 Subject: [PATCH 189/322] feat(entry): add plugin correspond method (#516) * feat(entry): add plugin correspond method * fix(entry): optimize code by review suggestion * fix(entry): optimize code by review suggestion * fix(entry): change entry package entry path --- packages/design-core/vite.config.js | 6 +- packages/entry/src/common.js | 29 +++++- packages/entry/{ => src}/index.js | 22 ++--- packages/entry/src/useMessage.js | 144 ++++++++++++++++++++++++++++ packages/entry/src/useShareState.js | 12 +++ packages/entry/vite.config.js | 2 +- 6 files changed, 193 insertions(+), 22 deletions(-) rename packages/entry/{ => src}/index.js (54%) create mode 100644 packages/entry/src/useMessage.js create mode 100644 packages/entry/src/useShareState.js diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js index 50ddc19235..905f244440 100644 --- a/packages/design-core/vite.config.js +++ b/packages/design-core/vite.config.js @@ -83,9 +83,7 @@ const config = { }), vueJsx(), createSvgIconsPlugin({ - iconDirs: [ - path.resolve(__dirname, './assets/') - ], + iconDirs: [path.resolve(__dirname, './assets/')], symbolId: 'icon-[name]', inject: 'body-last' }) @@ -200,7 +198,7 @@ const devAlias = { '@opentiny/tiny-engine-webcomponent-core': path.resolve(__dirname, '../webcomponent/src/lib.js'), '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../i18n/src/lib.js'), '@opentiny/tiny-engine-builtin-component': path.resolve(__dirname, '../builtinComponent/index.js'), - '@opentiny/tiny-engine-entry': path.resolve(__dirname, '../entry/index.js'), + '@opentiny/tiny-engine-entry': path.resolve(__dirname, '../entry/src/index.js'), '@opentiny/tiny-engine-layout': path.resolve(__dirname, '../layout/index.js') } diff --git a/packages/entry/src/common.js b/packages/entry/src/common.js index f32dbdf03a..e144d3a337 100644 --- a/packages/entry/src/common.js +++ b/packages/entry/src/common.js @@ -46,6 +46,25 @@ export const layoutHashMap = {} export const metasHashMap = {} +export const apisMap = {} +export const optionsMap = {} + +export const getPluginApi = (id, key) => { + if (!apisMap[id]) { + return + } + + if (key) { + return apisMap[id][key] + } + + return apisMap[id] +} + +export const getOptions = (id) => { + return optionsMap[id] +} + const handleMethods = (id, methods) => { Object.entries(methods).forEach(([fileId, idMethods]) => { if (typeof idMethods === 'object') { @@ -88,7 +107,7 @@ const handleLifeCycles = (id, lifeCycles) => { } const handleRegistryProp = (id, value) => { - const { template, layout, methods, lifeCycles } = value + const { template, layout, methods, lifeCycles, apis, options } = value // 处理生命周期 if (lifeCycles) { handleLifeCycles(id, lifeCycles) @@ -103,6 +122,14 @@ const handleRegistryProp = (id, value) => { if (methods) { handleMethods(id, methods) } + + if (apis) { + apisMap[id] = apis + } + + if (options) { + optionsMap[id] = options + } } export const generateRegistry = (registry) => { diff --git a/packages/entry/index.js b/packages/entry/src/index.js similarity index 54% rename from packages/entry/index.js rename to packages/entry/src/index.js index aa8a29bee0..1d3f928e15 100644 --- a/packages/entry/index.js +++ b/packages/entry/src/index.js @@ -10,19 +10,9 @@ * */ -import { getMergeMeta } from './src/common' -import { useCompile } from './src/templateHash' -import { defineEntry, callEntry, beforeCallEntry, afterCallEntry, getMergeRegistry } from './src/entryHash' - -import { getLayoutComponent } from './src/layoutHash' - -export { - getMergeMeta, - useCompile, - defineEntry, - callEntry, - beforeCallEntry, - afterCallEntry, - getLayoutComponent, - getMergeRegistry -} +export { getMergeMeta, getPluginApi, getOptions } from './common' +export { useCompile } from './templateHash' +export { defineEntry, callEntry, beforeCallEntry, afterCallEntry, getMergeRegistry } from './entryHash' +export { getLayoutComponent } from './layoutHash' +export { default as useMessage } from './useMessage' +export { useShareState } from './useShareState' diff --git a/packages/entry/src/useMessage.js b/packages/entry/src/useMessage.js new file mode 100644 index 0000000000..cfbb710dde --- /dev/null +++ b/packages/entry/src/useMessage.js @@ -0,0 +1,144 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +let lastMessage = null +const subscribers = { '': {} } + +/** + * 订阅消息。 + * + * const { subscribe } = useMessage() + * subscribe({ topic: 'myTopic', callback: data => console.log(data) }) + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, subscriber(可选): 消息集合, callback: 接收到消息之后的回调用函数 } + * @return {Object} { topic: 消息名称, subscriber: 消息集合 } + */ +const subscribe = ({ topic, subscriber, callback } = {}) => { + const root = subscribers[''] + let listeners = root + + if (topic && typeof topic === 'string' && typeof callback === 'function') { + if (subscriber && typeof subscriber === 'string') { + listeners = subscribers[subscriber] || {} + subscribers[subscriber] = listeners + } + + const callbacks = listeners[topic] || [] + listeners[topic] = callbacks + callbacks.push(callback) + + const lastEvent = callbacks.lastEvent || root[topic]?.lastEvent + if (lastEvent) { + callback(lastEvent.data) + } + } + + return { topic, subscriber } +} + +/** + * 取消订阅。 + * + * //订阅消息 + * const { subscribe } = useMessage() + * let message = subscribe({ topic: 'myTopic', callback: data => console.log(data) }) + * + * //取消订阅 + * const { unsubscribe } = useMessage() + * unsubscribe({topic: 'myTopic'}) // 方式一 + * unsubscribe(message) // 方式二 + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, subscriber(可选): 消息集合 } + */ +const unsubscribe = ({ topic, subscriber } = {}) => { + if (topic && typeof topic === 'string') { + const removeListener = (subscriber) => { + const listeners = subscribers[subscriber] + if (listeners) { + delete listeners[topic] + if (subscriber && !Object.getOwnPropertyNames(listeners).length) { + delete subscribers[subscriber] + } + } + } + + if (subscriber && typeof subscriber === 'string') { + removeListener(subscriber) + + return + } + + for (const key of Object.keys(subscribers)) { + removeListener(key) + } + } +} + +/** + * 发布消息。 + * const { publish } = useMessage() + * publish({ topic: 'myTopic', data: 'string' }) + * publish({ topic: 'myTopic', data: {} }) + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, data(string | object): 消息内容 } + */ +const publish = ({ topic, data } = {}) => { + if (!topic || typeof topic !== 'string') { + return + } + + for (const value of Object.values(subscribers)) { + let callbacks = value[topic] || [] + + if (callbacks.length) { + for (const cb of callbacks) { + cb(data) + } + } else { + value[topic] = callbacks + } + + callbacks.lastEvent = { data } + } +} + +/** + * 广播消息。 + * const { broadcast } = useMessage() + * broadcast({ topic: 'myTopic', data: 'string' }) + * broadcast({ topic: 'myTopic', data: {} }) + * + * @member TinyEditor.message + * @param {Object} object { topic: 消息名称, data(string | object): 消息内容 } + */ +const broadcast = ({ topic, data }) => { + if (topic && typeof topic === 'string') { + lastMessage = { topic, data } + + publish(lastMessage) + } +} + +export default () => { + // 新use的message自动广播上次的异步消息 + lastMessage && publish(lastMessage) + + return { + subscribe, + unsubscribe, + publish, + broadcast + } +} diff --git a/packages/entry/src/useShareState.js b/packages/entry/src/useShareState.js new file mode 100644 index 0000000000..81134d79b2 --- /dev/null +++ b/packages/entry/src/useShareState.js @@ -0,0 +1,12 @@ +import { reactive, ref } from 'vue' + +const shareState = reactive({}) + +export const useShareState = (key) => { + return [ + ref(shareState[key]), + (value) => { + shareState[key] = value + } + ] +} diff --git a/packages/entry/vite.config.js b/packages/entry/vite.config.js index e235c7e9cb..05714df97d 100644 --- a/packages/entry/vite.config.js +++ b/packages/entry/vite.config.js @@ -20,7 +20,7 @@ export default defineConfig({ resolve: {}, build: { lib: { - entry: path.resolve(__dirname, './index.js'), + entry: path.resolve(__dirname, './src/index.js'), name: 'tiny-engine-entry', fileName: () => 'index.js', formats: ['es'] From af7a853341cc7cacd8ca331b995f38206665b6be Mon Sep 17 00:00:00 2001 From: Gene Date: Wed, 29 May 2024 18:57:04 -0700 Subject: [PATCH 190/322] =?UTF-8?q?refactor(registry):=20=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E6=B3=A8=E5=86=8C=E8=A1=A8=E7=BB=93=E6=9E=84=EF=BC=8C?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E9=85=8D=E7=BD=AE=E7=A7=BB=E8=87=B3overwrite?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=B8=8B=20(#521)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 注册表结构更新,支持传递配置项 * revert design-core files * fix: remove redundant statement * fix: 添加object校验 * 删除无用的注册表项目 * fix: replace with for...of --- packages/design-core/registry.js | 6 ++++-- packages/entry/src/common.js | 35 ++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/design-core/registry.js b/packages/design-core/registry.js index a1ea1019f0..41b7b6a029 100644 --- a/packages/design-core/registry.js +++ b/packages/design-core/registry.js @@ -45,7 +45,7 @@ import Styles from '@opentiny/tiny-engine-setting-styles' import '@opentiny/tiny-engine-theme' export default { - plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, Data, Schema, Help, Robot], + layout: { id: 'engine.layout' }, toolbars: [ Logo, Breadcrumb, @@ -62,5 +62,7 @@ export default { Setting, Lang ], - settings: [Props, Styles, Events] + plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, Data, Schema, Help, Robot], + settings: [Props, Styles, Events], + canvas: {} } diff --git a/packages/entry/src/common.js b/packages/entry/src/common.js index e144d3a337..331e4c96d4 100644 --- a/packages/entry/src/common.js +++ b/packages/entry/src/common.js @@ -67,7 +67,7 @@ export const getOptions = (id) => { const handleMethods = (id, methods) => { Object.entries(methods).forEach(([fileId, idMethods]) => { - if (typeof idMethods === 'object') { + if (typeof idMethods === 'object' && idMethods) { Object.entries(idMethods).forEach(([name, method]) => { const prefix = fileId ? `.${fileId}` : '' const methodId = `${id}${prefix}.${name}` @@ -78,7 +78,7 @@ const handleMethods = (id, methods) => { } const handleVueLifeCycle = (id, value) => { - vueLifeHook.forEach((hookName) => { + for (const hookName of vueLifeHook) { const hookConfig = value[hookName] if (!hookConfig) { return @@ -87,7 +87,7 @@ const handleVueLifeCycle = (id, value) => { const hookId = `${id}.${hookName}[0]` entryHashMap[hookId] = hookConfig } - if (hookConfig instanceof Array) { + if (Array.isArray(hookConfig)) { hookConfig.forEach((hookFn, index) => { if (typeof hookFn === 'function') { const hookId = `${id}.${hookName}[${index}]` @@ -95,7 +95,7 @@ const handleVueLifeCycle = (id, value) => { } }) } - }) + } } const handleLifeCycles = (id, lifeCycles) => { @@ -107,20 +107,25 @@ const handleLifeCycles = (id, lifeCycles) => { } const handleRegistryProp = (id, value) => { - const { template, layout, methods, lifeCycles, apis, options } = value - // 处理生命周期 - if (lifeCycles) { - handleLifeCycles(id, lifeCycles) - } - // 如果id和模板配置同时存在则放到模板hash表中 - if (template) { - templateHashMap[id] = template - } + const { layout, overwrite, apis, options } = value + if (layout) { layoutHashMap[id] = layout } - if (methods) { - handleMethods(id, methods) + + if (typeof overwrite === 'object' && overwrite) { + const { template, lifeCycles, methods } = overwrite + // 处理模板 + if (template) { + templateHashMap[id] = template + } + // 处理生命周期 + if (lifeCycles) { + handleLifeCycles(id, lifeCycles) + } + if (methods) { + handleMethods(id, methods) + } } if (apis) { From a90420a7b968404bf348bfea54474907f1e5566d Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Thu, 30 May 2024 21:03:55 -0700 Subject: [PATCH 191/322] feat: add capability of add custom metaComponents (#528) * feat(metaComponent): add capability of add custom metaComponents * feat: metaComponents pass to init fun register * fix: refactor code by code review * feat: rename metaComponent to configurator * fix(configurator): add base info to package.json * feat: rename metaxxx to configurator * fix: rename metaxxx to configurators * fix: refactor code by review --- designer-demo/package.json | 3 +- designer-demo/src/MyInputConfigurator.vue | 63 +++++ designer-demo/src/configurators.js | 11 + designer-demo/src/main.js | 3 +- .../builtinComponent/src/meta/CanvasCol.json | 10 +- .../builtinComponent/src/meta/CanvasRow.json | 10 +- .../src/meta/CanvasRowColContainer.json | 2 +- .../src/components/builtin/builtin.json | 6 +- packages/common/component/ConfigItem.vue | 14 +- packages/common/index.js | 3 +- packages/configurator/README.md | 3 + packages/configurator/package.json | 40 +++ packages/configurator/src/index.js | 2 + .../input-configurator/InputConfigurator.vue | 72 +++++ .../src/input-configurator/index.js | 6 + .../SelectConfigurator.vue | 122 +++++++++ .../src/select-configurator/index.js | 6 + packages/configurator/vite.config.js | 35 +++ packages/design-core/public/mock/bundle.json | 250 +++++++++--------- packages/design-core/src/init.js | 5 +- .../design-core/src/registerConfigurators.js | 11 + packages/design-core/vite.config.js | 3 +- packages/entry/README.md | 26 ++ packages/entry/src/configurators.js | 14 + packages/entry/src/index.js | 1 + 25 files changed, 570 insertions(+), 151 deletions(-) create mode 100644 designer-demo/src/MyInputConfigurator.vue create mode 100644 designer-demo/src/configurators.js create mode 100644 packages/configurator/README.md create mode 100644 packages/configurator/package.json create mode 100644 packages/configurator/src/index.js create mode 100644 packages/configurator/src/input-configurator/InputConfigurator.vue create mode 100644 packages/configurator/src/input-configurator/index.js create mode 100644 packages/configurator/src/select-configurator/SelectConfigurator.vue create mode 100644 packages/configurator/src/select-configurator/index.js create mode 100644 packages/configurator/vite.config.js create mode 100644 packages/design-core/src/registerConfigurators.js create mode 100644 packages/entry/README.md create mode 100644 packages/entry/src/configurators.js diff --git a/designer-demo/package.json b/designer-demo/package.json index 69a54f99ef..ee717a529e 100644 --- a/designer-demo/package.json +++ b/designer-demo/package.json @@ -11,7 +11,8 @@ "vue": "^3.4.21", "@opentiny/tiny-engine": "workspace:^", "@opentiny/tiny-engine-entry": "workspace:^", - "@opentiny/tiny-engine-canvas": "workspace:^" + "@opentiny/tiny-engine-canvas": "workspace:^", + "@opentiny/tiny-engine-configurator": "workspace:*" }, "devDependencies": { "@vitejs/plugin-vue": "^5.0.4", diff --git a/designer-demo/src/MyInputConfigurator.vue b/designer-demo/src/MyInputConfigurator.vue new file mode 100644 index 0000000000..47a9b11e53 --- /dev/null +++ b/designer-demo/src/MyInputConfigurator.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/designer-demo/src/configurators.js b/designer-demo/src/configurators.js new file mode 100644 index 0000000000..3f76596d75 --- /dev/null +++ b/designer-demo/src/configurators.js @@ -0,0 +1,11 @@ +import { InputConfigurator, SelectConfigurator } from '@opentiny/tiny-engine-configurator' +import MyInputConfigurator from './MyInputConfigurator.vue' + +export const configurators = [ + { + name: 'MyInputConfigurator', + component: MyInputConfigurator + }, + InputConfigurator, + SelectConfigurator +] diff --git a/designer-demo/src/main.js b/designer-demo/src/main.js index f94c13b040..01e6d4f166 100644 --- a/designer-demo/src/main.js +++ b/designer-demo/src/main.js @@ -13,5 +13,6 @@ // 导入@opentiny/tiny-engine时,内部的依赖包也会逐个导入,可能会执行useComplie,此时需要templateHashMap。所以需要先执行一次defineEntry import { registry } from './defineEntry.js' import { init } from '@opentiny/tiny-engine' +import { configurators } from './configurators.js' -init({ registry }) +init({ registry, configurators }) diff --git a/packages/builtinComponent/src/meta/CanvasCol.json b/packages/builtinComponent/src/meta/CanvasCol.json index 33c68b5dff..540bdb9015 100644 --- a/packages/builtinComponent/src/meta/CanvasCol.json +++ b/packages/builtinComponent/src/meta/CanvasCol.json @@ -56,7 +56,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -72,7 +72,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -88,7 +88,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -104,7 +104,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { "value": "flex-start", "label": "头部对齐" }, @@ -128,7 +128,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { "value": "flex-start", "label": "头部对齐" }, diff --git a/packages/builtinComponent/src/meta/CanvasRow.json b/packages/builtinComponent/src/meta/CanvasRow.json index 5033b30ba6..0ee26acbf6 100644 --- a/packages/builtinComponent/src/meta/CanvasRow.json +++ b/packages/builtinComponent/src/meta/CanvasRow.json @@ -34,7 +34,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -50,7 +50,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -66,7 +66,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -82,7 +82,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { "value": "flex-start", "label": "头部对齐" }, @@ -106,7 +106,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { "value": "flex-start", "label": "头部对齐" }, diff --git a/packages/builtinComponent/src/meta/CanvasRowColContainer.json b/packages/builtinComponent/src/meta/CanvasRowColContainer.json index e363530f6f..5ee884cdf2 100644 --- a/packages/builtinComponent/src/meta/CanvasRowColContainer.json +++ b/packages/builtinComponent/src/meta/CanvasRowColContainer.json @@ -34,7 +34,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } } diff --git a/packages/canvas/src/components/builtin/builtin.json b/packages/canvas/src/components/builtin/builtin.json index 79c6782940..560a900169 100644 --- a/packages/canvas/src/components/builtin/builtin.json +++ b/packages/canvas/src/components/builtin/builtin.json @@ -94,7 +94,7 @@ }, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -256,7 +256,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "type": "textarea", "autosize": true @@ -399,7 +399,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } } diff --git a/packages/common/component/ConfigItem.vue b/packages/common/component/ConfigItem.vue index c0fd195e7b..565d639bbc 100644 --- a/packages/common/component/ConfigItem.vue +++ b/packages/common/component/ConfigItem.vue @@ -111,6 +111,7 @@ import MultiTypeSelector from './MultiTypeSelector.vue' import { useHistory, useProperties, useResource, useLayout, useCanvas } from '@opentiny/tiny-engine-controller' import { generateFunction } from '@opentiny/tiny-engine-controller/utils' import { SCHEMA_DATA_TYPE, PAGE_STATUS, TYPES } from '@opentiny/tiny-engine-controller/js/constants' +import { getConfigurator } from '@opentiny/tiny-engine-entry' const hasRule = (required, rules) => { if (required) { @@ -201,13 +202,14 @@ export default { (props.property?.label?.text?.[locale.value] ?? props.property?.label?.text) ) const isLinked = computed(() => Boolean(props.property.linked)) - const component = computed(() => - multiType.value + const component = computed(() => { + // TODO: 需要弄清楚 props.metaComponents[widget.value.component] 是什么场景 + return multiType.value ? MultiTypeSelector - : props.metaComponents[widget.value.component] || - MetaComponents[widget.value.component] || - MetaComponents['MetaInput'] - ) + : getConfigurator(widget.value.component) || + props.metaComponents[widget.value.component] || + getConfigurator('InputConfigurator') + }) const bindValue = computed(() => { let value = props.property?.widget?.props?.modelValue diff --git a/packages/common/index.js b/packages/common/index.js index 2fcb94fccb..e322eeba1f 100644 --- a/packages/common/index.js +++ b/packages/common/index.js @@ -146,8 +146,7 @@ export const MetaComponents = { MetaIpSection, MetaRelatedEditor, MetaRelatedColumns, - MetaTableColumns, - SearchEmpty + MetaTableColumns } export { diff --git a/packages/configurator/README.md b/packages/configurator/README.md new file mode 100644 index 0000000000..fa5949c81e --- /dev/null +++ b/packages/configurator/README.md @@ -0,0 +1,3 @@ +# TinyEngine 的 configurator component 组件 + +右侧属性面板配置物料属性的组件。 diff --git a/packages/configurator/package.json b/packages/configurator/package.json new file mode 100644 index 0000000000..df8f8f74a1 --- /dev/null +++ b/packages/configurator/package.json @@ -0,0 +1,40 @@ +{ + "name": "@opentiny/tiny-engine-configurator", + "version": "1.0.0", + "description": "", + "main": "dist/index.js", + "module": "dist/index.js", + "type": "module", + "scripts": { + "build": "vite build", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "OpenTiny Team", + "license": "MIT", + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "homepage": "https://opentiny.design/tiny-engine", + "devDependencies": { + "vite": "^4.3.7" + }, + "peerDependencies": { + "@opentiny/vue": "^3.14.0", + "vue": "^3.4.15" + }, + "dependencies": { + "@opentiny/tiny-engine-controller": "workspace:*" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/configurator" + }, + "files": [ + "dist" + ] +} diff --git a/packages/configurator/src/index.js b/packages/configurator/src/index.js new file mode 100644 index 0000000000..dabd62d792 --- /dev/null +++ b/packages/configurator/src/index.js @@ -0,0 +1,2 @@ +export { default as InputConfigurator } from './input-configurator' +export { default as SelectConfigurator } from './select-configurator' diff --git a/packages/configurator/src/input-configurator/InputConfigurator.vue b/packages/configurator/src/input-configurator/InputConfigurator.vue new file mode 100644 index 0000000000..5e58cb2dfc --- /dev/null +++ b/packages/configurator/src/input-configurator/InputConfigurator.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/packages/configurator/src/input-configurator/index.js b/packages/configurator/src/input-configurator/index.js new file mode 100644 index 0000000000..94a933b6e3 --- /dev/null +++ b/packages/configurator/src/input-configurator/index.js @@ -0,0 +1,6 @@ +import InputConfigurator from './InputConfigurator.vue' + +export default { + name: 'InputConfigurator', + component: InputConfigurator +} diff --git a/packages/configurator/src/select-configurator/SelectConfigurator.vue b/packages/configurator/src/select-configurator/SelectConfigurator.vue new file mode 100644 index 0000000000..d9a59b8f97 --- /dev/null +++ b/packages/configurator/src/select-configurator/SelectConfigurator.vue @@ -0,0 +1,122 @@ + + + + diff --git a/packages/configurator/src/select-configurator/index.js b/packages/configurator/src/select-configurator/index.js new file mode 100644 index 0000000000..685f88bd58 --- /dev/null +++ b/packages/configurator/src/select-configurator/index.js @@ -0,0 +1,6 @@ +import SelectConfigurator from './SelectConfigurator.vue' + +export default { + name: 'SelectConfigurator', + component: SelectConfigurator +} diff --git a/packages/configurator/vite.config.js b/packages/configurator/vite.config.js new file mode 100644 index 0000000000..6c428011c5 --- /dev/null +++ b/packages/configurator/vite.config.js @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineConfig } from 'vite' +import path from 'node:path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue(), vueJsx()], + publicDir: false, + build: { + lib: { + entry: path.resolve(__dirname, './src/index.js'), + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + output: { + banner: 'import "./style.css"' + }, + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] + } + } +}) diff --git a/packages/design-core/public/mock/bundle.json b/packages/design-core/public/mock/bundle.json index 2fa58678f1..d4e06792eb 100644 --- a/packages/design-core/public/mock/bundle.json +++ b/packages/design-core/public/mock/bundle.json @@ -79,7 +79,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "MyInputConfigurator", "props": {} } }, @@ -101,7 +101,7 @@ "type": "string", "defaultValue": "default", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -137,7 +137,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -360,7 +360,7 @@ "type": "string", "defaultValue": "default", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -396,7 +396,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -748,7 +748,7 @@ "type": "string", "defaultValue": "right", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -784,7 +784,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "device": [] @@ -806,7 +806,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "device": [] @@ -850,7 +850,7 @@ "type": "string", "defaultValue": "left", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -971,7 +971,7 @@ "type": "string", "defaultValue": "default", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -1137,7 +1137,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1158,7 +1158,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1179,7 +1179,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1244,7 +1244,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1308,7 +1308,7 @@ "type": "string", "defaultValue": "default", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -1344,7 +1344,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1365,7 +1365,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -1525,7 +1525,7 @@ } }, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -1578,7 +1578,7 @@ } }, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1597,7 +1597,7 @@ } }, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1616,7 +1616,7 @@ } }, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1673,7 +1673,7 @@ } }, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -1846,7 +1846,7 @@ } }, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -1881,7 +1881,7 @@ } }, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -1916,7 +1916,7 @@ } }, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -1936,7 +1936,7 @@ } }, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -2017,7 +2017,7 @@ } }, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -2141,7 +2141,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "device": [] @@ -2208,7 +2208,7 @@ "type": "string", "defaultValue": "default", "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -2310,7 +2310,7 @@ "labelPosition": "top", "type": "string", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "device": [] @@ -2331,7 +2331,7 @@ "cols": 12, "labelPosition": "top", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "device": [] @@ -2373,7 +2373,7 @@ "cols": 12, "labelPosition": "top", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "device": [] @@ -2395,7 +2395,7 @@ "labelPosition": "top", "defaultValue": "fixed", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "options": [ { @@ -2766,7 +2766,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -2785,7 +2785,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -2804,7 +2804,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -2900,7 +2900,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "options": [ { @@ -2975,7 +2975,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -2994,7 +2994,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "options": [ { @@ -3100,7 +3100,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "options": [ { @@ -3130,7 +3130,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "options": [ { @@ -3245,7 +3245,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -3264,7 +3264,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -3579,7 +3579,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -3681,7 +3681,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -3851,7 +3851,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -3870,7 +3870,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -3889,7 +3889,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -4027,7 +4027,7 @@ "cols": 12, "rules": [], "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -4187,7 +4187,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -4206,7 +4206,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -4419,7 +4419,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -4438,7 +4438,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -4457,7 +4457,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -4548,7 +4548,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -4567,7 +4567,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -4656,7 +4656,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -4810,7 +4810,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -4962,7 +4962,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -5021,7 +5021,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -5040,7 +5040,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -5297,7 +5297,7 @@ "defaultValue": "标签", "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -5317,7 +5317,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -5431,7 +5431,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -5738,7 +5738,7 @@ "readOnly": false, "disabled": false, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -5796,7 +5796,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -6069,7 +6069,7 @@ } }, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -6176,7 +6176,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -6468,7 +6468,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -6505,7 +6505,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -6572,7 +6572,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -6591,7 +6591,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -6707,7 +6707,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -6727,7 +6727,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -6876,7 +6876,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7135,7 +7135,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7154,7 +7154,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7174,7 +7174,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7317,7 +7317,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7357,7 +7357,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7596,7 +7596,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7655,7 +7655,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7702,7 +7702,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7721,7 +7721,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7855,7 +7855,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -7914,7 +7914,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8046,7 +8046,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "dataType": "Array" } @@ -8114,7 +8114,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -8257,7 +8257,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8297,7 +8297,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8356,7 +8356,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8579,7 +8579,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8639,7 +8639,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -8822,7 +8822,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8841,7 +8841,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8935,7 +8935,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -8976,7 +8976,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } } @@ -9073,7 +9073,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -9166,7 +9166,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -9298,7 +9298,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -9318,7 +9318,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -9464,7 +9464,7 @@ } }, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} } }, @@ -9506,7 +9506,7 @@ } }, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -9594,7 +9594,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -9677,7 +9677,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -9802,7 +9802,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "placeholder": "比如:id" } @@ -10061,7 +10061,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -10415,7 +10415,7 @@ "cols": 12, "defaultValue": "total,sizes,prev, pager, next", "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "type": "textarea" } @@ -10572,7 +10572,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -10592,7 +10592,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -10987,7 +10987,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -11007,7 +11007,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "disabled": true, "placeholder": "请使用变量绑定来绑定函数" @@ -11485,7 +11485,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -11557,7 +11557,7 @@ "defaultValue": "提示信息", "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -11576,7 +11576,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": { "disabled": true, "placeholder": "请使用变量绑定来绑定函数" @@ -11727,7 +11727,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -11798,7 +11798,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -11836,7 +11836,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -11932,7 +11932,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -12027,7 +12027,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -12065,7 +12065,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaInput", + "component": "InputConfigurator", "props": {} }, "description": { @@ -12209,7 +12209,7 @@ } }, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -12329,7 +12329,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -12687,7 +12687,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { @@ -12740,7 +12740,7 @@ "disabled": false, "cols": 12, "widget": { - "component": "MetaSelect", + "component": "SelectConfigurator", "props": { "options": [ { diff --git a/packages/design-core/src/init.js b/packages/design-core/src/init.js index f3be02085a..990b498786 100644 --- a/packages/design-core/src/init.js +++ b/packages/design-core/src/init.js @@ -25,6 +25,7 @@ import { utils } from '@opentiny/tiny-engine-utils' import { defineEntry } from '@opentiny/tiny-engine-entry' import App from './App.vue' import defaultRegistry from '../registry.js' +import { registerConfigurators } from './registerConfigurators' import 'virtual:svg-icons-register' @@ -80,9 +81,11 @@ const defaultLifeCycles = { } } -export const init = ({ selector = '#app', registry = defaultRegistry, lifeCycles = {} } = {}) => { +export const init = ({ selector = '#app', registry = defaultRegistry, lifeCycles = {}, configurators = [] } = {}) => { const { beforeAppCreate, appCreated, appMounted } = lifeCycles + registerConfigurators(configurators) + defaultLifeCycles.beforeAppCreate({ registry }) beforeAppCreate?.({ registry }) const app = createApp(App) diff --git a/packages/design-core/src/registerConfigurators.js b/packages/design-core/src/registerConfigurators.js new file mode 100644 index 0000000000..22752108c2 --- /dev/null +++ b/packages/design-core/src/registerConfigurators.js @@ -0,0 +1,11 @@ +// TODO: 抽空 common package 中的 metaComponent +import { MetaComponents } from '@opentiny/tiny-engine-common' +import { addConfigurator } from '@opentiny/tiny-engine-entry' + +/** + * 注册用户指定的 configurators + */ +export const registerConfigurators = (configurators) => { + addConfigurator(Object.entries(MetaComponents).map(([name, component]) => ({ name, component }))) + addConfigurator(configurators) +} diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js index 905f244440..fb728de8e9 100644 --- a/packages/design-core/vite.config.js +++ b/packages/design-core/vite.config.js @@ -199,7 +199,8 @@ const devAlias = { '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../i18n/src/lib.js'), '@opentiny/tiny-engine-builtin-component': path.resolve(__dirname, '../builtinComponent/index.js'), '@opentiny/tiny-engine-entry': path.resolve(__dirname, '../entry/src/index.js'), - '@opentiny/tiny-engine-layout': path.resolve(__dirname, '../layout/index.js') + '@opentiny/tiny-engine-layout': path.resolve(__dirname, '../layout/index.js'), + '@opentiny/tiny-engine-configurator': path.resolve(__dirname, '../configurator/src/index.js') } const prodAlias = { diff --git a/packages/entry/README.md b/packages/entry/README.md new file mode 100644 index 0000000000..d50a0057c4 --- /dev/null +++ b/packages/entry/README.md @@ -0,0 +1,26 @@ +# entry(暂定) + +## configurators + +往设计器添加 metaComponent,满足右侧属性面板属性设置器自定义组件的需求 + +### addConfigurator + +```javascript +addConfigurator([ + { + name: 'InputConfigurator', + component: InputConfigurator + }, + { + name: 'SelectConfigurator', + component: SelectConfigurator + } +]) +``` + +### getConfigurator + +```javascript +getConfigurator('InputConfigurator') +``` diff --git a/packages/entry/src/configurators.js b/packages/entry/src/configurators.js new file mode 100644 index 0000000000..8b3d8f7514 --- /dev/null +++ b/packages/entry/src/configurators.js @@ -0,0 +1,14 @@ +const configuratorsMap = new Map() + +export const addConfigurator = (components) => { + // TODO: 数据结构校验&错误抛出 + if (Array.isArray(components)) { + for (const { name, component } of components) { + configuratorsMap.set(name, component) + } + } +} + +export const getConfigurator = (name) => { + return configuratorsMap.get(name) +} diff --git a/packages/entry/src/index.js b/packages/entry/src/index.js index 1d3f928e15..eaea5b879c 100644 --- a/packages/entry/src/index.js +++ b/packages/entry/src/index.js @@ -16,3 +16,4 @@ export { defineEntry, callEntry, beforeCallEntry, afterCallEntry, getMergeRegist export { getLayoutComponent } from './layoutHash' export { default as useMessage } from './useMessage' export { useShareState } from './useShareState' +export { getConfigurator, addConfigurator } from './configurators' From beb019a08313efac00e86f5d71af573e3ec91e56 Mon Sep 17 00:00:00 2001 From: Hexqi Date: Fri, 31 May 2024 17:59:34 +0800 Subject: [PATCH 192/322] feat: merge registry (#531) --- packages/design-core/package.json | 3 +- packages/design-core/src/init.js | 35 +---- packages/entry/package.json | 7 +- packages/entry/src/entryHash.js | 46 +++++++ packages/entry/src/index.js | 2 +- packages/entry/test/entryHash.test.js | 178 ++++++++++++++++++++++++++ packages/utils/src/constants/index.js | 11 +- 7 files changed, 245 insertions(+), 37 deletions(-) create mode 100644 packages/entry/test/entryHash.test.js diff --git a/packages/design-core/package.json b/packages/design-core/package.json index d4983fc0e8..b8ab4bd732 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -139,8 +139,7 @@ "vite-plugin-monaco-editor": "^1.1.0", "vite-plugin-static-copy": "^0.16.0", "vite-plugin-svg-icons": "^2.0.1", - "vue-eslint-parser": "^8.0.1", - "lodash-es": "^4.17.21" + "vue-eslint-parser": "^8.0.1" }, "browserslist": [ "> 1%", diff --git a/packages/design-core/src/init.js b/packages/design-core/src/init.js index 990b498786..c25885f1be 100644 --- a/packages/design-core/src/init.js +++ b/packages/design-core/src/init.js @@ -11,7 +11,6 @@ */ import { createApp } from 'vue' -import { merge } from 'lodash-es' import initSvgs from '@opentiny/tiny-engine-svgs' import { setGlobalConfig } from '@opentiny/tiny-engine-controller' import i18n from '@opentiny/tiny-engine-controller/js/i18n' @@ -21,43 +20,21 @@ import { injectGlobalComponents } from '@opentiny/tiny-engine-common' import { initHttp } from '@opentiny/tiny-engine-http' import TinyThemeTool from '@opentiny/vue-theme/theme-tool' import { tinySmbTheme } from '@opentiny/vue-theme/theme' // SMB 主题 -import { utils } from '@opentiny/tiny-engine-utils' -import { defineEntry } from '@opentiny/tiny-engine-entry' +import { defineEntry, mergeRegistry } from '@opentiny/tiny-engine-entry' import App from './App.vue' import defaultRegistry from '../registry.js' import { registerConfigurators } from './registerConfigurators' import 'virtual:svg-icons-register' -const { getType } = utils - -const mergeRegistry = (registry) => { - for (const [key, value] of Object.entries(registry)) { - const defaultConfig = defaultRegistry[key] - if (Array.isArray(value) && defaultConfig) { - value.forEach((meta, index) => { - const defaultMeta = defaultConfig.find((item) => item.id === meta.id) - if (defaultMeta) { - value[index] = merge(defaultMeta, meta) - } - }) - } - - if (getType(value) === 'Object' && defaultConfig) { - registry[key] = merge(defaultConfig, registry[key]) - } - } - if (process.env.NODE_ENV === 'development') { - console.log('default registry:', defaultRegistry) // eslint-disable-line - console.log('merged registry:', registry) // eslint-disable-line - } - return registry -} - const defaultLifeCycles = { beforeAppCreate: ({ registry }) => { // 合并用户自定义注册表 - const newRegistry = mergeRegistry(registry) + const newRegistry = mergeRegistry(registry, defaultRegistry) + if (process.env.NODE_ENV === 'development') { + console.log('default registry:', defaultRegistry) // eslint-disable-line + console.log('merged registry:', registry) // eslint-disable-line + } // 在common层注入合并后的注册表 defineEntry(newRegistry) diff --git a/packages/entry/package.json b/packages/entry/package.json index df5821c532..4d9e237078 100644 --- a/packages/entry/package.json +++ b/packages/entry/package.json @@ -9,11 +9,16 @@ ], "scripts": { "build": "vite build", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "vitest" }, "dependencies": { + "@opentiny/tiny-engine-utils": "workspace:*", + "lodash-es": "^4.17.21", "vue": "^3.4.21" }, + "devDependencies": { + "vitest": "^1.4.0" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/packages/entry/src/entryHash.js b/packages/entry/src/entryHash.js index 1f891c282b..7f969b6801 100644 --- a/packages/entry/src/entryHash.js +++ b/packages/entry/src/entryHash.js @@ -10,10 +10,56 @@ * */ +import { merge } from 'lodash-es' +import { utils } from '@opentiny/tiny-engine-utils' import { generateRegistry, entryHashMap } from './common' const lowcodeRegistry = { registry: null } +const { getType } = utils + +// 合并子模块注册表(metas字段) +const getMergedChildMetas = (defaultChildMeta, userChildMeta) => { + if (!Array.isArray(defaultChildMeta)) { + return userChildMeta + } + + return userChildMeta.map((childConfig) => { + const defaultChildConfig = defaultChildMeta.find((item) => item.id === childConfig.id) || {} + return merge({}, defaultChildConfig, childConfig) + }) +} + +/** + * 合并注册表 + * @param {*} registry 用户自定义的注册表 + * @param {*} defaultRegistry 默认设计器注册表 + * @returns registry 合并后的用户自定义注册表 + */ +export const mergeRegistry = (registry, defaultRegistry) => { + for (const [key, value] of Object.entries(registry)) { + const defaultConfig = defaultRegistry[key] + if (Array.isArray(value) && defaultConfig) { + value.forEach((userMeta, index) => { + const defaultMeta = defaultConfig.find((item) => item.id === userMeta.id) + if (defaultMeta) { + const { metas: defaultChildMeta, ...restMeta } = defaultMeta + if (Array.isArray(userMeta.metas)) { + userMeta.metas = getMergedChildMetas(defaultChildMeta, userMeta.metas) + } + value[index] = merge({}, restMeta, userMeta) + } + }) + } + + if (getType(value) === 'Object' && defaultConfig) { + registry[key] = merge({}, defaultConfig, registry[key]) + } + } + + return registry +} + export const getMergeRegistry = (type, id) => { const registry = type ? lowcodeRegistry.registry[type] : lowcodeRegistry.registry diff --git a/packages/entry/src/index.js b/packages/entry/src/index.js index eaea5b879c..e1ecd61651 100644 --- a/packages/entry/src/index.js +++ b/packages/entry/src/index.js @@ -12,7 +12,7 @@ export { getMergeMeta, getPluginApi, getOptions } from './common' export { useCompile } from './templateHash' -export { defineEntry, callEntry, beforeCallEntry, afterCallEntry, getMergeRegistry } from './entryHash' +export { defineEntry, callEntry, beforeCallEntry, afterCallEntry, mergeRegistry, getMergeRegistry } from './entryHash' export { getLayoutComponent } from './layoutHash' export { default as useMessage } from './useMessage' export { useShareState } from './useShareState' diff --git a/packages/entry/test/entryHash.test.js b/packages/entry/test/entryHash.test.js new file mode 100644 index 0000000000..62c3b7f9c8 --- /dev/null +++ b/packages/entry/test/entryHash.test.js @@ -0,0 +1,178 @@ +import { expect, describe, it } from 'vitest' +import { cloneDeep } from 'lodash-es' +import { mergeRegistry } from '../src/entryHash' + +// run this test suite in parallel +describe.concurrent('mergeRegistry', () => { + const defaultRegistry = { + layout: { + id: 'engine.layout', + options: { + pluginPanelWidth: '200px', + pluginIconSize: '24px' + } + }, + plugins: [ + { + id: 'engine.plugins.materials', + title: '物料', + type: 'plugins', + icon: 'plugin-icon-materials', + component: 'Material', + layout: { + id: 'engine.plugin.materials.layout', + component: 'MaterialsLayout', + apis: {}, + options: {} + }, + metas: [ + { + id: 'engine.plugins.materials.component', + title: '组件', + type: 'metaApp', + component: 'ComponentList', + apis: {}, + options: {} + }, + { + id: 'engine.plugins.materials.block', + title: '区块', + type: 'metaApp', + component: 'MaterialList' + } + ] + }, + { + id: 'engine.plugins.outlinetree', + title: '大纲树', + type: 'plugins', + icon: 'plugin-icon-tree', + align: 'top', + component: 'OutlineTree' + }, + { + id: 'engine.plugins.i18n', + title: '国际化', + type: 'plugins', + align: 'top', + component: 'I18n' + } + ] + } + it('should merge registry correctly', () => { + const registry = { + layout: { + id: 'engine.layout', + options: { + pluginPanelWidth: '100px' + } + }, + plugins: [ + { + id: 'engine.plugins.outlinetree', + component: 'MyCustomOutline' + } + ] + } + + const expected = { + layout: { + id: 'engine.layout', + options: { + pluginPanelWidth: '100px', // should replaced to 100px + pluginIconSize: '24px' // should merge from defaultRegistry + } + }, + plugins: [ + // should only include one plugin + { + id: 'engine.plugins.outlinetree', + title: '大纲树', // should merged from defaultRegistry + type: 'plugins', // should merged from defaultRegistry + icon: 'plugin-icon-tree', // should merged from defaultRegistry + align: 'top', // should merged from defaultRegistry + component: 'MyCustomOutline' // should replace component + } + ] + } + + expect(mergeRegistry(registry, defaultRegistry)).toEqual(expected) + }) + + it('should merge child metas correctly', () => { + const registry = { + plugins: [ + { + id: 'engine.plugins.materials', + title: '我的物料', + layout: { + id: 'engine.plugin.materials.layout', + component: 'MyMaterialsLayout' + }, + metas: [ + { + id: 'engine.plugins.materials.block', + options: { + listType: 'grid' + } + } + ] + } + ] + } + + const expected = { + plugins: [ + // should only include one plugin + { + id: 'engine.plugins.materials', + title: '我的物料', // should replace title + type: 'plugins', // should merged from defaultRegistry + icon: 'plugin-icon-materials', // should merged from defaultRegistry + component: 'Material', // should merged from defaultRegistry + layout: { + id: 'engine.plugin.materials.layout', + component: 'MyMaterialsLayout', // should replace component + apis: {}, // should merged from defaultRegistry + options: {} // should merged from defaultRegistry + }, + metas: [ + // should only include one metaApp + { + id: 'engine.plugins.materials.block', + title: '区块', // should merged from defaultRegistry + type: 'metaApp', // should merged from defaultRegistry + component: 'MaterialList', // should merged from defaultRegistry + options: { + listType: 'grid' // should merge from registry + } + } + ] + } + ] + } + + expect(mergeRegistry(registry, defaultRegistry)).toEqual(expected) + }) + + it('should not change origin defaultRegistry', () => { + const registry = { + layout: { + id: 'engine.layout', + options: { + pluginPanelWidth: '100px' + } + }, + plugins: [ + { + id: 'engine.plugins.outlinetree', + component: 'MyCustomOutline' + } + ] + } + const originRegistry = cloneDeep(defaultRegistry) + mergeRegistry(registry, defaultRegistry) + + expect(defaultRegistry).toEqual(originRegistry) + }) +}) diff --git a/packages/utils/src/constants/index.js b/packages/utils/src/constants/index.js index 05f4f20965..1a6520c9e3 100644 --- a/packages/utils/src/constants/index.js +++ b/packages/utils/src/constants/index.js @@ -10,7 +10,7 @@ * */ -import * as utils from '../utils' +import { guid } from '../utils' export const MATERIAL_TYPE = { Component: 'component', @@ -80,9 +80,12 @@ export const BLOCK_OPENNESS = { * 为了避免在同一个浏览器下打开不同设计器应用造成的消息错乱 * 频道名字 需要为 channelName + channelId */ -const CHANNEL_UID = sessionStorage.getItem('BROADCAST_CHANNEL_UID') || utils.guid() - -sessionStorage.setItem('BROADCAST_CHANNEL_UID', CHANNEL_UID) +let CHANNEL_UID = '' +if (typeof sessionStorage !== 'undefined') { + // 支持node环境,如单测场景 + CHANNEL_UID = sessionStorage?.getItem('BROADCAST_CHANNEL_UID') || guid() + sessionStorage?.setItem('BROADCAST_CHANNEL_UID', CHANNEL_UID) +} export const BROADCAST_CHANNEL = { CanvasLang: `tiny-lowcode-canvas-lang-${CHANNEL_UID}`, From 473087edd52ffbbd59d08346cc191756431761c2 Mon Sep 17 00:00:00 2001 From: Gene Date: Fri, 31 May 2024 03:00:21 -0700 Subject: [PATCH 193/322] =?UTF-8?q?refactor:=20=E6=8A=BD=E5=8F=96=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E8=AE=BE=E7=BD=AE=E9=9D=A2=E6=9D=BF=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=20(#529)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-demo/registry.js | 2 +- packages/controller/src/useLayout.js | 2 +- packages/design-core/package.json | 1 + packages/design-core/registry.js | 6 +- packages/design-core/src/App.vue | 6 +- packages/design-core/src/DesignSettings.vue | 106 +++---------------- packages/design-core/vite.config.js | 1 + packages/engine-cli/template/registry.js | 2 +- packages/entry/src/common.js | 4 +- packages/plugins/data/meta.js | 2 +- packages/settings/panel/index.js | 19 ++++ packages/settings/panel/meta.js | 15 +++ packages/settings/panel/package.json | 39 +++++++ packages/settings/panel/src/Main.vue | 108 ++++++++++++++++++++ packages/settings/panel/vite.config.js | 37 +++++++ 15 files changed, 245 insertions(+), 105 deletions(-) create mode 100644 packages/settings/panel/index.js create mode 100644 packages/settings/panel/meta.js create mode 100644 packages/settings/panel/package.json create mode 100644 packages/settings/panel/src/Main.vue create mode 100644 packages/settings/panel/vite.config.js diff --git a/designer-demo/registry.js b/designer-demo/registry.js index 6d1da5eb26..e314185468 100644 --- a/designer-demo/registry.js +++ b/designer-demo/registry.js @@ -82,7 +82,7 @@ export default { id: 'engine.plugins.pagecontroller' }, { - id: 'engine.plugins.datasource' + id: 'engine.plugins.state' }, { id: 'engine.plugins.schema' diff --git a/packages/controller/src/useLayout.js b/packages/controller/src/useLayout.js index 6e1f744bad..4623a9d02a 100644 --- a/packages/controller/src/useLayout.js +++ b/packages/controller/src/useLayout.js @@ -20,7 +20,7 @@ const PLUGIN_NAME = { AppManage: 'engine.plugins.appmanage', BlockManage: 'engine.plugins.blockmanage', Bridge: 'engine.plugins.bridge', - DataSource: 'engine.plugins.datasource', + State: 'engine.plugins.state', Collections: 'engine.plugins.collections', EditorHelp: 'engine.plugins.editorhelp', I18n: 'engine.plugins.i18n', diff --git a/packages/design-core/package.json b/packages/design-core/package.json index b8ab4bd732..3aa8844100 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -65,6 +65,7 @@ "@opentiny/tiny-engine-plugin-script": "workspace:*", "@opentiny/tiny-engine-plugin-tree": "workspace:*", "@opentiny/tiny-engine-plugin-tutorial": "workspace:*", + "@opentiny/tiny-engine-settings-panel": "workspace:*", "@opentiny/tiny-engine-setting-design": "workspace:*", "@opentiny/tiny-engine-setting-events": "workspace:*", "@opentiny/tiny-engine-setting-props": "workspace:*", diff --git a/packages/design-core/registry.js b/packages/design-core/registry.js index 41b7b6a029..5023cc2ea7 100644 --- a/packages/design-core/registry.js +++ b/packages/design-core/registry.js @@ -38,6 +38,7 @@ import Block from '@opentiny/tiny-engine-plugin-block' import Datasource from '@opentiny/tiny-engine-plugin-datasource' import Robot from '@opentiny/tiny-engine-plugin-robot' +import SettingsPanel from '@opentiny/tiny-engine-settings-panel' import Props from '@opentiny/tiny-engine-setting-props' import Events from '@opentiny/tiny-engine-setting-events' import Styles from '@opentiny/tiny-engine-setting-styles' @@ -63,6 +64,9 @@ export default { Lang ], plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, Data, Schema, Help, Robot], - settings: [Props, Styles, Events], + settings: { + ...SettingsPanel, + metas: [Props, Styles, Events] + }, canvas: {} } diff --git a/packages/design-core/src/App.vue b/packages/design-core/src/App.vue index 59de29a975..dc7e5ce0aa 100644 --- a/packages/design-core/src/App.vue +++ b/packages/design-core/src/App.vue @@ -10,7 +10,7 @@
    - +
    @@ -18,7 +18,7 @@ - - diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js index fb728de8e9..357f4f1e8b 100644 --- a/packages/design-core/vite.config.js +++ b/packages/design-core/vite.config.js @@ -169,6 +169,7 @@ const devAlias = { '@opentiny/tiny-engine-plugin-bridge': path.resolve(__dirname, '../plugins/bridge/index.js'), '@opentiny/tiny-engine-plugin-tutorial': path.resolve(__dirname, '../plugins/tutorial/index.js'), '@opentiny/tiny-engine-plugin-robot': path.resolve(__dirname, '../plugins/robot/index.js'), + '@opentiny/tiny-engine-settings-panel': path.resolve(__dirname, '../settings/panel/index.js'), '@opentiny/tiny-engine-setting-events': path.resolve(__dirname, '../settings/events/index.js'), '@opentiny/tiny-engine-setting-props': path.resolve(__dirname, '../settings/props/index.js'), '@opentiny/tiny-engine-setting-styles': path.resolve(__dirname, '../settings/styles/index.js'), diff --git a/packages/engine-cli/template/registry.js b/packages/engine-cli/template/registry.js index 6d1da5eb26..e314185468 100644 --- a/packages/engine-cli/template/registry.js +++ b/packages/engine-cli/template/registry.js @@ -82,7 +82,7 @@ export default { id: 'engine.plugins.pagecontroller' }, { - id: 'engine.plugins.datasource' + id: 'engine.plugins.state' }, { id: 'engine.plugins.schema' diff --git a/packages/entry/src/common.js b/packages/entry/src/common.js index 331e4c96d4..535d7eed9b 100644 --- a/packages/entry/src/common.js +++ b/packages/entry/src/common.js @@ -154,6 +154,6 @@ export const generateRegistry = (registry) => { }) } -export const getMergeMeta = (meta) => { - return metasHashMap[meta?.id] +export const getMergeMeta = (id) => { + return metasHashMap[id] } diff --git a/packages/plugins/data/meta.js b/packages/plugins/data/meta.js index bb7e45a774..bf4d450f6b 100644 --- a/packages/plugins/data/meta.js +++ b/packages/plugins/data/meta.js @@ -1,5 +1,5 @@ export default { - id: 'engine.plugins.datasource', + id: 'engine.plugins.state', title: '状态管理', type: 'plugins', align: 'top', diff --git a/packages/settings/panel/index.js b/packages/settings/panel/index.js new file mode 100644 index 0000000000..7a55d928b6 --- /dev/null +++ b/packages/settings/panel/index.js @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import component from './src/Main.vue' +import metaData from './meta.js' + +export default { + ...metaData, + component +} diff --git a/packages/settings/panel/meta.js b/packages/settings/panel/meta.js new file mode 100644 index 0000000000..b0c20e0514 --- /dev/null +++ b/packages/settings/panel/meta.js @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +export default { + id: 'engine.settings' +} diff --git a/packages/settings/panel/package.json b/packages/settings/panel/package.json new file mode 100644 index 0000000000..d073c27b39 --- /dev/null +++ b/packages/settings/panel/package.json @@ -0,0 +1,39 @@ +{ + "name": "@opentiny/tiny-engine-settings-panel", + "version": "1.0.3", + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "vite build" + }, + "main": "dist/index.js", + "module": "dist/index.js", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/settings/panel" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine", + "dependencies": { + "@opentiny/tiny-engine-entry": "workspace:*" + }, + "devDependencies": { + "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "vite": "^4.3.7" + }, + "peerDependencies": { + "@opentiny/vue": "^3.14.0", + "vue": "^3.4.15" + } +} diff --git a/packages/settings/panel/src/Main.vue b/packages/settings/panel/src/Main.vue new file mode 100644 index 0000000000..b812b02a00 --- /dev/null +++ b/packages/settings/panel/src/Main.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/packages/settings/panel/vite.config.js b/packages/settings/panel/vite.config.js new file mode 100644 index 0000000000..1093bb32ae --- /dev/null +++ b/packages/settings/panel/vite.config.js @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineConfig } from 'vite' +import path from 'node:path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import generateComment from '@opentiny/vite-plugin-generate-comments' + +/** @type {import('vite').UserConfig} */ +export default defineConfig({ + plugins: [generateComment(), vue(), vueJsx()], + publicDir: false, + resolve: {}, + build: { + lib: { + entry: path.resolve(__dirname, './index.js'), + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + output: { + banner: 'import "./style.css"' + }, + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] + } + } +}) From 5859ecf677d73901fd24e3cf54b39101d24d896b Mon Sep 17 00:00:00 2001 From: Gene Date: Fri, 31 May 2024 03:01:06 -0700 Subject: [PATCH 194/322] =?UTF-8?q?refactor(docs):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E8=A1=A8=E6=96=87=E6=A1=A3=20(#530)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(docs): 添加注册表结构文档 --- designer-demo/REGISTRY_README.md | 106 +++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 designer-demo/REGISTRY_README.md diff --git a/designer-demo/REGISTRY_README.md b/designer-demo/REGISTRY_README.md new file mode 100644 index 0000000000..324cbe5121 --- /dev/null +++ b/designer-demo/REGISTRY_README.md @@ -0,0 +1,106 @@ +# 注册表 + +默认注册表会注册设计器的全部功能。自定义设计器时,选择指定功能只需要配置对应的ID,重新实现指定功能可通过配置其他字段来实现 + +## 类型定义 + +```ts +type VueComponent = any +type OverwriteFn = (ctx, originFn) => (...args) => any + +interface MetaApp { + id: string + component: VueComponent + // 组件暴露的api接口 + apis?: Record + // component的配置项 + options?: Record + // 布局元应用。如果当前元应用需要定制布局,可以抽取一层布局元应用 + layout?: MetaApp + // 元应用生命周期。此处写的代码会直接插入到应用中 + lifeCycle?: Record + // 覆盖逻辑 + overwrite?: { + template?: string + methods?: Record> + // 此处的lifeCycle会替换原来的生命周期,而上面的lifeCycle代码会直接插入到应用中 + lifeCycle?: Record< + string, + Record + > + } + // 依赖的其他元应用 + metas?: MetaApp[] +} + +// 注册表类型 +type AppRegistry = Record +``` + +示例: + +```js +export default { + key: { + id: 'engine.key', + component: VUE_COMPONENT, + options: { + left: '10px', + }, + overwrite: { + template: TEMPLATE, + methods: { + '': { + handleClick: (ctx, originFn) => () => {}, + }, + }, + lifeCycle: { + '': { + onMounted: [ + , // // 第1个onMounted生命周期函数不覆盖 + (ctx, originFn) => () => {}, + ], + }, + }, + }, + }, +} +``` + +## 合并机制 + +合并流程:1. 先根据自定义注册表填写的ID,取出默认注册表对应的功能模块。2. 自定义注册表某个功能模块的配置会覆盖默认注册表中对应的配置 + +```js +// 默认注册表 +{ + key1: { + id: 'engine.key1', + component: VUE_COMPONENT_1, + apis: { + getDsl: () => {} + } + }, + key2: { + id: 'engine.key2', + component: VUE_COMPONENT_2 + } +} +// 自定义注册表 +{ + key1: { + id: 'engine.key1', + component: VUE_COMPONENT_1_A + } +} +// 合并后的注册表 +{ + key1: { + id: 'engine.key1', + component: VUE_COMPONENT_1_A, + apis: { + getDsl: () => {} + } + } +} +``` From 96578123c08eb43545dc49426827c2a84139a61f Mon Sep 17 00:00:00 2001 From: Gene Date: Tue, 4 Jun 2024 05:27:53 -0700 Subject: [PATCH 195/322] refactor: rollback settings layout (#539) --- packages/design-core/registry.js | 6 +- packages/design-core/src/App.vue | 2 +- packages/design-core/src/DesignSettings.vue | 106 +++++++++++++++++--- 3 files changed, 96 insertions(+), 18 deletions(-) diff --git a/packages/design-core/registry.js b/packages/design-core/registry.js index 5023cc2ea7..41b7b6a029 100644 --- a/packages/design-core/registry.js +++ b/packages/design-core/registry.js @@ -38,7 +38,6 @@ import Block from '@opentiny/tiny-engine-plugin-block' import Datasource from '@opentiny/tiny-engine-plugin-datasource' import Robot from '@opentiny/tiny-engine-plugin-robot' -import SettingsPanel from '@opentiny/tiny-engine-settings-panel' import Props from '@opentiny/tiny-engine-setting-props' import Events from '@opentiny/tiny-engine-setting-events' import Styles from '@opentiny/tiny-engine-setting-styles' @@ -64,9 +63,6 @@ export default { Lang ], plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, Data, Schema, Help, Robot], - settings: { - ...SettingsPanel, - metas: [Props, Styles, Events] - }, + settings: [Props, Styles, Events], canvas: {} } diff --git a/packages/design-core/src/App.vue b/packages/design-core/src/App.vue index dc7e5ce0aa..a0ce17a56a 100644 --- a/packages/design-core/src/App.vue +++ b/packages/design-core/src/App.vue @@ -10,7 +10,7 @@
    - +
    diff --git a/packages/design-core/src/DesignSettings.vue b/packages/design-core/src/DesignSettings.vue index 5f6af2a47b..8cc3120ac1 100644 --- a/packages/design-core/src/DesignSettings.vue +++ b/packages/design-core/src/DesignSettings.vue @@ -1,25 +1,107 @@ + + From d3fa224f813986623df645c77334a36d016373ab Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Tue, 4 Jun 2024 05:46:09 -0700 Subject: [PATCH 196/322] fix/build issues (#538) * fix: fix some build issue 1. fix cycle dependency between utils and entry 2. change vite-plusin-generate-comments to tiny-engine-vite-plugin-meta-comments 3. delete duplicate dependency inside design-core * fix: change directory desc --- designer-demo/package.json | 2 +- .../index.js | 0 .../package.json | 18 +++++++++++++++--- .../src/test/code/entry.js | 0 .../src/test/code/output.js | 0 .../src/test/index.js | 0 .../src/test/meta.js | 0 .../src/transform-sfc.js | 0 .../src/transform.js | 0 .../src/utils.js | 0 .../vite.config.js | 0 packages/canvas/package.json | 2 +- packages/canvas/vite.config.js | 2 +- packages/common/package.json | 2 +- packages/common/vite.config.js | 2 +- packages/controller/package.json | 2 +- packages/controller/vite.config.js | 2 +- packages/design-core/package.json | 4 +--- packages/design-core/vite.config.js | 2 +- packages/engine-cli/template/package.json | 2 +- packages/http/package.json | 2 +- packages/http/vite.config.js | 2 +- packages/layout/package.json | 2 +- packages/layout/vite.config.js | 2 +- packages/plugins/block/package.json | 2 +- packages/plugins/block/vite.config.js | 2 +- packages/plugins/bridge/package.json | 2 +- packages/plugins/bridge/vite.config.js | 2 +- packages/plugins/data/package.json | 2 +- packages/plugins/data/vite.config.js | 2 +- packages/plugins/datasource/package.json | 2 +- packages/plugins/datasource/vite.config.js | 2 +- packages/plugins/help/package.json | 2 +- packages/plugins/help/vite.config.js | 2 +- packages/plugins/i18n/package.json | 2 +- packages/plugins/i18n/vite.config.js | 2 +- packages/plugins/materials/package.json | 2 +- packages/plugins/materials/vite.config.js | 2 +- packages/plugins/page/package.json | 2 +- packages/plugins/page/vite.config.js | 2 +- packages/plugins/robot/package.json | 2 +- packages/plugins/robot/vite.config.js | 2 +- packages/plugins/schema/package.json | 2 +- packages/plugins/schema/vite.config.js | 2 +- packages/plugins/script/package.json | 2 +- packages/plugins/script/vite.config.js | 2 +- packages/plugins/tree/package.json | 2 +- packages/plugins/tree/vite.config.js | 2 +- packages/plugins/tutorial/package.json | 2 +- packages/plugins/tutorial/vite.config.js | 2 +- packages/settings/events/package.json | 2 +- packages/settings/events/vite.config.js | 2 +- packages/settings/panel/package.json | 2 +- packages/settings/panel/vite.config.js | 2 +- packages/settings/props/package.json | 2 +- packages/settings/props/vite.config.js | 2 +- packages/settings/styles/package.json | 2 +- packages/settings/styles/vite.config.js | 2 +- packages/svgs/package.json | 2 +- packages/svgs/vite.config.js | 2 +- packages/theme/dark/package.json | 2 +- packages/theme/dark/vite.config.js | 2 +- packages/theme/light/package.json | 2 +- packages/theme/light/vite.config.js | 2 +- packages/toolbars/breadcrumb/package.json | 2 +- packages/toolbars/breadcrumb/vite.config.js | 2 +- packages/toolbars/clean/package.json | 2 +- packages/toolbars/clean/vite.config.js | 2 +- packages/toolbars/collaboration/package.json | 2 +- packages/toolbars/collaboration/vite.config.js | 2 +- packages/toolbars/fullscreen/package.json | 2 +- packages/toolbars/fullscreen/vite.config.js | 2 +- packages/toolbars/generate-vue/package.json | 2 +- packages/toolbars/generate-vue/vite.config.js | 2 +- packages/toolbars/lang/package.json | 2 +- packages/toolbars/lang/vite.config.js | 2 +- packages/toolbars/layout/package.json | 2 +- packages/toolbars/layout/vite.config.js | 2 +- packages/toolbars/lock/package.json | 2 +- packages/toolbars/lock/vite.config.js | 2 +- packages/toolbars/logo/package.json | 2 +- packages/toolbars/logo/vite.config.js | 2 +- packages/toolbars/logout/package.json | 2 +- packages/toolbars/logout/vite.config.js | 2 +- packages/toolbars/media/package.json | 2 +- packages/toolbars/media/vite.config.js | 2 +- packages/toolbars/preview/package.json | 2 +- packages/toolbars/preview/vite.config.js | 2 +- packages/toolbars/redoundo/package.json | 2 +- packages/toolbars/redoundo/vite.config.js | 2 +- packages/toolbars/refresh/package.json | 2 +- packages/toolbars/refresh/vite.config.js | 2 +- packages/toolbars/save/package.json | 2 +- packages/toolbars/save/vite.config.js | 2 +- packages/toolbars/setting/package.json | 2 +- packages/toolbars/setting/vite.config.js | 2 +- packages/utils/index.js | 5 ----- packages/utils/meta.js | 4 ---- packages/utils/package.json | 4 ---- packages/utils/vite.config.js | 2 -- packages/vue-generator/package.json | 2 +- packages/vue-generator/vite.config.mjs | 2 +- scripts/setup.js | 2 +- 103 files changed, 104 insertions(+), 109 deletions(-) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/index.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/package.json (53%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/src/test/code/entry.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/src/test/code/output.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/src/test/index.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/src/test/meta.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/src/transform-sfc.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/src/transform.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/src/utils.js (100%) rename packages/build/{vite-plugin-generate-comments => vite-plugin-meta-comments}/vite.config.js (100%) delete mode 100644 packages/utils/index.js delete mode 100644 packages/utils/meta.js diff --git a/designer-demo/package.json b/designer-demo/package.json index ee717a529e..53832406fa 100644 --- a/designer-demo/package.json +++ b/designer-demo/package.json @@ -18,6 +18,6 @@ "@vitejs/plugin-vue": "^5.0.4", "vite": "^5.2.7", "@opentiny/tiny-engine-cli": "workspace:^", - "@opentiny/vite-plugin-generate-comments": "workspace:^" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:^" } } diff --git a/packages/build/vite-plugin-generate-comments/index.js b/packages/build/vite-plugin-meta-comments/index.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/index.js rename to packages/build/vite-plugin-meta-comments/index.js diff --git a/packages/build/vite-plugin-generate-comments/package.json b/packages/build/vite-plugin-meta-comments/package.json similarity index 53% rename from packages/build/vite-plugin-generate-comments/package.json rename to packages/build/vite-plugin-meta-comments/package.json index 4225a192d0..2e8ef6b40e 100644 --- a/packages/build/vite-plugin-generate-comments/package.json +++ b/packages/build/vite-plugin-meta-comments/package.json @@ -1,5 +1,5 @@ { - "name": "@opentiny/vite-plugin-generate-comments", + "name": "@opentiny/tiny-engine-vite-plugin-meta-comments", "version": "1.0.0", "description": "", "type": "module", @@ -22,6 +22,18 @@ "@vue/compiler-sfc": "^3.4.21" }, "keywords": [], - "author": "", - "license": "ISC" + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/opentiny/tiny-engine", + "directory": "packages/build/vite-plugin-meta-comments" + }, + "bugs": { + "url": "https://github.com/opentiny/tiny-engine/issues" + }, + "author": "OpenTiny Team", + "license": "MIT", + "homepage": "https://opentiny.design/tiny-engine" } diff --git a/packages/build/vite-plugin-generate-comments/src/test/code/entry.js b/packages/build/vite-plugin-meta-comments/src/test/code/entry.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/src/test/code/entry.js rename to packages/build/vite-plugin-meta-comments/src/test/code/entry.js diff --git a/packages/build/vite-plugin-generate-comments/src/test/code/output.js b/packages/build/vite-plugin-meta-comments/src/test/code/output.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/src/test/code/output.js rename to packages/build/vite-plugin-meta-comments/src/test/code/output.js diff --git a/packages/build/vite-plugin-generate-comments/src/test/index.js b/packages/build/vite-plugin-meta-comments/src/test/index.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/src/test/index.js rename to packages/build/vite-plugin-meta-comments/src/test/index.js diff --git a/packages/build/vite-plugin-generate-comments/src/test/meta.js b/packages/build/vite-plugin-meta-comments/src/test/meta.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/src/test/meta.js rename to packages/build/vite-plugin-meta-comments/src/test/meta.js diff --git a/packages/build/vite-plugin-generate-comments/src/transform-sfc.js b/packages/build/vite-plugin-meta-comments/src/transform-sfc.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/src/transform-sfc.js rename to packages/build/vite-plugin-meta-comments/src/transform-sfc.js diff --git a/packages/build/vite-plugin-generate-comments/src/transform.js b/packages/build/vite-plugin-meta-comments/src/transform.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/src/transform.js rename to packages/build/vite-plugin-meta-comments/src/transform.js diff --git a/packages/build/vite-plugin-generate-comments/src/utils.js b/packages/build/vite-plugin-meta-comments/src/utils.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/src/utils.js rename to packages/build/vite-plugin-meta-comments/src/utils.js diff --git a/packages/build/vite-plugin-generate-comments/vite.config.js b/packages/build/vite-plugin-meta-comments/vite.config.js similarity index 100% rename from packages/build/vite-plugin-generate-comments/vite.config.js rename to packages/build/vite-plugin-meta-comments/vite.config.js diff --git a/packages/canvas/package.json b/packages/canvas/package.json index 28dcc6c84d..3e1d0785c5 100644 --- a/packages/canvas/package.json +++ b/packages/canvas/package.json @@ -38,7 +38,7 @@ "@vueuse/core": "^9.6.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "rollup-plugin-terser": "^7.0.2", diff --git a/packages/canvas/vite.config.js b/packages/canvas/vite.config.js index 97cafda69b..e01f859b8e 100644 --- a/packages/canvas/vite.config.js +++ b/packages/canvas/vite.config.js @@ -15,7 +15,7 @@ import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import { terser } from 'rollup-plugin-terser' -import generateComments from '@opentiny/vite-plugin-generate-comments' +import generateComments from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/common/package.json b/packages/common/package.json index 019c044114..d72fa0adf2 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -38,7 +38,7 @@ "vue-draggable-next": "2.1.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/common/vite.config.js b/packages/common/vite.config.js index 54b60921de..16675447a5 100644 --- a/packages/common/vite.config.js +++ b/packages/common/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComments from '@opentiny/vite-plugin-generate-comments' +import generateComments from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/controller/package.json b/packages/controller/package.json index aaf9142e4b..f28c68b34c 100644 --- a/packages/controller/package.json +++ b/packages/controller/package.json @@ -45,7 +45,7 @@ "prettier": "2.7.1" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "glob": "^10.3.4", diff --git a/packages/controller/vite.config.js b/packages/controller/vite.config.js index 77cff57f50..6bf646b3c4 100644 --- a/packages/controller/vite.config.js +++ b/packages/controller/vite.config.js @@ -16,7 +16,7 @@ import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import { glob } from 'glob' import { fileURLToPath } from 'node:url' -import generateComments from '@opentiny/vite-plugin-generate-comments' +import generateComments from '@opentiny/tiny-engine-vite-plugin-meta-comments' const jsEntries = glob.sync('./js/**/*.js').map((file) => { return [file.slice(0, file.length - path.extname(file).length), fileURLToPath(new URL(file, import.meta.url))] diff --git a/packages/design-core/package.json b/packages/design-core/package.json index 3aa8844100..75f0f008f5 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -44,7 +44,7 @@ "@babel/parser": "~7.23.2", "@babel/traverse": "~7.23.2", "@opentiny/tiny-engine-layout": "workspace:~", - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@opentiny/tiny-engine-entry": "workspace:*", "@opentiny/tiny-engine-canvas": "workspace:*", "@opentiny/tiny-engine-common": "workspace:*", @@ -110,11 +110,9 @@ "vue-i18n": "^9.9.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", "@babel/eslint-parser": "^7.21.3", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "@opentiny/tiny-engine-i18n-host": "workspace:*", "@types/node": "^18.0.0", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js index 357f4f1e8b..7adcf25a62 100644 --- a/packages/design-core/vite.config.js +++ b/packages/design-core/vite.config.js @@ -13,7 +13,7 @@ import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' import { importmapPlugin } from './scripts/externalDeps.js' import visualizerCjs from 'rollup-plugin-visualizer' import { fileURLToPath } from 'node:url' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' import { getBaseUrlFromCli, copyBundleDeps, diff --git a/packages/engine-cli/template/package.json b/packages/engine-cli/template/package.json index 996782c1a6..732e81cdb8 100644 --- a/packages/engine-cli/template/package.json +++ b/packages/engine-cli/template/package.json @@ -17,6 +17,6 @@ "@vitejs/plugin-vue": "^5.0.4", "vite": "^5.2.7", "@opentiny/tiny-engine-cli": "workspace:^", - "@opentiny/vite-plugin-generate-comments": "workspace:^" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:^" } } diff --git a/packages/http/package.json b/packages/http/package.json index 3fcefb6d40..f32f92b45b 100644 --- a/packages/http/package.json +++ b/packages/http/package.json @@ -31,7 +31,7 @@ "axios-mock-adapter": "^1.21.5" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/http/vite.config.js b/packages/http/vite.config.js index 36771e67b1..afc974c252 100644 --- a/packages/http/vite.config.js +++ b/packages/http/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/layout/package.json b/packages/layout/package.json index 22d2f9894e..da1c4fadfb 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -15,7 +15,7 @@ "vue": "3.2.45" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^5.0.4", "less": "^4.2.0", "vite": "^5.1.6" diff --git a/packages/layout/vite.config.js b/packages/layout/vite.config.js index a8191dcefd..1a844a3983 100644 --- a/packages/layout/vite.config.js +++ b/packages/layout/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/block/package.json b/packages/plugins/block/package.json index 7bc1d8194e..8c40d136f1 100644 --- a/packages/plugins/block/package.json +++ b/packages/plugins/block/package.json @@ -34,7 +34,7 @@ "pinyin-pro": "^3.13.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/block/vite.config.js b/packages/plugins/block/vite.config.js index 33d33f472c..dbabf02f83 100644 --- a/packages/plugins/block/vite.config.js +++ b/packages/plugins/block/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/bridge/package.json b/packages/plugins/bridge/package.json index bcac1d5043..a13b8aa4d2 100644 --- a/packages/plugins/bridge/package.json +++ b/packages/plugins/bridge/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-http": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/bridge/vite.config.js b/packages/plugins/bridge/vite.config.js index 3cda78b1a8..5b2ea00839 100644 --- a/packages/plugins/bridge/vite.config.js +++ b/packages/plugins/bridge/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/data/package.json b/packages/plugins/data/package.json index 245a895896..7714cda200 100644 --- a/packages/plugins/data/package.json +++ b/packages/plugins/data/package.json @@ -33,7 +33,7 @@ "monaco-editor": "0.33.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/data/vite.config.js b/packages/plugins/data/vite.config.js index b2f2023eda..be1da0b73a 100644 --- a/packages/plugins/data/vite.config.js +++ b/packages/plugins/data/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/datasource/package.json b/packages/plugins/datasource/package.json index bcf5b4bd02..1aa5abc734 100644 --- a/packages/plugins/datasource/package.json +++ b/packages/plugins/datasource/package.json @@ -36,7 +36,7 @@ "xlsx": "^0.18.5" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/datasource/vite.config.js b/packages/plugins/datasource/vite.config.js index 4cc200b407..9da0289f60 100644 --- a/packages/plugins/datasource/vite.config.js +++ b/packages/plugins/datasource/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/help/package.json b/packages/plugins/help/package.json index 7109422a0e..0536b4d13f 100644 --- a/packages/plugins/help/package.json +++ b/packages/plugins/help/package.json @@ -30,7 +30,7 @@ "@opentiny/tiny-engine-http": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/help/vite.config.js b/packages/plugins/help/vite.config.js index 8cf906be2b..6875d4bf0d 100644 --- a/packages/plugins/help/vite.config.js +++ b/packages/plugins/help/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/i18n/package.json b/packages/plugins/i18n/package.json index caf14e9f74..e3f5d14b87 100644 --- a/packages/plugins/i18n/package.json +++ b/packages/plugins/i18n/package.json @@ -32,7 +32,7 @@ "vue-clipboard3": "^2.0.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/i18n/vite.config.js b/packages/plugins/i18n/vite.config.js index 7a12a6ec47..d31ee02540 100644 --- a/packages/plugins/i18n/vite.config.js +++ b/packages/plugins/i18n/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/materials/package.json b/packages/plugins/materials/package.json index 374aba963a..4d8589f31c 100644 --- a/packages/plugins/materials/package.json +++ b/packages/plugins/materials/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-http": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/materials/vite.config.js b/packages/plugins/materials/vite.config.js index 556d03f2aa..ef82cda233 100644 --- a/packages/plugins/materials/vite.config.js +++ b/packages/plugins/materials/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/page/package.json b/packages/plugins/page/package.json index d23771e0aa..3105a2de2b 100644 --- a/packages/plugins/page/package.json +++ b/packages/plugins/page/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-utils": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/page/vite.config.js b/packages/plugins/page/vite.config.js index 9ae6ac5404..787a5e6da0 100644 --- a/packages/plugins/page/vite.config.js +++ b/packages/plugins/page/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/robot/package.json b/packages/plugins/robot/package.json index 6813fcda45..10048ef8e8 100644 --- a/packages/plugins/robot/package.json +++ b/packages/plugins/robot/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-http": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/robot/vite.config.js b/packages/plugins/robot/vite.config.js index 6525ed2a96..16365a773a 100644 --- a/packages/plugins/robot/vite.config.js +++ b/packages/plugins/robot/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/schema/package.json b/packages/plugins/schema/package.json index a7b38c69f6..4a0a66a3fa 100644 --- a/packages/plugins/schema/package.json +++ b/packages/plugins/schema/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-http": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/schema/vite.config.js b/packages/plugins/schema/vite.config.js index 937bed1633..d09489693d 100644 --- a/packages/plugins/schema/vite.config.js +++ b/packages/plugins/schema/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/script/package.json b/packages/plugins/script/package.json index 46e07296d0..fa84d4d03a 100644 --- a/packages/plugins/script/package.json +++ b/packages/plugins/script/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-utils": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/script/vite.config.js b/packages/plugins/script/vite.config.js index 1c11402529..bf4c1225d5 100644 --- a/packages/plugins/script/vite.config.js +++ b/packages/plugins/script/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/tree/package.json b/packages/plugins/tree/package.json index e41a9aa030..82ac4fcf51 100644 --- a/packages/plugins/tree/package.json +++ b/packages/plugins/tree/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-utils": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/tree/vite.config.js b/packages/plugins/tree/vite.config.js index 0935377938..778212ccf2 100644 --- a/packages/plugins/tree/vite.config.js +++ b/packages/plugins/tree/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/plugins/tutorial/package.json b/packages/plugins/tutorial/package.json index 57ab041b7b..dace8b6700 100644 --- a/packages/plugins/tutorial/package.json +++ b/packages/plugins/tutorial/package.json @@ -31,7 +31,7 @@ "marked": "^4.0.17" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/plugins/tutorial/vite.config.js b/packages/plugins/tutorial/vite.config.js index 6f960d130e..bc566cd46b 100644 --- a/packages/plugins/tutorial/vite.config.js +++ b/packages/plugins/tutorial/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/settings/events/package.json b/packages/settings/events/package.json index 8618cb3519..bc387af864 100644 --- a/packages/settings/events/package.json +++ b/packages/settings/events/package.json @@ -31,7 +31,7 @@ "@opentiny/tiny-engine-utils": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/settings/events/vite.config.js b/packages/settings/events/vite.config.js index 543ea69e82..7862556520 100644 --- a/packages/settings/events/vite.config.js +++ b/packages/settings/events/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/settings/panel/package.json b/packages/settings/panel/package.json index d073c27b39..f5519ef6fa 100644 --- a/packages/settings/panel/package.json +++ b/packages/settings/panel/package.json @@ -27,7 +27,7 @@ "@opentiny/tiny-engine-entry": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/settings/panel/vite.config.js b/packages/settings/panel/vite.config.js index 1093bb32ae..bedf781790 100644 --- a/packages/settings/panel/vite.config.js +++ b/packages/settings/panel/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'node:path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' /** @type {import('vite').UserConfig} */ export default defineConfig({ diff --git a/packages/settings/props/package.json b/packages/settings/props/package.json index e9089a5bf4..5a1a8e9b6d 100644 --- a/packages/settings/props/package.json +++ b/packages/settings/props/package.json @@ -31,7 +31,7 @@ "@vueuse/core": "^9.6.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/settings/props/vite.config.js b/packages/settings/props/vite.config.js index d24b57d9c9..8e453dd325 100644 --- a/packages/settings/props/vite.config.js +++ b/packages/settings/props/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/settings/styles/package.json b/packages/settings/styles/package.json index 27860ef0cc..50ce384a9d 100644 --- a/packages/settings/styles/package.json +++ b/packages/settings/styles/package.json @@ -34,7 +34,7 @@ "postcss": "^8.4.31" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/settings/styles/vite.config.js b/packages/settings/styles/vite.config.js index c61f37bf80..f96aab1fbe 100644 --- a/packages/settings/styles/vite.config.js +++ b/packages/settings/styles/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/svgs/package.json b/packages/svgs/package.json index c0f4480edf..d426b65e70 100644 --- a/packages/svgs/package.json +++ b/packages/svgs/package.json @@ -27,7 +27,7 @@ "@opentiny/tiny-engine-entry": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7" diff --git a/packages/svgs/vite.config.js b/packages/svgs/vite.config.js index ebf9b63e9b..1027cae7a4 100644 --- a/packages/svgs/vite.config.js +++ b/packages/svgs/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/theme/dark/package.json b/packages/theme/dark/package.json index aa5f3f34cd..75aa65da1d 100644 --- a/packages/theme/dark/package.json +++ b/packages/theme/dark/package.json @@ -26,7 +26,7 @@ "@opentiny/tiny-engine-entry": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "rimraf": "^3.0.2", "vite": "^4.3.7" } diff --git a/packages/theme/dark/vite.config.js b/packages/theme/dark/vite.config.js index ed06a20b14..ba07756bb6 100644 --- a/packages/theme/dark/vite.config.js +++ b/packages/theme/dark/vite.config.js @@ -12,7 +12,7 @@ import { defineConfig } from 'vite' import path from 'path' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/theme/light/package.json b/packages/theme/light/package.json index 2f57286b99..7d7a27e8c4 100644 --- a/packages/theme/light/package.json +++ b/packages/theme/light/package.json @@ -26,7 +26,7 @@ "@opentiny/tiny-engine-entry": "workspace:*" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "rimraf": "^3.0.2", "vite": "^4.3.7" } diff --git a/packages/theme/light/vite.config.js b/packages/theme/light/vite.config.js index 5c0f882221..5c43f49e2e 100644 --- a/packages/theme/light/vite.config.js +++ b/packages/theme/light/vite.config.js @@ -12,7 +12,7 @@ import { defineConfig } from 'vite' import path from 'path' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/breadcrumb/package.json b/packages/toolbars/breadcrumb/package.json index cd9ca2e9f9..a5740937aa 100644 --- a/packages/toolbars/breadcrumb/package.json +++ b/packages/toolbars/breadcrumb/package.json @@ -32,7 +32,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/breadcrumb/vite.config.js b/packages/toolbars/breadcrumb/vite.config.js index c6467c4008..1b1055f93a 100644 --- a/packages/toolbars/breadcrumb/vite.config.js +++ b/packages/toolbars/breadcrumb/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/clean/package.json b/packages/toolbars/clean/package.json index 5490646cdc..51963b9dbd 100644 --- a/packages/toolbars/clean/package.json +++ b/packages/toolbars/clean/package.json @@ -32,7 +32,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/clean/vite.config.js b/packages/toolbars/clean/vite.config.js index 24bb19e2d3..79d2327936 100644 --- a/packages/toolbars/clean/vite.config.js +++ b/packages/toolbars/clean/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/collaboration/package.json b/packages/toolbars/collaboration/package.json index abd0ab106b..77317e8f0d 100644 --- a/packages/toolbars/collaboration/package.json +++ b/packages/toolbars/collaboration/package.json @@ -31,7 +31,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/collaboration/vite.config.js b/packages/toolbars/collaboration/vite.config.js index 8274744816..53ba836b2e 100644 --- a/packages/toolbars/collaboration/vite.config.js +++ b/packages/toolbars/collaboration/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' export default defineConfig({ plugins: [generateComment(), vue(), vueJsx()], diff --git a/packages/toolbars/fullscreen/package.json b/packages/toolbars/fullscreen/package.json index 727cd442b0..83d92334a5 100644 --- a/packages/toolbars/fullscreen/package.json +++ b/packages/toolbars/fullscreen/package.json @@ -31,7 +31,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/fullscreen/vite.config.js b/packages/toolbars/fullscreen/vite.config.js index 024573d99f..c7eda672c4 100644 --- a/packages/toolbars/fullscreen/vite.config.js +++ b/packages/toolbars/fullscreen/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/generate-vue/package.json b/packages/toolbars/generate-vue/package.json index b7b9e740f4..eec198c3d5 100644 --- a/packages/toolbars/generate-vue/package.json +++ b/packages/toolbars/generate-vue/package.json @@ -36,7 +36,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/generate-vue/vite.config.js b/packages/toolbars/generate-vue/vite.config.js index a5d1388655..32198efdb3 100644 --- a/packages/toolbars/generate-vue/vite.config.js +++ b/packages/toolbars/generate-vue/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/lang/package.json b/packages/toolbars/lang/package.json index a517e7938e..0598747ec2 100644 --- a/packages/toolbars/lang/package.json +++ b/packages/toolbars/lang/package.json @@ -32,7 +32,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/lang/vite.config.js b/packages/toolbars/lang/vite.config.js index a4a51c4df6..d149310937 100644 --- a/packages/toolbars/lang/vite.config.js +++ b/packages/toolbars/lang/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/layout/package.json b/packages/toolbars/layout/package.json index fd583d8f7b..10715c08b0 100644 --- a/packages/toolbars/layout/package.json +++ b/packages/toolbars/layout/package.json @@ -30,7 +30,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/layout/vite.config.js b/packages/toolbars/layout/vite.config.js index b049027520..34a4858e0f 100644 --- a/packages/toolbars/layout/vite.config.js +++ b/packages/toolbars/layout/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/lock/package.json b/packages/toolbars/lock/package.json index 10f6ba0f88..c757dc3916 100644 --- a/packages/toolbars/lock/package.json +++ b/packages/toolbars/lock/package.json @@ -33,7 +33,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/lock/vite.config.js b/packages/toolbars/lock/vite.config.js index d8d4fa67cb..cbbd4817bc 100644 --- a/packages/toolbars/lock/vite.config.js +++ b/packages/toolbars/lock/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/logo/package.json b/packages/toolbars/logo/package.json index dc62ae57c2..4adf6d8eb3 100644 --- a/packages/toolbars/logo/package.json +++ b/packages/toolbars/logo/package.json @@ -33,7 +33,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/logo/vite.config.js b/packages/toolbars/logo/vite.config.js index aa48f09378..c48d41c91a 100644 --- a/packages/toolbars/logo/vite.config.js +++ b/packages/toolbars/logo/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/logout/package.json b/packages/toolbars/logout/package.json index 6c2f450c1b..4948f4c7b5 100644 --- a/packages/toolbars/logout/package.json +++ b/packages/toolbars/logout/package.json @@ -30,7 +30,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/logout/vite.config.js b/packages/toolbars/logout/vite.config.js index fbee8de985..4ae746a974 100644 --- a/packages/toolbars/logout/vite.config.js +++ b/packages/toolbars/logout/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/media/package.json b/packages/toolbars/media/package.json index a7b7469576..cf1bf9ba81 100644 --- a/packages/toolbars/media/package.json +++ b/packages/toolbars/media/package.json @@ -32,7 +32,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/media/vite.config.js b/packages/toolbars/media/vite.config.js index d3ec6b8643..551b1f0e7a 100644 --- a/packages/toolbars/media/vite.config.js +++ b/packages/toolbars/media/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/preview/package.json b/packages/toolbars/preview/package.json index 120b8b2d65..a9e05bce9e 100644 --- a/packages/toolbars/preview/package.json +++ b/packages/toolbars/preview/package.json @@ -33,7 +33,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/preview/vite.config.js b/packages/toolbars/preview/vite.config.js index 7bb226c055..45882efbbb 100644 --- a/packages/toolbars/preview/vite.config.js +++ b/packages/toolbars/preview/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/redoundo/package.json b/packages/toolbars/redoundo/package.json index d2fe050e5c..ba600a86c0 100644 --- a/packages/toolbars/redoundo/package.json +++ b/packages/toolbars/redoundo/package.json @@ -31,7 +31,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/redoundo/vite.config.js b/packages/toolbars/redoundo/vite.config.js index 5dbf5b9dbf..27e69dce8d 100644 --- a/packages/toolbars/redoundo/vite.config.js +++ b/packages/toolbars/redoundo/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/refresh/package.json b/packages/toolbars/refresh/package.json index 9e7c6ca52e..93f254bec4 100644 --- a/packages/toolbars/refresh/package.json +++ b/packages/toolbars/refresh/package.json @@ -32,7 +32,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/refresh/vite.config.js b/packages/toolbars/refresh/vite.config.js index 842050d726..f548c9ac41 100644 --- a/packages/toolbars/refresh/vite.config.js +++ b/packages/toolbars/refresh/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/save/package.json b/packages/toolbars/save/package.json index 9db2c08a7a..8be43be053 100644 --- a/packages/toolbars/save/package.json +++ b/packages/toolbars/save/package.json @@ -34,7 +34,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/save/vite.config.js b/packages/toolbars/save/vite.config.js index 4f154227e6..7daf1b9b0d 100644 --- a/packages/toolbars/save/vite.config.js +++ b/packages/toolbars/save/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/toolbars/setting/package.json b/packages/toolbars/setting/package.json index e8e72b59a6..13addbb53e 100644 --- a/packages/toolbars/setting/package.json +++ b/packages/toolbars/setting/package.json @@ -32,7 +32,7 @@ "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", "vite": "^4.3.7", - "@opentiny/vite-plugin-generate-comments": "workspace:*" + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*" }, "peerDependencies": { "@opentiny/vue": "^3.14.0", diff --git a/packages/toolbars/setting/vite.config.js b/packages/toolbars/setting/vite.config.js index 6cb7a67489..db5b8e5288 100644 --- a/packages/toolbars/setting/vite.config.js +++ b/packages/toolbars/setting/vite.config.js @@ -14,7 +14,7 @@ import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/utils/index.js b/packages/utils/index.js deleted file mode 100644 index dcf78045fa..0000000000 --- a/packages/utils/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import metaData from './meta' - -export default { - ...metaData -} diff --git a/packages/utils/meta.js b/packages/utils/meta.js deleted file mode 100644 index 29623bb086..0000000000 --- a/packages/utils/meta.js +++ /dev/null @@ -1,4 +0,0 @@ -export default { - id: 'engine.utils', - type: 'utils' -} diff --git a/packages/utils/package.json b/packages/utils/package.json index aebdc923cb..9d3e0f7d94 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -27,13 +27,9 @@ "license": "MIT", "homepage": "https://opentiny.design/tiny-engine", "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", "vite": "^4.3.7", "vitest": "^1.4.0" }, - "dependencies": { - "@opentiny/tiny-engine-entry": "workspace:*" - }, "peerDependencies": { "@opentiny/vue-renderless": "^3.14.0", "vue": "^3.4.15" diff --git a/packages/utils/vite.config.js b/packages/utils/vite.config.js index 0a89e3bf6c..a9c0fa37ec 100644 --- a/packages/utils/vite.config.js +++ b/packages/utils/vite.config.js @@ -12,11 +12,9 @@ import { defineConfig } from 'vite' import path from 'path' -import generateComment from '@opentiny/vite-plugin-generate-comments' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [generateComment()], publicDir: false, resolve: {}, build: { diff --git a/packages/vue-generator/package.json b/packages/vue-generator/package.json index ddd8731776..e5896b3a9f 100644 --- a/packages/vue-generator/package.json +++ b/packages/vue-generator/package.json @@ -39,7 +39,7 @@ "vue-eslint-parser": "8.3.0" }, "devDependencies": { - "@opentiny/vite-plugin-generate-comments": "workspace:*", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@rushstack/eslint-patch": "^1.1.1", "@vitest/coverage-v8": "^1.4.0", "@vue/eslint-config-prettier": "^7.0.0", diff --git a/packages/vue-generator/vite.config.mjs b/packages/vue-generator/vite.config.mjs index 39215b71a5..6e6a032cb0 100644 --- a/packages/vue-generator/vite.config.mjs +++ b/packages/vue-generator/vite.config.mjs @@ -13,7 +13,7 @@ import { defineConfig } from 'vite' import path from 'path' import { viteStaticCopy } from 'vite-plugin-static-copy' -import generateComment from '@opentiny/vite-plugin-generate-comments' +import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/scripts/setup.js b/scripts/setup.js index 1ce9872932..199f0c29d4 100644 --- a/scripts/setup.js +++ b/scripts/setup.js @@ -1,3 +1,3 @@ const { exec } = require('node:child_process') -exec('pnpm -F @opentiny/vite-plugin-generate-comments -F @opentiny/tiny-engine-controller -F @opentiny/tiny-engine-dsl-vue build') +exec('pnpm -F @opentiny/tiny-engine-vite-plugin-meta-comments -F @opentiny/tiny-engine-controller -F @opentiny/tiny-engine-dsl-vue build') From 465f7b2a1cf44b2aa99fbbce3a703fef463f2f96 Mon Sep 17 00:00:00 2001 From: Hexqi Date: Thu, 6 Jun 2024 20:34:24 +0800 Subject: [PATCH 197/322] feat: add hooks entry (#550) * feat: add hooks api in entry --- designer-demo/package.json | 1 - .../components/container/shortCutPopover.vue | 2 +- packages/common/package.json | 1 - packages/controller/js/canvas.js | 3 +- packages/controller/js/completion.js | 3 +- packages/controller/js/http.js | 5 +- packages/controller/js/preview.js | 2 +- .../src/{ => components}/useModal.jsx | 0 .../src/{ => components}/useNotify.jsx | 0 packages/controller/src/hooks/mountHooks.js | 15 +++++ packages/controller/src/{ => hooks}/useApp.js | 8 +++ .../controller/src/{ => hooks}/useBlock.js | 67 ++++++++++++++++--- .../src/{ => hooks}/useBreadcrumb.js | 8 +++ .../controller/src/{ => hooks}/useCanvas.js | 22 +++++- .../src/{ => hooks}/useDataSource.js | 5 +- .../src/{ => hooks}/useEditorInfo.js | 10 ++- .../controller/src/{ => hooks}/useHelp.js | 7 ++ .../controller/src/{ => hooks}/useHistory.js | 11 ++- .../controller/src/{ => hooks}/useLayout.js | 17 +++++ .../controller/src/{ => hooks}/usePage.js | 15 +++++ .../src/{ => hooks}/useProperties.js | 24 +++++-- .../controller/src/{ => hooks}/useProperty.js | 42 +++++++----- .../controller/src/{ => hooks}/useResource.js | 43 +++++++++--- .../src/{ => hooks}/useSaveLocal.js | 11 ++- .../src/{ => hooks}/useTranslate.js | 26 +++++-- packages/controller/src/index.js | 39 ++++------- packages/entry/src/hooks.js | 61 +++++++++++++++++ packages/entry/src/index.js | 1 + packages/settings/props/src/Main.vue | 2 +- 29 files changed, 357 insertions(+), 94 deletions(-) rename packages/controller/src/{ => components}/useModal.jsx (100%) rename packages/controller/src/{ => components}/useNotify.jsx (100%) create mode 100644 packages/controller/src/hooks/mountHooks.js rename packages/controller/src/{ => hooks}/useApp.js (91%) rename packages/controller/src/{ => hooks}/useBlock.js (94%) rename packages/controller/src/{ => hooks}/useBreadcrumb.js (84%) rename packages/controller/src/{ => hooks}/useCanvas.js (90%) rename packages/controller/src/{ => hooks}/useDataSource.js (95%) rename packages/controller/src/{ => hooks}/useEditorInfo.js (89%) rename packages/controller/src/{ => hooks}/useHelp.js (87%) rename packages/controller/src/{ => hooks}/useHistory.js (93%) rename packages/controller/src/{ => hooks}/useLayout.js (91%) rename packages/controller/src/{ => hooks}/usePage.js (92%) rename packages/controller/src/{ => hooks}/useProperties.js (93%) rename packages/controller/src/{ => hooks}/useProperty.js (93%) rename packages/controller/src/{ => hooks}/useResource.js (95%) rename packages/controller/src/{ => hooks}/useSaveLocal.js (91%) rename packages/controller/src/{ => hooks}/useTranslate.js (92%) create mode 100644 packages/entry/src/hooks.js diff --git a/designer-demo/package.json b/designer-demo/package.json index 53832406fa..8eb81f6d23 100644 --- a/designer-demo/package.json +++ b/designer-demo/package.json @@ -17,7 +17,6 @@ "devDependencies": { "@vitejs/plugin-vue": "^5.0.4", "vite": "^5.2.7", - "@opentiny/tiny-engine-cli": "workspace:^", "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:^" } } diff --git a/packages/canvas/src/components/container/shortCutPopover.vue b/packages/canvas/src/components/container/shortCutPopover.vue index 592f13b14f..1851879911 100644 --- a/packages/canvas/src/components/container/shortCutPopover.vue +++ b/packages/canvas/src/components/container/shortCutPopover.vue @@ -41,7 +41,7 @@ export default { setup(props, { emit }) { const { getMaterial } = useResource() const { pageState } = useCanvas() - const { properties } = useProperty({ pageState }) + const { properties } = useProperty().getProperty({ pageState }) const active = ref('props') const propertiesList = computed(() => { diff --git a/packages/common/package.json b/packages/common/package.json index d72fa0adf2..884f4a15fd 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -27,7 +27,6 @@ "license": "MIT", "homepage": "https://opentiny.design/tiny-engine", "dependencies": { - "@opentiny/tiny-engine-canvas": "workspace:*", "@opentiny/tiny-engine-controller": "workspace:*", "@opentiny/tiny-engine-entry": "workspace:*", "@opentiny/tiny-engine-http": "workspace:*", diff --git a/packages/controller/js/canvas.js b/packages/controller/js/canvas.js index c73f81c944..3e44935ed3 100644 --- a/packages/controller/js/canvas.js +++ b/packages/controller/js/canvas.js @@ -11,8 +11,7 @@ */ import { PAGE_STATUS } from './constants' -import useEditorInfo from '../src/useEditorInfo' -import useResource from '../src/useResource' +import { useEditorInfo, useResource } from '@opentiny/tiny-engine-entry' export const getCanvasStatus = (data) => { // 写死ID 待删除 diff --git a/packages/controller/js/completion.js b/packages/controller/js/completion.js index ddd1138702..5ae621066b 100644 --- a/packages/controller/js/completion.js +++ b/packages/controller/js/completion.js @@ -10,8 +10,7 @@ * */ -import useCanvas from '../src/useCanvas' -import useResource from '../src/useResource' +import { useCanvas, useResource } from '@opentiny/tiny-engine-entry' const keyWords = [ 'state', diff --git a/packages/controller/js/http.js b/packages/controller/js/http.js index c3315a066e..16cf2d1625 100644 --- a/packages/controller/js/http.js +++ b/packages/controller/js/http.js @@ -11,11 +11,10 @@ */ import { useHttp } from '@opentiny/tiny-engine-http' -import usePage from '../src/usePage' -import useCanvas from '../src/useCanvas' -import useNotify from '../src/useNotify' +import useNotify from '../src/components/useNotify' import { isVsCodeEnv } from './environments' import { generateRouter, generatePage } from './vscodeGenerateFile' +import { usePage, useCanvas } from '@opentiny/tiny-engine-entry' const http = useHttp() diff --git a/packages/controller/js/preview.js b/packages/controller/js/preview.js index 12840569f6..e9d803aa71 100644 --- a/packages/controller/js/preview.js +++ b/packages/controller/js/preview.js @@ -12,7 +12,7 @@ import { constants } from '@opentiny/tiny-engine-utils' import { isDevelopEnv } from './environments' -import useResource from '../src/useResource' +import { useResource } from '@opentiny/tiny-engine-entry' // prefer old unicode hacks for backward compatibility const { COMPONENT_NAME } = constants diff --git a/packages/controller/src/useModal.jsx b/packages/controller/src/components/useModal.jsx similarity index 100% rename from packages/controller/src/useModal.jsx rename to packages/controller/src/components/useModal.jsx diff --git a/packages/controller/src/useNotify.jsx b/packages/controller/src/components/useNotify.jsx similarity index 100% rename from packages/controller/src/useNotify.jsx rename to packages/controller/src/components/useNotify.jsx diff --git a/packages/controller/src/hooks/mountHooks.js b/packages/controller/src/hooks/mountHooks.js new file mode 100644 index 0000000000..b9e18f24c0 --- /dev/null +++ b/packages/controller/src/hooks/mountHooks.js @@ -0,0 +1,15 @@ +import './useLayout' +import './useCanvas' +import './useApp' +import './useResource' +import './useHistory' +import './useProperties' +import './useSaveLocal' +import './useEditorInfo' +import './useBlock' +import './useTranslate' +import './usePage' +import './useDataSource' +import './useBreadcrumb' +import './useProperty' +import './useHelp' diff --git a/packages/controller/src/useApp.js b/packages/controller/src/hooks/useApp.js similarity index 91% rename from packages/controller/src/useApp.js rename to packages/controller/src/hooks/useApp.js index 9a3b840bdc..ccb4f7988b 100644 --- a/packages/controller/src/useApp.js +++ b/packages/controller/src/hooks/useApp.js @@ -12,6 +12,7 @@ import { reactive, watch } from 'vue' import { useHttp } from '@opentiny/tiny-engine-http' +import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' const http = useHttp() @@ -71,3 +72,10 @@ export default () => { updateApp } } + +initHook(HOOK_NAME.useApp, { + appInfoState, + fetchAppInfo, + fetchAppList, + updateApp +}) diff --git a/packages/controller/src/useBlock.js b/packages/controller/src/hooks/useBlock.js similarity index 94% rename from packages/controller/src/useBlock.js rename to packages/controller/src/hooks/useBlock.js index e871b9c1c9..fe3be2caac 100644 --- a/packages/controller/src/useBlock.js +++ b/packages/controller/src/hooks/useBlock.js @@ -16,15 +16,19 @@ import { extend, copyArray } from '@opentiny/vue-renderless/common/object' import { format } from '@opentiny/vue-renderless/common/date' import { remove } from '@opentiny/vue-renderless/common/array' import { constants } from '@opentiny/tiny-engine-utils' -import { getCanvasStatus } from '../js/canvas' -import { ast2String, parseExpression } from '../js/ast' -import { getCssObjectFromStyleStr } from '../js/css' -import useCanvas from './useCanvas' -import useTranslate from './useTranslate' -import useEditorInfo from './useEditorInfo' -import useBreadcrumb from './useBreadcrumb' -import useLayout from './useLayout' -import { getGlobalConfig } from './globalConfig' +import { getCanvasStatus } from '../../js/canvas' +import { ast2String, parseExpression } from '../../js/ast' +import { getCssObjectFromStyleStr } from '../../js/css' +import { getGlobalConfig } from '../globalConfig' +import { + HOOK_NAME, + initHook, + useCanvas, + useTranslate, + useEditorInfo, + useBreadcrumb, + useLayout +} from '@opentiny/tiny-engine-entry' const { SORT_TYPE, SCHEMA_DATA_TYPE, BLOCK_OPENNESS } = constants @@ -764,3 +768,48 @@ export default function () { getDateFromNow } } + +initHook(HOOK_NAME.useBlock, { + NODE_TYPE_PAGE, + DEFAULT_GROUP_ID, + DEFAULT_GROUP_NAME, + selectedGroup, + selectedBlock, + selectedBlockArray, + isRefresh, + addBlock, + delBlock, + createBlock, + getBlockAssetsByVersion, + createEmptyBlock, + groupChange, + addDefaultGroup, + isDefaultGroupId, + isAllGroupId, + splitBackupGroups, + sort, + check, + cancelCheck, + getBlockList, + setBlockList, + getBlockI18n, + getGroupList, + setGroupList, + getCategoryList, + setCategoryList, + addBlockEvent, + getBlockEvents, + appendEventEmit, + getCurrentBlock, + initBlock, + setCurrentBlock, + removeEventLink, + getSelectedGroup, + setSelectedGroup, + addBlockProperty, + editBlockProperty, + removePropertyLink, + getBlockProperties, + getBlockPageSchema, + getDateFromNow +}) diff --git a/packages/controller/src/useBreadcrumb.js b/packages/controller/src/hooks/useBreadcrumb.js similarity index 84% rename from packages/controller/src/useBreadcrumb.js rename to packages/controller/src/hooks/useBreadcrumb.js index 3ac0af7848..600114d64d 100644 --- a/packages/controller/src/useBreadcrumb.js +++ b/packages/controller/src/hooks/useBreadcrumb.js @@ -11,6 +11,7 @@ */ import { ref } from 'vue' +import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' let breadcrumbData = ref([]) const CONSTANTS = { @@ -37,3 +38,10 @@ export default () => { getBreadcrumbData } } + +initHook(HOOK_NAME.useBreadcrumb, { + CONSTANTS, + setBreadcrumbPage, + setBreadcrumbBlock, + getBreadcrumbData +}) diff --git a/packages/controller/src/useCanvas.js b/packages/controller/src/hooks/useCanvas.js similarity index 90% rename from packages/controller/src/useCanvas.js rename to packages/controller/src/hooks/useCanvas.js index d7f424a33b..ae28728c45 100644 --- a/packages/controller/src/useCanvas.js +++ b/packages/controller/src/hooks/useCanvas.js @@ -13,7 +13,7 @@ /* eslint-disable no-new-func */ import { reactive, ref } from 'vue' import { constants } from '@opentiny/tiny-engine-utils' -import useHistory from './useHistory' +import { HOOK_NAME, initHook, useHistory } from '@opentiny/tiny-engine-entry' const { COMPONENT_NAME } = constants @@ -166,3 +166,23 @@ export default function () { isCanvasApiReady } } + +initHook(HOOK_NAME.useCanvas, { + pageState, + isBlock, + isSaved, + isLoading, + initData, + setSaved, + clearCanvas, + getPageSchema, + resetPageCanvasState, + resetBlockCanvasState, + clearCurrentState, + getCurrentSchema, + setCurrentSchema, + getCurrentPage, + initCanvasApi, + canvasApi, + isCanvasApiReady +}) diff --git a/packages/controller/src/useDataSource.js b/packages/controller/src/hooks/useDataSource.js similarity index 95% rename from packages/controller/src/useDataSource.js rename to packages/controller/src/hooks/useDataSource.js index e1e93affa9..ff138c0c02 100644 --- a/packages/controller/src/useDataSource.js +++ b/packages/controller/src/hooks/useDataSource.js @@ -14,7 +14,8 @@ import { reactive } from 'vue' import { utils } from '@opentiny/tiny-engine-utils' import { isEqual } from '@opentiny/vue-renderless/common/object' import { isEmptyObject } from '@opentiny/vue-renderless/common/type' -import useModal from './useModal' +import useModal from '../components/useModal' +import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' const dataSourceState = reactive({ dataSource: {}, @@ -118,3 +119,5 @@ const saveDataSource = (callback) => { export default () => { return { dataSourceState, compareData, saveDataSource } } + +initHook(HOOK_NAME.useDataSource, { dataSourceState, compareData, saveDataSource }) diff --git a/packages/controller/src/useEditorInfo.js b/packages/controller/src/hooks/useEditorInfo.js similarity index 89% rename from packages/controller/src/useEditorInfo.js rename to packages/controller/src/hooks/useEditorInfo.js index bd4b1e1065..751a835841 100644 --- a/packages/controller/src/useEditorInfo.js +++ b/packages/controller/src/hooks/useEditorInfo.js @@ -11,7 +11,8 @@ */ import { useHttp } from '@opentiny/tiny-engine-http' -import useModal from './useModal' +import useModal from '../components/useModal' +import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' // web版获取配置信息: 从url中获取 const _getWebData = () => { @@ -69,3 +70,10 @@ export default () => { isAdmin } } + +initHook(HOOK_NAME.useEditorInfo, { + useInfo: _getWebData, + getUserInfo, + userInfo, + isAdmin +}) diff --git a/packages/controller/src/useHelp.js b/packages/controller/src/hooks/useHelp.js similarity index 87% rename from packages/controller/src/useHelp.js rename to packages/controller/src/hooks/useHelp.js index 8240c3cccf..ff2376d80a 100644 --- a/packages/controller/src/useHelp.js +++ b/packages/controller/src/hooks/useHelp.js @@ -10,6 +10,8 @@ * */ +import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' + const getBaseUrl = () => 'https://opentiny.design/tiny-engine#/help-center/course/engine/' const helpState = { @@ -33,3 +35,8 @@ export default () => ({ getBaseUrl, getDocsUrl }) + +initHook(HOOK_NAME.useHelp, { + getBaseUrl, + getDocsUrl +}) diff --git a/packages/controller/src/useHistory.js b/packages/controller/src/hooks/useHistory.js similarity index 93% rename from packages/controller/src/useHistory.js rename to packages/controller/src/hooks/useHistory.js index 82f0a6af00..67aecb5d66 100644 --- a/packages/controller/src/useHistory.js +++ b/packages/controller/src/hooks/useHistory.js @@ -11,7 +11,7 @@ */ import { reactive, isProxy, toRaw, watch } from 'vue' -import useCanvas from './useCanvas' +import { HOOK_NAME, initHook, useCanvas } from '@opentiny/tiny-engine-entry' const schema2String = (schema) => { if (isProxy(schema)) { @@ -121,3 +121,12 @@ export default () => { addHistory } } + + +initHook(HOOK_NAME.useHistory, { + historyState, + back, + forward, + go, + addHistory +}) diff --git a/packages/controller/src/useLayout.js b/packages/controller/src/hooks/useLayout.js similarity index 91% rename from packages/controller/src/useLayout.js rename to packages/controller/src/hooks/useLayout.js index 4623a9d02a..f2a5ef8eb8 100644 --- a/packages/controller/src/useLayout.js +++ b/packages/controller/src/hooks/useLayout.js @@ -12,6 +12,7 @@ import { reactive, nextTick } from 'vue' import { constants } from '@opentiny/tiny-engine-utils' +import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' const { PAGE_STATUS } = constants @@ -140,3 +141,19 @@ export default () => { isEmptyPage } } + +initHook(HOOK_NAME.useLayout, { + PLUGIN_NAME, + activeSetting, + activePlugin, + closePlugin, + layoutState, + getScale, + setDimension, + getDimension, + registerPluginApi, + getPluginApi, + getPluginState, + pluginState, + isEmptyPage +}) diff --git a/packages/controller/src/usePage.js b/packages/controller/src/hooks/usePage.js similarity index 92% rename from packages/controller/src/usePage.js rename to packages/controller/src/hooks/usePage.js index 8af5fc0e40..ee95b24c73 100644 --- a/packages/controller/src/usePage.js +++ b/packages/controller/src/hooks/usePage.js @@ -12,6 +12,7 @@ import { reactive } from 'vue' import { extend, isEqual } from '@opentiny/vue-renderless/common/object' +import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' const DEFAULT_PAGE = { app: '', @@ -145,3 +146,17 @@ export default () => { COMMON_PAGE_GROUP_ID } } + +initHook(HOOK_NAME.usePage, { + DEFAULT_PAGE, + pageSettingState, + isTemporaryPage, + isCurrentDataSame, + changeTreeData, + getPageContent, + resetPageData, + initCurrentPageData, + isChangePageData, + STATIC_PAGE_GROUP_ID, + COMMON_PAGE_GROUP_ID +}) diff --git a/packages/controller/src/useProperties.js b/packages/controller/src/hooks/useProperties.js similarity index 93% rename from packages/controller/src/useProperties.js rename to packages/controller/src/hooks/useProperties.js index 8bc1298f3d..8482516f3b 100644 --- a/packages/controller/src/useProperties.js +++ b/packages/controller/src/hooks/useProperties.js @@ -12,9 +12,7 @@ import { toRaw, nextTick, shallowReactive, ref } from 'vue' import { constants } from '@opentiny/tiny-engine-utils' -import useCanvas from './useCanvas' -import useResource from './useResource' -import useTranslate from './useTranslate' +import { HOOK_NAME, initHook, useCanvas, useResource, useTranslate } from '@opentiny/tiny-engine-entry' const { COMPONENT_NAME } = constants const propsUpdateKey = ref(0) @@ -217,6 +215,22 @@ const setProps = (schema) => { Object.entries(schema.props || {}).map(([key, value]) => setProp(key, value)) } +const getSchema = (parent) => { + return parent ? properties : properties.schema +} + +initHook(HOOK_NAME.useProperties, { + getProps, + getProp, + setProps, + mergeProps, + delProp, + setProp, + translateProp, + getSchema, + propsUpdateKey +}) + export default function () { return { getProps, @@ -226,9 +240,7 @@ export default function () { delProp, setProp, translateProp, - getSchema(parent) { - return parent ? properties : properties.schema - }, + getSchema, propsUpdateKey } } diff --git a/packages/controller/src/useProperty.js b/packages/controller/src/hooks/useProperty.js similarity index 93% rename from packages/controller/src/useProperty.js rename to packages/controller/src/hooks/useProperty.js index f6e8a93230..5c8328720f 100644 --- a/packages/controller/src/useProperty.js +++ b/packages/controller/src/hooks/useProperty.js @@ -13,26 +13,10 @@ import { computed } from 'vue' import { extend } from '@opentiny/vue-renderless/common/object' import { constants } from '@opentiny/tiny-engine-utils' -import useBlock from './useBlock' +import { HOOK_NAME, initHook, useBlock } from '@opentiny/tiny-engine-entry' const { SCHEMA_DATA_TYPE } = constants -// 遍历区块属性,查找已关联的组件属性 -const findLinked = ({ componentProperties, componentId, blockProperties }) => { - for (let i = 0; i < blockProperties.length; i++) { - const property = blockProperties[i] - - if (property.linked && componentId === property.linked.id) { - addPropertyLinks({ - componentProperties, - linked: { ...property.linked, blockProperty: property.property }, - defaultValue: property.defaultValue, - propertyName: property.linked.property - }) - } - } -} - // 给组件属性添加关联信息 const addPropertyLinks = ({ linked, propertyName, componentProperties }) => { for (let i = 0; i < componentProperties.length; i++) { @@ -58,6 +42,22 @@ const addPropertyLinks = ({ linked, propertyName, componentProperties }) => { } } +// 遍历区块属性,查找已关联的组件属性 +const findLinked = ({ componentProperties, componentId, blockProperties }) => { + for (let i = 0; i < blockProperties.length; i++) { + const property = blockProperties[i] + + if (property.linked && componentId === property.linked.id) { + addPropertyLinks({ + componentProperties, + linked: { ...property.linked, blockProperty: property.property }, + defaultValue: property.defaultValue, + propertyName: property.linked.property + }) + } + } +} + // 重置组件属性的关联信息 const resetLink = (properties) => { if (properties && Array.isArray(properties)) { @@ -71,7 +71,7 @@ const resetLink = (properties) => { } } -export default ({ pageState }) => { +const getProperty = ({ pageState }) => { const { getCurrentBlock, getBlockProperties } = useBlock() const properties = computed(() => { @@ -93,3 +93,9 @@ export default ({ pageState }) => { properties } } + +export default () => ({ getProperty }) + +initHook(HOOK_NAME.useProperty, { + getProperty +}) diff --git a/packages/controller/src/useResource.js b/packages/controller/src/hooks/useResource.js similarity index 95% rename from packages/controller/src/useResource.js rename to packages/controller/src/hooks/useResource.js index 5df4dfa8da..012b4ac6f4 100644 --- a/packages/controller/src/useResource.js +++ b/packages/controller/src/hooks/useResource.js @@ -11,19 +11,23 @@ */ import { reactive } from 'vue' -import { getGlobalConfig } from './globalConfig' +import { getGlobalConfig } from '../globalConfig' import { useHttp } from '@opentiny/tiny-engine-http' import { utils, constants } from '@opentiny/tiny-engine-utils' import { meta as BuiltinComponentMaterials } from '@opentiny/tiny-engine-builtin-component' -import { getCanvasStatus } from '../js/canvas' -import useApp from './useApp' -import useCanvas from './useCanvas' -import useTranslate from './useTranslate' -import useEditorInfo from './useEditorInfo' -import useBreadcrumb from './useBreadcrumb' -import useLayout from './useLayout' -import useBlock from './useBlock' -import useNotify from './useNotify' +import { getCanvasStatus } from '../../js/canvas' +import useNotify from '../components/useNotify' +import { + HOOK_NAME, + initHook, + useApp, + useCanvas, + useTranslate, + useEditorInfo, + useBreadcrumb, + useLayout, + useBlock +} from '@opentiny/tiny-engine-entry' const { camelize, capitalize } = utils const { MATERIAL_TYPE, COMPONENT_NAME, DEFAULT_INTERCEPTOR } = constants @@ -475,3 +479,22 @@ export default function () { updateCanvasDependencies } } + +initHook(HOOK_NAME.useResource, { + resState, + fetchResource, + fetchMaterial, + generateNode, + addMaterials, + clearMaterials, + clearBlockResources, + getMaterial, + setMaterial, + getConfigureMap, + registerComponent, + registerBlock, + getSnippetRelationship, + initPageOrBlock, + handlePopStateEvent, + updateCanvasDependencies +}) diff --git a/packages/controller/src/useSaveLocal.js b/packages/controller/src/hooks/useSaveLocal.js similarity index 91% rename from packages/controller/src/useSaveLocal.js rename to packages/controller/src/hooks/useSaveLocal.js index 7bbc5fbb0a..3e47e21051 100644 --- a/packages/controller/src/useSaveLocal.js +++ b/packages/controller/src/hooks/useSaveLocal.js @@ -11,9 +11,9 @@ */ import { Modal } from '@opentiny/vue' -import { VITE_ORIGIN } from '../js/environments' -import useCanvas from './useCanvas' -import { getGlobalConfig } from './globalConfig' +import { VITE_ORIGIN } from '../../js/environments' +import { getGlobalConfig } from '../globalConfig' +import { HOOK_NAME, initHook, useCanvas } from '@opentiny/tiny-engine-entry' // 获取当前页面的全量信息 @@ -83,3 +83,8 @@ export default () => { savePageLocal } } + +initHook(HOOK_NAME.useSaveLocal, { + confirmSaveLocal, + savePageLocal +}) diff --git a/packages/controller/src/useTranslate.js b/packages/controller/src/hooks/useTranslate.js similarity index 92% rename from packages/controller/src/useTranslate.js rename to packages/controller/src/hooks/useTranslate.js index 3de96b0427..c9d37dffa9 100644 --- a/packages/controller/src/useTranslate.js +++ b/packages/controller/src/hooks/useTranslate.js @@ -13,12 +13,11 @@ import { reactive, ref } from 'vue' import { useHttp } from '@opentiny/tiny-engine-http' import { utils } from '@opentiny/tiny-engine-utils' -import { isVsCodeEnv } from '../js/environments' +import { isVsCodeEnv } from '../../js/environments' import { constants } from '@opentiny/tiny-engine-utils' -import { generateI18n } from '../js/vscodeGenerateFile' -import useResource from './useResource' -import { PROP_DATA_TYPE } from '../utils' -import useCanvas from './useCanvas' +import { generateI18n } from '../../js/vscodeGenerateFile' +import { PROP_DATA_TYPE } from '../../utils' +import { HOOK_NAME, initHook, useResource, useCanvas } from '@opentiny/tiny-engine-entry' const { HOST_TYPE } = constants const state = reactive({ @@ -253,3 +252,20 @@ export default () => { initBlockLocalI18n } } + +initHook(HOOK_NAME.useTranslate, { + i18nResource, + currentLanguage, + getLangs, + setLangs, + getData, + translate, + removeI18n, + ensureI18n, + initI18n, + batchCreateI18n, + initAppI18n, + initBlockI18n, + getI18nData, + initBlockLocalI18n +}) diff --git a/packages/controller/src/index.js b/packages/controller/src/index.js index 01198e56f9..f8626e88ff 100644 --- a/packages/controller/src/index.js +++ b/packages/controller/src/index.js @@ -10,28 +10,16 @@ * */ -import useLayout from './useLayout' -import useCanvas from './useCanvas' -import useApp from './useApp' -import useResource from './useResource' -import useHistory from './useHistory' -import useProperties from './useProperties' -import useSaveLocal from './useSaveLocal' -import useEditorInfo from './useEditorInfo' -import example from './example' -import useModal from './useModal' -import useBlock from './useBlock' -import useTranslate from './useTranslate' -import usePage from './usePage' -import useDataSource from './useDataSource' -import useBreadcrumb from './useBreadcrumb' -import useProperty from './useProperty' +import './hooks/mountHooks' +import useMessage from './useMessage' import { getGlobalConfig, setGlobalConfig } from './globalConfig' -import useNotify from './useNotify' import useData from './useData' -import useMessage from './useMessage' -import useHelp from './useHelp' export { default as metaData } from '../meta' +import example from './example' + +// 后续移入common包components +import useNotify from './components/useNotify' +import useModal from './components/useModal' export const getExample = example @@ -43,7 +31,6 @@ export { useHistory, useProperties, useSaveLocal, - useModal, useEditorInfo, useBlock, useTranslate, @@ -51,10 +38,8 @@ export { useDataSource, useBreadcrumb, useProperty, - getGlobalConfig, - setGlobalConfig, - useNotify, - useData, - useMessage, - useHelp -} + useHelp, + useCustom +} from '@opentiny/tiny-engine-entry' + +export { getGlobalConfig, setGlobalConfig, useNotify, useData, useMessage, useModal } diff --git a/packages/entry/src/hooks.js b/packages/entry/src/hooks.js new file mode 100644 index 0000000000..4075aa34b7 --- /dev/null +++ b/packages/entry/src/hooks.js @@ -0,0 +1,61 @@ +export const HOOK_NAME = { + useLayout: 'layout', + useApp: 'app', + useCanvas: 'canvas', + useResource: 'resource', + useHistory: 'history', + useProperties: 'properties', + useProperty: 'property', + useSaveLocal: 'saveLocal', + useEditorInfo: 'editorInfo', + useBlock: 'block', + useTranslate: 'translate', + usePage: 'page', + useDataSource: 'dataSource', + useBreadcrumb: 'breadcrumb', + useHelp: 'help', + useCustom: 'custom' +} + +const hooksState = { + [HOOK_NAME.useLayout]: {}, + [HOOK_NAME.useApp]: {}, + [HOOK_NAME.useCanvas]: {}, + [HOOK_NAME.useResource]: {}, + [HOOK_NAME.useHistory]: {}, + [HOOK_NAME.useProperties]: {}, + [HOOK_NAME.useProperty]: {}, + [HOOK_NAME.useSaveLocal]: {}, + [HOOK_NAME.useEditorInfo]: {}, + [HOOK_NAME.useBlock]: {}, + [HOOK_NAME.useTranslate]: {}, + [HOOK_NAME.usePage]: {}, + [HOOK_NAME.useDataSource]: {}, + [HOOK_NAME.useBreadcrumb]: {}, + [HOOK_NAME.useHelp]: {}, + [HOOK_NAME.useCustom]: {} // 自定义 +} + +export const useLayout = () => hooksState[HOOK_NAME.useLayout] +export const useCanvas = () => hooksState[HOOK_NAME.useCanvas] +export const useApp = () => hooksState[HOOK_NAME.useApp] +export const useResource = () => hooksState[HOOK_NAME.useResource] +export const useHistory = () => hooksState[HOOK_NAME.useHistory] +export const useProperties = () => hooksState[HOOK_NAME.useProperties] +export const useSaveLocal = () => hooksState[HOOK_NAME.useSaveLocal] +export const useEditorInfo = () => hooksState[HOOK_NAME.useEditorInfo] +export const useBlock = () => hooksState[HOOK_NAME.useBlock] +export const useTranslate = () => hooksState[HOOK_NAME.useTranslate] +export const usePage = () => hooksState[HOOK_NAME.usePage] +export const useDataSource = () => hooksState[HOOK_NAME.useDataSource] +export const useBreadcrumb = () => hooksState[HOOK_NAME.useBreadcrumb] +export const useProperty = () => hooksState[HOOK_NAME.useProperty] +export const useHelp = () => hooksState[HOOK_NAME.useHelp] +export const useCustom = () => hooksState[HOOK_NAME.useCustom] + +export function initHook(hookName, hookContent) { + if (!Object.keys(hooksState).includes(hookName)) { + throw new Error('Invalid hook name provided: ' + hookName) + } + Object.assign(hooksState[hookName], hookContent) +} diff --git a/packages/entry/src/index.js b/packages/entry/src/index.js index e1ecd61651..182753a293 100644 --- a/packages/entry/src/index.js +++ b/packages/entry/src/index.js @@ -17,3 +17,4 @@ export { getLayoutComponent } from './layoutHash' export { default as useMessage } from './useMessage' export { useShareState } from './useShareState' export { getConfigurator, addConfigurator } from './configurators' +export * from './hooks' diff --git a/packages/settings/props/src/Main.vue b/packages/settings/props/src/Main.vue index e5775ac9d1..6969896078 100644 --- a/packages/settings/props/src/Main.vue +++ b/packages/settings/props/src/Main.vue @@ -23,7 +23,7 @@ export default { }, setup() { const { pageState } = useCanvas() - const { properties } = useProperty({ pageState }) + const { properties } = useProperty().getProperty({ pageState }) const showEmptyTips = ref(false) const isBlock = computed(() => pageState.isBlock) From c45896ff64af80ac8a14999ba4b283d6a53f69e9 Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:05:39 -0700 Subject: [PATCH 198/322] feat: reexport canvas entry on design-core (#552) * feat: reexport canvas entry on design-core * feat: independen entry for canvas --- designer-demo/package.json | 1 - designer-demo/src/canvas.js | 2 +- packages/design-core/canvas.js | 2 ++ packages/design-core/package.json | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 packages/design-core/canvas.js diff --git a/designer-demo/package.json b/designer-demo/package.json index 8eb81f6d23..0c21c952a3 100644 --- a/designer-demo/package.json +++ b/designer-demo/package.json @@ -11,7 +11,6 @@ "vue": "^3.4.21", "@opentiny/tiny-engine": "workspace:^", "@opentiny/tiny-engine-entry": "workspace:^", - "@opentiny/tiny-engine-canvas": "workspace:^", "@opentiny/tiny-engine-configurator": "workspace:*" }, "devDependencies": { diff --git a/designer-demo/src/canvas.js b/designer-demo/src/canvas.js index b867bf53f0..fc3fb5f5cf 100644 --- a/designer-demo/src/canvas.js +++ b/designer-demo/src/canvas.js @@ -10,6 +10,6 @@ * */ -import { createRender } from '@opentiny/tiny-engine-canvas' +import { createRender } from '@opentiny/tiny-engine/canvas' createRender(window.parent.TinyGlobalConfig) diff --git a/packages/design-core/canvas.js b/packages/design-core/canvas.js new file mode 100644 index 0000000000..a2be9e45a7 --- /dev/null +++ b/packages/design-core/canvas.js @@ -0,0 +1,2 @@ +// 不能在 index.js 导出,不然主应用样式会污染画布 +export { createRender } from '@opentiny/tiny-engine-canvas' diff --git a/packages/design-core/package.json b/packages/design-core/package.json index 75f0f008f5..b71e7f5d3f 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -16,6 +16,7 @@ "main": "index.js", "exports": { ".": "index.js", + "./canvas": "./canvas.js", "./vite.config.js": "./vite.config.js", "./config/lowcode.config": "./config/lowcode.config.js", "./scripts/externalDeps": "./scripts/externalDeps.js" From 4b95c3818d65e76b2b14a7a38239f5cba5456cee Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Fri, 7 Jun 2024 02:20:47 -0700 Subject: [PATCH 199/322] feat: merge lowcodeconfig with registry, migrate alias config to demo (#551) * feat: merge lowcodeconfig with registry, migrate alias config to demo * fix: delete useless config file * fix(theme): load theme pkg ASAP --- designer-demo/registry.js | 5 + designer-demo/vite.config.js | 59 +++++++++++ .../canvas/src/components/render/runner.js | 4 +- packages/common/component/LifeCycles.vue | 7 +- packages/controller/adapter.js | 4 +- packages/controller/src/globalConfig.js | 19 ---- packages/controller/src/hooks/useBlock.js | 6 +- packages/controller/src/hooks/useResource.js | 5 +- packages/controller/src/hooks/useSaveLocal.js | 7 +- packages/controller/src/index.js | 3 +- packages/design-core/config/lowcode.config.js | 97 ------------------- packages/design-core/registry.js | 58 ++++++++++- packages/design-core/src/init.js | 9 +- packages/design-core/src/preview/src/App.vue | 6 +- packages/design-core/src/theme/dark.js | 1 + packages/design-core/src/theme/light.js | 1 + packages/design-core/vite.config.js | 76 +-------------- packages/plugins/block/src/BlockSetting.vue | 9 +- packages/plugins/bridge/src/BridgeSetting.vue | 5 +- .../datasource/src/DataSourceTemplate.vue | 4 +- packages/plugins/i18n/src/Main.vue | 5 +- packages/plugins/materials/src/block/http.js | 11 ++- packages/plugins/page/src/PageHistory.vue | 7 +- .../props/src/components/groups/LifeCycle.vue | 7 +- packages/toolbars/generate-vue/src/Main.vue | 14 +-- packages/toolbars/logo/src/Main.vue | 5 +- packages/toolbars/preview/src/Main.vue | 7 +- 27 files changed, 189 insertions(+), 252 deletions(-) delete mode 100644 packages/controller/src/globalConfig.js delete mode 100644 packages/design-core/config/lowcode.config.js create mode 100644 packages/design-core/src/theme/dark.js create mode 100644 packages/design-core/src/theme/light.js diff --git a/designer-demo/registry.js b/designer-demo/registry.js index e314185468..74a2a839ee 100644 --- a/designer-demo/registry.js +++ b/designer-demo/registry.js @@ -11,6 +11,11 @@ */ export default { + config: { + id: 'engine.config', + theme: 'light', + material: [], + }, layout: { id: 'engine.layout' }, toolbars: [ { diff --git a/designer-demo/vite.config.js b/designer-demo/vite.config.js index 1a424c307e..becb8ba82d 100644 --- a/designer-demo/vite.config.js +++ b/designer-demo/vite.config.js @@ -1,11 +1,70 @@ +import path from 'node:path' import { defineConfig, mergeConfig } from 'vite' import getDefaultConfig from '@opentiny/tiny-engine/vite.config.js' export default defineConfig((options) => { const defaultConfig = getDefaultConfig(options) + + const devAlias = { + '@opentiny/tiny-engine-controller/js': path.resolve(__dirname, '../packages/controller/js'), + '@opentiny/tiny-engine-common/component': path.resolve(__dirname, '../packages/common/component'), + '@opentiny/tiny-engine-common': path.resolve(__dirname, '../packages/common/index.js'), + '@opentiny/tiny-engine-controller/utils': path.resolve(__dirname, '../packages/controller/utils.js'), + '@opentiny/tiny-engine-controller/adapter': path.resolve(__dirname, '../packages/controller/adapter.js'), + '@opentiny/tiny-engine-controller': path.resolve(__dirname, '../packages/controller/src/index.js'), + '@opentiny/tiny-engine-plugin-materials': path.resolve(__dirname, '../packages/plugins/materials/index.js'), + '@opentiny/tiny-engine-plugin-block': path.resolve(__dirname, '../packages/plugins/block/index.js'), + '@opentiny/tiny-engine-plugin-data': path.resolve(__dirname, '../packages/plugins/data/index.js'), + '@opentiny/tiny-engine-plugin-datasource': path.resolve(__dirname, '../packages/plugins/datasource/index.js'), + '@opentiny/tiny-engine-plugin-script': path.resolve(__dirname, '../packages/plugins/script/index.js'), + '@opentiny/tiny-engine-plugin-tree': path.resolve(__dirname, '../packages/plugins/tree/index.js'), + '@opentiny/tiny-engine-plugin-help': path.resolve(__dirname, '../packages/plugins/help/index.js'), + '@opentiny/tiny-engine-plugin-schema': path.resolve(__dirname, '../packages/plugins/schema/index.js'), + '@opentiny/tiny-engine-plugin-page': path.resolve(__dirname, '../packages/plugins/page/index.js'), + '@opentiny/tiny-engine-plugin-i18n': path.resolve(__dirname, '../packages/plugins/i18n/index.js'), + '@opentiny/tiny-engine-plugin-bridge': path.resolve(__dirname, '../packages/plugins/bridge/index.js'), + '@opentiny/tiny-engine-plugin-tutorial': path.resolve(__dirname, '../packages/plugins/tutorial/index.js'), + '@opentiny/tiny-engine-plugin-robot': path.resolve(__dirname, '../packages/plugins/robot/index.js'), + '@opentiny/tiny-engine-settings-panel': path.resolve(__dirname, '../packages/settings/panel/index.js'), + '@opentiny/tiny-engine-setting-events': path.resolve(__dirname, '../packages/settings/events/index.js'), + '@opentiny/tiny-engine-setting-props': path.resolve(__dirname, '../packages/settings/props/index.js'), + '@opentiny/tiny-engine-setting-styles': path.resolve(__dirname, '../packages/settings/styles/index.js'), + '@opentiny/tiny-engine-toolbar-breadcrumb': path.resolve(__dirname, '../packages/toolbars/breadcrumb/index.js'), + '@opentiny/tiny-engine-toolbar-fullscreen': path.resolve(__dirname, '../packages/toolbars/fullscreen/index.js'), + '@opentiny/tiny-engine-toolbar-lang': path.resolve(__dirname, '../packages/toolbars/lang/index.js'), + '@opentiny/tiny-engine-toolbar-layout': path.resolve(__dirname, '../packages/toolbars/layout/index.js'), + '@opentiny/tiny-engine-toolbar-checkinout': path.resolve(__dirname, '../packages/toolbars/lock/index.js'), + '@opentiny/tiny-engine-toolbar-logo': path.resolve(__dirname, '../packages/toolbars/logo/index.js'), + '@opentiny/tiny-engine-toolbar-logout': path.resolve(__dirname, '../packages/toolbars/logout/index.js'), + '@opentiny/tiny-engine-toolbar-media': path.resolve(__dirname, '../packages/toolbars/media/index.js'), + '@opentiny/tiny-engine-toolbar-preview': path.resolve(__dirname, '../packages/toolbars/preview/index.js'), + '@opentiny/tiny-engine-toolbar-generate-vue': path.resolve(__dirname, '../packages/toolbars/generate-vue/index.js'), + '@opentiny/tiny-engine-toolbar-refresh': path.resolve(__dirname, '../packages/toolbars/refresh/index.js'), + '@opentiny/tiny-engine-toolbar-redoundo': path.resolve(__dirname, '../packages/toolbars/redoundo/index.js'), + '@opentiny/tiny-engine-toolbar-clean': path.resolve(__dirname, '../packages/toolbars/clean/index.js'), + '@opentiny/tiny-engine-toolbar-save': path.resolve(__dirname, '../packages/toolbars/save/index.js'), + '@opentiny/tiny-engine-toolbar-setting': path.resolve(__dirname, '../packages/toolbars/setting/index.js'), + '@opentiny/tiny-engine-toolbar-collaboration': path.resolve(__dirname, '../packages/toolbars/collaboration/index.js'), + '@opentiny/tiny-engine-theme-dark': path.resolve(__dirname, '../packages/theme/dark/index.less'), + '@opentiny/tiny-engine-theme-light': path.resolve(__dirname, '../packages/theme/light/index.less'), + '@opentiny/tiny-engine-svgs': path.resolve(__dirname, '../packages/svgs/index.js'), + '@opentiny/tiny-engine-http': path.resolve(__dirname, '../packages/http/src/index.js'), + '@opentiny/tiny-engine-canvas': path.resolve(__dirname, '../packages/canvas/src/index.js'), + '@opentiny/tiny-engine-utils': path.resolve(__dirname, '../packages/utils/src/index.js'), + '@opentiny/tiny-engine-webcomponent-core': path.resolve(__dirname, '../packages/webcomponent/src/lib.js'), + '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../packages/i18n/src/lib.js'), + '@opentiny/tiny-engine-builtin-component': path.resolve(__dirname, '../packages/builtinComponent/index.js'), + '@opentiny/tiny-engine-entry': path.resolve(__dirname, '../packages/entry/src/index.js'), + '@opentiny/tiny-engine-layout': path.resolve(__dirname, '../packages/layout/index.js'), + '@opentiny/tiny-engine-configurator': path.resolve(__dirname, '../packages/configurator/src/index.js') + } + const config = { server: { port: 8090 + }, + resolve: { + alias: devAlias } } diff --git a/packages/canvas/src/components/render/runner.js b/packages/canvas/src/components/render/runner.js index 93d9902db7..aa0210f87e 100644 --- a/packages/canvas/src/components/render/runner.js +++ b/packages/canvas/src/components/render/runner.js @@ -134,8 +134,8 @@ const create = () => { export const createRender = (config) => { initRenderContext() - const { dslMode, canvasOptions } = config - const { styles = [], scripts = [] } = canvasOptions[dslMode] + + const { styles = [], scripts = [] } = config.canvasDependencies const { styles: thirdStyles = [], scripts: thirdScripts = [] } = window.thirdPartyDeps || {} Promise.all([ diff --git a/packages/common/component/LifeCycles.vue b/packages/common/component/LifeCycles.vue index c7abdcd283..cff2d6a37e 100644 --- a/packages/common/component/LifeCycles.vue +++ b/packages/common/component/LifeCycles.vue @@ -78,7 +78,8 @@ + diff --git a/designer-demo/src/preview.js b/designer-demo/src/preview.js new file mode 100644 index 0000000000..b7f5b6f38d --- /dev/null +++ b/designer-demo/src/preview.js @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { initPreview } from '@opentiny/tiny-engine' + +initPreview() diff --git a/packages/design-core/index.js b/packages/design-core/index.js index 4a662159df..2e6ae6b8a3 100644 --- a/packages/design-core/index.js +++ b/packages/design-core/index.js @@ -30,3 +30,4 @@ export { default as Robot } from '@opentiny/tiny-engine-plugin-robot' export { default as Props } from '@opentiny/tiny-engine-setting-props' export { default as Events } from '@opentiny/tiny-engine-setting-events' export { default as Styles } from '@opentiny/tiny-engine-setting-styles' +export { initPreview } from './src/preview/src/main' diff --git a/packages/design-core/src/preview/src/Toolbar.vue b/packages/design-core/src/preview/src/Toolbar.vue index 790c80fbc9..988827b6d7 100644 --- a/packages/design-core/src/preview/src/Toolbar.vue +++ b/packages/design-core/src/preview/src/Toolbar.vue @@ -21,9 +21,13 @@ import { Switch as TinySwitch } from '@opentiny/vue' import { getSearchParams } from './preview/http' import { BROADCAST_CHANNEL } from '../src/preview/srcFiles/constant' import { injectDebugSwitch } from './preview/debugSwitch' +import BreadcrumbPlugin from '@opentiny/tiny-engine-toolbar-breadcrumb' +import LangPlugin from '@opentiny/tiny-engine-toolbar-lang' +import MediaPlugin from '@opentiny/tiny-engine-toolbar-media' const getToolbars = (pluginId) => { return defineAsyncComponent(() => + // FIXME: preview 这里其实有单独的入口,拿到的注册表是空的 Promise.resolve(getMergeRegistry('toolbars')?.find((t) => t.id === pluginId)?.component || ) ) } @@ -35,7 +39,11 @@ export default { setup() { const debugSwitch = injectDebugSwitch() const tools = ['breadcrumb', 'lang', 'media'] - const [Breadcrumb, ChangeLang, ToolbarMedia] = tools.map(getToolbars) + const [Breadcrumb, ChangeLang, ToolbarMedia] = [ + BreadcrumbPlugin.component, + LangPlugin.component, + MediaPlugin.component + ] const { setBreadcrumbPage } = useBreadcrumb() const { pageInfo } = getSearchParams() @@ -44,8 +52,11 @@ export default { const setViewPort = (item) => { const iframe = document.getElementsByClassName('iframe-container')[0] const app = document.getElementById('app') - iframe.style.width = item - iframe.style.margin = 'auto' + + if (iframe) { + iframe.style.width = item + iframe.style.margin = 'auto' + } app.style.overflow = 'hidden' } diff --git a/packages/design-core/src/preview/src/main.js b/packages/design-core/src/preview/src/main.js index df3de70ec4..18ca113a61 100644 --- a/packages/design-core/src/preview/src/main.js +++ b/packages/design-core/src/preview/src/main.js @@ -15,8 +15,10 @@ import initSvgs from '@opentiny/tiny-engine-svgs' import App from './App.vue' import 'virtual:svg-icons-register' -const app = createApp(App) - -initSvgs(app) - -app.mount('#app') +export const initPreview = () => { + const app = createApp(App) + + initSvgs(app) + + app.mount('#app') +} From 8e34c1ca9665f07fd525931a48bc505e7d6c8c4e Mon Sep 17 00:00:00 2001 From: Hexqi Date: Sat, 8 Jun 2024 10:50:17 +0800 Subject: [PATCH 204/322] feat: remove useless (#559) --- packages/design-core/canvas.html | 265 ------------------ packages/design-core/index.html | 131 --------- packages/design-core/index.js | 1 + packages/design-core/package.json | 26 +- packages/design-core/src/canvas.js | 3 - .../design-core/{ => src/canvas}/canvas.js | 0 packages/design-core/src/init.js | 2 +- packages/design-core/src/{ => layout}/App.vue | 0 .../src/{ => layout}/DesignCanvas.vue | 0 .../src/{ => layout}/DesignPlugins.vue | 2 +- .../src/{ => layout}/DesignSettings.vue | 0 .../src/{ => layout}/DesignToolbars.vue | 0 packages/toolbars/logo/package.json | 1 + 13 files changed, 6 insertions(+), 425 deletions(-) delete mode 100644 packages/design-core/canvas.html delete mode 100644 packages/design-core/index.html delete mode 100644 packages/design-core/src/canvas.js rename packages/design-core/{ => src/canvas}/canvas.js (100%) rename packages/design-core/src/{ => layout}/App.vue (100%) rename packages/design-core/src/{ => layout}/DesignCanvas.vue (100%) rename packages/design-core/src/{ => layout}/DesignPlugins.vue (99%) rename packages/design-core/src/{ => layout}/DesignSettings.vue (100%) rename packages/design-core/src/{ => layout}/DesignToolbars.vue (100%) diff --git a/packages/design-core/canvas.html b/packages/design-core/canvas.html deleted file mode 100644 index b0095770e1..0000000000 --- a/packages/design-core/canvas.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    - - - diff --git a/packages/design-core/index.html b/packages/design-core/index.html deleted file mode 100644 index f4e14a6d27..0000000000 --- a/packages/design-core/index.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - TinyEditor 前端可视化设计器 - - - -
    -
    -
    -

    Loading

    - - - - - - - -
    -
    -
    - - - diff --git a/packages/design-core/index.js b/packages/design-core/index.js index 2e6ae6b8a3..8b7e1fa1ae 100644 --- a/packages/design-core/index.js +++ b/packages/design-core/index.js @@ -30,4 +30,5 @@ export { default as Robot } from '@opentiny/tiny-engine-plugin-robot' export { default as Props } from '@opentiny/tiny-engine-setting-props' export { default as Events } from '@opentiny/tiny-engine-setting-events' export { default as Styles } from '@opentiny/tiny-engine-setting-styles' + export { initPreview } from './src/preview/src/main' diff --git a/packages/design-core/package.json b/packages/design-core/package.json index 566a35fad1..fd9447e02b 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -20,13 +20,9 @@ ], "exports": { ".": "index.js", - "./canvas": "./canvas.js" + "./canvas": "./src/canvas/canvas.js" }, "scripts": { - "dev": "cross-env NODE_OPTIONS=--max-old-space-size=10240 VITE_API_MOCK=mock vite", - "serve": "cross-env NODE_OPTIONS=--max-old-space-size=10240 vite", - "build:alpha": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode alpha", - "build:prod": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode prod", "preview": "vite preview", "lint": "eslint . --ext .js,.vue,.jsx --fix" }, @@ -112,35 +108,17 @@ "vue-i18n": "^9.9.0" }, "devDependencies": { - "@babel/eslint-parser": "^7.21.3", - "@esbuild-plugins/node-globals-polyfill": "^0.2.3", - "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@types/node": "^18.0.0", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", - "assert": "^2.0.0", - "buffer": "^6.0.3", "cross-env": "^7.0.3", - "esbuild-plugin-copy": "^2.1.1", "eslint": "^8.38.0", "eslint-plugin-vue": "^8.0.0", "fs-extra": "^10.1.0", "husky": "^8.0.0", "lerna": "^7.2.0", "less": "^4.1.2", - "lint-staged": "^13.2.0", - "path": "^0.12.7", - "rimraf": "^3.0.2", - "rollup-plugin-polyfill-node": "^0.12.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-visualizer": "^5.8.3", - "shelljs": "^0.8.5", - "svg-sprite-loader": "^6.0.11", - "vite": "^4.3.7", - "vite-plugin-monaco-editor": "^1.1.0", - "vite-plugin-static-copy": "^0.16.0", - "vite-plugin-svg-icons": "^2.0.1", - "vue-eslint-parser": "^8.0.1" + "lint-staged": "^13.2.0" }, "browserslist": [ "> 1%", diff --git a/packages/design-core/src/canvas.js b/packages/design-core/src/canvas.js deleted file mode 100644 index 118254a0d3..0000000000 --- a/packages/design-core/src/canvas.js +++ /dev/null @@ -1,3 +0,0 @@ -import { createRender } from '@opentiny/tiny-engine-canvas' - -createRender(window.parent.TinyGlobalConfig) diff --git a/packages/design-core/canvas.js b/packages/design-core/src/canvas/canvas.js similarity index 100% rename from packages/design-core/canvas.js rename to packages/design-core/src/canvas/canvas.js diff --git a/packages/design-core/src/init.js b/packages/design-core/src/init.js index 1d60271525..59a5316a51 100644 --- a/packages/design-core/src/init.js +++ b/packages/design-core/src/init.js @@ -19,7 +19,7 @@ import { initHttp } from '@opentiny/tiny-engine-http' import TinyThemeTool from '@opentiny/vue-theme/theme-tool' import { tinySmbTheme } from '@opentiny/vue-theme/theme' // SMB 主题 import { defineEntry, mergeRegistry } from '@opentiny/tiny-engine-entry' -import App from './App.vue' +import App from './layout/App.vue' import defaultRegistry from '../registry.js' import { registerConfigurators } from './registerConfigurators' diff --git a/packages/design-core/src/App.vue b/packages/design-core/src/layout/App.vue similarity index 100% rename from packages/design-core/src/App.vue rename to packages/design-core/src/layout/App.vue diff --git a/packages/design-core/src/DesignCanvas.vue b/packages/design-core/src/layout/DesignCanvas.vue similarity index 100% rename from packages/design-core/src/DesignCanvas.vue rename to packages/design-core/src/layout/DesignCanvas.vue diff --git a/packages/design-core/src/DesignPlugins.vue b/packages/design-core/src/layout/DesignPlugins.vue similarity index 99% rename from packages/design-core/src/DesignPlugins.vue rename to packages/design-core/src/layout/DesignPlugins.vue index 744bfaa91f..8cb47dd87d 100644 --- a/packages/design-core/src/DesignPlugins.vue +++ b/packages/design-core/src/layout/DesignPlugins.vue @@ -58,7 +58,7 @@ >
    - +
  • diff --git a/packages/design-core/src/DesignSettings.vue b/packages/design-core/src/layout/DesignSettings.vue similarity index 100% rename from packages/design-core/src/DesignSettings.vue rename to packages/design-core/src/layout/DesignSettings.vue diff --git a/packages/design-core/src/DesignToolbars.vue b/packages/design-core/src/layout/DesignToolbars.vue similarity index 100% rename from packages/design-core/src/DesignToolbars.vue rename to packages/design-core/src/layout/DesignToolbars.vue diff --git a/packages/toolbars/logo/package.json b/packages/toolbars/logo/package.json index 4adf6d8eb3..6a4a4b39b0 100644 --- a/packages/toolbars/logo/package.json +++ b/packages/toolbars/logo/package.json @@ -37,6 +37,7 @@ }, "peerDependencies": { "@opentiny/vue": "^3.14.0", + "@opentiny/vue-icon": "^3.14.0", "vue": "^3.4.15" } } From d770429168de2b5b71cf54cfd1391844fd783368 Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Fri, 7 Jun 2024 20:23:48 -0700 Subject: [PATCH 205/322] fix: fix relative path (#560) * fix: fix relative path * fix: read envconfig from extOptions --- designer-demo/{.env.prod => .env.production} | 0 designer-demo/vite.config.js | 3 +- .../build/vite-config/src/default-config.js | 30 ++++++++----------- 3 files changed, 14 insertions(+), 19 deletions(-) rename designer-demo/{.env.prod => .env.production} (100%) diff --git a/designer-demo/.env.prod b/designer-demo/.env.production similarity index 100% rename from designer-demo/.env.prod rename to designer-demo/.env.production diff --git a/designer-demo/vite.config.js b/designer-demo/vite.config.js index 81ff3bf2a4..ebdd4e92c6 100644 --- a/designer-demo/vite.config.js +++ b/designer-demo/vite.config.js @@ -1,9 +1,10 @@ import path from 'node:path' -import { defineConfig, mergeConfig } from 'vite' +import { defineConfig, mergeConfig, loadEnv } from 'vite' import { getDefaultConfig } from '@opentiny/tiny-engine-vite-config' export default defineConfig((options) => { const extOptions = { + ...loadEnv(options.mode, process.cwd(), ''), iconDirs: [path.resolve(__dirname, './node_modules/@opentiny/tiny-engine/assets/')] } const defaultConfig = getDefaultConfig(options, extOptions) diff --git a/packages/build/vite-config/src/default-config.js b/packages/build/vite-config/src/default-config.js index ebd6c63236..eb27c9b539 100644 --- a/packages/build/vite-config/src/default-config.js +++ b/packages/build/vite-config/src/default-config.js @@ -1,4 +1,4 @@ -import { defineConfig, loadEnv } from 'vite' +import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import monacoEditorPluginCjs from 'vite-plugin-monaco-editor' @@ -12,12 +12,7 @@ import { importmapPlugin } from './externalDeps.js' import visualizerCjs from 'rollup-plugin-visualizer' import { fileURLToPath } from 'node:url' import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' -import { - getBaseUrlFromCli, - copyBundleDeps, - copyPreviewImportMap, - copyLocalImportMap -} from './localCdnFile/index.js' +import { getBaseUrlFromCli, copyBundleDeps, copyPreviewImportMap, copyLocalImportMap } from './localCdnFile/index.js' const monacoEditorPlugin = monacoEditorPluginCjs.default const nodeGlobalsPolyfillPlugin = nodeGlobalsPolyfillPluginCjs.default @@ -79,7 +74,7 @@ const config = { } } }), - vueJsx(), + vueJsx() ], optimizeDeps: { esbuildOptions: { @@ -93,7 +88,10 @@ const config = { //@vue/repl monaco编辑器需要 resolveFrom: 'cwd', assets: { - from: ['./node_modules/@vue/repl/dist/assets/*'], // worker.js文件以url形式引用不会被esbuild拉起,需要手动复制 + from: [ + './node_modules/@vue/repl/dist/assets/*', + './node_modules/@opentiny/tiny-engine/node_modules/@vue/repl/dist/assets/*' + ], // worker.js文件以url形式引用不会被esbuild拉起,需要手动复制 to: ['./node_modules/.vite/assets'] // 开发态,js文件被缓存在.vite/deps,请求相对路径为.vite/assets }, watch: true @@ -112,10 +110,9 @@ const config = { rollupOptions: { plugins: [nodePolyfill({ include: null })], // 使用@rollup/plugin-inject的默认值{include: null}, 即在所有代码中生效 input: { - index: path.resolve(__dirname, './index.html'), - canvas: path.resolve(__dirname, './canvas.html'), - preview: path.resolve(__dirname, './preview.html'), - previewApp: path.resolve(__dirname, './previewApp.html') + index: path.resolve(process.cwd(), './index.html'), + canvas: path.resolve(process.cwd(), './canvas.html'), + preview: path.resolve(process.cwd(), './preview.html') }, output: { manualChunks: (id) => { @@ -143,11 +140,8 @@ const importMapVersions = { } export default defineConfig(({ command = 'serve', mode = 'serve' }, extOptions) => { - const { - VITE_CDN_DOMAIN = 'https://npm.onmicrosoft.cn', - VITE_LOCAL_IMPORT_MAPS, - VITE_LOCAL_BUNDLE_DEPS - } = loadEnv(mode, process.cwd(), '') + const { VITE_CDN_DOMAIN = 'https://npm.onmicrosoft.cn', VITE_LOCAL_IMPORT_MAPS, VITE_LOCAL_BUNDLE_DEPS } = extOptions + const isLocalImportMap = VITE_LOCAL_IMPORT_MAPS === 'true' // true公共依赖库使用本地打包文件,false公共依赖库使用公共CDN const isCopyBundleDeps = VITE_LOCAL_BUNDLE_DEPS === 'true' // true bundle里的cdn依赖处理成本地依赖, false 不处理 From 74abad228c95127cdeb956b0689a3406d19edb6b Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Fri, 7 Jun 2024 23:26:49 -0700 Subject: [PATCH 206/322] feat: remove plugin from default registry (#562) * feat: remove plugin from default registry * fix: merge registry inside init function * fix: use merged registry to get theme --- designer-demo/registry.js | 152 ++++++++----------- designer-demo/src/preview.js | 2 +- packages/design-core/index.js | 2 + packages/design-core/registry.js | 54 +------ packages/design-core/src/preview/src/App.vue | 5 - packages/design-core/src/preview/src/main.js | 13 +- 6 files changed, 77 insertions(+), 151 deletions(-) diff --git a/designer-demo/registry.js b/designer-demo/registry.js index 74a2a839ee..51d460149d 100644 --- a/designer-demo/registry.js +++ b/designer-demo/registry.js @@ -10,6 +10,39 @@ * */ +import { + Breadcrumb, + Fullscreen, + Lang, + Checkinout, + Logo, + Media, + Redoundo, + Save, + Clean, + Preview, + GenerateVue, + Refresh, + Collaboration, + Setting, + Materials, + Data, + Script, + Tree, + Help, + Schema, + Page, + I18n, + Bridge, + Block, + Datasource, + Robot, + Props, + Events, + Styles, +} from '@opentiny/tiny-engine' + + export default { config: { id: 'engine.config', @@ -18,99 +51,40 @@ export default { }, layout: { id: 'engine.layout' }, toolbars: [ - { - id: 'engine.toolbars.logo' - }, - { - id: 'engine.toolbars.breadcrumb' - }, - { - id: 'engine.toolbars.media' - }, - { - id: 'engine.toolbars.collaboration' - }, - { - id: 'engine.toolbars.clean' - }, - { - id: 'engine.toolbars.refresh' - }, - { - id: 'engine.toolbars.save' - }, - { - id: 'engine.toolbars.generate-vue' - }, - { - id: 'engine.toolbars.preview' - }, - { - id: 'engine.toolbars.redoundo' - }, - { - id: 'engine.toolbars.fullscreen' - }, - { - id: 'engine.toolbars.lock' - }, - { - id: 'engine.toolbars.setting' - }, - { - id: 'engine.toolbars.lang' - } + Logo, + Breadcrumb, + Media, + Collaboration, + Clean, + Refresh, + Save, + GenerateVue, + Preview, + Redoundo, + Fullscreen, + Checkinout, + Setting, + Lang ], plugins: [ - { - id: 'engine.plugins.materials' - }, - { - id: 'engine.plugins.outlinetree' - }, - { - id: 'engine.plugins.appmanage' - }, - { - id: 'engine.plugins.blockmanage' - }, - { - id: 'engine.plugins.collections' - }, - { - id: 'engine.plugins.bridge' - }, - { - id: 'engine.plugins.i18n' - }, - { - id: 'engine.plugins.pagecontroller' - }, - { - id: 'engine.plugins.state' - }, - { - id: 'engine.plugins.schema' - }, - { - id: 'engine.plugins.editorhelp' - }, - { - id: 'engine.plugins.robot' - } + Materials, + Tree, + Page, + Block, + Datasource, + Bridge, + I18n, + Script, + Data, + Schema, + Help, + Robot ], dsls: [{ id: 'engine.dsls.dslvue' }], settings: [ - { - id: 'engine.setting.props' - }, - { - id: 'engine.setting.styles' - }, - { - id: 'engine.setting.event' - } + Props, + Styles, + Events ], - canvas: {}, - utils: { id: 'engine.utils' } + canvas: {} } diff --git a/designer-demo/src/preview.js b/designer-demo/src/preview.js index b7f5b6f38d..d47a8bdb6a 100644 --- a/designer-demo/src/preview.js +++ b/designer-demo/src/preview.js @@ -12,4 +12,4 @@ import { initPreview } from '@opentiny/tiny-engine' -initPreview() +initPreview({ registry: { config: { id : 'engine.config', theme: 'light' } } }) diff --git a/packages/design-core/index.js b/packages/design-core/index.js index 8b7e1fa1ae..95d71dec20 100644 --- a/packages/design-core/index.js +++ b/packages/design-core/index.js @@ -32,3 +32,5 @@ export { default as Events } from '@opentiny/tiny-engine-setting-events' export { default as Styles } from '@opentiny/tiny-engine-setting-styles' export { initPreview } from './src/preview/src/main' + +export { default as defaultRegistry } from './registry' diff --git a/packages/design-core/registry.js b/packages/design-core/registry.js index 4824fa66fb..5572014dab 100644 --- a/packages/design-core/registry.js +++ b/packages/design-core/registry.js @@ -10,38 +10,6 @@ * */ -import Breadcrumb from '@opentiny/tiny-engine-toolbar-breadcrumb' -import Fullscreen from '@opentiny/tiny-engine-toolbar-fullscreen' -import Lang from '@opentiny/tiny-engine-toolbar-lang' -import Checkinout from '@opentiny/tiny-engine-toolbar-checkinout' -import Logo from '@opentiny/tiny-engine-toolbar-logo' -import Media from '@opentiny/tiny-engine-toolbar-media' -import Redoundo from '@opentiny/tiny-engine-toolbar-redoundo' -import Save from '@opentiny/tiny-engine-toolbar-save' -import Clean from '@opentiny/tiny-engine-toolbar-clean' -import Preview from '@opentiny/tiny-engine-toolbar-preview' -import GenerateVue from '@opentiny/tiny-engine-toolbar-generate-vue' -import Refresh from '@opentiny/tiny-engine-toolbar-refresh' -import Collaboration from '@opentiny/tiny-engine-toolbar-collaboration' -import Setting from '@opentiny/tiny-engine-toolbar-setting' - -import Materials from '@opentiny/tiny-engine-plugin-materials' -import Data from '@opentiny/tiny-engine-plugin-data' -import Script from '@opentiny/tiny-engine-plugin-script' -import Tree from '@opentiny/tiny-engine-plugin-tree' -import Help from '@opentiny/tiny-engine-plugin-help' -import Schema from '@opentiny/tiny-engine-plugin-schema' -import Page from '@opentiny/tiny-engine-plugin-page' -import I18n from '@opentiny/tiny-engine-plugin-i18n' -import Bridge from '@opentiny/tiny-engine-plugin-bridge' -import Block from '@opentiny/tiny-engine-plugin-block' -import Datasource from '@opentiny/tiny-engine-plugin-datasource' -import Robot from '@opentiny/tiny-engine-plugin-robot' - -import Props from '@opentiny/tiny-engine-setting-props' -import Events from '@opentiny/tiny-engine-setting-events' -import Styles from '@opentiny/tiny-engine-setting-styles' - export default { config: { id: 'engine.config', @@ -98,25 +66,5 @@ export default { lifeCycleTips: { Vue: '通过Vue解构出来的方法都可以在setup这里使用,比如watch、computed、watchEffect等' } - }, - layout: { id: 'engine.layout' }, - toolbars: [ - Logo, - Breadcrumb, - Media, - Collaboration, - Clean, - Refresh, - Save, - GenerateVue, - Preview, - Redoundo, - Fullscreen, - Checkinout, - Setting, - Lang - ], - plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, Data, Schema, Help, Robot], - settings: [Props, Styles, Events], - canvas: {} + } } diff --git a/packages/design-core/src/preview/src/App.vue b/packages/design-core/src/preview/src/App.vue index d1ccc23338..d4384ac8e8 100644 --- a/packages/design-core/src/preview/src/App.vue +++ b/packages/design-core/src/preview/src/App.vue @@ -4,15 +4,10 @@ + diff --git a/designer-demo/package.json b/designer-demo/package.json index 3e50bba3e8..a00abe4d83 100644 --- a/designer-demo/package.json +++ b/designer-demo/package.json @@ -12,6 +12,8 @@ "@opentiny/tiny-engine": "workspace:^", "@opentiny/tiny-engine-entry": "workspace:^", "@opentiny/tiny-engine-configurator": "workspace:*", + "@opentiny/tiny-engine-theme-dark": "workspace:*", + "@opentiny/tiny-engine-theme-light": "workspace:*", "@opentiny/vue": "~3.14.0", "@opentiny/vue-design-smb": "~3.14.0", "@opentiny/vue-renderless": "~3.14.0", diff --git a/designer-demo/vite.config.js b/designer-demo/vite.config.js index 0bed17012b..62a9038fb1 100644 --- a/designer-demo/vite.config.js +++ b/designer-demo/vite.config.js @@ -6,7 +6,7 @@ export default defineConfig((options) => { const envDir = path.resolve(process.cwd(), 'env') const extOptions = { ...loadEnv(options.mode, envDir, 'VITE_'), - iconDirs: [path.resolve(__dirname, './node_modules/@opentiny/tiny-engine/assets/')] + iconDirs: [path.resolve(__dirname, './node_modules/@opentiny/tiny-engine/dist/assets/')] } const defaultConfig = getDefaultConfig(options, extOptions) @@ -64,7 +64,7 @@ export default defineConfig((options) => { '@opentiny/tiny-engine-configurator': path.resolve(__dirname, '../packages/configurator/src/index.js'), '@opentiny/tiny-engine-theme': ['light', 'dark'].includes(extOptions.VITE_THEME) ? path.resolve(process.cwd(), `../packages/theme/${extOptions.VITE_THEME}/index.less`) - // ? path.resolve(process.cwd(), `./node_modules/@opentiny/tiny-engine/node_modules/@opentiny/tiny-engine-theme-${extOptions.VITE_THEME}/dist/style.css`) + // ? path.resolve(process.cwd(), `./node_modules/@opentiny/tiny-engine-theme-${extOptions.VITE_THEME}/dist/style.css`) : '' } diff --git a/packages/build/vite-config/package.json b/packages/build/vite-config/package.json index 057aba73d2..1d0e88f0b5 100644 --- a/packages/build/vite-config/package.json +++ b/packages/build/vite-config/package.json @@ -9,7 +9,7 @@ "dist" ], "scripts": { - "build": "vite build" + "build": "" }, "dependencies": { "@babel/core": "~7.23.2", diff --git a/packages/design-core/package.json b/packages/design-core/package.json index fd9447e02b..9d46613d01 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -19,12 +19,13 @@ "assets" ], "exports": { - ".": "index.js", - "./canvas": "./src/canvas/canvas.js" + ".": "./dist/index.js", + "./canvas": "./dist/canvas.js" }, "scripts": { "preview": "vite preview", - "lint": "eslint . --ext .js,.vue,.jsx --fix" + "lint": "eslint . --ext .js,.vue,.jsx --fix", + "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build" }, "repository": { "type": "git", @@ -108,6 +109,8 @@ "vue-i18n": "^9.9.0" }, "devDependencies": { + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@types/node": "^18.0.0", "@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue-jsx": "^3.1.0", diff --git a/packages/design-core/src/preview/src/main.js b/packages/design-core/src/preview/src/main.js index cf5278f519..41bda9dd75 100644 --- a/packages/design-core/src/preview/src/main.js +++ b/packages/design-core/src/preview/src/main.js @@ -15,13 +15,13 @@ import initSvgs from '@opentiny/tiny-engine-svgs' import { defineEntry, mergeRegistry } from '@opentiny/tiny-engine-entry' import defaultRegistry from '../../../registry.js' import App from './App.vue' -import 'virtual:svg-icons-register' export const initPreview = ({ registry }) => { const mergedRegistry = mergeRegistry(registry, defaultRegistry) defineEntry(mergedRegistry) - import(`../../theme/${mergedRegistry.config.theme || 'light'}.js`) + // TODO: 后续需要方案 + // import(`../../theme/${mergedRegistry.config.theme || 'light'}.js`) const app = createApp(App) diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js new file mode 100644 index 0000000000..b410bd55e4 --- /dev/null +++ b/packages/design-core/vite.config.js @@ -0,0 +1,58 @@ +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import nodeGlobalsPolyfillPluginCjs from '@esbuild-plugins/node-globals-polyfill' +import nodeModulesPolyfillPluginCjs from '@esbuild-plugins/node-modules-polyfill' +import nodePolyfill from 'rollup-plugin-polyfill-node' +import { fileURLToPath } from 'node:url' + +const nodeGlobalsPolyfillPlugin = nodeGlobalsPolyfillPluginCjs.default +const nodeModulesPolyfillPlugin = nodeModulesPolyfillPluginCjs.default + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +export default defineConfig({ + plugins: [vue(), vueJsx()], + publicDir: false, + optimizeDeps: { + esbuildOptions: { + plugins: [ + nodeGlobalsPolyfillPlugin({ + process: true, + buffer: true + }), + nodeModulesPolyfillPlugin() + ] + } + }, + build: { + commonjsOptions: { + transformMixedEsModules: true, + exclude: ['node_modules/*monaco-editor*/**', 'node_modules/lodash-es/**', 'node_modules/@types/lodash-es/**'] + }, + minify: true, + sourcemap: true, + lib: { + entry: { + index: path.resolve(__dirname, 'index.js'), + canvas: path.resolve(__dirname, './src/canvas/canvas.js') + }, + name: 'tiny-engine', + fileName: (_, entryName) => `${entryName}.js`, + formats: ['es'] + }, + rollupOptions: { + plugins: [nodePolyfill({ include: null })], + output: { + banner: (chunk) => { + if (chunk.name === 'index') { + return 'import "./style.css"' + } + } + }, + external: ['vue', 'monaco-editor', 'prettier', /@opentiny\/vue.*/] + } + } +}) From f270d8da0fdb1e01d6ecafa64af8b363dde51df3 Mon Sep 17 00:00:00 2001 From: Hexqi Date: Tue, 11 Jun 2024 11:37:57 +0800 Subject: [PATCH 212/322] fix: tiny-engine alias (#567) --- designer-demo/vite.config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-demo/vite.config.js b/designer-demo/vite.config.js index 62a9038fb1..cf8447e49e 100644 --- a/designer-demo/vite.config.js +++ b/designer-demo/vite.config.js @@ -6,11 +6,13 @@ export default defineConfig((options) => { const envDir = path.resolve(process.cwd(), 'env') const extOptions = { ...loadEnv(options.mode, envDir, 'VITE_'), - iconDirs: [path.resolve(__dirname, './node_modules/@opentiny/tiny-engine/dist/assets/')] + iconDirs: [path.resolve(__dirname, './node_modules/@opentiny/tiny-engine/assets/')] } const defaultConfig = getDefaultConfig(options, extOptions) const devAlias = { + '@opentiny/tiny-engine/canvas': path.resolve(__dirname, '../packages/design-core/src/canvas/canvas.js'), + '@opentiny/tiny-engine': path.resolve(__dirname, '../packages/design-core/index.js'), '@opentiny/tiny-engine-controller/js': path.resolve(__dirname, '../packages/controller/js'), '@opentiny/tiny-engine-common/component': path.resolve(__dirname, '../packages/common/component'), '@opentiny/tiny-engine-common': path.resolve(__dirname, '../packages/common/index.js'), From 339e258110325aee524e20cb3035a107eb068240 Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Mon, 10 Jun 2024 23:23:06 -0700 Subject: [PATCH 213/322] fix: fix some issue on preview page (#568) --- designer-demo/env/.env.development | 2 +- designer-demo/package.json | 1 + designer-demo/preview.html | 2 +- designer-demo/src/preview.js | 16 +++++++++++++++- packages/design-core/package.json | 1 + packages/design-core/src/preview/src/main.js | 5 ++++- .../src/preview/src/preview/Preview.vue | 4 ++-- .../src/preview/src/preview/importMap.js | 18 +++++++++--------- 8 files changed, 34 insertions(+), 15 deletions(-) diff --git a/designer-demo/env/.env.development b/designer-demo/env/.env.development index 98c505478e..e02fbee0fd 100644 --- a/designer-demo/env/.env.development +++ b/designer-demo/env/.env.development @@ -1,7 +1,7 @@ # development mode, used by the "vite" command NODE_ENV=development -VITE_CDN_DOMAIN=https://npm.onmicrosoft.cn +VITE_CDN_DOMAIN=https://unpkg.com VITE_LOCAL_IMPORT_MAPS=false VITE_LOCAL_BUNDLE_DEPS=false # request data via alpha service diff --git a/designer-demo/package.json b/designer-demo/package.json index a00abe4d83..21ea03e886 100644 --- a/designer-demo/package.json +++ b/designer-demo/package.json @@ -15,6 +15,7 @@ "@opentiny/tiny-engine-theme-dark": "workspace:*", "@opentiny/tiny-engine-theme-light": "workspace:*", "@opentiny/vue": "~3.14.0", + "@opentiny/vue-icon": "~3.14.0", "@opentiny/vue-design-smb": "~3.14.0", "@opentiny/vue-renderless": "~3.14.0", "@opentiny/vue-theme": "~3.14.0" diff --git a/designer-demo/preview.html b/designer-demo/preview.html index 23770ebf6d..2291301fa4 100644 --- a/designer-demo/preview.html +++ b/designer-demo/preview.html @@ -8,6 +8,6 @@
    - + diff --git a/designer-demo/src/preview.js b/designer-demo/src/preview.js index d47a8bdb6a..3432ae01db 100644 --- a/designer-demo/src/preview.js +++ b/designer-demo/src/preview.js @@ -10,6 +10,20 @@ * */ +import { initHook, HOOK_NAME } from '@opentiny/tiny-engine-entry' import { initPreview } from '@opentiny/tiny-engine' +import 'virtual:svg-icons-register' +import '@opentiny/tiny-engine-theme' -initPreview({ registry: { config: { id : 'engine.config', theme: 'light' } } }) +const beforeAppCreate = () => { + initHook(HOOK_NAME.useEnv, import.meta.env) +} + +initPreview({ + registry: { + config: { id : 'engine.config', theme: 'light' }, + }, + lifeCycles: { + beforeAppCreate + } +}) diff --git a/packages/design-core/package.json b/packages/design-core/package.json index 9d46613d01..1c0f051e3b 100644 --- a/packages/design-core/package.json +++ b/packages/design-core/package.json @@ -91,6 +91,7 @@ "@opentiny/tiny-engine-utils": "workspace:*", "@opentiny/tiny-engine-webcomponent-core": "workspace:*", "@opentiny/vue": "~3.14.0", + "@opentiny/vue-icon": "~3.14.0", "@opentiny/vue-design-smb": "~3.14.0", "@opentiny/vue-renderless": "~3.14.0", "@opentiny/vue-theme": "~3.14.0", diff --git a/packages/design-core/src/preview/src/main.js b/packages/design-core/src/preview/src/main.js index 41bda9dd75..4cfc97757e 100644 --- a/packages/design-core/src/preview/src/main.js +++ b/packages/design-core/src/preview/src/main.js @@ -16,8 +16,11 @@ import { defineEntry, mergeRegistry } from '@opentiny/tiny-engine-entry' import defaultRegistry from '../../../registry.js' import App from './App.vue' -export const initPreview = ({ registry }) => { +export const initPreview = ({ registry, lifeCycles = {} }) => { + const { beforeAppCreate } = lifeCycles const mergedRegistry = mergeRegistry(registry, defaultRegistry) + + beforeAppCreate?.() defineEntry(mergedRegistry) // TODO: 后续需要方案 diff --git a/packages/design-core/src/preview/src/preview/Preview.vue b/packages/design-core/src/preview/src/preview/Preview.vue index 04f797bb04..20aa6db133 100644 --- a/packages/design-core/src/preview/src/preview/Preview.vue +++ b/packages/design-core/src/preview/src/preview/Preview.vue @@ -19,7 +19,7 @@ import { Repl, ReplStore } from '@vue/repl' import vueJsx from '@vue/babel-plugin-jsx' import { transformSync } from '@babel/core' import { genSFCWithDefaultPlugin, parseRequiredBlocks } from '@opentiny/tiny-engine-dsl-vue' -import importMap from './importMap' +import { getImportMap as getInitImportMap } from './importMap' import srcFiles from './srcFiles' import generateMetaFiles, { processAppJsCode } from './generate' import { getSearchParams, fetchMetaData, fetchImportMap, fetchAppSchema, fetchBlockSchema } from './http' @@ -108,7 +108,7 @@ export default { } } } - return importMap + return getInitImportMap() } const promiseList = [ diff --git a/packages/design-core/src/preview/src/preview/importMap.js b/packages/design-core/src/preview/src/preview/importMap.js index d0053059a4..f27cd5b30b 100644 --- a/packages/design-core/src/preview/src/preview/importMap.js +++ b/packages/design-core/src/preview/src/preview/importMap.js @@ -10,23 +10,23 @@ * */ -// import { hyphenate } from '@vue/shared' - +import { useEnv } from '@opentiny/tiny-engine-entry' import { getSearchParams } from './http' import importMapJSON from './importMap.json' -import { VITE_CDN_DOMAIN } from '@opentiny/tiny-engine-controller/js/environments' const importMap = {} const opentinyVueVersion = '~3.14' function replacePlaceholder(v) { - return v.replace('${VITE_CDN_DOMAIN}', VITE_CDN_DOMAIN).replace('${opentinyVueVersion}', opentinyVueVersion) + return v.replace('${VITE_CDN_DOMAIN}', useEnv().VITE_CDN_DOMAIN).replace('${opentinyVueVersion}', opentinyVueVersion) } -importMap.imports = { - ...Object.fromEntries(Object.entries(importMapJSON.imports).map(([k, v]) => [k, replacePlaceholder(v)])), - ...getSearchParams().scripts -} +export const getImportMap = () => { + importMap.imports = { + ...Object.fromEntries(Object.entries(importMapJSON.imports).map(([k, v]) => [k, replacePlaceholder(v)])), + ...getSearchParams().scripts + } -export default importMap + return importMap +} From 403528804ef028fc25c8ddeb7effffac6edfdf45 Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Tue, 11 Jun 2024 01:20:24 -0700 Subject: [PATCH 214/322] fix: entry package should share instance with user project (#571) --- packages/build/vite-config/package.json | 4 +++- packages/design-core/vite.config.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/build/vite-config/package.json b/packages/build/vite-config/package.json index 1d0e88f0b5..9e342e6bb8 100644 --- a/packages/build/vite-config/package.json +++ b/packages/build/vite-config/package.json @@ -6,7 +6,9 @@ "main": "./index.js", "module": "./index.js", "files": [ - "dist" + "dist", + "src", + "index.js" ], "scripts": { "build": "" diff --git a/packages/design-core/vite.config.js b/packages/design-core/vite.config.js index b410bd55e4..01bc1f0e10 100644 --- a/packages/design-core/vite.config.js +++ b/packages/design-core/vite.config.js @@ -52,7 +52,7 @@ export default defineConfig({ } } }, - external: ['vue', 'monaco-editor', 'prettier', /@opentiny\/vue.*/] + external: ['vue', 'monaco-editor', 'prettier', /@opentiny\/vue.*/, '@opentiny/tiny-engine-entry'] } } }) From 321127340971ff8ddedf24eaae01d9daa7ea63dd Mon Sep 17 00:00:00 2001 From: Hexqi Date: Tue, 11 Jun 2024 17:51:51 +0800 Subject: [PATCH 215/322] feat: update template (#572) --- .../MyInputConfigurator.vue | 0 .../index.js} | 0 designer-demo/src/main.js | 2 +- packages/engine-cli/src/commands/build.js | 26 - packages/engine-cli/src/commands/create.js | 2 +- packages/engine-cli/src/commands/serve.js | 33 - packages/engine-cli/src/common.js | 29 - packages/engine-cli/src/index.js | 33 - .../template/{ => designer}/canvas.html | 2 +- .../template/designer/env/.env.alpha | 12 + .../template/designer/env/.env.development | 8 + .../template/designer/env/.env.production | 7 + .../template/{ => designer}/index.html | 0 .../engine-cli/template/designer/package.json | 29 + .../engine-cli/template/designer/preview.html | 13 + .../template/designer/public/favicon.ico | Bin 0 -> 547 bytes .../template/designer/public/mock/bundle.json | 14298 ++++++++++++++++ .../engine-cli/template/designer/registry.js | 99 + .../{src/main.js => designer/src/canvas.js} | 10 +- .../src/configurators/MyInputConfigurator.vue | 63 + .../designer/src/configurators/index.js | 11 + .../{ => designer}/src/defineEntry.js | 7 +- .../engine-cli/template/designer/src/main.js | 25 + .../src/preview.js} | 12 +- .../template/designer/vite.config.js | 22 + packages/engine-cli/template/package.json | 22 - packages/engine-cli/template/plugin/.gitkeep | 0 packages/engine-cli/template/registry.js | 111 - packages/engine-cli/template/src/App.vue | 15 - packages/engine-cli/template/src/canvas.js | 3 - 30 files changed, 14603 insertions(+), 291 deletions(-) rename designer-demo/src/{ => configurators}/MyInputConfigurator.vue (100%) rename designer-demo/src/{configurators.js => configurators/index.js} (100%) delete mode 100644 packages/engine-cli/src/commands/build.js delete mode 100644 packages/engine-cli/src/commands/serve.js delete mode 100644 packages/engine-cli/src/common.js rename packages/engine-cli/template/{ => designer}/canvas.html (99%) create mode 100644 packages/engine-cli/template/designer/env/.env.alpha create mode 100644 packages/engine-cli/template/designer/env/.env.development create mode 100644 packages/engine-cli/template/designer/env/.env.production rename packages/engine-cli/template/{ => designer}/index.html (100%) create mode 100644 packages/engine-cli/template/designer/package.json create mode 100644 packages/engine-cli/template/designer/preview.html create mode 100644 packages/engine-cli/template/designer/public/favicon.ico create mode 100644 packages/engine-cli/template/designer/public/mock/bundle.json create mode 100644 packages/engine-cli/template/designer/registry.js rename packages/engine-cli/template/{src/main.js => designer/src/canvas.js} (60%) create mode 100644 packages/engine-cli/template/designer/src/configurators/MyInputConfigurator.vue create mode 100644 packages/engine-cli/template/designer/src/configurators/index.js rename packages/engine-cli/template/{ => designer}/src/defineEntry.js (77%) create mode 100644 packages/engine-cli/template/designer/src/main.js rename packages/engine-cli/template/{engine.config.js => designer/src/preview.js} (51%) create mode 100644 packages/engine-cli/template/designer/vite.config.js delete mode 100644 packages/engine-cli/template/package.json create mode 100644 packages/engine-cli/template/plugin/.gitkeep delete mode 100644 packages/engine-cli/template/registry.js delete mode 100644 packages/engine-cli/template/src/App.vue delete mode 100644 packages/engine-cli/template/src/canvas.js diff --git a/designer-demo/src/MyInputConfigurator.vue b/designer-demo/src/configurators/MyInputConfigurator.vue similarity index 100% rename from designer-demo/src/MyInputConfigurator.vue rename to designer-demo/src/configurators/MyInputConfigurator.vue diff --git a/designer-demo/src/configurators.js b/designer-demo/src/configurators/index.js similarity index 100% rename from designer-demo/src/configurators.js rename to designer-demo/src/configurators/index.js diff --git a/designer-demo/src/main.js b/designer-demo/src/main.js index 1439203056..aefabf5e5b 100644 --- a/designer-demo/src/main.js +++ b/designer-demo/src/main.js @@ -14,7 +14,7 @@ import { registry } from './defineEntry.js' import { init } from '@opentiny/tiny-engine' import { initHook, HOOK_NAME } from '@opentiny/tiny-engine-entry' -import { configurators } from './configurators.js' +import { configurators } from './configurators/' import 'virtual:svg-icons-register' import '@opentiny/tiny-engine-theme' diff --git a/packages/engine-cli/src/commands/build.js b/packages/engine-cli/src/commands/build.js deleted file mode 100644 index e631761c60..0000000000 --- a/packages/engine-cli/src/commands/build.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -import { build } from 'vite' -import { resolveViteConfig } from '../common.js' - -export default async function () { - const viteConfig = await resolveViteConfig() - await build({ - configFile: false, - ...viteConfig, - // root: __dirname, - server: { - port: 8000 - } - }) -} diff --git a/packages/engine-cli/src/commands/create.js b/packages/engine-cli/src/commands/create.js index 7fb4dd70cd..4fe7885a74 100644 --- a/packages/engine-cli/src/commands/create.js +++ b/packages/engine-cli/src/commands/create.js @@ -21,7 +21,7 @@ const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) export default function (name) { - const sourcePath = path.join(__dirname, '../../template') + const sourcePath = path.join(__dirname, '../../template/designer/') const destPath = path.join(cwd(), name) fs.copySync(sourcePath, destPath) console.log( diff --git a/packages/engine-cli/src/commands/serve.js b/packages/engine-cli/src/commands/serve.js deleted file mode 100644 index 7116c1f1b6..0000000000 --- a/packages/engine-cli/src/commands/serve.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -import { createServer } from 'vite' -import { resolveViteConfig } from '../common.js' - -export default async function () { - const viteConfig = await resolveViteConfig() - const server = await createServer({ - configFile: false, - ...viteConfig, - // root: __dirname, - server: { - ...{ - port: 8000 - }, - ...viteConfig.server - } - }) - await server.listen() - - server.printUrls() - server.bindCLIShortcuts({ print: true }) -} diff --git a/packages/engine-cli/src/common.js b/packages/engine-cli/src/common.js deleted file mode 100644 index a005f4cba9..0000000000 --- a/packages/engine-cli/src/common.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -import { cwd } from 'node:process' -import path from 'node:path' -import { defineConfig } from 'vite' - -const resolveViteConfig = async () => { - const configPath = path.join(cwd(), 'engine.config.js') - let config = {} - try { - const allConfig = (await import(`file://${configPath}`)).default - config = allConfig?.viteConfig || {} - } catch (err) { - console.log(err) - } - return defineConfig(config) -} - -export { resolveViteConfig } diff --git a/packages/engine-cli/src/index.js b/packages/engine-cli/src/index.js index 8048637ac4..6f67424330 100644 --- a/packages/engine-cli/src/index.js +++ b/packages/engine-cli/src/index.js @@ -11,32 +11,13 @@ */ import { fileURLToPath } from 'node:url' -import fs from 'fs-extra' -import * as globby from 'globby' import { Command } from 'commander' -import * as path from 'path' -import chalk from 'chalk' import create from './commands/create.js' -import serve from './commands/serve.js' -import build from './commands/build.js' const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) const program = new Command() -let commandsPath = [] -let pkgVersion = '' -let pkgName = '' - -// 获取当前包的信息 -const getPkgInfo = () => { - const jsonPath = path.join(__dirname, '../package.json') - const jsonResult = fs.readJSONSync(jsonPath) - pkgVersion = jsonResult.version - return pkgVersion -} - program .command('create ') .description('创建一个新工程') @@ -44,18 +25,4 @@ program create(name) }) -program - .command('serve') - .description('开启服务') - .action(() => { - serve() - }) - -program - .command('build') - .description('构建') - .action(() => { - build() - }) - program.parse(process.argv) diff --git a/packages/engine-cli/template/canvas.html b/packages/engine-cli/template/designer/canvas.html similarity index 99% rename from packages/engine-cli/template/canvas.html rename to packages/engine-cli/template/designer/canvas.html index b0095770e1..2d2da2c2ec 100644 --- a/packages/engine-cli/template/canvas.html +++ b/packages/engine-cli/template/designer/canvas.html @@ -260,6 +260,6 @@
    - + diff --git a/packages/engine-cli/template/designer/env/.env.alpha b/packages/engine-cli/template/designer/env/.env.alpha new file mode 100644 index 0000000000..1816a04719 --- /dev/null +++ b/packages/engine-cli/template/designer/env/.env.alpha @@ -0,0 +1,12 @@ +# alpha mode, used by the "build:alpha" script + +NODE_ENV=production +VITE_CDN_DOMAIN=https://npm.onmicrosoft.cn +VITE_LOCAL_IMPORT_MAPS=false +VITE_LOCAL_BUNDLE_DEPS=false +# VITE_ORIGIN= + +# 错误监控上报 url +VITE_ERROR_MONITOR_URL=/platform-center/api/platform/monitoring/event +# 是否开启错误监控 +VITE_ERROR_MONITOR=false diff --git a/packages/engine-cli/template/designer/env/.env.development b/packages/engine-cli/template/designer/env/.env.development new file mode 100644 index 0000000000..98c505478e --- /dev/null +++ b/packages/engine-cli/template/designer/env/.env.development @@ -0,0 +1,8 @@ +# development mode, used by the "vite" command + +NODE_ENV=development +VITE_CDN_DOMAIN=https://npm.onmicrosoft.cn +VITE_LOCAL_IMPORT_MAPS=false +VITE_LOCAL_BUNDLE_DEPS=false +# request data via alpha service +# VITE_ORIGIN= diff --git a/packages/engine-cli/template/designer/env/.env.production b/packages/engine-cli/template/designer/env/.env.production new file mode 100644 index 0000000000..04b27fbc31 --- /dev/null +++ b/packages/engine-cli/template/designer/env/.env.production @@ -0,0 +1,7 @@ +# prod mode, used by the "build:prod" script + +NODE_ENV=production +VITE_CDN_DOMAIN=https://npm.onmicrosoft.cn +VITE_LOCAL_IMPORT_MAPS=false +VITE_LOCAL_BUNDLE_DEPS=false +#VITE_ORIGIN= diff --git a/packages/engine-cli/template/index.html b/packages/engine-cli/template/designer/index.html similarity index 100% rename from packages/engine-cli/template/index.html rename to packages/engine-cli/template/designer/index.html diff --git a/packages/engine-cli/template/designer/package.json b/packages/engine-cli/template/designer/package.json new file mode 100644 index 0000000000..dc8b48aaaa --- /dev/null +++ b/packages/engine-cli/template/designer/package.json @@ -0,0 +1,29 @@ +{ + "name": "designer-demo", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "cross-env VITE_THEME=light vite", + "build": "cross-env VITE_THEME=light vite build" + }, + "dependencies": { + "vue": "^3.4.21", + "@opentiny/tiny-engine": "latest", + "@opentiny/tiny-engine-entry": "latest", + "@opentiny/tiny-engine-configurator": "latest", + "@opentiny/tiny-engine-theme-dark": "latest", + "@opentiny/tiny-engine-theme-light": "latest", + "@opentiny/vue": "~3.14.0", + "@opentiny/vue-design-smb": "~3.14.0", + "@opentiny/vue-renderless": "~3.14.0", + "@opentiny/vue-theme": "~3.14.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.4", + "cross-env": "^7.0.3", + "vite": "^5.2.7", + "@opentiny/tiny-engine-vite-config": "latest", + "@opentiny/tiny-engine-vite-plugin-meta-comments": "latest" + } +} diff --git a/packages/engine-cli/template/designer/preview.html b/packages/engine-cli/template/designer/preview.html new file mode 100644 index 0000000000..23770ebf6d --- /dev/null +++ b/packages/engine-cli/template/designer/preview.html @@ -0,0 +1,13 @@ + + + + + + + Design Core Preview + + +
    + + + diff --git a/packages/engine-cli/template/designer/public/favicon.ico b/packages/engine-cli/template/designer/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..826d98acb7e2a268f6ede5f86bcec188adda00f8 GIT binary patch literal 547 zcmV+;0^I!o0096201yxW0096P01W~F02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|5C8xG z5C{eU001BJ|6u?C00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E000SaNLh0L01m?d z01m?e$8V@)0004^Nkl0>@szKI52G_Gn(RYh3-}=pQJU*Fc(8z$4djtx_PQ2$-~v(Ol@3g7cVKd-0~E&1 zNKuEtg6ae$%guxX?sgIEIsrqgO-OIFAhX$qu}a(Wqa_^%a;j4!vZTj`*IJNXZ^7u6 z3q-}142UlqkX&g1g>f^!+<@?+?$ihuv_bNcWeXa?AP%B}c@(S9oO#RV1Ac;VAHuIu7za`G-X03$ zCS8$w5ll5CS@GKt?dfJ5M7aZKgv}WCeTWpS8a`R^eh1onNv=Ogvf3x?4^a(ow(fBs lrV+1yr@(~XD;|FkWAB{ddF@I {}", + "description": { + "zh_CN": "校验回调函数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": [], + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "formitem", + "name": { + "zh_CN": "表单项" + }, + "component": "TinyFormItem", + "description": "由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "FormItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "label", + "label": { + "text": { + "zh_CN": "标签文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "标签", + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "标签文本" + }, + "labelPosition": "left" + }, + { + "property": "prop", + "label": { + "text": { + "zh_CN": "校验字段" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的" + } + }, + { + "property": "required", + "label": { + "text": { + "zh_CN": "必填" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否必填" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "label": { + "label": { + "zh_CN": "字段名" + }, + "description": { + "zh_CN": "自定义显示字段名称" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyForm"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "col", + "name": { + "zh_CN": "col" + }, + "component": "TinyCol", + "description": "列配置信息", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Col", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "span", + "label": { + "text": { + "zh_CN": "栅格列格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "整行", + "value": 12 + }, + { + "label": "6格", + "value": 6 + }, + { + "label": "4格", + "value": 4 + }, + { + "label": "3格", + "value": 3 + }, + { + "label": "1格", + "value": 1 + } + ] + } + }, + "description": { + "zh_CN": "当一行分为12格时,一列可占位多少格" + } + }, + { + "property": "move", + "label": { + "text": { + "zh_CN": "栅格左右移动格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": -12, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左右移动格数(正数向右,负数向左)" + } + }, + { + "property": "no", + "label": { + "text": { + "zh_CN": "排序编号" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "max": 12 + } + }, + "description": { + "zh_CN": "排序编号(row中启用order生效)" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "间隔格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 0, + "max": 12 + } + }, + "description": { + "zh_CN": "栅格左侧的间隔格数" + } + }, + { + "property": "xs", + "label": { + "text": { + "zh_CN": "超小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "<768px 响应式栅格数" + } + }, + { + "property": "sm", + "label": { + "text": { + "zh_CN": "小屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥768px 响应式栅格数" + } + }, + { + "property": "md", + "label": { + "text": { + "zh_CN": "中屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥992px 响应式栅格数" + } + }, + { + "property": "lg", + "label": { + "text": { + "zh_CN": "大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1200px 响应式栅格数" + } + }, + { + "property": "xl", + "label": { + "text": { + "zh_CN": "超大屏格数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "min": 1, + "max": 12 + } + }, + "description": { + "zh_CN": "≥1920px 响应式栅格数" + } + } + ] + } + ], + "events": {} + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label", "rules"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "component": "TinyButton", + "icon": "button", + "description": "常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Button", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "type": "string", + "defaultValue": "按钮文案", + "label": { + "text": { + "zh_CN": "按钮文字" + } + }, + "cols": 12, + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "type": "select", + "label": { + "text": { + "zh_CN": "大小" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "large", + "value": "large" + }, + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "primary", + "value": "primary" + }, + { + "label": "success", + "value": "success" + }, + { + "label": "info", + "value": "info" + }, + { + "label": "warning", + "value": "warning" + }, + { + "label": "danger", + "value": "danger" + }, + { + "label": "text", + "value": "text" + } + ] + } + }, + "description": { + "zh_CN": "设置不同的主题样式" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "round", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆角按钮" + }, + "labelPosition": "left" + }, + { + "property": "plain", + "label": { + "text": { + "zh_CN": "朴素按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否为朴素按钮" + }, + "labelPosition": "left" + }, + { + "property": "reset-time", + "label": { + "text": { + "zh_CN": "禁用时间" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置禁用时间,防止重复提交,单位毫秒" + } + }, + { + "property": "circle", + "label": { + "text": { + "zh_CN": "圆角" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否圆形按钮" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否默认聚焦" + }, + "labelPosition": "left" + }, + { + "property": "loading", + "label": { + "text": { + "zh_CN": "加载中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否展示位加载中样式" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "component": "TinyInput", + "icon": "input", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Input", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "textarea", + "value": "textarea" + }, + { + "label": "text", + "value": "text" + }, + { + "label": "password", + "value": "password" + } + ] + } + }, + "description": { + "zh_CN": "设置input框的type属性" + } + }, + { + "property": "rows", + "label": { + "text": { + "zh_CN": "行数" + } + }, + "widget": { + "component": "MetaNumber" + }, + "description": { + "zh_CN": "输入框行数,只对 type='textarea' 有效" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "prefix": { + "label": { + "zh_CN": "前置内容" + } + }, + "suffix": { + "label": { + "zh_CN": "后置内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "radio", + "name": { + "zh_CN": "单选" + }, + "component": "TinyRadio", + "description": "用于配置不同场景的选项,在一组备选项中进行单选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Radio", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "label", + "label": { + "text": { + "zh_CN": "单选框的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "label": { + "zh_CN": "其他" + }, + "description": { + "zh_CN": "" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "显示边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "单选框的尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "name", + "label": { + "text": { + "zh_CN": "原生 name 属性" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值变化事件" + }, + "description": { + "zh_CN": "绑定值变化时触发的事件" + } + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "select", + "name": { + "zh_CN": "下拉框" + }, + "component": "TinySelect", + "description": "Select 选择器是一种通过点击弹出下拉列表展示数据并进行选择的 UI 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 8, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "searchable", + "label": { + "text": { + "zh_CN": "下拉面板可搜索" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "下拉面板是否可搜索" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "下拉数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "配置 Select 下拉数据项" + }, + "labelPosition": "left" + }, + { + "property": "multiple", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许输入框输入或选择多个项" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "multiple-limit", + "label": { + "text": { + "zh_CN": "最大可选值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "多选时用户最多可以选择的项目数,为 0 则不限制" + }, + "labelPosition": "left" + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "下拉框的类名" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "设置下拉框自定义的类名" + }, + "labelPosition": "left" + }, + { + "property": "collapse-tags", + "label": { + "text": { + "zh_CN": "多选展示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "多选时是否将选中值按文字的形式展示" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在下拉框值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "下拉框选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onRemoveTag": { + "label": { + "zh_CN": "多选模式下移除tag时触发" + }, + "description": { + "zh_CN": "多选模式下移除tag时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "被移除Tag对应数据项的值字段" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "onBeforeMount": "console.log('table on load'); this.options = source.data" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["multiple", "options"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "switch", + "name": { + "zh_CN": "开关" + }, + "component": "TinySwitch", + "description": "Switch 在两种状态间切换选择", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Switch", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 9, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "绑定默认值" + } + }, + { + "property": "true-value", + "label": { + "text": { + "zh_CN": "打开时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "设置打开时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "false-value", + "label": { + "text": { + "zh_CN": "关闭时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "设置关闭时的值(Boolean / String / Number)" + }, + "labelPosition": "left" + }, + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示为 mini 模式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "点击事件" + }, + "description": { + "zh_CN": "按钮被点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "开关的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的开关状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "search", + "name": { + "zh_CN": "搜索框" + }, + "component": "TinySearch", + "description": "指定条件对象进行搜索数据", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Search", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "默认值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "输入框内的默认搜索值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否被禁用" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本 " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "输入框内的提示占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清空按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置显示清空图标按钮" + }, + "labelPosition": "left" + }, + { + "property": "isEnterSearch", + "label": { + "text": { + "zh_CN": "是否Enter键触发search事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在按下键盘Enter键的时候触发search事件" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他配置" + }, + "content": [ + { + "property": "mini", + "label": { + "text": { + "zh_CN": "迷你尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "迷你模式,配置为true时,搜索默认显示为一个带图标的圆形按钮,点击后展开" + }, + "labelPosition": "left" + }, + { + "property": "transparent", + "label": { + "text": { + "zh_CN": "透明模式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "配置为true时,边框变为透明且收缩后半透明显示,一般用在带有背景的场景,默认 false" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "输入完成时触发" + }, + "description": { + "zh_CN": "在 input 框中输入完成时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onSearch": { + "label": { + "zh_CN": "点击搜索按钮时触发" + }, + "description": { + "zh_CN": "展开状态点击搜索按钮时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "搜索类型,默认值为 {} " + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前input框中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["clearable", "mini"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkbox", + "name": { + "zh_CN": "复选框" + }, + "component": "TinyCheckbox", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Checkbox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "复选框的文本" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示边框" + } + }, + { + "property": "false-label", + "label": { + "text": { + "zh_CN": "未选中的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "没有选中时的值" + } + }, + { + "property": "true-label", + "label": { + "text": { + "zh_CN": "选择时的值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "选中时的值" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["border", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxbutton", + "name": { + "zh_CN": "复选按钮" + }, + "component": "TinyCheckboxButton", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxButton", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "checked", + "label": { + "text": { + "zh_CN": "勾选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当前是否勾选" + }, + "labelPosition": "left" + }, + { + "property": "text", + "label": { + "text": { + "zh_CN": "文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "按钮文本" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["text", "size"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "checkboxgroup", + "name": { + "zh_CN": "复选按钮组" + }, + "component": "TinyCheckboxGroup", + "description": "用于配置不同场景的选项,提供用户可在一组选项中进行多选", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CheckboxGroup", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": { + "dataType": "Array" + } + }, + "description": { + "zh_CN": "双向绑定的当前选中值" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "数据列表" + } + }, + "defaultValue": [ + { + "label": "标签2" + }, + { + "label": "标签2" + } + ], + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "checkbox组件列表" + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "button", + "value": "button" + }, + { + "label": "checkbox", + "value": "checkbox" + } + ] + } + }, + "description": { + "zh_CN": "checkbox组件类型(button/checkbox),该属性的默认值为 checkbox,配合 options 属性一起使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "勾选值改变后将触发" + }, + "description": { + "zh_CN": "勾选值改变后将触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "选中项的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "array", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "type"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "dialogbox", + "name": { + "zh_CN": "对话框" + }, + "component": "TinyDialogBox", + "description": "模态对话框,在浮层中显示,引导用户进行相关操作。", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DialogBox", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 4, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "弹出框标题" + }, + "labelPosition": "left" + }, + { + "property": "visible", + "label": { + "text": { + "zh_CN": "显示与隐藏" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "控制弹出框显示与关闭" + }, + "labelPosition": "left" + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "弹出框的宽度" + }, + "labelPosition": "left" + }, + { + "property": "draggable", + "label": { + "text": { + "zh_CN": "可拖拽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否开启弹窗的拖拽功能,默认值为 false 。" + } + }, + { + "property": "center", + "label": { + "text": { + "zh_CN": "居中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "弹出框的头部与底部内容会自动居中" + }, + "labelPosition": "left" + }, + { + "property": "dialog-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "自定义配置弹窗类名" + }, + "labelPosition": "left" + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "插入到 Body " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "DialogBox 本身是否插入到 body 上,嵌套的 Dialog 必须指定该属性并赋值为 true" + }, + "labelPosition": "left" + }, + { + "property": "show-close", + "label": { + "text": { + "zh_CN": "关闭按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示关闭按钮,默认值为 true 。" + } + } + ] + } + ], + "selector": ".TinyDialogBox", + "events": { + "onClose": { + "label": { + "zh_CN": "关闭弹窗时触发" + }, + "description": { + "zh_CN": "Dialog 关闭的回调" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:visible": { + "label": { + "zh_CN": "双向绑定的状态改变时触发" + }, + "description": { + "zh_CN": "显示或隐藏的状态值,发生改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的显示或隐藏的状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + }, + "slots": { + "title": { + "label": { + "zh_CN": "标题区" + }, + "description": { + "zh_CN": "Dialog 标题区的内容" + } + }, + "footer": { + "label": { + "zh_CN": "按钮操作区" + }, + "description": { + "zh_CN": "Dialog 按钮操作区的内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": ".tiny-dialog-box", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabs", + "name": { + "zh_CN": "标签页" + }, + "component": "TinyTabs", + "description": "分隔内容上有关联但属于不同类别的数据集合", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tabs", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 10, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "showEditIcon", + "label": { + "text": { + "zh_CN": "显示编辑ICON " + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示标题后编辑 ICON" + }, + "labelPosition": "left" + }, + { + "property": "tabs", + "label": { + "text": { + "zh_CN": "选项卡" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "", + "cols": 12, + "bindState": false, + "widget": { + "component": "MetaContainer", + "props": {} + }, + "description": { + "zh_CN": "tabs" + }, + "labelPosition": "none" + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "绑定值,选中选项卡的 name" + }, + "labelPosition": "left" + }, + { + "property": "with-add", + "label": { + "text": { + "zh_CN": "可新增" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可增加" + }, + "labelPosition": "left" + }, + { + "property": "with-close", + "label": { + "text": { + "zh_CN": "可关闭" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "标签是否可关闭" + }, + "labelPosition": "left" + }, + { + "property": "tab-style", + "label": { + "text": { + "zh_CN": "标签页样式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "card", + "value": "card" + }, + { + "label": "border-card", + "value": "border-card" + } + ] + } + }, + "description": { + "zh_CN": "标签页样式" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "点击页签时触发事件" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "component", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前点击的页签对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onEdit": { + "label": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "description": { + "zh_CN": "点击新增按钮或关闭按钮或者编辑按钮后触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "tab", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的页签对象" + } + }, + { + "name": "type", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前操作的类型(remove || add || edit)" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "关闭页签时触发" + }, + "description": { + "zh_CN": "关闭页签时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "name", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "页签名称" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyTabItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["size", "tab-style"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tabitem", + "name": { + "zh_CN": "tab页签" + }, + "component": "TinyTabItem", + "description": "tab 标签页", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TabItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一表示" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "唯一表示" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyTab"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["name", "title"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑" + }, + "component": "TinyBreadcrumb", + "description": "告诉访问者他们目前在网站中的位置以及如何返回", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Select", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "separator", + "label": { + "text": { + "zh_CN": "分隔符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "自定义分隔符" + }, + "labelPosition": "left" + }, + { + "property": "options", + "label": { + "text": { + "zh_CN": "options" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "textField", + "label": { + "text": { + "zh_CN": "textField" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + } + } + ] + } + ], + "events": { + "onSelect": { + "label": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "description": { + "zh_CN": "选择 breadcrumb 时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "clickCapture": false, + "isModal": false, + "nestingRule": { + "childWhitelist": ["TinyBreadcrumbItem"], + "parentWhitelist": [], + "descendantBlacklist": [], + "ancestorWhitelist": [] + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["separator"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "breadcrumb", + "name": { + "zh_CN": "面包屑项" + }, + "component": "TinyBreadcrumbItem", + "description": "", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "BreadcrumbItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "to", + "label": { + "text": { + "zh_CN": "路由路径" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "面包屑项" + } + } + ] + } + ], + "slots": { + "default": { + "label": { + "zh_CN": "面包屑项标签" + }, + "description": { + "zh_CN": "面包屑项" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": ["TinyBreadcrumb"], + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["to"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapse", + "name": { + "zh_CN": "折叠面板" + }, + "component": "TinyCollapse", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Collapse", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "当前激活的面板" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "双向绑定当前激活的面板" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "激活面板改变时触发" + }, + "description": { + "zh_CN": "当前激活面板改变时触发(如果是手风琴模式,参数 activeNames 类型为string,否则为array)" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前激活面板的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前激活面板的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "collapseitem", + "name": { + "zh_CN": "折叠面板项" + }, + "component": "TinyCollapseItem", + "description": "内容区可指定动态页面或自定义 html 等,支持展开收起操作", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "CollapseItem", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "name", + "label": { + "text": { + "zh_CN": "唯一标志符" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "唯一标志符;String | Number" + }, + "labelPosition": "left" + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "面板标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "面板标题" + }, + "labelPosition": "left" + } + ] + } + ], + "events": {}, + "slots": { + "title": { + "label": { + "zh_CN": "标题" + }, + "description": { + "zh_CN": "自定义标题" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["label-width", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "grid", + "name": { + "zh_CN": "表格" + }, + "component": "TinyGrid", + "description": "提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Grid", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 2, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础属性" + }, + "description": { + "zh_CN": "基础属性" + }, + "collapse": { + "number": 15, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "data", + "label": { + "text": { + "zh_CN": "表格数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "onChange": "this.delProp('fetchData')", + "description": { + "zh_CN": "设置表格的数据" + } + }, + { + "property": "columns", + "label": { + "text": { + "zh_CN": "表格列" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "properties": [ + { + "label": { + "zh_CN": "默认分组" + }, + "content": [ + { + "property": "title", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列标题" + } + }, + "widget": { + "component": "MetaBindI18n", + "props": {} + } + }, + { + "property": "field", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列键值" + } + }, + "widget": { + "component": "InputConfigurator", + "props": {} + } + }, + { + "property": "sortable", + "type": "boolean", + "defaultValue": true, + "label": { + "text": { + "zh_CN": "是否排序" + } + }, + "widget": { + "component": "MetaSwitch", + "props": {} + } + }, + { + "property": "width", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "列宽" + } + }, + "widget": { + "component": "MetaNumber", + "props": {} + } + }, + { + "property": "formatText", + "type": "string", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "内置渲染器" + } + }, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "整数", + "value": "integer" + }, + { + "label": "小数", + "value": "number" + }, + { + "label": "金额", + "value": "money" + }, + { + "label": "百分比", + "value": "rate" + }, + { + "label": "布尔", + "value": "boole" + }, + { + "label": "年月日", + "value": "date" + }, + { + "label": "年月日时分", + "value": "dateTime" + }, + { + "label": "时间", + "value": "time" + }, + { + "label": "省略", + "value": "ellipsis" + } + ] + } + } + }, + { + "property": "renderer", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSFunction" + } + } + }, + { + "property": "slots", + "type": "object", + "defaultValue": "", + "label": { + "text": { + "zh_CN": "插槽" + } + }, + "labelPosition": "none", + "widget": { + "component": "MetaJsSlot", + "props": { + "slots": ["header", "default"] + } + } + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "列类型" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "索引列", + "value": "index" + }, + { + "label": "单选列", + "value": "radio" + }, + { + "label": "多选列", + "value": "selection" + }, + { + "label": "展开列", + "value": "expand" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)" + }, + "labelPosition": "left" + }, + { + "property": "editor", + "label": { + "text": { + "zh_CN": "编辑配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "单元格编辑渲染配置项,也可以是函数 Function(h, params)" + }, + "labelPosition": "left" + }, + { + "property": "filter", + "label": { + "text": { + "zh_CN": "筛选配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "设置表格列的筛选配置信息。默认值为 false 不配置筛选信息" + } + }, + { + "property": "showOverflow", + "label": { + "text": { + "zh_CN": "内容超出部分省略号配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "只显示省略号", + "value": "ellipsis" + }, + { + "label": "显示为原生 title", + "value": "title" + }, + { + "label": "显示为 tooltip 提示", + "value": "tooltip" + } + ], + "clearable": true + } + }, + "description": { + "zh_CN": "设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)" + }, + "labelPosition": "left" + } + ] + } + ], + "widget": { + "component": "MetaArrayItem", + "props": { + "type": "object", + "textField": "title", + "language": "json", + "buttonText": "编辑列配置", + "title": "编辑列配置", + "expand": true + } + }, + "description": { + "zh_CN": "表格列的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "fetchData", + "label": { + "text": { + "zh_CN": "服务端数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "onChange": "this.delProp('data')", + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "fetchData", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "服务端数据查询方法" + } + }, + { + "property": "pager", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": { + "attrs": { + "currentPage": 1 + } + }, + "widget": { + "component": "MetaCodeEditor", + "props": { + "name": "pager", + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "分页配置" + } + }, + { + "property": "resizable", + "label": { + "text": { + "zh_CN": "调整列宽" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许调整列宽" + }, + "labelPosition": "left" + }, + { + "property": "row-id", + "label": { + "text": { + "zh_CN": "行数据唯一标识的字段名" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": { + "placeholder": "比如:id" + } + }, + "description": { + "zh_CN": "行数据唯一标识的字段名" + }, + "labelPosition": "left" + }, + { + "property": "select-config", + "label": { + "text": { + "zh_CN": "复选框配置" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "dataType": "JSExpression" + } + }, + "description": { + "zh_CN": "表格行数据复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-rules", + "label": { + "text": { + "zh_CN": "校验规则" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格校验规则配置项" + }, + "labelPosition": "left" + }, + { + "property": "edit-config", + "label": { + "text": { + "zh_CN": "编辑配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "表格编辑配置项" + } + }, + { + "property": "expand-config", + "label": { + "text": { + "zh_CN": "复选框配置项" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "复选框配置项" + }, + "labelPosition": "left" + }, + { + "property": "sortable", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + } + ] + }, + { + "label": { + "zh_CN": "其他属性" + }, + "description": { + "zh_CN": "其他属性" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "auto-resize", + "label": { + "text": { + "zh_CN": "可排序" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否允许列数据排序。默认为 true 可排序" + }, + "labelPosition": "left" + }, + { + "property": "border", + "label": { + "text": { + "zh_CN": "边框" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否带有纵向边框" + }, + "labelPosition": "left" + }, + { + "property": "seq-serial", + "label": { + "text": { + "zh_CN": "行号连续" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置行序号是否连续,开启分页时有效,该属性的默认值为 false" + }, + "labelPosition": "left" + }, + { + "property": "highlight-current-row", + "label": { + "text": { + "zh_CN": "高亮当前行" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "高亮当前行" + }, + "labelPosition": "left" + }, + { + "property": "highlight-hover-row", + "label": { + "text": { + "zh_CN": "hover 时候高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "鼠标移到行是否要高亮显示" + }, + "labelPosition": "left" + }, + { + "property": "row-class-name", + "label": { + "text": { + "zh_CN": "hover 高亮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})" + }, + "labelPosition": "left" + }, + { + "property": "max-height", + "label": { + "text": { + "zh_CN": "最大高度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "设置表格内容区域(不含表格头部,底部)的最大高度。" + }, + "labelPosition": "left" + }, + { + "property": "row-span", + "label": { + "text": { + "zh_CN": "行合并" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onFilterChange": { + "label": { + "zh_CN": "筛选条件改变时触发改事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSortChange": { + "label": { + "zh_CN": "点击列头,执行数据排序前触发的事件" + }, + "description": { + "zh_CN": "配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,filters} 包含 table 实例对象和过滤条件的对象" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectAll": { + "label": { + "zh_CN": "当手动勾选全选时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选全选时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 包含 table 实例对象" + } + }, + { + "name": "checked", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "勾选状态" + } + }, + { + "name": "selction", + "type": "Array", + "defaultValue": "", + "description": { + "zh_CN": "选中的表格数据数组" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onSelectChange": { + "label": { + "zh_CN": "手动勾选并且值发生改变时触发的事件" + }, + "description": { + "zh_CN": "只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " table 实例对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onToggleExpandChange": { + "label": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "description": { + "zh_CN": "当行展开或收起时会触发该事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "table", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "{$table,row,rowIndex} 包含 table 实例对象和当前行数据的对象" + } + }, + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": " 原生 Event" + } + } + ], + "returns": {} + }, + "defaultValue": "function onClick(e) {}" + }, + "onCurrentChange": { + "label": { + "zh_CN": "行点击时触发" + }, + "description": { + "zh_CN": "行点击时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + }, + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contentMenu": { + "actions": ["create symbol"] + }, + "onBeforeMount": "console.log('table on load'); this.pager = source.pager; this.fetchData = source.fetchData; this.data = source.data ;this.columns = source.columns" + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["sortable", "columns"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "分页" + }, + "component": "TinyPager", + "icon": "pager", + "description": "当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Pager", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "currentPage", + "label": { + "text": { + "zh_CN": "当前页数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "当前页数,支持 .sync 修饰符" + }, + "labelPosition": "left" + }, + { + "property": "pageSize", + "label": { + "text": { + "zh_CN": "每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "每页显示条目个数" + }, + "labelPosition": "left" + }, + { + "property": "pageSizes", + "label": { + "text": { + "zh_CN": "可选每页条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置可选择的每页显示条数" + } + }, + { + "property": "total", + "label": { + "text": { + "zh_CN": "总条数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "数据总条数" + }, + "labelPosition": "left" + }, + { + "property": "layout", + "label": { + "text": { + "zh_CN": "布局" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "defaultValue": "total,sizes,prev, pager, next", + "widget": { + "component": "InputConfigurator", + "props": { + "type": "textarea" + } + }, + "description": { + "zh_CN": "组件布局,子组件名用逗号分隔" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onCurrentChange ": { + "label": { + "zh_CN": "切换页码时触发" + }, + "description": { + "zh_CN": "切换页码时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前页的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onPrevClick ": { + "label": { + "zh_CN": "点击上一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNextClick": { + "label": { + "zh_CN": "点击下一页按钮时触发" + }, + "description": { + "zh_CN": "点击上一页按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "page", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页的页码值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["currentPage", "total"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "component": "TinyPopeditor", + "icon": "popEditor", + "description": "该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "PopEditor", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 6, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "show-clear-btn", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "是否禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板的宽度(单位像素)" + }, + "labelPosition": "left" + }, + { + "property": "conditions", + "label": { + "text": { + "zh_CN": "过滤条件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "当弹出面板配置的是表格时,设置弹出面板中的过滤条件" + }, + "labelPosition": "left" + }, + { + "property": "grid-op", + "label": { + "text": { + "zh_CN": "表格配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中表格组件的配置信息" + }, + "labelPosition": "left" + }, + { + "property": "pager-op", + "label": { + "text": { + "zh_CN": "分页配置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "设置弹出编辑框中分页配置" + }, + "labelPosition": "left" + }, + { + "property": "multi", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置弹出面板中的数据是否可多选" + }, + "labelPosition": "left" + }, + { + "property": "show-pager", + "label": { + "text": { + "zh_CN": "启用分页" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "当 popseletor 为 grid 时才能生效,配置为 true 后还需配置 pagerOp 属性" + } + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "选中值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前选中项的值" + } + }, + { + "name": "value", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中对象" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "当前选中的值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的当前选中值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClose": { + "label": { + "zh_CN": "弹框关闭时触发的事件" + }, + "description": { + "zh_CN": "弹框关闭时触发的事件" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + }, + "onPageChange": { + "label": { + "zh_CN": "分页切换事件" + }, + "description": { + "zh_CN": "表格模式下分页切换事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "String", + "defaultValue": "", + "description": { + "zh_CN": "当前页码数" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["modelValue", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tree", + "name": { + "zh_CN": "树" + }, + "component": "TinyTree", + "description": "可进行展示有父子层级的数据,支持选择,异步加载等功能。但不推荐用它来展示菜单,展示菜单推荐使用树菜单", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tree", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 12, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 10, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "show-checkbox", + "label": { + "text": { + "zh_CN": "多选" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "设置接口是否可以多选" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据源" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1" + } + ] + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "可配置静态数据源和动态数据源" + } + }, + { + "property": "node-key", + "label": { + "text": { + "zh_CN": "唯一标识" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "节点唯一标识属性名称" + }, + "labelPosition": "left" + }, + { + "property": "render-content", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": { + "disabled": true, + "placeholder": "请使用变量绑定来绑定函数" + } + }, + "description": { + "zh_CN": "树节点的内容区的渲染函数" + } + }, + { + "property": "icon-trigger-click-node", + "label": { + "text": { + "zh_CN": "触发NodeClick 事件" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "点击图标展开节点时是否触发 node-click 事件" + }, + "labelPosition": "left" + }, + { + "property": "expand-icon", + "label": { + "text": { + "zh_CN": "展开图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点展开图标" + }, + "labelPosition": "left" + }, + { + "property": "shrink-icon", + "label": { + "text": { + "zh_CN": "收缩图标" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点收缩的图标" + }, + "labelPosition": "left" + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "check-on-click-node", + "label": { + "text": { + "zh_CN": "点击节点选中" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点" + }, + "labelPosition": "left" + }, + { + "property": "filter-node-method", + "label": { + "text": { + "zh_CN": "筛选函数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "节点筛选函数" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onCheck": { + "label": { + "zh_CN": "勾选节点后的事件" + }, + "description": { + "zh_CN": "勾选节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "currentNode", + "type": "object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onNodeClick": { + "label": { + "zh_CN": "点击节点后的事件" + }, + "description": { + "zh_CN": "点击节点后的事件" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "data", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "当前选中节点信息" + } + }, + { + "name": "node", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件目前的选中状态信息,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性" + } + }, + { + "name": "vm", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "树组件实例" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["data", "show-checkbox"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "timeline", + "name": { + "zh_CN": "时间线" + }, + "component": "TinyTimeLine", + "description": "TimeLine 时间线", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "TimeLine", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 3, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "horizontal", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "水平布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字横向布局" + } + }, + { + "property": "vertical", + "type": "Boolean", + "defaultValue": { + "type": "i18n", + "zh_CN": "垂直布局", + "en_US": "layout", + "key": "" + }, + "label": { + "text": { + "zh_CN": "垂直布局" + } + }, + "cols": 12, + "rules": [], + "hidden": false, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "节点和文字垂直布局" + } + }, + { + "property": "active", + "label": { + "text": { + "zh_CN": "选中值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "步骤条的选中步骤值" + }, + "labelPosition": "left" + }, + { + "property": "data", + "label": { + "text": { + "zh_CN": "数据" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": [ + { + "name": "配置基本信息", + "status": "ready" + }, + { + "name": "配置报价", + "status": "wait" + }, + { + "name": "完成报价", + "status": "wait" + } + ], + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": { + "language": "json" + } + }, + "description": { + "zh_CN": "时间线步骤条数据" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onClick": { + "label": { + "zh_CN": "节点的点击时触发" + }, + "description": { + "zh_CN": "节点的点击时触发的回调函数" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "type", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "点击节点的下标" + } + }, + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "当前节点对象:{ name: 节点名称, time: 时间 }" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": false, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["active", "data"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "tooltip", + "name": { + "zh_CN": "文字提示框" + }, + "component": "TinyTooltip", + "description": "动态显示提示信息,一般通过鼠标事件进行响应;提供 warning、error、info、success 四种类型显示不同类别的信", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Tooltip", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 11, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 20, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "placement", + "label": { + "text": { + "zh_CN": "提示位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "Tooltip 的出现位置" + }, + "labelPosition": "left" + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "defaultValue": "提示信息", + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot#content 传入 DOM" + } + }, + { + "property": "render-content", + "label": { + "text": { + "zh_CN": "渲染函数" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": { + "disabled": true, + "placeholder": "请使用变量绑定来绑定函数" + } + }, + "description": { + "zh_CN": "自定义渲染函数,返回需要渲染的节点内容" + } + }, + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "是否可见" + } + }, + "defaultValue": true, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "状态是否可见" + } + }, + { + "property": "manual", + "label": { + "text": { + "zh_CN": "手动控制" + } + }, + "defaultValue": true, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "手动控制模式,设置为 true 后,mouseenter 和 mouseleave 事件将不会生效" + } + } + ] + } + ], + "events": {}, + "slots": { + "content": { + "label": { + "zh_CN": "提示内容" + }, + "description": { + "zh_CN": "自定义提示内容" + } + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["disabled", "content"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "icon": "popover", + "name": { + "zh_CN": "提示框" + }, + "component": "TinyPopover", + "description": "Popover可通过对一个触发源操作触发弹出框,支持自定义弹出内容,延迟触发和渐变动画", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Popover", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 7, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "双向绑定,手动控制是否可见的状态值" + }, + "labelPosition": "left" + }, + { + "property": "placement", + "label": { + "text": { + "zh_CN": "位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "top", + "value": "top" + }, + { + "label": "top-start", + "value": "top-start" + }, + { + "label": "top-end", + "value": "top-end" + }, + { + "label": "bottom", + "value": "bottom" + }, + { + "label": "bottom-start", + "value": "bottom-start" + }, + { + "label": "bottom-end", + "value": "bottom-end" + }, + { + "label": "left", + "value": "left" + }, + { + "label": "left-start", + "value": "left-start" + }, + { + "label": "left-end", + "value": "left-end" + }, + { + "label": "right", + "value": "right" + }, + { + "label": "right-start", + "value": "right-start" + }, + { + "label": "right-end", + "value": "right-end" + } + ] + } + }, + "description": { + "zh_CN": "" + }, + "labelPosition": "left" + }, + { + "property": "trigger", + "label": { + "text": { + "zh_CN": "触发方式" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "click", + "value": "click" + }, + { + "label": "focus", + "value": "focus" + }, + { + "label": "hover", + "value": "hover" + }, + { + "label": "manual", + "value": "manual" + } + ] + } + }, + "description": { + "zh_CN": "触发方式,该属性的可选值为 click / focus / hover / manual,该属性的默认值为 click" + } + }, + { + "property": "popper-class", + "label": { + "text": { + "zh_CN": "自定义类" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "为 popper 添加类名" + }, + "labelPosition": "left" + }, + { + "property": "visible-arrow", + "label": { + "text": { + "zh_CN": "显示箭头" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示 Tooltip 箭头" + } + }, + { + "property": "append-to-body", + "label": { + "text": { + "zh_CN": "添加到body上" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover弹窗是否添加到body上" + } + }, + { + "property": "arrow-offset", + "label": { + "text": { + "zh_CN": "箭头的位置偏移" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "箭头的位置偏移,该属性的默认值为 0" + } + }, + { + "property": "close-delay", + "label": { + "text": { + "zh_CN": "隐藏延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的隐藏延迟,单位为毫秒" + } + }, + { + "property": "content", + "label": { + "text": { + "zh_CN": "显示的内容" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "显示的内容,也可以通过 slot 传入 DOM" + } + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "Popover 是否可用" + } + }, + { + "property": "offset", + "label": { + "text": { + "zh_CN": "位置偏移量" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "出现位置的偏移量" + } + }, + { + "property": "open-delay", + "label": { + "text": { + "zh_CN": "显示延迟" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "触发方式为 hover 时的显示延迟,单位为毫秒" + } + }, + { + "property": "popper-options", + "label": { + "text": { + "zh_CN": "popper.js的参数" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaCodeEditor", + "props": {} + }, + "description": { + "zh_CN": "popper.js 的参数" + } + }, + { + "property": "title", + "label": { + "text": { + "zh_CN": "标题" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "标题" + } + }, + { + "property": "transform-origin", + "label": { + "text": { + "zh_CN": "旋转中心点" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "组件的旋转中心点,组件的旋转中心点" + } + }, + { + "property": "transition", + "label": { + "text": { + "zh_CN": "定义渐变动画" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "InputConfigurator", + "props": {} + }, + "description": { + "zh_CN": "该属性的默认值为 fade-in-linear" + } + }, + { + "property": "width", + "label": { + "text": { + "zh_CN": "宽度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "宽度" + } + } + ] + } + ], + "events": { + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "手动控制是否可见的状态值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "boolean", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的可见状态值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "isPopper": true, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["visible", "width"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "日期选择" + }, + "component": "TinyDatePicker", + "icon": "datepick", + "description": "用于输入或选择日期", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "DatePicker", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "type", + "label": { + "text": { + "zh_CN": "类型" + } + }, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "日期", + "value": "date" + }, + { + "label": "日期时间", + "value": "datetime" + }, + { + "label": "周", + "value": "week" + }, + { + "label": "月份", + "value": "month" + }, + { + "label": "年份", + "value": "year" + } + ] + } + }, + "description": { + "zh_CN": "设置日期框的type属性" + } + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "clearable", + "label": { + "text": { + "zh_CN": "清除按钮" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否显示清除按钮" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "禁用" + } + }, + { + "property": "readonly", + "label": { + "text": { + "zh_CN": "是否只读" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "日期框尺寸。该属性的可选值为 medium / small / mini" + } + } + ] + }, + { + "name": "1", + "label": { + "zh_CN": "其他" + }, + "content": [ + { + "property": "maxlength", + "label": { + "text": { + "zh_CN": "最大长度" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": {} + }, + "description": { + "zh_CN": "设置 input 框的maxLength" + }, + "labelPosition": "left" + }, + { + "property": "autofocus", + "label": { + "text": { + "zh_CN": "聚焦" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "自动获取焦点" + }, + "labelPosition": "left" + } + ], + "description": { + "zh_CN": "" + } + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + }, + { + "name": { + "zh_CN": "数字输入框" + }, + "component": "TinyNumeric", + "icon": "numeric", + "description": "通过鼠标或键盘输入字符", + "docUrl": "", + "screenshot": "", + "tags": "", + "keywords": "", + "devMode": "proCode", + "npm": { + "package": "@opentiny/vue", + "exportName": "Numeric", + "version": "", + "destructuring": true + }, + "group": "component", + "priority": 1, + "schema": { + "properties": [ + { + "label": { + "zh_CN": "基础信息" + }, + "description": { + "zh_CN": "基础信息" + }, + "collapse": { + "number": 6, + "text": { + "zh_CN": "显示更多" + } + }, + "content": [ + { + "property": "modelValue", + "label": { + "text": { + "zh_CN": "绑定值" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "双向绑定值" + }, + "labelPosition": "left" + }, + { + "property": "placeholder", + "label": { + "text": { + "zh_CN": "占位文本" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaBindI18n", + "props": {} + }, + "description": { + "zh_CN": "输入框占位文本" + }, + "labelPosition": "left" + }, + { + "property": "allow-empty", + "label": { + "text": { + "zh_CN": "内容可清空" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "是否内容可清空" + }, + "labelPosition": "left" + }, + { + "property": "disabled", + "label": { + "text": { + "zh_CN": "禁用" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "禁用" + } + }, + { + "property": "size", + "label": { + "text": { + "zh_CN": "尺寸" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "medium", + "value": "medium" + }, + { + "label": "small", + "value": "small" + }, + { + "label": "mini", + "value": "mini" + } + ] + } + }, + "description": { + "zh_CN": "输入框尺寸。该属性的可选值为 medium / small / mini" + } + }, + { + "property": "controls", + "label": { + "text": { + "zh_CN": "是否使用加减按钮" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaSwitch", + "props": {} + }, + "description": { + "zh_CN": "" + } + }, + { + "property": "controls-position", + "label": { + "text": { + "zh_CN": "加减按钮位置" + } + }, + "required": true, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "SelectConfigurator", + "props": { + "options": [ + { + "label": "左右两侧", + "value": "" + }, + { + "label": "只在右侧", + "value": "right" + } + ] + } + }, + "description": { + "zh_CN": "加减按钮位置" + }, + "labelPosition": "left" + }, + { + "property": "precision", + "label": { + "text": { + "zh_CN": "数值精度" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "数值精度" + }, + "labelPosition": "left" + }, + { + "property": "step", + "label": { + "text": { + "zh_CN": "步长" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "步长" + }, + "labelPosition": "left" + }, + { + "property": "max", + "label": { + "text": { + "zh_CN": "可输入的最大数值" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "可输入的最大数值" + }, + "labelPosition": "left" + }, + { + "property": "min", + "label": { + "text": { + "zh_CN": "可输入的最小数值" + } + }, + "required": false, + "readOnly": false, + "disabled": false, + "cols": 12, + "widget": { + "component": "MetaNumber", + "props": { + "allowEmpty": true + } + }, + "description": { + "zh_CN": "可输入的最大数值" + }, + "labelPosition": "left" + } + ] + } + ], + "events": { + "onChange": { + "label": { + "zh_CN": "值改变时触发" + }, + "description": { + "zh_CN": "在 Input 值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框改变后的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onInput": { + "label": { + "zh_CN": "输入值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "输入框输入的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onUpdate:modelValue": { + "label": { + "zh_CN": "双向绑定的值改变时触发" + }, + "description": { + "zh_CN": "在 Input 输入值改变时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "value", + "type": "string", + "defaultValue": "", + "description": { + "zh_CN": "双向绑定的值" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onBlur": { + "label": { + "zh_CN": "失去焦点时触发" + }, + "description": { + "zh_CN": "在 Input 失去焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onFocus": { + "label": { + "zh_CN": "获取焦点时触发" + }, + "description": { + "zh_CN": "在 Input 获取焦点时触发" + }, + "type": "event", + "functionInfo": { + "params": [ + { + "name": "event", + "type": "Object", + "defaultValue": "", + "description": { + "zh_CN": "原生 event" + } + } + ], + "returns": {} + }, + "defaultValue": "" + }, + "onClear": { + "label": { + "zh_CN": "点击清空按钮时触发" + }, + "description": { + "zh_CN": "点击清空按钮时触发" + }, + "type": "event", + "functionInfo": { + "params": [], + "returns": {} + }, + "defaultValue": "" + } + } + }, + "configure": { + "loop": true, + "condition": true, + "styles": true, + "isContainer": true, + "isModal": false, + "nestingRule": { + "childWhitelist": "", + "parentWhitelist": "", + "descendantBlacklist": "", + "ancestorWhitelist": "" + }, + "isNullNode": false, + "isLayout": false, + "rootSelector": "", + "shortcuts": { + "properties": ["value", "disabled"] + }, + "contextMenu": { + "actions": ["create symbol"], + "disable": ["copy", "remove"] + } + } + } + ], + "blocks": [], + "snippets": [ + { + "group": "element-plus", + "children": [ + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "ElInput", + "schema": {} + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "ElButton", + "schema": { + "children": [ + { + "componentName": "Text", + "props": { + "text": "按钮文本" + } + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "icon": "form", + "screenshot": "", + "snippetName": "ElForm", + "schema": { + "children": [ + { + "componentName": "ElFormItem", + "props": { + "label": "账号", + "prop": "account" + }, + "children": [ + { + "componentName": "ElInput", + "props": { + "modelValue": "", + "placeholder": "请输入账号" + } + } + ] + }, + { + "componentName": "ElFormItem", + "props": { + "label": "密码", + "prop": "password" + }, + "children": [ + { + "componentName": "ElInput", + "props": { + "modelValue": "", + "placeholder": "请输入密码", + "type": "password" + } + } + ] + }, + { + "componentName": "ElFormItem", + "props": {}, + "children": [ + { + "componentName": "ElButton", + "props": { + "type": "primary", + "style": "margin-right: 10px" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "提交" + } + } + ] + }, + { + "componentName": "ElButton", + "props": { + "type": "primary" + }, + "children": [ + { + "componentName": "Text", + "props": { + "text": "重置" + } + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "ElTable", + "schema": { + "props": { + "data": [ + { + "date": "2016-05-03", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-02", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-04", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-01", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + } + ], + "columns": [ + { + "type": "index" + }, + { + "label": "Date", + "prop": "date" + }, + { + "label": "Name", + "prop": "name" + }, + { + "label": "Address", + "prop": "address" + } + ] + } + } + } + ] + }, + { + "group": "html", + "children": [ + { + "name": { + "zh_CN": "段落" + }, + "icon": "paragraph", + "screenshot": "", + "snippetName": "p", + "schema": { + "componentName": "p", + "children": "TinyEngine 前端可视化设计器致力于通过友好的用户交互提升业务应用的开发效率。" + } + }, + { + "name": { + "zh_CN": "链接" + }, + "icon": "link", + "screenshot": "", + "snippetName": "a", + "schema": { + "componentName": "a", + "children": "链接" + } + }, + { + "name": { + "zh_CN": "分隔线" + }, + "icon": "hr", + "screenshot": "", + "snippetName": "hr", + "schema": {} + }, + { + "name": { + "zh_CN": "标题" + }, + "icon": "h16", + "screenshot": "", + "snippetName": "h1", + "schema": { + "componentName": "h1", + "props": {}, + "children": "Heading" + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "input", + "schema": { + "componentName": "input", + "props": { + "type": "text", + "placeholder": "请输入" + } + } + }, + { + "name": { + "zh_CN": "视频" + }, + "icon": "video", + "screenshot": "", + "snippetName": "video", + "schema": { + "componentName": "video", + "props": { + "src": "img/webNova.jpg", + "width": "200", + "height": "100", + "style": "border:1px solid #ccc" + } + } + }, + { + "name": { + "zh_CN": "图片" + }, + "icon": "Image", + "screenshot": "", + "snippetName": "img", + "schema": { + "componentName": "img", + "props": { + "src": "img/webNova.jpg", + "width": "200", + "height": "100" + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "button", + "schema": { + "componentName": "button", + "props": {}, + "children": [ + { + "componentName": "Text", + "props": { + "text": "按钮文案" + } + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "table", + "screenshot": "", + "snippetName": "table", + "schema": { + "componentName": "table", + "props": { + "border": "1" + }, + "children": [ + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": "Month" + }, + { + "componentName": "td", + "children": "Savings" + } + ] + }, + { + "componentName": "tr", + "children": [ + { + "componentName": "td", + "children": "January" + }, + { + "componentName": "td", + "children": "100" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "icon": "form", + "screenshot": "", + "snippetName": "form", + "schema": { + "componentName": "form", + "props": { + "action": "action" + }, + "children": [ + { + "componentName": "label", + "props": { + "for": "male" + }, + "children": "male" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + }, + { + "componentName": "br" + }, + { + "componentName": "label", + "props": { + "for": "Female" + }, + "children": "Female" + }, + { + "componentName": "input", + "props": { + "type": "text" + } + } + ] + } + } + ] + }, + { + "group": "content", + "children": [ + { + "name": { + "zh_CN": "走马灯" + }, + "screenshot": "", + "snippetName": "tiny-carousel", + "icon": "carousel", + "schema": { + "componentName": "TinyCarousel", + "props": { + "height": "180px" + }, + "children": [ + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyCarouselItem", + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表单" + }, + "screenshot": "", + "snippetName": "tiny-form", + "icon": "form", + "schema": { + "componentName": "TinyForm", + "props": { + "labelWidth": "80px", + "labelPosition": "top" + }, + "children": [ + { + "componentName": "TinyFormItem", + "props": { + "label": "人员" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "密码" + }, + "children": [ + { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "", + "type": "password" + } + } + ] + }, + { + "componentName": "TinyFormItem", + "props": { + "label": "" + }, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": "margin-right: 10px" + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "type": "primary" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "下拉框" + }, + "icon": "select", + "screenshot": "", + "snippetName": "TinySelect", + "schema": { + "componentName": "TinySelect", + "props": { + "modelValue": "", + "placeholder": "请选择", + "options": [ + { + "value": "1", + "label": "黄金糕" + }, + { + "value": "2", + "label": "双皮奶" + } + ] + } + } + }, + { + "name": { + "zh_CN": "开关" + }, + "icon": "switch", + "screenshot": "", + "snippetName": "TinySwitch", + "schema": { + "componentName": "TinySwitch", + "props": { + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "复选框组" + }, + "icon": "checkboxs", + "screenshot": "", + "snippetName": "TinyCheckboxGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": ["name1", "name2"], + "type": "checkbox", + "options": [ + { + "text": "复选框1", + "label": "name1" + }, + { + "text": "复选框2", + "label": "name2" + }, + { + "text": "复选框3", + "label": "name3" + } + ] + } + } + }, + { + "name": { + "zh_CN": "复选框拖拽按钮组" + }, + "icon": "checkboxgroup", + "screenshot": "", + "snippetName": "TinyCheckboxbuttonGroup", + "schema": { + "componentName": "TinyCheckboxGroup", + "props": { + "modelValue": [] + }, + "children": [ + { + "componentName": "TinyCheckboxButton", + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "对话框" + }, + "screenshot": "", + "snippetName": "TinyDialogBox", + "icon": "dialogbox", + "schema": { + "componentName": "TinyDialogBox", + "props": { + "visible": true, + "show-close": true, + "title": "dialogBox title" + }, + "children": [ + { + "componentName": "div" + } + ] + } + }, + { + "name": { + "zh_CN": "标签页" + }, + "icon": "tabs", + "screenshot": "", + "group": true, + "snippetName": "TinyTabs", + "schema": { + "componentName": "TinyTabs", + "props": { + "modelValue": "first" + }, + "children": [ + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页1", + "name": "first" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + }, + { + "componentName": "TinyTabItem", + "props": { + "title": "标签页2", + "name": "second" + }, + "children": [ + { + "componentName": "div", + "props": { + "style": "margin:10px 0 0 30px" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "折叠面板" + }, + "screenshot": "", + "snippetName": "TinyCollapse", + "icon": "collapse", + "schema": { + "componentName": "TinyCollapse", + "props": { + "modelValue": "collapse1" + }, + "children": [ + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse1", + "title": "折叠项1" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse2", + "title": "折叠项2" + }, + "children": [ + { + "componentName": "div" + } + ] + }, + { + "componentName": "TinyCollapseItem", + "props": { + "name": "collapse3", + "title": "折叠项3" + }, + "children": [ + { + "componentName": "div" + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "表格" + }, + "icon": "grid", + "screenshot": "", + "snippetName": "tinyGrid", + "schema": { + "componentName": "TinyGrid", + "props": { + "editConfig": { + "trigger": "click", + "mode": "cell", + "showStatus": true + }, + "columns": [ + { + "type": "index", + "width": 60 + }, + { + "type": "selection", + "width": 60 + }, + { + "field": "employees", + "title": "员工数" + }, + { + "field": "created_date", + "title": "创建日期" + }, + { + "field": "city", + "title": "城市" + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司", + "city": "福州", + "employees": 800, + "created_date": "2014-04-30 00:56:00", + "boole": false + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "employees": 300, + "created_date": "2016-07-08 12:36:22", + "boole": true + } + ] + } + } + }, + { + "name": { + "zh_CN": "弹出编辑" + }, + "icon": "popeditor", + "screenshot": "", + "snippetName": "TinyPopeditor", + "schema": { + "componentName": "TinyPopeditor", + "props": { + "modelValue": "", + "placeholder": "请选择", + "gridOp": { + "columns": [ + { + "field": "id", + "title": "ID", + "width": 40 + }, + { + "field": "name", + "title": "名称", + "showOverflow": "tooltip" + }, + { + "field": "province", + "title": "省份", + "width": 80 + }, + { + "field": "city", + "title": "城市", + "width": 80 + } + ], + "data": [ + { + "id": "1", + "name": "GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司", + "city": "福州", + "province": "福建" + }, + { + "id": "2", + "name": "WWW科技有限公司", + "city": "深圳", + "province": "广东" + }, + { + "id": "3", + "name": "RFV有限责任公司", + "city": "中山", + "province": "广东" + }, + { + "id": "4", + "name": "TGB科技有限公司", + "city": "龙岩", + "province": "福建" + }, + { + "id": "5", + "name": "YHN科技有限公司", + "city": "韶关", + "province": "广东" + }, + { + "id": "6", + "name": "WSX科技有限公司", + "city": "黄冈", + "province": "武汉" + } + ] + } + } + } + }, + { + "name": { + "zh_CN": "树" + }, + "icon": "tree", + "screenshot": "", + "snippetName": "TinyTree", + "schema": { + "componentName": "TinyTree", + "props": { + "data": [ + { + "label": "一级 1", + "children": [ + { + "label": "二级 1-1", + "children": [ + { + "label": "三级 1-1-1" + } + ] + } + ] + }, + { + "label": "一级 2", + "children": [ + { + "label": "二级 2-1", + "children": [ + { + "label": "三级 2-1-1" + } + ] + }, + { + "label": "二级 2-2", + "children": [ + { + "label": "三级 2-2-1" + } + ] + } + ] + } + ] + } + } + }, + { + "name": { + "zh_CN": "文字提示框" + }, + "icon": "tooltip", + "screenshot": "", + "snippetName": "TinyTooltip", + "schema": { + "componentName": "TinyTooltip", + "props": { + "content": "Top Left 提示文字", + "placement": "top-start", + "manual": true, + "modelValue": true + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": {} + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "content" + }, + "children": [ + { + "componentName": "span", + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "提示框" + }, + "icon": "popover", + "screenshot": "", + "snippetName": "TinyPopover", + "schema": { + "componentName": "TinyPopover", + "props": { + "width": 200, + "title": "弹框标题", + "trigger": "manual", + "modelValue": true + }, + "children": [ + { + "componentName": "Template", + "props": { + "slot": "reference" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "触发源" + } + } + ] + }, + { + "componentName": "Template", + "props": { + "slot": "default" + }, + "children": [ + { + "componentName": "div", + "props": { + "placeholder": "提示内容" + } + } + ] + } + ] + } + }, + { + "name": { + "zh_CN": "分页" + }, + "icon": "pager", + "screenshot": "", + "snippetName": "TinyPager", + "schema": { + "componentName": "TinyPager", + "props": { + "layout": "total, sizes, prev, pager, next", + "total": 100, + "pageSize": 10, + "currentPage": 1 + } + } + }, + { + "name": { + "zh_CN": "面包屑" + }, + "icon": "breadcrumb", + "screenshot": "", + "snippetName": "TinyBreadcrumb", + "schema": { + "componentName": "TinyBreadcrumb", + "props": { + "options": [ + { + "to": "{ path: '/' }", + "label": "首页" + }, + { + "to": "{ path: '/breadcrumb' }", + "label": "产品" + }, + { + "replace": "true", + "label": "软件" + } + ] + } + } + }, + { + "name": { + "zh_CN": "日期选择" + }, + "icon": "datepick", + "screenshot": "", + "snippetName": "TinyDatePicker", + "schema": { + "componentName": "TinyDatePicker", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "数字输入框" + }, + "icon": "numeric", + "screenshot": "", + "snippetName": "TinyNumeric", + "schema": { + "componentName": "TinyNumeric", + "props": { + "allow-empty": true, + "placeholder": "请输入", + "controlsPosition": "right", + "step": 1 + } + } + } + ] + }, + { + "group": "general", + "children": [ + { + "name": { + "zh_CN": "Row" + }, + "icon": "row", + "screenshot": "", + "snippetName": "TinyRow", + "schema": { + "componentName": "TinyRow", + "props": {}, + "children": [ + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + }, + { + "componentName": "TinyCol", + "props": { + "span": 3 + } + } + ] + } + }, + { + "name": { + "zh_CN": "Col" + }, + "icon": "col", + "screenshot": "", + "snippetName": "TinyCol", + "schema": { + "componentName": "TinyCol", + "props": { + "span": 12, + "style": { + "height": "30px", + "border": "1px solid #ccc" + } + } + } + }, + { + "name": { + "zh_CN": "按钮" + }, + "icon": "button", + "screenshot": "", + "snippetName": "TinyButton", + "schema": { + "componentName": "TinyButton", + "props": { + "text": "按钮文案" + } + } + }, + { + "name": { + "zh_CN": "按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtons", + "screenshot": "", + "schema": { + "componentName": "div", + "props": {}, + "children": [ + { + "componentName": "TinyButton", + "props": { + "text": "提交", + "type": "primary", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "重置", + "style": { + "margin": "0 5px 0 5px" + } + } + }, + { + "componentName": "TinyButton", + "props": { + "text": "取消" + } + } + ] + }, + "configure": { + "isContainer": true + } + }, + { + "name": { + "zh_CN": "互斥按钮组" + }, + "icon": "buttons", + "snippetName": "TinyButtonGroup", + "screenshot": "", + "schema": { + "componentName": "TinyButtonGroup", + "props": { + "data": [ + { + "text": "Button1", + "value": "1" + }, + { + "text": "Button2", + "value": "2" + }, + { + "text": "Button3", + "value": "3" + } + ], + "modelValue": "1" + } + } + }, + { + "name": { + "zh_CN": "输入框" + }, + "icon": "input", + "screenshot": "", + "snippetName": "TinyInput", + "schema": { + "componentName": "TinyInput", + "props": { + "placeholder": "请输入", + "modelValue": "" + } + } + }, + { + "name": { + "zh_CN": "单选" + }, + "icon": "radio", + "screenshot": "", + "snippetName": "TinyRadio", + "schema": { + "componentName": "TinyRadio", + "props": { + "label": "1", + "text": "单选文本" + } + } + }, + { + "name": { + "zh_CN": "复选框" + }, + "icon": "checkbox", + "screenshot": "", + "snippetName": "TinyCheckbox", + "schema": { + "componentName": "TinyCheckbox", + "props": { + "text": "复选框文案" + } + } + } + ] + }, + { + "group": "navigation", + "children": [ + { + "name": { + "zh_CN": "搜索框" + }, + "icon": "search", + "screenshot": "", + "snippetName": "TinySearch", + "schema": { + "componentName": "TinySearch", + "props": { + "modelValue": "", + "placeholder": "输入关键词" + } + } + }, + { + "name": { + "zh_CN": "时间线" + }, + "icon": "timeline", + "screenshot": "", + "snippetName": "TinyTimeLine", + "schema": { + "componentName": "TinyTimeLine", + "props": { + "active": "2", + "data": [ + { + "name": "已下单" + }, + { + "name": "运输中" + }, + { + "name": "已签收" + } + ] + } + } + } + ] + } + ] + } + } +} diff --git a/packages/engine-cli/template/designer/registry.js b/packages/engine-cli/template/designer/registry.js new file mode 100644 index 0000000000..0a162218f2 --- /dev/null +++ b/packages/engine-cli/template/designer/registry.js @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2024 - present TinyEngine Authors. + * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { + Breadcrumb, + Fullscreen, + Lang, + Checkinout, + Logo, + Media, + Redoundo, + Save, + Clean, + Preview, + GenerateVue, + Refresh, + Collaboration, + Setting, + Materials, + Data, + Script, + Tree, + Help, + Schema, + Page, + I18n, + Bridge, + Block, + Datasource, + Robot, + Props, + Events, + Styles, +} from '@opentiny/tiny-engine' + +export default { + config: { + id: 'engine.config', + theme: import.meta.env.VITE_THEME || 'light', + material: ['/mock/bundle.json'], + scripts: [], + styles: [] + }, + layout: { id: 'engine.layout' }, + themes: [ + { + id: 'engine.theme.light' + }, + { + id: 'engine.theme.dark' + } + ], + toolbars: [ + Logo, + Breadcrumb, + Media, + Collaboration, + Clean, + Refresh, + Save, + GenerateVue, + Preview, + Redoundo, + Fullscreen, + Checkinout, + Setting, + Lang + ], + plugins: [ + Materials, + Tree, + Page, + Block, + Datasource, + Bridge, + I18n, + Script, + Data, + Schema, + Help, + Robot + ], + dsls: [{ id: 'engine.dsls.dslvue' }], + settings: [ + Props, + Styles, + Events + ], + canvas: {} +} diff --git a/packages/engine-cli/template/src/main.js b/packages/engine-cli/template/designer/src/canvas.js similarity index 60% rename from packages/engine-cli/template/src/main.js rename to packages/engine-cli/template/designer/src/canvas.js index ac35c0ac72..fc3fb5f5cf 100644 --- a/packages/engine-cli/template/src/main.js +++ b/packages/engine-cli/template/designer/src/canvas.js @@ -1,6 +1,6 @@ /** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. * * Use of this source code is governed by an MIT-style license. * @@ -10,8 +10,6 @@ * */ -import './defineEntry.js' -import { createApp } from 'vue' -import App from './App.vue' +import { createRender } from '@opentiny/tiny-engine/canvas' -createApp(App).mount('#app') +createRender(window.parent.TinyGlobalConfig) diff --git a/packages/engine-cli/template/designer/src/configurators/MyInputConfigurator.vue b/packages/engine-cli/template/designer/src/configurators/MyInputConfigurator.vue new file mode 100644 index 0000000000..47a9b11e53 --- /dev/null +++ b/packages/engine-cli/template/designer/src/configurators/MyInputConfigurator.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/packages/engine-cli/template/designer/src/configurators/index.js b/packages/engine-cli/template/designer/src/configurators/index.js new file mode 100644 index 0000000000..3f76596d75 --- /dev/null +++ b/packages/engine-cli/template/designer/src/configurators/index.js @@ -0,0 +1,11 @@ +import { InputConfigurator, SelectConfigurator } from '@opentiny/tiny-engine-configurator' +import MyInputConfigurator from './MyInputConfigurator.vue' + +export const configurators = [ + { + name: 'MyInputConfigurator', + component: MyInputConfigurator + }, + InputConfigurator, + SelectConfigurator +] diff --git a/packages/engine-cli/template/src/defineEntry.js b/packages/engine-cli/template/designer/src/defineEntry.js similarity index 77% rename from packages/engine-cli/template/src/defineEntry.js rename to packages/engine-cli/template/designer/src/defineEntry.js index 2d7ea2064e..80637321d4 100644 --- a/packages/engine-cli/template/src/defineEntry.js +++ b/packages/engine-cli/template/designer/src/defineEntry.js @@ -1,6 +1,6 @@ /** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. * * Use of this source code is governed by an MIT-style license. * @@ -12,4 +12,7 @@ import registry from '../registry.js' import { defineEntry } from '@opentiny/tiny-engine-entry' + defineEntry(registry) + +export { registry } diff --git a/packages/engine-cli/template/designer/src/main.js b/packages/engine-cli/template/designer/src/main.js new file mode 100644 index 0000000000..aefabf5e5b --- /dev/null +++ b/packages/engine-cli/template/designer/src/main.js @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +// 导入@opentiny/tiny-engine时,内部的依赖包也会逐个导入,可能会执行useComplie,此时需要templateHashMap。所以需要先执行一次defineEntry +import { registry } from './defineEntry.js' +import { init } from '@opentiny/tiny-engine' +import { initHook, HOOK_NAME } from '@opentiny/tiny-engine-entry' +import { configurators } from './configurators/' +import 'virtual:svg-icons-register' +import '@opentiny/tiny-engine-theme' + +const beforeAppCreate = () => { + initHook(HOOK_NAME.useEnv, import.meta.env) +} + +init({ registry, configurators, lifeCycles: { beforeAppCreate } }) diff --git a/packages/engine-cli/template/engine.config.js b/packages/engine-cli/template/designer/src/preview.js similarity index 51% rename from packages/engine-cli/template/engine.config.js rename to packages/engine-cli/template/designer/src/preview.js index 4e77b7662e..d47a8bdb6a 100644 --- a/packages/engine-cli/template/engine.config.js +++ b/packages/engine-cli/template/designer/src/preview.js @@ -1,6 +1,6 @@ /** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. * * Use of this source code is governed by an MIT-style license. * @@ -10,10 +10,6 @@ * */ -import defaultConfig from '@opentiny/tiny-engine/vite.config.js' -import { defineConfig } from 'vite' +import { initPreview } from '@opentiny/tiny-engine' -export default { - viteConfig: defaultConfig(({ command }) => defineConfig({ command, mode: 'serve' })), - otherConfig: {} -} +initPreview({ registry: { config: { id : 'engine.config', theme: 'light' } } }) diff --git a/packages/engine-cli/template/designer/vite.config.js b/packages/engine-cli/template/designer/vite.config.js new file mode 100644 index 0000000000..746aa432c3 --- /dev/null +++ b/packages/engine-cli/template/designer/vite.config.js @@ -0,0 +1,22 @@ +import path from 'node:path' +import { defineConfig, mergeConfig, loadEnv } from 'vite' +import { getDefaultConfig } from '@opentiny/tiny-engine-vite-config' + +export default defineConfig((options) => { + const envDir = path.resolve(process.cwd(), 'env') + const extOptions = { + ...loadEnv(options.mode, envDir, 'VITE_'), + iconDirs: [path.resolve(__dirname, './node_modules/@opentiny/tiny-engine/assets/')] + } + const defaultConfig = getDefaultConfig(options, extOptions) + + const config = { + envDir, + publicDir: path.resolve(__dirname, './public'), + server: { + port: 8090 + } + } + + return mergeConfig(defaultConfig, config) +}) diff --git a/packages/engine-cli/template/package.json b/packages/engine-cli/template/package.json deleted file mode 100644 index 732e81cdb8..0000000000 --- a/packages/engine-cli/template/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "engine-cli-demo", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "engine-cli serve", - "build": "engine-cli build" - }, - "dependencies": { - "vue": "^3.4.21", - "@opentiny/tiny-engine": "workspace:^", - "@opentiny/tiny-engine-entry": "workspace:^", - "@opentiny/tiny-engine-canvas": "workspace:^" - }, - "devDependencies": { - "@vitejs/plugin-vue": "^5.0.4", - "vite": "^5.2.7", - "@opentiny/tiny-engine-cli": "workspace:^", - "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:^" - } -} diff --git a/packages/engine-cli/template/plugin/.gitkeep b/packages/engine-cli/template/plugin/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/engine-cli/template/registry.js b/packages/engine-cli/template/registry.js deleted file mode 100644 index e314185468..0000000000 --- a/packages/engine-cli/template/registry.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (c) 2024 - present TinyEngine Authors. - * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -export default { - layout: { id: 'engine.layout' }, - toolbars: [ - { - id: 'engine.toolbars.logo' - }, - { - id: 'engine.toolbars.breadcrumb' - }, - { - id: 'engine.toolbars.media' - }, - { - id: 'engine.toolbars.collaboration' - }, - { - id: 'engine.toolbars.clean' - }, - { - id: 'engine.toolbars.refresh' - }, - { - id: 'engine.toolbars.save' - }, - { - id: 'engine.toolbars.generate-vue' - }, - { - id: 'engine.toolbars.preview' - }, - { - id: 'engine.toolbars.redoundo' - }, - { - id: 'engine.toolbars.fullscreen' - }, - { - id: 'engine.toolbars.lock' - }, - { - id: 'engine.toolbars.setting' - }, - { - id: 'engine.toolbars.lang' - } - ], - plugins: [ - { - id: 'engine.plugins.materials' - }, - { - id: 'engine.plugins.outlinetree' - }, - { - id: 'engine.plugins.appmanage' - }, - { - id: 'engine.plugins.blockmanage' - }, - { - id: 'engine.plugins.collections' - }, - { - id: 'engine.plugins.bridge' - }, - { - id: 'engine.plugins.i18n' - }, - { - id: 'engine.plugins.pagecontroller' - }, - { - id: 'engine.plugins.state' - }, - { - id: 'engine.plugins.schema' - }, - { - id: 'engine.plugins.editorhelp' - }, - { - id: 'engine.plugins.robot' - } - ], - dsls: [{ id: 'engine.dsls.dslvue' }], - settings: [ - { - id: 'engine.setting.props' - }, - { - id: 'engine.setting.styles' - }, - { - id: 'engine.setting.event' - } - ], - canvas: {}, - utils: { id: 'engine.utils' } -} diff --git a/packages/engine-cli/template/src/App.vue b/packages/engine-cli/template/src/App.vue deleted file mode 100644 index a4fa20ff4e..0000000000 --- a/packages/engine-cli/template/src/App.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/packages/engine-cli/template/src/canvas.js b/packages/engine-cli/template/src/canvas.js deleted file mode 100644 index 118254a0d3..0000000000 --- a/packages/engine-cli/template/src/canvas.js +++ /dev/null @@ -1,3 +0,0 @@ -import { createRender } from '@opentiny/tiny-engine-canvas' - -createRender(window.parent.TinyGlobalConfig) From acab38cf7902270d81c78a297bb720f5b30effbc Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:40:58 -0700 Subject: [PATCH 216/322] fix: userinfo change to ref value (#574) * fix: userinfo change to ref value * fix: change by review comment --- packages/controller/js/canvas.js | 4 ++-- packages/controller/src/hooks/useBlock.js | 2 +- packages/controller/src/hooks/useEditorInfo.js | 7 ++++--- packages/plugins/block/src/BlockConfig.vue | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/controller/js/canvas.js b/packages/controller/js/canvas.js index 3e44935ed3..4c62adfebe 100644 --- a/packages/controller/js/canvas.js +++ b/packages/controller/js/canvas.js @@ -16,7 +16,7 @@ import { useEditorInfo, useResource } from '@opentiny/tiny-engine-entry' export const getCanvasStatus = (data) => { // 写死ID 待删除 let isDemo = useResource().resState.isDemo - const { resetPasswordToken } = useEditorInfo().userInfo + const { resetPasswordToken } = useEditorInfo().userInfo.value if (isDemo && [PAGE_STATUS.Developer, PAGE_STATUS.SuperAdmin].includes(resetPasswordToken)) { isDemo = false @@ -29,7 +29,7 @@ export const getCanvasStatus = (data) => { } else if (!data) { state = PAGE_STATUS.Release } else { - state = useEditorInfo().userInfo.id === data.id ? PAGE_STATUS.Occupy : PAGE_STATUS.Lock + state = useEditorInfo().userInfo.value.id === data.id ? PAGE_STATUS.Occupy : PAGE_STATUS.Lock } return { diff --git a/packages/controller/src/hooks/useBlock.js b/packages/controller/src/hooks/useBlock.js index b8991bd1ed..2c2553f895 100644 --- a/packages/controller/src/hooks/useBlock.js +++ b/packages/controller/src/hooks/useBlock.js @@ -290,7 +290,7 @@ const initBlock = async (block = {}, _langs = {}, isEdit) => { // 如果是点击区块管理列表进来的则不需要执行以下操作 if (!isEdit) { // 非编辑状态即为新增,新增默认锁定画布 - block.occupier = useEditorInfo().userInfo + block.occupier = useEditorInfo().userInfo.value useLayout().layoutState.pageStatus = getCanvasStatus(block.occupier) addBlock(block) setSaved(false) diff --git a/packages/controller/src/hooks/useEditorInfo.js b/packages/controller/src/hooks/useEditorInfo.js index 751a835841..5a856bf203 100644 --- a/packages/controller/src/hooks/useEditorInfo.js +++ b/packages/controller/src/hooks/useEditorInfo.js @@ -10,6 +10,7 @@ * */ +import { ref } from 'vue' import { useHttp } from '@opentiny/tiny-engine-http' import useModal from '../components/useModal' import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' @@ -32,14 +33,14 @@ const _getWebData = () => { } } -let userInfo = {} +const userInfo = ref({}) const getUserInfo = () => { // 获取登录用户信息 useHttp() .get('/platform-center/api/user/me') .then((data) => { if (data) { - userInfo = data + userInfo.value = data } }) .catch((error) => { @@ -47,7 +48,7 @@ const getUserInfo = () => { }) } -const isAdmin = () => userInfo.resetPasswordToken === 'p_webcenter' +const isAdmin = () => userInfo.value.resetPasswordToken === 'p_webcenter' /** * 1、是否是VSCode插件: 通过是否有全局变量window.vscodeBridge判断 * diff --git a/packages/plugins/block/src/BlockConfig.vue b/packages/plugins/block/src/BlockConfig.vue index 71fc59c971..de0da320ae 100644 --- a/packages/plugins/block/src/BlockConfig.vue +++ b/packages/plugins/block/src/BlockConfig.vue @@ -127,7 +127,7 @@ export default { const state = reactive({ inputVisible: false, inputValue: '', - publicOptions: useEditorInfo().userInfo.tenants + publicOptions: useEditorInfo().userInfo.value.tenants }) const groupSelect = ref(null) From 050d1d60af04789aa40f03e911e073b3a41f2f1f Mon Sep 17 00:00:00 2001 From: rhlin Date: Thu, 13 Jun 2024 05:34:06 -0700 Subject: [PATCH 217/322] =?UTF-8?q?refactor:=20canvas=20=E5=85=83=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=94=B9=E9=80=A01=20(#576)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(canvas): canvas抽取两个元应用 * fix: 修复canvas导出名字不一致 * feat: canvas元应用抽取初步改造 --- .eslintignore | 2 +- designer-demo/registry.js | 7 +- designer-demo/vite.config.js | 2 +- .../src/test/code/output.js | 1097 +++++++++-------- .../src/transform.js | 1 + packages/canvas/breadcrumb/index.js | 6 + packages/canvas/breadcrumb/meta.js | 3 + .../src}/CanvasFooter.vue | 1 + packages/canvas/canvas.html | 2 +- packages/canvas/common/index.js | 2 + packages/canvas/common/src/constant.js | 3 + .../common/index.js => common/src/utils.js} | 63 - packages/canvas/container/index.js | 8 + packages/canvas/container/meta.js | 3 + .../src}/CanvasContainer.vue | 12 +- packages/canvas/container/src/api/index.js | 2 + .../container/src/api}/useCanvas.js | 0 .../src/components}/CanvasAction.vue | 2 +- .../src/components}/CanvasDivider.vue | 2 +- .../src/components}/CanvasMenu.vue | 2 +- .../src/components}/CanvasResize.vue | 2 +- .../src/components}/CanvasResizeBorder.vue | 2 +- .../src/components}/shortCutPopover.vue | 0 .../container => container/src}/container.js | 4 +- .../container => container/src}/keyboard.js | 3 +- packages/canvas/container/src/utils.js | 58 + packages/canvas/drag-drop/index.js | 1 + .../src}/CanvasDragItem.vue | 7 +- packages/canvas/index.html | 2 +- packages/canvas/{src => }/index.js | 12 +- packages/canvas/public/favicon.ico | Bin 4286 -> 0 bytes packages/canvas/render/index.js | 1 + .../render => render/src}/CanvasEmpty.vue | 0 .../render => render/src}/RenderMain.js | 0 .../src}/builtin/CanvasBox.vue | 0 .../src}/builtin/CanvasCollection.js | 8 +- .../src}/builtin/CanvasCollection.vue | 4 +- .../src}/builtin/CanvasIcon.vue | 0 .../src}/builtin/CanvasImg.vue | 0 .../src}/builtin/CanvasPlaceholder.vue | 0 .../src}/builtin/CanvasSlot.vue | 0 .../src}/builtin/CanvasText.vue | 0 .../src}/builtin/builtin.json | 0 .../src}/builtin/helper.js | 20 +- .../src}/builtin/index.js | 0 .../render => render/src}/context.js | 0 packages/canvas/{ => render}/src/lowcode.js | 24 +- .../render => render/src}/render.js | 5 +- .../render => render/src}/runner.js | 4 +- packages/canvas/src/assets/logo.png | Bin 6849 -> 0 bytes .../src/components/builtin/CanvasCol.vue | 89 -- .../src/components/builtin/CanvasRow.vue | 67 - .../builtin/CanvasRowColContainer.vue | 42 - packages/canvas/src/locale.js | 19 - packages/canvas/src/main.js | 17 - packages/canvas/{ => test}/src/Design.vue | 0 packages/canvas/{ => test}/src/canvas.js | 2 +- packages/canvas/{ => test}/src/i18n.js | 2 +- packages/canvas/{ => test}/src/i18n/en.json | 0 packages/canvas/{ => test}/src/i18n/zh.json | 0 packages/canvas/test/src/locale.js | 19 + packages/canvas/test/src/main.js | 17 + packages/canvas/vite.config.js | 2 +- packages/controller/src/hooks/mountHooks.js | 1 - .../controller/src/hooks/useBreadcrumb.js | 20 +- packages/controller/src/hooks/useHistory.js | 1 - packages/design-core/index.js | 1 + packages/design-core/registry.js | 2 +- .../design-core/src/layout/DesignCanvas.vue | 19 +- .../design-core/src/preview/src/Toolbar.vue | 4 +- 70 files changed, 781 insertions(+), 920 deletions(-) create mode 100644 packages/canvas/breadcrumb/index.js create mode 100644 packages/canvas/breadcrumb/meta.js rename packages/canvas/{src/components/container => breadcrumb/src}/CanvasFooter.vue (93%) create mode 100644 packages/canvas/common/index.js create mode 100644 packages/canvas/common/src/constant.js rename packages/canvas/{src/components/common/index.js => common/src/utils.js} (61%) create mode 100644 packages/canvas/container/index.js create mode 100644 packages/canvas/container/meta.js rename packages/canvas/{src/components/container => container/src}/CanvasContainer.vue (95%) create mode 100644 packages/canvas/container/src/api/index.js rename packages/{controller/src/hooks => canvas/container/src/api}/useCanvas.js (100%) rename packages/canvas/{src/components/container => container/src/components}/CanvasAction.vue (99%) rename packages/canvas/{src/components/container => container/src/components}/CanvasDivider.vue (99%) rename packages/canvas/{src/components/container => container/src/components}/CanvasMenu.vue (99%) rename packages/canvas/{src/components/container => container/src/components}/CanvasResize.vue (99%) rename packages/canvas/{src/components/container => container/src/components}/CanvasResizeBorder.vue (99%) rename packages/canvas/{src/components/container => container/src/components}/shortCutPopover.vue (100%) rename packages/canvas/{src/components/container => container/src}/container.js (99%) rename packages/canvas/{src/components/container => container/src}/keyboard.js (97%) create mode 100644 packages/canvas/container/src/utils.js create mode 100644 packages/canvas/drag-drop/index.js rename packages/canvas/{src/components/container => drag-drop/src}/CanvasDragItem.vue (80%) rename packages/canvas/{src => }/index.js (56%) delete mode 100644 packages/canvas/public/favicon.ico create mode 100644 packages/canvas/render/index.js rename packages/canvas/{src/components/render => render/src}/CanvasEmpty.vue (100%) rename packages/canvas/{src/components/render => render/src}/RenderMain.js (100%) rename packages/canvas/{src/components => render/src}/builtin/CanvasBox.vue (100%) rename packages/canvas/{src/components => render/src}/builtin/CanvasCollection.js (97%) rename packages/canvas/{src/components => render/src}/builtin/CanvasCollection.vue (96%) rename packages/canvas/{src/components => render/src}/builtin/CanvasIcon.vue (100%) rename packages/canvas/{src/components => render/src}/builtin/CanvasImg.vue (100%) rename packages/canvas/{src/components => render/src}/builtin/CanvasPlaceholder.vue (100%) rename packages/canvas/{src/components => render/src}/builtin/CanvasSlot.vue (100%) rename packages/canvas/{src/components => render/src}/builtin/CanvasText.vue (100%) rename packages/canvas/{src/components => render/src}/builtin/builtin.json (100%) rename packages/canvas/{src/components => render/src}/builtin/helper.js (59%) rename packages/canvas/{src/components => render/src}/builtin/index.js (100%) rename packages/canvas/{src/components/render => render/src}/context.js (100%) rename packages/canvas/{ => render}/src/lowcode.js (83%) rename packages/canvas/{src/components/render => render/src}/render.js (99%) rename packages/canvas/{src/components/render => render/src}/runner.js (98%) delete mode 100644 packages/canvas/src/assets/logo.png delete mode 100644 packages/canvas/src/components/builtin/CanvasCol.vue delete mode 100644 packages/canvas/src/components/builtin/CanvasRow.vue delete mode 100644 packages/canvas/src/components/builtin/CanvasRowColContainer.vue delete mode 100644 packages/canvas/src/locale.js delete mode 100644 packages/canvas/src/main.js rename packages/canvas/{ => test}/src/Design.vue (100%) rename packages/canvas/{ => test}/src/canvas.js (95%) rename packages/canvas/{ => test}/src/i18n.js (93%) rename packages/canvas/{ => test}/src/i18n/en.json (100%) rename packages/canvas/{ => test}/src/i18n/zh.json (100%) create mode 100644 packages/canvas/test/src/locale.js create mode 100644 packages/canvas/test/src/main.js diff --git a/.eslintignore b/.eslintignore index 3175ee692d..b06ec3c3f3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,4 +7,4 @@ tmp temp mockServer packages/vue-generator/**/output/** -packages/build/vite-plugin-generate-comments/src/test/code/** +packages/build/vite-plugin-meta-comments/src/test/code/** diff --git a/designer-demo/registry.js b/designer-demo/registry.js index 0a162218f2..3955f4b5d1 100644 --- a/designer-demo/registry.js +++ b/designer-demo/registry.js @@ -40,6 +40,8 @@ import { Props, Events, Styles, + CanvasBreadcrumb, + CanvasContainer } from '@opentiny/tiny-engine' export default { @@ -95,5 +97,8 @@ export default { Styles, Events ], - canvas: {} + canvas: [ + CanvasContainer, + CanvasBreadcrumb + ] } diff --git a/designer-demo/vite.config.js b/designer-demo/vite.config.js index cf8447e49e..480389c387 100644 --- a/designer-demo/vite.config.js +++ b/designer-demo/vite.config.js @@ -56,7 +56,7 @@ export default defineConfig((options) => { '@opentiny/tiny-engine-theme-light': path.resolve(__dirname, '../packages/theme/light/index.less'), '@opentiny/tiny-engine-svgs': path.resolve(__dirname, '../packages/svgs/index.js'), '@opentiny/tiny-engine-http': path.resolve(__dirname, '../packages/http/src/index.js'), - '@opentiny/tiny-engine-canvas': path.resolve(__dirname, '../packages/canvas/src/index.js'), + '@opentiny/tiny-engine-canvas': path.resolve(__dirname, '../packages/canvas/index.js'), '@opentiny/tiny-engine-utils': path.resolve(__dirname, '../packages/utils/src/index.js'), '@opentiny/tiny-engine-webcomponent-core': path.resolve(__dirname, '../packages/webcomponent/src/lib.js'), '@opentiny/tiny-engine-i18n-host': path.resolve(__dirname, '../packages/i18n/src/lib.js'), diff --git a/packages/build/vite-plugin-meta-comments/src/test/code/output.js b/packages/build/vite-plugin-meta-comments/src/test/code/output.js index eee7ebb6fe..5ac0914ebb 100644 --- a/packages/build/vite-plugin-meta-comments/src/test/code/output.js +++ b/packages/build/vite-plugin-meta-comments/src/test/code/output.js @@ -1,500 +1,572 @@ -import { callEntry as _callEntry, beforeCallEntry as _beforeCallEntry, afterCallEntry as _afterCallEntry, useCompile as _useCompile } from '@opentiny/tiny-engine-entry'; -import _metaData from '../meta.js'; +import { + callEntry as _callEntry, + beforeCallEntry as _beforeCallEntry, + afterCallEntry as _afterCallEntry, + useCompile as _useCompile +} from '@opentiny/tiny-engine-entry' +import _metaData from '../meta.js' /* metaService */ -import { reactive, onMounted, onBeforeMount as beforeMount } from 'vue'; -import { deepCopy } from 'loash-es'; -export const useRenderless = _callEntry(({ - props -}) => { - const state = reactive({ - tableData: props.data || props.op.data || [] - }); - onMounted(_callEntry(() => {}, { - metaData: { - id: `${_metaData.id}.onMounted[0]` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; +import { reactive, onMounted, onBeforeMount as beforeMount } from 'vue' +import { deepCopy } from 'loash-es' +export const useRenderless = _callEntry( + ({ props }) => { + const state = reactive({ + tableData: props.data || props.op.data || [] + }) + onMounted( + _callEntry(() => {}, { + metaData: { + id: `${_metaData.id}.onMounted[0]` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars + } + }) + ) + onMounted( + _callEntry(() => {}, { + metaData: { + id: `${_metaData.id}.onMounted[1]` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars + } + }) + ) + onMounted( + _callEntry(() => {}, { + metaData: { + id: `${_metaData.id}.onMounted[2]` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars + } + }) + ) + beforeMount( + _callEntry(() => {}, { + metaData: { + id: `${_metaData.id}.onBeforeMount[0]` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars + } + }) + ) + _beforeCallEntry({ + metaData: { + id: `${_metaData.id}.logMessage` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars } - return asyncVars; - } - })); - onMounted(_callEntry(() => {}, { - metaData: { - id: `${_metaData.id}.onMounted[1]` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + }) + const logMessage = _callEntry( + () => { + console.log('我是纯函数我不需要闭包参数') + }, + { + metaData: { + id: `${_metaData.id}.logMessage` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars + } } - return asyncVars; - } - })); - onMounted(_callEntry(() => {}, { - metaData: { - id: `${_metaData.id}.onMounted[2]` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + ) + _afterCallEntry({ + metaData: { + id: `${_metaData.id}.logMessage` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars } - return asyncVars; - } - })); - beforeMount(_callEntry(() => {}, { - metaData: { - id: `${_metaData.id}.onBeforeMount[0]` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } - return asyncVars; - } - })); - _beforeCallEntry({ - metaData: { - id: `${_metaData.id}.logMessage` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } - return asyncVars; - } - }); - const logMessage = _callEntry(() => { - console.log('我是纯函数我不需要闭包参数'); - }, { - metaData: { - id: `${_metaData.id}.logMessage` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } - return asyncVars; - } - }); - _afterCallEntry({ - metaData: { - id: `${_metaData.id}.logMessage` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + }) + const aaa = 'aaa', + bbb = 'bbb' + _beforeCallEntry({ + metaData: { + id: `${_metaData.id}.handleClick` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + e, + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + logMessage, + aaa, + bbb, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars } - return asyncVars; - } - }); - const aaa = 'aaa', - bbb = 'bbb'; - _beforeCallEntry({ - metaData: { - id: `${_metaData.id}.handleClick` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - e, - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - logMessage, - aaa, - bbb, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + }) + const handleClick = _callEntry( + (e) => { + console.log(e.target, aaa) + state.tableData.push({ + key: 'TinyEngine', + zhCN: '低代码引擎', + enUS: 'TinyEngine' + }) + }, + { + metaData: { + id: `${_metaData.id}.handleClick` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + e, + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + logMessage, + aaa, + bbb, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars + } } - return asyncVars; - } - }); - const handleClick = _callEntry(e => { - console.log(e.target, aaa); - state.tableData.push({ - key: 'TinyEngine', - zhCN: '低代码引擎', - enUS: 'TinyEngine' - }); - }, { - metaData: { - id: `${_metaData.id}.handleClick` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - e, - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - logMessage, - aaa, - bbb, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + ) + _afterCallEntry({ + metaData: { + id: `${_metaData.id}.handleClick` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + e, + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + logMessage, + aaa, + bbb, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars } - return asyncVars; - } - }); - _afterCallEntry({ - metaData: { - id: `${_metaData.id}.handleClick` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - e, - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - logMessage, - aaa, - bbb, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + }) + const ccc = 111 + _beforeCallEntry({ + metaData: { + id: `${_metaData.id}.sendMessage` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars } - return asyncVars; - } - }); - const ccc = 111; - _beforeCallEntry({ - metaData: { - id: `${_metaData.id}.sendMessage` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + }) + const sendMessage = _callEntry( + () => { + logMessage('自定义是的范德萨') + }, + { + metaData: { + id: `${_metaData.id}.sendMessage` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars + } } - return asyncVars; - } - }); - const sendMessage = _callEntry(() => { - logMessage('自定义是的范德萨'); - }, { - metaData: { - id: `${_metaData.id}.sendMessage` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; + ) + _afterCallEntry({ + metaData: { + id: `${_metaData.id}.sendMessage` + }, + ctx: () => { + let asyncVars = {} + try { + asyncVars = { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + sendMessage, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } catch (e) { + return { + props, + state, + logMessage, + aaa, + bbb, + handleClick, + ccc, + last, + reactive, + onMounted, + beforeMount, + deepCopy, + useRenderless + } + } + return asyncVars } - return asyncVars; + }) + function last() {} + return { + state, + aa, + handleClick, + sendMessage } - }); - _afterCallEntry({ + }, + { metaData: { - id: `${_metaData.id}.sendMessage` + id: `${_metaData.id}.useRenderless` }, ctx: () => { - let asyncVars = {}; + let asyncVars = {} try { asyncVars = { props, @@ -511,65 +583,16 @@ export const useRenderless = _callEntry(({ beforeMount, deepCopy, useRenderless - }; + } } catch (e) { return { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - last, reactive, onMounted, beforeMount, - deepCopy, - useRenderless - }; + deepCopy + } } - return asyncVars; - } - }); - function last() {} - return { - state, - aa, - handleClick, - sendMessage - }; -}, { - metaData: { - id: `${_metaData.id}.useRenderless` - }, - ctx: () => { - let asyncVars = {}; - try { - asyncVars = { - props, - state, - logMessage, - aaa, - bbb, - handleClick, - ccc, - sendMessage, - last, - reactive, - onMounted, - beforeMount, - deepCopy, - useRenderless - }; - } catch (e) { - return { - reactive, - onMounted, - beforeMount, - deepCopy - }; + return asyncVars } - return asyncVars; } -}); \ No newline at end of file +) diff --git a/packages/build/vite-plugin-meta-comments/src/transform.js b/packages/build/vite-plugin-meta-comments/src/transform.js index 570a3a1121..cfa13213cd 100644 --- a/packages/build/vite-plugin-meta-comments/src/transform.js +++ b/packages/build/vite-plugin-meta-comments/src/transform.js @@ -54,6 +54,7 @@ export const transform = (code, id) => { // 找不到meta.js告警并返回 const metaPath = getMeataPath(id) if (!metaPath) { + // eslint-disable-next-line no-console console.log('找不到对应的meta.js') return } diff --git a/packages/canvas/breadcrumb/index.js b/packages/canvas/breadcrumb/index.js new file mode 100644 index 0000000000..0c785eb482 --- /dev/null +++ b/packages/canvas/breadcrumb/index.js @@ -0,0 +1,6 @@ +import CanvasBreadcrumb from './src/CanvasFooter.vue' +import metaData from './meta' +export default { + ...metaData, + component: CanvasBreadcrumb +} diff --git a/packages/canvas/breadcrumb/meta.js b/packages/canvas/breadcrumb/meta.js new file mode 100644 index 0000000000..0f554d5c28 --- /dev/null +++ b/packages/canvas/breadcrumb/meta.js @@ -0,0 +1,3 @@ +export default { + id: 'engine.canvas.breadcrumb' +} diff --git a/packages/canvas/src/components/container/CanvasFooter.vue b/packages/canvas/breadcrumb/src/CanvasFooter.vue similarity index 93% rename from packages/canvas/src/components/container/CanvasFooter.vue rename to packages/canvas/breadcrumb/src/CanvasFooter.vue index 6377cdba3f..af7afecd09 100644 --- a/packages/canvas/src/components/container/CanvasFooter.vue +++ b/packages/canvas/breadcrumb/src/CanvasFooter.vue @@ -15,6 +15,7 @@ export default { TinySteps: Steps }, props: { + // TODO: 待整改为自己去api获取信息, 元应用只应该支持配置项不应该支持获取动态数据 data: { type: Array, default: () => [] diff --git a/packages/canvas/canvas.html b/packages/canvas/canvas.html index 100907fa06..a8e0b27dea 100644 --- a/packages/canvas/canvas.html +++ b/packages/canvas/canvas.html @@ -207,6 +207,6 @@
    - + diff --git a/packages/canvas/common/index.js b/packages/canvas/common/index.js new file mode 100644 index 0000000000..72bc39ea0d --- /dev/null +++ b/packages/canvas/common/index.js @@ -0,0 +1,2 @@ +export * from './src/constant.js' +export * from './src/utils.js' diff --git a/packages/canvas/common/src/constant.js b/packages/canvas/common/src/constant.js new file mode 100644 index 0000000000..9fa572a249 --- /dev/null +++ b/packages/canvas/common/src/constant.js @@ -0,0 +1,3 @@ +export const NODE_UID = 'data-uid' +export const NODE_TAG = 'data-tag' +export const NODE_LOOP = 'loop-id' diff --git a/packages/canvas/src/components/common/index.js b/packages/canvas/common/src/utils.js similarity index 61% rename from packages/canvas/src/components/common/index.js rename to packages/canvas/common/src/utils.js index d8745f8d48..cd27312305 100644 --- a/packages/canvas/src/components/common/index.js +++ b/packages/canvas/common/src/utils.js @@ -1,19 +1,3 @@ -/** - * Copyright (c) 2023 - present TinyEngine Authors. - * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. - * - * Use of this source code is governed by an MIT-style license. - * - * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, - * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR - * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. - * - */ - -export const NODE_UID = 'data-uid' -export const NODE_TAG = 'data-tag' -export const NODE_LOOP = 'loop-id' - export const addScript = (src, doc = document) => { return new Promise((resolve, reject) => { const script = doc.createElement('script') @@ -71,53 +55,6 @@ export const copyObject = (node) => { return node } -/** - * 复制节点的schema对象到剪切板,以String形式保存 - * @param {*} event ClipboardEvent - * @param {*} node 节点的schema对象 - * @return 复制的剪切板的String - */ -export const setClipboardSchema = (event, node) => { - let text - - if (typeof node === 'object') { - text = JSON.stringify(node) - } else { - text = String(node) - } - - event.clipboardData.setData('text/plain', text) - event.preventDefault() - - return text -} - -const translateStringToSchame = (clipText) => { - if (!clipText) { - return null - } - - let data - - try { - data = JSON.parse(clipText) - if (!data || !data.componentName) { - data = null - } - } catch (error) { - data = null - } - - return data -} - -/** - * 获得剪切板的内容,转换成schema - * @param {*} event ClipboardEvent - * @return 节点的schema对象 - */ -export const getClipboardSchema = (event) => translateStringToSchame(event.clipboardData.getData('text/plain')) - /** * 动态导入组件,缓存组件对象 * @param {object} param0 组件的依赖: { package: 包名,script:js文件cdn, components:组件id和导出组件名的映射关系} diff --git a/packages/canvas/container/index.js b/packages/canvas/container/index.js new file mode 100644 index 0000000000..2cafd33742 --- /dev/null +++ b/packages/canvas/container/index.js @@ -0,0 +1,8 @@ +import CanvasContainer from './src/CanvasContainer.vue' +import metaData from './meta' +import api from './src/api' +export default { + ...metaData, + component: CanvasContainer, + apis: api() +} diff --git a/packages/canvas/container/meta.js b/packages/canvas/container/meta.js new file mode 100644 index 0000000000..491dad2aa2 --- /dev/null +++ b/packages/canvas/container/meta.js @@ -0,0 +1,3 @@ +export default { + id: 'engine.canvas.container' +} diff --git a/packages/canvas/src/components/container/CanvasContainer.vue b/packages/canvas/container/src/CanvasContainer.vue similarity index 95% rename from packages/canvas/src/components/container/CanvasContainer.vue rename to packages/canvas/container/src/CanvasContainer.vue index d311444b2d..8ee3219d3f 100644 --- a/packages/canvas/src/components/container/CanvasContainer.vue +++ b/packages/canvas/container/src/CanvasContainer.vue @@ -31,13 +31,13 @@ import { onMounted, ref, computed, onUnmounted } from 'vue' import { iframeMonitoring } from '@opentiny/tiny-engine-controller/js/monitor' import { useTranslate, useCanvas, useResource } from '@opentiny/tiny-engine-controller' -import CanvasAction from './CanvasAction.vue' -import CanvasResize from './CanvasResize.vue' -import CanvasMenu, { closeMenu, openMenu } from './CanvasMenu.vue' -import { NODE_UID, NODE_LOOP } from '../common' +import { NODE_UID, NODE_LOOP } from '../../common' import { registerHostkeyEvent, removeHostkeyEvent } from './keyboard' -import CanvasDivider from './CanvasDivider.vue' -import CanvasResizeBorder from './CanvasResizeBorder.vue' +import CanvasMenu, { closeMenu, openMenu } from './components/CanvasMenu.vue' +import CanvasAction from './components/CanvasAction.vue' +import CanvasResize from './components/CanvasResize.vue' +import CanvasDivider from './components/CanvasDivider.vue' +import CanvasResizeBorder from './components/CanvasResizeBorder.vue' import { canvasState, onMouseUp, diff --git a/packages/canvas/container/src/api/index.js b/packages/canvas/container/src/api/index.js new file mode 100644 index 0000000000..0545eb0410 --- /dev/null +++ b/packages/canvas/container/src/api/index.js @@ -0,0 +1,2 @@ +import api from './useCanvas' +export default api diff --git a/packages/controller/src/hooks/useCanvas.js b/packages/canvas/container/src/api/useCanvas.js similarity index 100% rename from packages/controller/src/hooks/useCanvas.js rename to packages/canvas/container/src/api/useCanvas.js diff --git a/packages/canvas/src/components/container/CanvasAction.vue b/packages/canvas/container/src/components/CanvasAction.vue similarity index 99% rename from packages/canvas/src/components/container/CanvasAction.vue rename to packages/canvas/container/src/components/CanvasAction.vue index c5d6a66aa1..414d35dab0 100644 --- a/packages/canvas/src/components/container/CanvasAction.vue +++ b/packages/canvas/container/src/components/CanvasAction.vue @@ -127,7 +127,7 @@ import { getSchema, dragStart, getCurrentElement -} from './container' +} from '../container' import { useLayout, useResource } from '@opentiny/tiny-engine-controller' import { Popover } from '@opentiny/vue' import shortCutPopover from './shortCutPopover.vue' diff --git a/packages/canvas/src/components/container/CanvasDivider.vue b/packages/canvas/container/src/components/CanvasDivider.vue similarity index 99% rename from packages/canvas/src/components/container/CanvasDivider.vue rename to packages/canvas/container/src/components/CanvasDivider.vue index 3d908f6cea..9f0b9dcd51 100644 --- a/packages/canvas/src/components/container/CanvasDivider.vue +++ b/packages/canvas/container/src/components/CanvasDivider.vue @@ -24,7 +24,7 @@ + diff --git a/packages/canvas/src/index.js b/packages/canvas/index.js similarity index 56% rename from packages/canvas/src/index.js rename to packages/canvas/index.js index 9fee560e20..0a73fdf31f 100644 --- a/packages/canvas/src/index.js +++ b/packages/canvas/index.js @@ -9,9 +9,11 @@ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. * */ +export { createRender } from './render' +export { CanvasDragItem } from './drag-drop' -export { default as CanvasContainer } from './components/container/CanvasContainer.vue' -export { default as CanvasDragItem } from './components/container/CanvasDragItem.vue' -export { default as CanvasFooter } from './components/container/CanvasFooter.vue' -export { createRender } from './components/render/runner' -export { default as metaData } from '../meta' +// meta app +import CanvasBreadcrumb from './breadcrumb' +import CanvasContainer from './container' + +export { CanvasBreadcrumb, CanvasContainer } diff --git a/packages/canvas/public/favicon.ico b/packages/canvas/public/favicon.ico deleted file mode 100644 index df36fcfb72584e00488330b560ebcf34a41c64c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/packages/canvas/render/index.js b/packages/canvas/render/index.js new file mode 100644 index 0000000000..368299b80f --- /dev/null +++ b/packages/canvas/render/index.js @@ -0,0 +1 @@ +export { createRender } from './src/runner' diff --git a/packages/canvas/src/components/render/CanvasEmpty.vue b/packages/canvas/render/src/CanvasEmpty.vue similarity index 100% rename from packages/canvas/src/components/render/CanvasEmpty.vue rename to packages/canvas/render/src/CanvasEmpty.vue diff --git a/packages/canvas/src/components/render/RenderMain.js b/packages/canvas/render/src/RenderMain.js similarity index 100% rename from packages/canvas/src/components/render/RenderMain.js rename to packages/canvas/render/src/RenderMain.js diff --git a/packages/canvas/src/components/builtin/CanvasBox.vue b/packages/canvas/render/src/builtin/CanvasBox.vue similarity index 100% rename from packages/canvas/src/components/builtin/CanvasBox.vue rename to packages/canvas/render/src/builtin/CanvasBox.vue diff --git a/packages/canvas/src/components/builtin/CanvasCollection.js b/packages/canvas/render/src/builtin/CanvasCollection.js similarity index 97% rename from packages/canvas/src/components/builtin/CanvasCollection.js rename to packages/canvas/render/src/builtin/CanvasCollection.js index 98def24732..f4d236c7fc 100644 --- a/packages/canvas/src/components/builtin/CanvasCollection.js +++ b/packages/canvas/render/src/builtin/CanvasCollection.js @@ -10,8 +10,8 @@ * */ -import { getController } from '../render/render' -import { api } from '../render/RenderMain' +import { getController } from '../render' +import { api } from '../RenderMain' import { useModal } from '@opentiny/tiny-engine-controller' const NAME_PREFIX = { @@ -123,7 +123,7 @@ const askShouldImportData = ({ node, sourceRef }) => { node.props.columns = generateAssginColumns(sourceColums, node.props.columns) }, cancel() { - node.props.columns = [...sourceRef.value.data?.columns] + node.props.columns = [...(sourceRef.value.data?.columns || [])] } }) } @@ -139,7 +139,7 @@ const updateNodeHandler = ({ node, sourceRef, pageSchema, sourceName, methodName if (node.props.columns.length) { askShouldImportData({ node, sourceRef }) } else { - node.props.columns = [...sourceRef.value.data?.columns] + node.props.columns = [...(sourceRef.value.data?.columns || [])] } const pageConfig = { diff --git a/packages/canvas/src/components/builtin/CanvasCollection.vue b/packages/canvas/render/src/builtin/CanvasCollection.vue similarity index 96% rename from packages/canvas/src/components/builtin/CanvasCollection.vue rename to packages/canvas/render/src/builtin/CanvasCollection.vue index 35173f1eaa..d033924f34 100644 --- a/packages/canvas/src/components/builtin/CanvasCollection.vue +++ b/packages/canvas/render/src/builtin/CanvasCollection.vue @@ -8,13 +8,13 @@ - - diff --git a/packages/canvas/src/components/builtin/CanvasRow.vue b/packages/canvas/src/components/builtin/CanvasRow.vue deleted file mode 100644 index 03c86dbf3a..0000000000 --- a/packages/canvas/src/components/builtin/CanvasRow.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - diff --git a/packages/canvas/src/components/builtin/CanvasRowColContainer.vue b/packages/canvas/src/components/builtin/CanvasRowColContainer.vue deleted file mode 100644 index ccef5fb16c..0000000000 --- a/packages/canvas/src/components/builtin/CanvasRowColContainer.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - - diff --git a/packages/canvas/src/locale.js b/packages/canvas/src/locale.js deleted file mode 100644 index 00aea38fc8..0000000000 --- a/packages/canvas/src/locale.js +++ /dev/null @@ -1,19 +0,0 @@ -/** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ - -import zh from './i18n/zh.json' -import en from './i18n/en.json' - -export default { - en, - zh -} diff --git a/packages/canvas/src/main.js b/packages/canvas/src/main.js deleted file mode 100644 index 64201a2744..0000000000 --- a/packages/canvas/src/main.js +++ /dev/null @@ -1,17 +0,0 @@ -/** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ - -import { createApp } from 'vue' - -import App from './Design.vue' - -createApp(App).mount('#app') diff --git a/packages/canvas/src/Design.vue b/packages/canvas/test/src/Design.vue similarity index 100% rename from packages/canvas/src/Design.vue rename to packages/canvas/test/src/Design.vue diff --git a/packages/canvas/src/canvas.js b/packages/canvas/test/src/canvas.js similarity index 95% rename from packages/canvas/src/canvas.js rename to packages/canvas/test/src/canvas.js index 853f02f0d6..dbb123e797 100644 --- a/packages/canvas/src/canvas.js +++ b/packages/canvas/test/src/canvas.js @@ -13,7 +13,7 @@ import { createApp } from 'vue' import * as TinyVue from '@opentiny/vue' -import { RenderMain } from './index' +import { RenderMain } from '../src/index' import { I18nInjectionKey, createI18n } from 'vue-i18n' diff --git a/packages/canvas/src/i18n.js b/packages/canvas/test/src/i18n.js similarity index 93% rename from packages/canvas/src/i18n.js rename to packages/canvas/test/src/i18n.js index d50d9602f7..c1556f5a71 100644 --- a/packages/canvas/src/i18n.js +++ b/packages/canvas/test/src/i18n.js @@ -11,7 +11,7 @@ */ import i18n from '@opentiny/tiny-engine-i18n-host' -import lowcode from './lowcode' +import lowcode from '../../render/src/lowcode' import locale from './locale' i18n.lowcode = lowcode diff --git a/packages/canvas/src/i18n/en.json b/packages/canvas/test/src/i18n/en.json similarity index 100% rename from packages/canvas/src/i18n/en.json rename to packages/canvas/test/src/i18n/en.json diff --git a/packages/canvas/src/i18n/zh.json b/packages/canvas/test/src/i18n/zh.json similarity index 100% rename from packages/canvas/src/i18n/zh.json rename to packages/canvas/test/src/i18n/zh.json diff --git a/packages/canvas/test/src/locale.js b/packages/canvas/test/src/locale.js new file mode 100644 index 0000000000..b96f76c257 --- /dev/null +++ b/packages/canvas/test/src/locale.js @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import zh from './i18n/zh.json' +import en from './i18n/en.json' + +export default { + en, + zh +} diff --git a/packages/canvas/test/src/main.js b/packages/canvas/test/src/main.js new file mode 100644 index 0000000000..35d9dd0b86 --- /dev/null +++ b/packages/canvas/test/src/main.js @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { createApp } from 'vue' + +import App from './Design.vue' + +createApp(App).mount('#app') diff --git a/packages/canvas/vite.config.js b/packages/canvas/vite.config.js index e01f859b8e..5ab5e7e147 100644 --- a/packages/canvas/vite.config.js +++ b/packages/canvas/vite.config.js @@ -59,7 +59,7 @@ export default defineConfig({ build: { cssCodeSplit: false, lib: { - entry: path.resolve(__dirname, './src/index.js'), + entry: path.resolve(__dirname, './index.js'), name: 'canvas', fileName: () => 'index.js', formats: ['es'] diff --git a/packages/controller/src/hooks/mountHooks.js b/packages/controller/src/hooks/mountHooks.js index b9e18f24c0..badabcc37a 100644 --- a/packages/controller/src/hooks/mountHooks.js +++ b/packages/controller/src/hooks/mountHooks.js @@ -1,5 +1,4 @@ import './useLayout' -import './useCanvas' import './useApp' import './useResource' import './useHistory' diff --git a/packages/controller/src/hooks/useBreadcrumb.js b/packages/controller/src/hooks/useBreadcrumb.js index 600114d64d..b80c7ce924 100644 --- a/packages/controller/src/hooks/useBreadcrumb.js +++ b/packages/controller/src/hooks/useBreadcrumb.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ import { ref } from 'vue' import { HOOK_NAME, initHook } from '@opentiny/tiny-engine-entry' diff --git a/packages/controller/src/hooks/useHistory.js b/packages/controller/src/hooks/useHistory.js index 67aecb5d66..32d3d622b6 100644 --- a/packages/controller/src/hooks/useHistory.js +++ b/packages/controller/src/hooks/useHistory.js @@ -122,7 +122,6 @@ export default () => { } } - initHook(HOOK_NAME.useHistory, { historyState, back, diff --git a/packages/design-core/index.js b/packages/design-core/index.js index 95d71dec20..d7c653386c 100644 --- a/packages/design-core/index.js +++ b/packages/design-core/index.js @@ -30,6 +30,7 @@ export { default as Robot } from '@opentiny/tiny-engine-plugin-robot' export { default as Props } from '@opentiny/tiny-engine-setting-props' export { default as Events } from '@opentiny/tiny-engine-setting-events' export { default as Styles } from '@opentiny/tiny-engine-setting-styles' +export { CanvasBreadcrumb, CanvasContainer } from '@opentiny/tiny-engine-canvas' export { initPreview } from './src/preview/src/main' diff --git a/packages/design-core/registry.js b/packages/design-core/registry.js index c56bfd2f47..597e556727 100644 --- a/packages/design-core/registry.js +++ b/packages/design-core/registry.js @@ -76,5 +76,5 @@ export default { id: 'engine.theme.dark', title: '暗色主题' } - ], + ] } diff --git a/packages/design-core/src/layout/DesignCanvas.vue b/packages/design-core/src/layout/DesignCanvas.vue index 7deb14638b..7f083ba394 100644 --- a/packages/design-core/src/layout/DesignCanvas.vue +++ b/packages/design-core/src/layout/DesignCanvas.vue @@ -1,21 +1,21 @@ + + diff --git a/packages/common/component/MetaHtmlAttributes.vue b/packages/configurator/src/html-attributes-configurator/HtmlAttributesConfigurator.vue similarity index 100% rename from packages/common/component/MetaHtmlAttributes.vue rename to packages/configurator/src/html-attributes-configurator/HtmlAttributesConfigurator.vue diff --git a/packages/common/component/MetaHtmlText.vue b/packages/configurator/src/html-text-configurator/HtmlTextConfigurator.vue similarity index 91% rename from packages/common/component/MetaHtmlText.vue rename to packages/configurator/src/html-text-configurator/HtmlTextConfigurator.vue index bb8a28d391..8be6aea719 100644 --- a/packages/common/component/MetaHtmlText.vue +++ b/packages/configurator/src/html-text-configurator/HtmlTextConfigurator.vue @@ -10,18 +10,18 @@
    - +
    diff --git a/packages/design-core/src/init.js b/packages/design-core/src/init.js index 516e87ef5d..6120a6d0af 100644 --- a/packages/design-core/src/init.js +++ b/packages/design-core/src/init.js @@ -19,7 +19,7 @@ import { initHttp } from '@opentiny/tiny-engine-http' import TinyThemeTool from '@opentiny/vue-theme/theme-tool' import { tinySmbTheme } from '@opentiny/vue-theme/theme' // SMB 主题 import { defineEntry, mergeRegistry } from '@opentiny/tiny-engine-entry' -import App from './layout/App.vue' +import App from './App.vue' import defaultRegistry from '../registry.js' import { registerConfigurators } from './registerConfigurators' diff --git a/packages/layout/assets/AI.png b/packages/layout/assets/AI.png new file mode 100644 index 0000000000000000000000000000000000000000..05ea3740624760e8ea3fc1b2134946017e822062 GIT binary patch literal 121432 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�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

    - +
    @@ -96,7 +96,6 @@ import { reactive, ref, watch } from 'vue' import { Popover, Tooltip } from '@opentiny/vue' import { useLayout, usePage } from '@opentiny/tiny-engine-controller' -import { getMergeRegistry } from '@opentiny/tiny-engine-entry' import { PublicIcon } from '@opentiny/tiny-engine-common' export default { @@ -108,11 +107,14 @@ export default { props: { renderPanel: { type: String + }, + plugins: { + type: Array, + default: () => [] } }, emits: ['click', 'node-click'], setup(props, { emit }) { - const plugins = getMergeRegistry('plugins') const components = {} const iconComponents = {} const pluginRef = ref(null) @@ -127,7 +129,7 @@ export default { layoutState: { plugins: pluginsState } } = useLayout() - plugins.forEach(({ id, component, api, icon }) => { + props.plugins.forEach(({ id, component, api, icon }) => { components[id] = component iconComponents[id] = icon if (api) { @@ -141,9 +143,9 @@ export default { const state = reactive({ prevIdex: -2, - topNavLists: plugins.filter((item) => item.align === 'top'), - bottomNavLists: plugins.filter((item) => item.align === 'bottom'), - independence: plugins.find((item) => item.align === 'independence') + topNavLists: props.plugins.filter((item) => item.align === 'top'), + bottomNavLists: props.plugins.filter((item) => item.align === 'bottom'), + independence: props.plugins.find((item) => item.align === 'independence') }) const doCompleted = () => { @@ -158,7 +160,7 @@ export default { state.prevIdex = index // 切换插件与关闭插件时确认 - const lastPlugin = plugins.find((item) => item.id === props.renderPanel) + const lastPlugin = props.plugins.find((item) => item.id === props.renderPanel) if (props.renderPanel && lastPlugin?.confirm) { const confirmCallback = (result) => result && diff --git a/packages/design-core/src/layout/DesignSettings.vue b/packages/layout/src/DesignSettings.vue similarity index 94% rename from packages/design-core/src/layout/DesignSettings.vue rename to packages/layout/src/DesignSettings.vue index 8cc3120ac1..e30baea64b 100644 --- a/packages/design-core/src/layout/DesignSettings.vue +++ b/packages/layout/src/DesignSettings.vue @@ -13,23 +13,25 @@ import { computed, ref } from 'vue' import { Tabs, TabItem } from '@opentiny/vue' import { useLayout } from '@opentiny/tiny-engine-controller' -import { getMergeRegistry } from '@opentiny/tiny-engine-entry' export default { components: { TinyTabs: Tabs, TinyTabItem: TabItem }, - + props: { + settings: { + type: Array, + default: () => [] + } + }, setup() { const { layoutState } = useLayout() - const settings = getMergeRegistry('settings') const activating = computed(() => layoutState.settings.activating) const showMask = ref(true) return { showMask, - settings, activating, layoutState } diff --git a/packages/design-core/src/layout/DesignToolbars.vue b/packages/layout/src/DesignToolbars.vue similarity index 96% rename from packages/design-core/src/layout/DesignToolbars.vue rename to packages/layout/src/DesignToolbars.vue index 9ff9c8495c..05026538c0 100644 --- a/packages/design-core/src/layout/DesignToolbars.vue +++ b/packages/layout/src/DesignToolbars.vue @@ -19,13 +19,18 @@ import { reactive, nextTick } from 'vue' import { useLayout } from '@opentiny/tiny-engine-controller' import { ProgressBar } from '@opentiny/tiny-engine-common' -import { getMergeRegistry } from '@opentiny/tiny-engine-entry' export default { components: { ProgressBar }, - setup() { + props: { + toolbars: { + type: Array, + default: () => [] + } + }, + setup(props) { const leftBar = [] const rightBar = [] const centerBar = [] @@ -33,7 +38,7 @@ export default { showDeployBlock: false }) - getMergeRegistry('toolbars').forEach((item) => { + props.toolbars.forEach((item) => { if (item.align === 'right') { rightBar.push(item) } else if (item.align === 'center') { diff --git a/packages/design-core/src/layout/App.vue b/packages/layout/src/Main.vue similarity index 87% rename from packages/design-core/src/layout/App.vue rename to packages/layout/src/Main.vue index a0ce17a56a..c70ac5e0e7 100644 --- a/packages/design-core/src/layout/App.vue +++ b/packages/layout/src/Main.vue @@ -1,16 +1,24 @@ @@ -178,7 +178,7 @@ export default { nodeSelected, selectFooterNode, footData, - materialsPanel: materials.component, + materialsPanel: materials.entry, showMask, controller: { // 需要在canvas/render或内置组件里使用的方法 diff --git a/packages/canvas/breadcrumb/index.js b/packages/canvas/breadcrumb/index.js index 0c785eb482..062f0f28c3 100644 --- a/packages/canvas/breadcrumb/index.js +++ b/packages/canvas/breadcrumb/index.js @@ -2,5 +2,5 @@ import CanvasBreadcrumb from './src/CanvasFooter.vue' import metaData from './meta' export default { ...metaData, - component: CanvasBreadcrumb + entry: CanvasBreadcrumb } diff --git a/packages/canvas/container/index.js b/packages/canvas/container/index.js index 2cafd33742..a799ecc99b 100644 --- a/packages/canvas/container/index.js +++ b/packages/canvas/container/index.js @@ -3,6 +3,6 @@ import metaData from './meta' import api from './src/api' export default { ...metaData, - component: CanvasContainer, + entry: CanvasContainer, apis: api() } diff --git a/packages/entry/docs/registry.md b/packages/entry/docs/registry.md index 324cbe5121..9929f53c55 100644 --- a/packages/entry/docs/registry.md +++ b/packages/entry/docs/registry.md @@ -10,7 +10,10 @@ type OverwriteFn = (ctx, originFn) => (...args) => any interface MetaApp { id: string - component: VueComponent + // 元应用的入口组件 + entry: VueComponent + // 元应用中可供定制的局部模块组件,例如定制 header、footer + components?: Record // 组件暴露的api接口 apis?: Record // component的配置项 diff --git a/packages/layout/src/DesignPlugins.vue b/packages/layout/src/DesignPlugins.vue index bd39869469..d913dceab3 100644 --- a/packages/layout/src/DesignPlugins.vue +++ b/packages/layout/src/DesignPlugins.vue @@ -129,8 +129,8 @@ export default { layoutState: { plugins: pluginsState } } = useLayout() - props.plugins.forEach(({ id, component, api, icon }) => { - components[id] = component + props.plugins.forEach(({ id, entry, api, icon }) => { + components[id] = entry iconComponents[id] = icon if (api) { registerPluginApi({ diff --git a/packages/layout/src/DesignSettings.vue b/packages/layout/src/DesignSettings.vue index e30baea64b..e8b4e17a38 100644 --- a/packages/layout/src/DesignSettings.vue +++ b/packages/layout/src/DesignSettings.vue @@ -2,7 +2,7 @@
    - +
    diff --git a/packages/layout/src/DesignToolbars.vue b/packages/layout/src/DesignToolbars.vue index 05026538c0..8e5968b571 100644 --- a/packages/layout/src/DesignToolbars.vue +++ b/packages/layout/src/DesignToolbars.vue @@ -1,13 +1,13 @@ - - + + >
    @@ -104,9 +104,7 @@ import { Popover, Tooltip } from '@opentiny/vue' import { IconWriting, IconHelpCircle, IconPlusCircle } from '@opentiny/vue-icon' import { typeOf } from '@opentiny/vue-renderless/common/type' import i18n from '@opentiny/tiny-engine-controller/js/i18n' -import { MetaComponents } from '../index' -import MetaBindVariable from './MetaBindVariable.vue' -import MetaCodeEditor from './MetaCodeEditor.vue' +import { CodeConfigurator, VariableConfigurator } from '@opentiny/tiny-engine-configurator' import MultiTypeSelector from './MultiTypeSelector.vue' import { useHistory, useProperties, useResource, useLayout, useCanvas } from '@opentiny/tiny-engine-controller' import { generateFunction } from '@opentiny/tiny-engine-controller/utils' @@ -123,8 +121,8 @@ const hasRule = (required, rules) => { export default { components: { MultiTypeSelector, - MetaCodeEditor, - MetaBindVariable, + CodeConfigurator, + VariableConfigurator, TinyPopover: Popover, TinyTooltip: Tooltip, IconWriting: IconWriting(), @@ -464,7 +462,6 @@ export default { editorModalRef, isBindingState, component, - MetaComponents, hidden, widget, required, diff --git a/packages/common/component/MetaRelatedEditor.vue b/packages/common/component/MetaRelatedEditor.vue index c6043c8665..98146cf92a 100644 --- a/packages/common/component/MetaRelatedEditor.vue +++ b/packages/common/component/MetaRelatedEditor.vue @@ -3,7 +3,7 @@
    {{ `已绑定:${modelValue?.value}` }}
    - - + > + + + diff --git a/packages/configurator/src/components/SvgButton.vue b/packages/configurator/src/components/SvgButton.vue new file mode 100644 index 0000000000..e46650d35a --- /dev/null +++ b/packages/configurator/src/components/SvgButton.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/packages/configurator/src/components/VueMonaco.vue b/packages/configurator/src/components/VueMonaco.vue new file mode 100644 index 0000000000..d102449425 --- /dev/null +++ b/packages/configurator/src/components/VueMonaco.vue @@ -0,0 +1,196 @@ + + diff --git a/packages/configurator/src/components/index.js b/packages/configurator/src/components/index.js new file mode 100644 index 0000000000..2b0dbafb93 --- /dev/null +++ b/packages/configurator/src/components/index.js @@ -0,0 +1,4 @@ +// TODO components 文件夹下的组件是从 @opentiny/tiny-engine-common 复制过来的临时文件,防止循环依赖 +export { default as BindI18n } from './BindI18n.vue' +export { default as SvgButton } from './SvgButton.vue' +export { default as VueMonaco } from './VueMonaco.vue' diff --git a/packages/common/component/MetaBindI18n.vue b/packages/configurator/src/i18n-configurator/I18nConfigurator.vue similarity index 92% rename from packages/common/component/MetaBindI18n.vue rename to packages/configurator/src/i18n-configurator/I18nConfigurator.vue index dfe037717d..82b602504e 100644 --- a/packages/common/component/MetaBindI18n.vue +++ b/packages/configurator/src/i18n-configurator/I18nConfigurator.vue @@ -34,11 +34,11 @@ + diff --git a/packages/engine-cli/template/designer/registry.js b/packages/engine-cli/template/designer/registry.js index 0a162218f2..dc2ef6b0b1 100644 --- a/packages/engine-cli/template/designer/registry.js +++ b/packages/engine-cli/template/designer/registry.js @@ -40,9 +40,42 @@ import { Props, Events, Styles, + Layout, + Canvas, + EditorInfoService, + HelpService, + AppService, + BlockService, + BreadcrumbService, + DataSourceService, + PageService, + ResourceService, + PropertiesService, + PropertyService, + SaveLocalService, + TranslateService, + HistoryService, } from '@opentiny/tiny-engine' export default { + root: { + id: 'engine.root', + metas: [ + EditorInfoService, + HelpService, + AppService, + BreadcrumbService, + BlockService, + DataSourceService, + PageService, + ResourceService, + PropertiesService, + PropertyService, + SaveLocalService, + TranslateService, + HistoryService, + ] + }, config: { id: 'engine.config', theme: import.meta.env.VITE_THEME || 'light', @@ -50,7 +83,7 @@ export default { scripts: [], styles: [] }, - layout: { id: 'engine.layout' }, + layout: Layout, themes: [ { id: 'engine.theme.light' @@ -75,25 +108,8 @@ export default { Setting, Lang ], - plugins: [ - Materials, - Tree, - Page, - Block, - Datasource, - Bridge, - I18n, - Script, - Data, - Schema, - Help, - Robot - ], + plugins: [Materials, Tree, Page, Block, Datasource, Bridge, I18n, Script, Data, Schema, Help, Robot], dsls: [{ id: 'engine.dsls.dslvue' }], - settings: [ - Props, - Styles, - Events - ], - canvas: {} + settings: [Props, Styles, Events], + canvas: Canvas } diff --git a/packages/engine-cli/template/designer/src/configurators/index.js b/packages/engine-cli/template/designer/src/configurators/index.js index 59f2b8bbf2..d30de4ee5d 100644 --- a/packages/engine-cli/template/designer/src/configurators/index.js +++ b/packages/engine-cli/template/designer/src/configurators/index.js @@ -1,7 +1,5 @@ -import * as allConfigurator from '@opentiny/tiny-engine-configurator' import MyInputConfigurator from './MyInputConfigurator.vue' export const configurators = { - ...allConfigurator, MyInputConfigurator } diff --git a/packages/engine-cli/template/designer/src/defineEntry.js b/packages/engine-cli/template/designer/src/defineEntry.js index 80637321d4..f8b215c1b4 100644 --- a/packages/engine-cli/template/designer/src/defineEntry.js +++ b/packages/engine-cli/template/designer/src/defineEntry.js @@ -11,7 +11,7 @@ */ import registry from '../registry.js' -import { defineEntry } from '@opentiny/tiny-engine-entry' +import { defineEntry } from '@opentiny/tiny-engine' defineEntry(registry) diff --git a/packages/engine-cli/template/designer/src/main.js b/packages/engine-cli/template/designer/src/main.js index aefabf5e5b..b141f1b8e6 100644 --- a/packages/engine-cli/template/designer/src/main.js +++ b/packages/engine-cli/template/designer/src/main.js @@ -13,7 +13,7 @@ // 导入@opentiny/tiny-engine时,内部的依赖包也会逐个导入,可能会执行useComplie,此时需要templateHashMap。所以需要先执行一次defineEntry import { registry } from './defineEntry.js' import { init } from '@opentiny/tiny-engine' -import { initHook, HOOK_NAME } from '@opentiny/tiny-engine-entry' +import { initHook, HOOK_NAME } from '@opentiny/tiny-engine' import { configurators } from './configurators/' import 'virtual:svg-icons-register' import '@opentiny/tiny-engine-theme' diff --git a/packages/engine-cli/template/designer/src/preview.js b/packages/engine-cli/template/designer/src/preview.js index d47a8bdb6a..3fc45bd530 100644 --- a/packages/engine-cli/template/designer/src/preview.js +++ b/packages/engine-cli/template/designer/src/preview.js @@ -10,6 +10,20 @@ * */ +import { initHook, HOOK_NAME } from '@opentiny/tiny-engine' import { initPreview } from '@opentiny/tiny-engine' +import 'virtual:svg-icons-register' +import '@opentiny/tiny-engine-theme' -initPreview({ registry: { config: { id : 'engine.config', theme: 'light' } } }) +const beforeAppCreate = () => { + initHook(HOOK_NAME.useEnv, import.meta.env) +} + +initPreview({ + registry: { + config: { id : 'engine.config', theme: 'light' }, + }, + lifeCycles: { + beforeAppCreate + } +}) diff --git a/packages/engine-cli/template/designer/vite.config.js b/packages/engine-cli/template/designer/vite.config.js index 746aa432c3..9bb4a69c73 100644 --- a/packages/engine-cli/template/designer/vite.config.js +++ b/packages/engine-cli/template/designer/vite.config.js @@ -10,13 +10,25 @@ export default defineConfig((options) => { } const defaultConfig = getDefaultConfig(options, extOptions) + const devAlias = { + '@opentiny/tiny-engine-theme': ['light', 'dark'].includes(extOptions.VITE_THEME) + ? path.resolve( + process.cwd(), + `./node_modules/@opentiny/tiny-engine-theme-${extOptions.VITE_THEME}/dist/style.css` + ) + : '' + } + const config = { envDir, publicDir: path.resolve(__dirname, './public'), server: { port: 8090 + }, + resolve: { + alias: devAlias } } - + return mergeConfig(defaultConfig, config) }) From c862e52c4a637903f9f15a859aea0e734550aeda Mon Sep 17 00:00:00 2001 From: Hexqi Date: Thu, 20 Jun 2024 09:47:30 +0800 Subject: [PATCH 227/322] feat: move composables to module (#569) * feat: move hooks --- designer-demo/registry.js | 24 +-- designer-demo/src/main.js | 7 +- designer-demo/vite.config.js | 2 - packages/canvas/breadcrumb/index.js | 9 +- .../breadcrumb/src}/useBreadcrumb.js | 0 packages/canvas/render/src/RenderMain.js | 4 +- packages/common/component/BindI18n.vue | 2 +- .../common/component/BlockDeployDialog.vue | 2 +- packages/common/component/ConfigItem.vue | 4 +- packages/common/component/LifeCycles.vue | 2 +- .../component/Modal.jsx} | 22 +-- packages/common/component/MonacoEditor.vue | 2 +- .../component/Notify.jsx} | 0 packages/common/index.js | 3 + .../CodeListConfigurator.vue | 2 +- .../configurator/src/components/BindI18n.vue | 2 +- .../VariableConfigurator.vue | 6 +- packages/controller/js/comment.js | 16 ++ packages/controller/js/constants.js | 21 ++- packages/controller/js/css.js | 4 +- packages/controller/{src => js}/example.js | 3 +- packages/controller/js/http.js | 3 +- .../controller/{adapter.js => js/monaco.js} | 39 +---- packages/controller/meta.js | 3 - packages/controller/package.json | 3 +- packages/controller/src/composable/index.js | 23 +++ .../src/{hooks => composable}/useApp.js | 6 +- .../{hooks => composable}/useEditorInfo.js | 2 +- packages/controller/src/hooks/index.js | 132 ----------------- packages/controller/src/index.js | 19 +-- packages/controller/src/useData.js | 20 --- packages/controller/src/useMessage.js | 138 ------------------ packages/controller/utils.js | 133 ----------------- packages/controller/vite.config.js | 2 - packages/design-core/index.js | 34 ++--- packages/design-core/src/init.js | 8 +- .../engine-cli/template/designer/registry.js | 24 +-- packages/entry/src/hooks.js | 6 + packages/layout/index.js | 10 +- packages/layout/src/composable/index.js | 11 ++ .../src/{hooks => composable}/useLayout.js | 0 packages/plugins/block/index.js | 6 +- .../plugins/block/src/composable/index.js | 11 ++ .../block/src/composable}/useBlock.js | 6 +- packages/plugins/bridge/src/BridgeSetting.vue | 2 +- packages/plugins/data/src/CreateRemoteAPI.vue | 2 +- .../plugins/data/src/CreateRemoteFunction.vue | 2 +- packages/plugins/data/src/CreateStore.vue | 2 +- packages/plugins/data/src/Main.vue | 3 +- packages/plugins/datasource/index.js | 8 +- .../src/DataSourceRemoteDataResult.vue | 2 +- .../datasource/src/DataSourceRemotePanel.vue | 4 +- .../src/DataSourceRemoteParameter.vue | 2 +- .../datasource/src/RemoteDataAdapterForm.vue | 2 +- .../datasource/src/composable/index.js | 11 ++ .../src/composable}/useDataSource.js | 2 +- .../plugins/datasource/src/js/datasource.js | 2 +- packages/plugins/help/index.js | 6 +- packages/plugins/help/src/composable/index.js | 11 ++ .../help/src/composable}/useHelp.js | 0 packages/plugins/i18n/index.js | 6 +- packages/plugins/i18n/src/composable/index.js | 11 ++ .../i18n/src/composable}/useTranslate.js | 6 +- packages/plugins/materials/index.js | 6 +- .../plugins/materials/src/composable/index.js | 11 ++ .../materials/src/composable}/useResource.js | 6 +- packages/plugins/page/index.js | 6 +- packages/plugins/page/src/composable/index.js | 11 ++ .../page/src/composable}/usePage.js | 0 packages/plugins/schema/src/Main.vue | 5 +- packages/plugins/script/src/Main.vue | 2 +- .../events/src/components/AdvanceConfig.vue | 6 +- .../src/components/BindEventsDialog.vue | 2 +- packages/settings/props/index.js | 7 +- .../props/src/components/groups/LifeCycle.vue | 2 +- .../src/components/inputs/CodeEditor.vue | 5 +- .../src/components/modal/ModalContent.vue | 4 +- .../settings/props/src/composable/index.js | 21 +++ .../props/src/composable}/useProperties.js | 0 .../props/src/composable}/useProperty.js | 0 .../styles/src/components/layout/FlexBox.vue | 4 +- packages/settings/styles/src/js/cssConvert.js | 3 +- packages/toolbars/generate-vue/index.js | 6 +- .../generate-vue/src/composable/index.js | 11 ++ .../src/composable}/useSaveLocal.js | 4 +- packages/toolbars/redoundo/index.js | 6 +- .../toolbars/redoundo/src/composable/index.js | 11 ++ .../redoundo/src/composable}/useHistory.js | 0 packages/toolbars/save/src/Main.vue | 2 +- packages/utils/src/utils/index.js | 38 ++++- 90 files changed, 384 insertions(+), 655 deletions(-) rename packages/{controller/src/hooks => canvas/breadcrumb/src}/useBreadcrumb.js (100%) rename packages/{controller/src/components/useModal.jsx => common/component/Modal.jsx} (76%) rename packages/{controller/src/components/useNotify.jsx => common/component/Notify.jsx} (100%) create mode 100644 packages/controller/js/comment.js rename packages/controller/{src => js}/example.js (98%) rename packages/controller/{adapter.js => js/monaco.js} (56%) delete mode 100644 packages/controller/meta.js create mode 100644 packages/controller/src/composable/index.js rename packages/controller/src/{hooks => composable}/useApp.js (89%) rename packages/controller/src/{hooks => composable}/useEditorInfo.js (97%) delete mode 100644 packages/controller/src/hooks/index.js delete mode 100644 packages/controller/src/useData.js delete mode 100644 packages/controller/src/useMessage.js delete mode 100644 packages/controller/utils.js create mode 100644 packages/layout/src/composable/index.js rename packages/layout/src/{hooks => composable}/useLayout.js (100%) create mode 100644 packages/plugins/block/src/composable/index.js rename packages/{controller/src/hooks => plugins/block/src/composable}/useBlock.js (98%) create mode 100644 packages/plugins/datasource/src/composable/index.js rename packages/{controller/src/hooks => plugins/datasource/src/composable}/useDataSource.js (98%) create mode 100644 packages/plugins/help/src/composable/index.js rename packages/{controller/src/hooks => plugins/help/src/composable}/useHelp.js (100%) create mode 100644 packages/plugins/i18n/src/composable/index.js rename packages/{controller/src/hooks => plugins/i18n/src/composable}/useTranslate.js (95%) create mode 100644 packages/plugins/materials/src/composable/index.js rename packages/{controller/src/hooks => plugins/materials/src/composable}/useResource.js (98%) create mode 100644 packages/plugins/page/src/composable/index.js rename packages/{controller/src/hooks => plugins/page/src/composable}/usePage.js (100%) create mode 100644 packages/settings/props/src/composable/index.js rename packages/{controller/src/hooks => settings/props/src/composable}/useProperties.js (100%) rename packages/{controller/src/hooks => settings/props/src/composable}/useProperty.js (100%) create mode 100644 packages/toolbars/generate-vue/src/composable/index.js rename packages/{controller/src/hooks => toolbars/generate-vue/src/composable}/useSaveLocal.js (95%) create mode 100644 packages/toolbars/redoundo/src/composable/index.js rename packages/{controller/src/hooks => toolbars/redoundo/src/composable}/useHistory.js (100%) diff --git a/designer-demo/registry.js b/designer-demo/registry.js index dc2ef6b0b1..d4554db722 100644 --- a/designer-demo/registry.js +++ b/designer-demo/registry.js @@ -43,18 +43,7 @@ import { Layout, Canvas, EditorInfoService, - HelpService, AppService, - BlockService, - BreadcrumbService, - DataSourceService, - PageService, - ResourceService, - PropertiesService, - PropertyService, - SaveLocalService, - TranslateService, - HistoryService, } from '@opentiny/tiny-engine' export default { @@ -62,18 +51,7 @@ export default { id: 'engine.root', metas: [ EditorInfoService, - HelpService, - AppService, - BreadcrumbService, - BlockService, - DataSourceService, - PageService, - ResourceService, - PropertiesService, - PropertyService, - SaveLocalService, - TranslateService, - HistoryService, + AppService ] }, config: { diff --git a/designer-demo/src/main.js b/designer-demo/src/main.js index b141f1b8e6..19d563cb09 100644 --- a/designer-demo/src/main.js +++ b/designer-demo/src/main.js @@ -13,13 +13,8 @@ // 导入@opentiny/tiny-engine时,内部的依赖包也会逐个导入,可能会执行useComplie,此时需要templateHashMap。所以需要先执行一次defineEntry import { registry } from './defineEntry.js' import { init } from '@opentiny/tiny-engine' -import { initHook, HOOK_NAME } from '@opentiny/tiny-engine' import { configurators } from './configurators/' import 'virtual:svg-icons-register' import '@opentiny/tiny-engine-theme' -const beforeAppCreate = () => { - initHook(HOOK_NAME.useEnv, import.meta.env) -} - -init({ registry, configurators, lifeCycles: { beforeAppCreate } }) +init({ registry, configurators }) diff --git a/designer-demo/vite.config.js b/designer-demo/vite.config.js index 480389c387..6799cb104d 100644 --- a/designer-demo/vite.config.js +++ b/designer-demo/vite.config.js @@ -16,8 +16,6 @@ export default defineConfig((options) => { '@opentiny/tiny-engine-controller/js': path.resolve(__dirname, '../packages/controller/js'), '@opentiny/tiny-engine-common/component': path.resolve(__dirname, '../packages/common/component'), '@opentiny/tiny-engine-common': path.resolve(__dirname, '../packages/common/index.js'), - '@opentiny/tiny-engine-controller/utils': path.resolve(__dirname, '../packages/controller/utils.js'), - '@opentiny/tiny-engine-controller/adapter': path.resolve(__dirname, '../packages/controller/adapter.js'), '@opentiny/tiny-engine-controller': path.resolve(__dirname, '../packages/controller/src/index.js'), '@opentiny/tiny-engine-plugin-materials': path.resolve(__dirname, '../packages/plugins/materials/index.js'), '@opentiny/tiny-engine-plugin-block': path.resolve(__dirname, '../packages/plugins/block/index.js'), diff --git a/packages/canvas/breadcrumb/index.js b/packages/canvas/breadcrumb/index.js index 062f0f28c3..4d330c4146 100644 --- a/packages/canvas/breadcrumb/index.js +++ b/packages/canvas/breadcrumb/index.js @@ -1,6 +1,13 @@ +import { HOOK_NAME } from '@opentiny/tiny-engine-entry' import CanvasBreadcrumb from './src/CanvasFooter.vue' import metaData from './meta' +import useBreadcrumb from './src/useBreadcrumb' + export default { ...metaData, - entry: CanvasBreadcrumb + apis: useBreadcrumb(), + entry: CanvasBreadcrumb, + composable: { + name: HOOK_NAME.useBreadcrumb + } } diff --git a/packages/controller/src/hooks/useBreadcrumb.js b/packages/canvas/breadcrumb/src/useBreadcrumb.js similarity index 100% rename from packages/controller/src/hooks/useBreadcrumb.js rename to packages/canvas/breadcrumb/src/useBreadcrumb.js diff --git a/packages/canvas/render/src/RenderMain.js b/packages/canvas/render/src/RenderMain.js index 6081d487ed..dcee72a785 100644 --- a/packages/canvas/render/src/RenderMain.js +++ b/packages/canvas/render/src/RenderMain.js @@ -13,13 +13,13 @@ import { h, provide, inject, nextTick, shallowReactive, reactive, ref, watch, watchEffect } from 'vue' import { I18nInjectionKey } from 'vue-i18n' import { useBroadcastChannel } from '@vueuse/core' -import { constants } from '@opentiny/tiny-engine-utils' -import { generateFunction } from '@opentiny/tiny-engine-controller/utils' +import { constants, utils as commonUtils } from '@opentiny/tiny-engine-utils' import renderer, { parseData, setConfigure, setController, globalNotify, isStateAccessor } from './render' import { getNode as getNodeById, clearNodes, getRoot, setContext, getContext, setCondition, context } from './context' import CanvasEmpty from './CanvasEmpty.vue' const { BROADCAST_CHANNEL } = constants +const { parseFunction: generateFunction } = commonUtils const reset = (obj) => { Object.keys(obj).forEach((key) => delete obj[key]) diff --git a/packages/common/component/BindI18n.vue b/packages/common/component/BindI18n.vue index c01bd07ca0..bfe416ffd7 100644 --- a/packages/common/component/BindI18n.vue +++ b/packages/common/component/BindI18n.vue @@ -54,7 +54,7 @@ - - diff --git a/packages/plugins/materials/src/components/header/Main.vue b/packages/plugins/materials/src/components/header/Main.vue new file mode 100644 index 0000000000..8b734be7a0 --- /dev/null +++ b/packages/plugins/materials/src/components/header/Main.vue @@ -0,0 +1,33 @@ + + + diff --git a/packages/plugins/materials/src/meta/block/index.js b/packages/plugins/materials/src/meta/block/index.js new file mode 100644 index 0000000000..b801a21b50 --- /dev/null +++ b/packages/plugins/materials/src/meta/block/index.js @@ -0,0 +1,14 @@ +import entry from './src/Main.vue' +import metaData from './meta' +import { fetchGroups } from './src/http' + +export default { + ...metaData, + entry, + apis: { + fetchGroups + }, + options: { + title: '区块' + } +} diff --git a/packages/plugins/materials/src/meta/block/meta.js b/packages/plugins/materials/src/meta/block/meta.js new file mode 100644 index 0000000000..2acb872cfd --- /dev/null +++ b/packages/plugins/materials/src/meta/block/meta.js @@ -0,0 +1,4 @@ +export default { + id: 'engine.plugins.materials.block', + type: 'plugins' +} diff --git a/packages/plugins/materials/src/block/BlockDetail.vue b/packages/plugins/materials/src/meta/block/src/BlockDetail.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockDetail.vue rename to packages/plugins/materials/src/meta/block/src/BlockDetail.vue diff --git a/packages/plugins/materials/src/block/BlockGroup.vue b/packages/plugins/materials/src/meta/block/src/BlockGroup.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockGroup.vue rename to packages/plugins/materials/src/meta/block/src/BlockGroup.vue diff --git a/packages/plugins/materials/src/block/BlockGroupArrange.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupArrange.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockGroupArrange.vue rename to packages/plugins/materials/src/meta/block/src/BlockGroupArrange.vue diff --git a/packages/plugins/materials/src/block/BlockGroupFilters.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupFilters.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockGroupFilters.vue rename to packages/plugins/materials/src/meta/block/src/BlockGroupFilters.vue diff --git a/packages/plugins/materials/src/block/BlockGroupPanel.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupPanel.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockGroupPanel.vue rename to packages/plugins/materials/src/meta/block/src/BlockGroupPanel.vue diff --git a/packages/plugins/materials/src/block/BlockGroupSort.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupSort.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockGroupSort.vue rename to packages/plugins/materials/src/meta/block/src/BlockGroupSort.vue diff --git a/packages/plugins/materials/src/block/BlockGroupTransfer.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupTransfer.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockGroupTransfer.vue rename to packages/plugins/materials/src/meta/block/src/BlockGroupTransfer.vue diff --git a/packages/plugins/materials/src/block/BlockGroupTransferPanel.vue b/packages/plugins/materials/src/meta/block/src/BlockGroupTransferPanel.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockGroupTransferPanel.vue rename to packages/plugins/materials/src/meta/block/src/BlockGroupTransferPanel.vue diff --git a/packages/plugins/materials/src/block/BlockList.vue b/packages/plugins/materials/src/meta/block/src/BlockList.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockList.vue rename to packages/plugins/materials/src/meta/block/src/BlockList.vue diff --git a/packages/plugins/materials/src/block/BlockVersionSelect.vue b/packages/plugins/materials/src/meta/block/src/BlockVersionSelect.vue similarity index 100% rename from packages/plugins/materials/src/block/BlockVersionSelect.vue rename to packages/plugins/materials/src/meta/block/src/BlockVersionSelect.vue diff --git a/packages/plugins/materials/src/block/Main.vue b/packages/plugins/materials/src/meta/block/src/Main.vue similarity index 85% rename from packages/plugins/materials/src/block/Main.vue rename to packages/plugins/materials/src/meta/block/src/Main.vue index e271656358..dc5706dff8 100644 --- a/packages/plugins/materials/src/block/Main.vue +++ b/packages/plugins/materials/src/meta/block/src/Main.vue @@ -6,6 +6,10 @@ + + + + + + diff --git a/packages/settings/styles/src/js/useStyle.js b/packages/settings/styles/src/js/useStyle.js index ebc9fdd125..95dcbcb120 100644 --- a/packages/settings/styles/src/js/useStyle.js +++ b/packages/settings/styles/src/js/useStyle.js @@ -134,7 +134,13 @@ const getClassNameAndIdList = (schema) => { } watch( - () => [useCanvas().getCurrentSchema?.(), state.schemaUpdateKey, useProps().propsUpdateKey?.value, useCanvas().canvasApi?.value?.getSchema?.(), schemaLength], + () => [ + useCanvas().getCurrentSchema?.(), + state.schemaUpdateKey, + useProps().propsUpdateKey?.value, + useCanvas().canvasApi?.value?.getSchema?.(), + schemaLength + ], ([curSchema], [oldCurSchema] = []) => { const { getCurrentSchema, canvasApi } = useCanvas() let schema = getCurrentSchema() From 1d932a40edecb7600943cdd268e04dfb7e45cf58 Mon Sep 17 00:00:00 2001 From: rhlin Date: Wed, 26 Jun 2024 01:20:17 -0700 Subject: [PATCH 231/322] =?UTF-8?q?feat:=20canvas=20=E5=85=83=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=94=B9=E9=80=A02=20=EF=BC=88=E6=8A=BD=E5=8F=96Canva?= =?UTF-8?q?sLayout=EF=BC=8C=E9=9D=A2=E5=8C=85=E5=B1=91=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=85=83=E5=BA=94=E7=94=A8=EF=BC=8Capi?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0engine.canvas=E9=A1=B6=E5=B1=82=20?= =?UTF-8?q?=EF=BC=89=20(#590)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: canvas 元应用改造2 (抽取CanvasLayout,面包屑导航去除元应用,api移动到engine.canvas顶层 ) * fix: 解决code check问题 * fix: 修正引用路径错误 * fix: 解决解决merge过程中文件修改丢失 --- packages/canvas/DesignCanvas/index.js | 9 ++++- .../canvas/DesignCanvas/src/DesignCanvas.vue | 38 +++++++------------ .../src/api/index.js | 0 .../src/api/useCanvas.js | 0 packages/canvas/breadcrumb/index.js | 2 +- ...{CanvasFooter.vue => CanvasBreadcrumb.vue} | 15 ++++++-- packages/canvas/container/index.js | 8 +--- .../canvas/drag-drop/src/CanvasDragItem.vue | 2 +- packages/canvas/index.js | 9 ++++- packages/canvas/layout/index.js | 7 ++++ packages/canvas/layout/meta.js | 3 ++ packages/canvas/layout/src/CanvasLayout.vue | 20 ++++++++++ packages/controller/js/constants.js | 22 +++++------ packages/controller/js/example.js | 20 +++++----- packages/controller/src/composable/index.js | 1 - packages/engine-cli/src/commands/create.js | 1 + .../engine-cli/template/designer/registry.js | 7 +--- .../template/designer/src/preview.js | 2 +- packages/layout/index.js | 2 +- .../plugins/block/src/composable/useBlock.js | 8 +--- packages/plugins/datasource/index.js | 4 +- .../src/components/inputs/CodeEditor.vue | 2 +- .../src/components/modal/ModalContent.vue | 2 +- packages/utils/src/utils/index.js | 2 +- 24 files changed, 104 insertions(+), 82 deletions(-) rename packages/canvas/{container => DesignCanvas}/src/api/index.js (100%) rename packages/canvas/{container => DesignCanvas}/src/api/useCanvas.js (100%) rename packages/canvas/breadcrumb/src/{CanvasFooter.vue => CanvasBreadcrumb.vue} (83%) create mode 100644 packages/canvas/layout/index.js create mode 100644 packages/canvas/layout/meta.js create mode 100644 packages/canvas/layout/src/CanvasLayout.vue diff --git a/packages/canvas/DesignCanvas/index.js b/packages/canvas/DesignCanvas/index.js index db70c726d7..04d2cc3d7d 100644 --- a/packages/canvas/DesignCanvas/index.js +++ b/packages/canvas/DesignCanvas/index.js @@ -1,7 +1,12 @@ +import { HOOK_NAME } from '@opentiny/tiny-engine-entry' import DesignCanvas from './src/DesignCanvas.vue' import metaData from './meta' - +import api from './src/api' export default { ...metaData, - entry: DesignCanvas + entry: DesignCanvas, + apis: api(), + composable: { + name: HOOK_NAME.useCanvas + } } diff --git a/packages/canvas/DesignCanvas/src/DesignCanvas.vue b/packages/canvas/DesignCanvas/src/DesignCanvas.vue index 87c8714d9f..2ac1eb9d3d 100644 --- a/packages/canvas/DesignCanvas/src/DesignCanvas.vue +++ b/packages/canvas/DesignCanvas/src/DesignCanvas.vue @@ -1,6 +1,6 @@ diff --git a/packages/canvas/container/index.js b/packages/canvas/container/index.js index 455020b061..1cc5930465 100644 --- a/packages/canvas/container/index.js +++ b/packages/canvas/container/index.js @@ -1,13 +1,7 @@ -import { HOOK_NAME } from '@opentiny/tiny-engine-entry' import CanvasContainer from './src/CanvasContainer.vue' import metaData from './meta' -import api from './src/api' export default { ...metaData, - entry: CanvasContainer, - apis: api(), - composable: { - name: HOOK_NAME.useCanvas - } + entry: CanvasContainer } diff --git a/packages/canvas/drag-drop/src/CanvasDragItem.vue b/packages/canvas/drag-drop/src/CanvasDragItem.vue index b5859d583e..9d5a3f201a 100644 --- a/packages/canvas/drag-drop/src/CanvasDragItem.vue +++ b/packages/canvas/drag-drop/src/CanvasDragItem.vue @@ -16,7 +16,7 @@ export default { }, emits: ['click'], setup(props, { emit }) { - const canvasApi = getPluginApi('engine.canvas.container').canvasApi + const canvasApi = getPluginApi('engine.canvas').canvasApi const dragstart = (e) => { if (props.data && canvasApi.value?.dragStart) { const data = deepClone(props.data) diff --git a/packages/canvas/index.js b/packages/canvas/index.js index 265c74e15c..32a34eb1af 100644 --- a/packages/canvas/index.js +++ b/packages/canvas/index.js @@ -9,15 +9,22 @@ * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. * */ +import CanvasBreadcrumb from './breadcrumb' export { createRender } from './render' export { CanvasDragItem } from './drag-drop' // meta app -import CanvasBreadcrumb from './breadcrumb' import CanvasContainer from './container' +import CanvasLayout from './layout' import DesignCanvas from './DesignCanvas' +export { CanvasContainer, CanvasLayout, DesignCanvas } + export default { ...DesignCanvas, + components: { + CanvasBreadcrumb: CanvasBreadcrumb.entry + }, + layout: CanvasLayout, metas: [CanvasContainer, CanvasBreadcrumb] } diff --git a/packages/canvas/layout/index.js b/packages/canvas/layout/index.js new file mode 100644 index 0000000000..9a3382240d --- /dev/null +++ b/packages/canvas/layout/index.js @@ -0,0 +1,7 @@ +import CanvasLayout from './src/CanvasLayout.vue' +import metaData from './meta' + +export default { + ...metaData, + entry: CanvasLayout +} diff --git a/packages/canvas/layout/meta.js b/packages/canvas/layout/meta.js new file mode 100644 index 0000000000..5d429a5074 --- /dev/null +++ b/packages/canvas/layout/meta.js @@ -0,0 +1,3 @@ +export default { + id: 'engine.canvas.layout' +} diff --git a/packages/canvas/layout/src/CanvasLayout.vue b/packages/canvas/layout/src/CanvasLayout.vue new file mode 100644 index 0000000000..9523b1bcd1 --- /dev/null +++ b/packages/canvas/layout/src/CanvasLayout.vue @@ -0,0 +1,20 @@ + + diff --git a/packages/controller/js/constants.js b/packages/controller/js/constants.js index 7717f6338d..f0e0f3f38a 100644 --- a/packages/controller/js/constants.js +++ b/packages/controller/js/constants.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ export const COMPONENT_NAME = { Page: 'Page', @@ -94,4 +94,4 @@ export const PROP_DATA_TYPE = { JSEXPRESSION: 'JSExpression', JSRESOURCE: 'JSResource', JSSLOT: 'JSSlot' -} \ No newline at end of file +} diff --git a/packages/controller/js/example.js b/packages/controller/js/example.js index c9a49717e3..3ceeef4543 100644 --- a/packages/controller/js/example.js +++ b/packages/controller/js/example.js @@ -1,14 +1,14 @@ /** -* Copyright (c) 2023 - present TinyEngine Authors. -* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. -* -* Use of this source code is governed by an MIT-style license. -* -* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, -* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR -* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. -* -*/ + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ // 编辑器输入示例 const exampleMap = { diff --git a/packages/controller/src/composable/index.js b/packages/controller/src/composable/index.js index c5d2174be8..5ced9ced65 100644 --- a/packages/controller/src/composable/index.js +++ b/packages/controller/src/composable/index.js @@ -20,4 +20,3 @@ export const EditorInfoService = { name: HOOK_NAME.useEditorInfo } } - diff --git a/packages/engine-cli/src/commands/create.js b/packages/engine-cli/src/commands/create.js index b2b2d1d14a..6d98cb97d2 100644 --- a/packages/engine-cli/src/commands/create.js +++ b/packages/engine-cli/src/commands/create.js @@ -19,6 +19,7 @@ export default function (name) { const sourcePath = path.join(__dirname, '../template/designer/') const destPath = path.join(cwd(), name) fs.copySync(sourcePath, destPath) + // eslint-disable-next-line no-console console.log( chalk.green(`create finish, run the follow command to start project: \ncd ${name} && npm install && npm run dev`) ) diff --git a/packages/engine-cli/template/designer/registry.js b/packages/engine-cli/template/designer/registry.js index d4554db722..afacc37d59 100644 --- a/packages/engine-cli/template/designer/registry.js +++ b/packages/engine-cli/template/designer/registry.js @@ -43,16 +43,13 @@ import { Layout, Canvas, EditorInfoService, - AppService, + AppService } from '@opentiny/tiny-engine' export default { root: { id: 'engine.root', - metas: [ - EditorInfoService, - AppService - ] + metas: [EditorInfoService, AppService] }, config: { id: 'engine.config', diff --git a/packages/engine-cli/template/designer/src/preview.js b/packages/engine-cli/template/designer/src/preview.js index 3fc45bd530..21d79b799e 100644 --- a/packages/engine-cli/template/designer/src/preview.js +++ b/packages/engine-cli/template/designer/src/preview.js @@ -21,7 +21,7 @@ const beforeAppCreate = () => { initPreview({ registry: { - config: { id : 'engine.config', theme: 'light' }, + config: { id: 'engine.config', theme: 'light' } }, lifeCycles: { beforeAppCreate diff --git a/packages/layout/index.js b/packages/layout/index.js index 4a3ecac872..0fd60be682 100644 --- a/packages/layout/index.js +++ b/packages/layout/index.js @@ -5,7 +5,7 @@ import { LayoutService } from './src/composable' export default { ...metaData, component, - metas: [LayoutService], + metas: [LayoutService] } export { LayoutService } diff --git a/packages/plugins/block/src/composable/useBlock.js b/packages/plugins/block/src/composable/useBlock.js index af7714ec69..b530d81c0a 100644 --- a/packages/plugins/block/src/composable/useBlock.js +++ b/packages/plugins/block/src/composable/useBlock.js @@ -20,13 +20,7 @@ import { getMergeMeta } from '@opentiny/tiny-engine-entry' import { getCanvasStatus } from '@opentiny/tiny-engine-controller/js/canvas' import { ast2String, parseExpression } from '@opentiny/tiny-engine-controller/js/ast' import { getCssObjectFromStyleStr } from '@opentiny/tiny-engine-controller/js/css' -import { - useCanvas, - useTranslate, - useEditorInfo, - useBreadcrumb, - useLayout -} from '@opentiny/tiny-engine-entry' +import { useCanvas, useTranslate, useEditorInfo, useBreadcrumb, useLayout } from '@opentiny/tiny-engine-entry' const { SORT_TYPE, SCHEMA_DATA_TYPE, BLOCK_OPENNESS } = constants diff --git a/packages/plugins/datasource/index.js b/packages/plugins/datasource/index.js index 598c9e753f..38557ebf42 100644 --- a/packages/plugins/datasource/index.js +++ b/packages/plugins/datasource/index.js @@ -18,9 +18,7 @@ import { DataSourceService } from './src/composable' export default { ...metaData, entry, - metas: [ - DataSourceService - ] + metas: [DataSourceService] } export { fetchDataSourceList, fetchDataSourceDetail, DataSourceService } diff --git a/packages/settings/props/src/components/inputs/CodeEditor.vue b/packages/settings/props/src/components/inputs/CodeEditor.vue index 402bbeec64..ac20fc3444 100644 --- a/packages/settings/props/src/components/inputs/CodeEditor.vue +++ b/packages/settings/props/src/components/inputs/CodeEditor.vue @@ -34,7 +34,7 @@ + + diff --git a/packages/settings/events/src/components/BindEventsDialogSidebar.vue b/packages/settings/events/src/components/BindEventsDialogSidebar.vue new file mode 100644 index 0000000000..981e198fd7 --- /dev/null +++ b/packages/settings/events/src/components/BindEventsDialogSidebar.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/packages/settings/events/src/components/constants.js b/packages/settings/events/src/components/constants.js new file mode 100644 index 0000000000..95b9ee7139 --- /dev/null +++ b/packages/settings/events/src/components/constants.js @@ -0,0 +1,10 @@ +export const NEW_METHOD_TYPE = 'newMethod' +export const INVALID_VARNAME_CHAR_RE = /[^0-9a-zA-Z_$]/ +export const VALID_VARNAME_RE = /^[a-zA-Z_$][0-9a-zA-Z_$]*$/ + +export const METHOD_TIPS_MAP = { + default: '选择已有方法或者添加新方法(点击 确定 之后将在JS面板中创建一个该名称的新方法)', + exist: '方法名称已存在', + ruleInvalid: '请输入有效的方法名,可以由字母、数字、下划线、$ 符号组成,不能以数字开头', + empty: '方法名称不能为空' +} From 53f22c7e50a5b58eecd887546f32bce9f000f0df Mon Sep 17 00:00:00 2001 From: Gene Date: Wed, 26 Jun 2024 17:07:05 +0800 Subject: [PATCH 234/322] fix: simplify monaco options (#599) --- .../events/src/components/BindEventsDialogContent.vue | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/settings/events/src/components/BindEventsDialogContent.vue b/packages/settings/events/src/components/BindEventsDialogContent.vue index 20457e505d..9682f6cd9a 100644 --- a/packages/settings/events/src/components/BindEventsDialogContent.vue +++ b/packages/settings/events/src/components/BindEventsDialogContent.vue @@ -53,7 +53,6 @@ - - diff --git a/packages/common/component/MetaModalItem.vue b/packages/common/component/MetaModalItem.vue index e7343bb635..9347f06e27 100644 --- a/packages/common/component/MetaModalItem.vue +++ b/packages/common/component/MetaModalItem.vue @@ -32,7 +32,6 @@ import { reactive, computed } from 'vue' import MetaChildItem from './MetaChildItem.vue' export default { - name: 'MetaModalItem', components: { MetaChildItem, TinyButton: Button, diff --git a/packages/common/component/MetaPopover.vue b/packages/common/component/MetaPopover.vue index d396c2f928..fca51a973f 100644 --- a/packages/common/component/MetaPopover.vue +++ b/packages/common/component/MetaPopover.vue @@ -17,7 +17,6 @@ import { Popover, Button } from '@opentiny/vue' import MetaChildItem from './MetaChildItem.vue' export default { - name: 'MetaPopover', components: { MetaChildItem, TinyPopover: Popover, @@ -27,10 +26,10 @@ export default { props: { meta: { type: Object, - default: {} + default: () => ({}) } }, - setup(props, { attrs, emit }) { + setup(props, { emit }) { const title = computed(() => `编辑${props.meta.label?.text?.zh_CN || props.meta.property || '属性'}`) const onValueChange = ({ propertyKey, propertyValue }) => { const newPropertyValue = { ...props.meta.widget?.props?.modelValue, [propertyKey]: propertyValue } diff --git a/packages/common/component/MetaSelect.vue b/packages/common/component/MetaSelect.vue deleted file mode 100644 index d9a59b8f97..0000000000 --- a/packages/common/component/MetaSelect.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - diff --git a/packages/common/component/MultiTypeSelector.vue b/packages/common/component/MultiTypeSelector.vue index 2e3649a80a..3f836e8907 100644 --- a/packages/common/component/MultiTypeSelector.vue +++ b/packages/common/component/MultiTypeSelector.vue @@ -12,7 +12,7 @@
    import { reactive } from 'vue' import { Tooltip, Popover, Radio, RadioGroup } from '@opentiny/vue' -import { MetaComponents } from '../index' +import { getConfigurator } from '@opentiny/tiny-engine-entry' export default { name: 'MultiTypeSelector', @@ -113,7 +113,7 @@ export default { TYPE_MAP, change, handleChange, - MetaComponents + getConfigurator } } } diff --git a/packages/common/index.js b/packages/common/index.js index cf545e02df..5f979a2e51 100644 --- a/packages/common/index.js +++ b/packages/common/index.js @@ -10,34 +10,6 @@ * */ -import { - ButtonGroupConfigurator, - CascaderConfigurator, - CheckBoxConfigurator, - CheckboxGroupConfigurator, - CodeConfigurator, - CodeListConfigurator, - CollectionConfigurator, - ColorConfigurator, - DatePickerConfigurator, - FormConfigurator, - HtmlAttributesConfigurator, - HtmlTextConfigurator, - I18nConfigurator, - InputConfigurator, - IpSectionConfigurator, - JsSlotConfigurator, - NumberConfigurator, - RadioConfigurator, - RadioGroupConfigurator, - SelectConfigurator, - SelectIconConfigurator, - SliderConfigurator, - SlotConfigurator, - SwitchConfigurator, - VariableConfigurator -} from '@opentiny/tiny-engine-configurator' - import PluginSetting from './component/PluginSetting.vue' import PluginPanel from './component/PluginPanel.vue' import SvgButton from './component/SvgButton.vue' @@ -48,17 +20,15 @@ import ConfigGroup from './component/ConfigGroup.vue' import ConfigItem from './component/ConfigItem.vue' import ConfigRender from './component/ConfigRender.vue' -import MetaArrayItem from './component/MetaArrayItem.vue' +import MetaForm from './component/MetaForm.vue' import MetaListActions from './component/MetaListActions.vue' -import MetaGroupItem from './component/MetaGroupItem.vue' -import MetaLayoutGrid from './component/MetaLayoutGrid.vue' import MetaListTitle from './component/MetaListTitle.vue' import MetaListItems from './component/MetaListItems.vue' import MetaListItem from './component/MetaListItem.vue' import MetaModal, { useModal } from './component/MetaModal.vue' +import MetaModalItem from './component/MetaModalItem.vue' import MetaPopover from './component/MetaPopover.vue' import VideoGuide from './component/VideoGuide.vue' -import MetaContainer from './component/MetaContainer.vue' import MonacoEditor from './component/MonacoEditor.vue' import BlockHistoryList from './component/BlockHistoryList.vue' import BlockHistoryTemplate from './component/BlockHistoryTemplate.vue' @@ -75,14 +45,14 @@ import VueMonaco, { setGlobalMonacoEditorTheme } from './component/VueMonaco.vue import PublicIcon from './component/PublicIcon.vue' import SaveNewBlock from './component/SaveNewBlock.vue' import BindI18n from './component/BindI18n.vue' -import MetaRelatedEditor from './component/MetaRelatedEditor.vue' -import MetaRelatedColumns from './component/MetaRelatedColumns.vue' import BlockDeployDialog from './component/BlockDeployDialog.vue' import ProgressBar from './component/ProgressBar.vue' -import MetaTableColumns from './component/MetaTableColumns.vue' import SearchEmpty from './component/SearchEmpty.vue' import MetaDescription from './component/MetaDescription.vue' import MetaList from './component/MetaList.vue' +import MetaChildItem from './component/MetaChildItem.vue' +import SplitPanes from './component/SplitPanes.vue' +import Pane from './component/Pane.vue' import i18n, { i18nKeyMaps } from '@opentiny/tiny-engine-controller/js/i18n' @@ -108,77 +78,18 @@ export const injectGlobalComponents = { } } -// TODO: 后面由各自所需代码各自引入,然后删除 -export const MetaComponents = { - MetaArrayItem, - MetaBindI18n: I18nConfigurator, - MetaBindVariable: VariableConfigurator, - MetaButtonGroup: ButtonGroupConfigurator, - MetaCheckBox: CheckBoxConfigurator, - MetaCascader: CascaderConfigurator, - MetaCodeEditor: CodeConfigurator, - MetaCodeEditorList: CodeListConfigurator, - MetaColor: ColorConfigurator, - MetaDatePicker: DatePickerConfigurator, - MetaGroupItem, - MetaInput: InputConfigurator, - MetaLayoutGrid, - MetaList, - MetaModal, - MetaNumber: NumberConfigurator, - MetaNumeric: NumberConfigurator, - MetaPopover, - MetaRadio: RadioConfigurator, - MetaSelect: SelectConfigurator, - MetaSelectIcon: SelectIconConfigurator, - MetaSlider: SliderConfigurator, - MetaSwitch: SwitchConfigurator, - MetaListTitle, - MetaListActions, - MetaListItems, - MetaListItem, - MetaForm: FormConfigurator, - MetaCollection: CollectionConfigurator, - MetaContainer, - MetaJsSlot: JsSlotConfigurator, - MetaSlot: SlotConfigurator, - MetaHtmlText: HtmlTextConfigurator, - MetaHtmlAttributes: HtmlAttributesConfigurator, - MetaRadioGroup: RadioGroupConfigurator, - MetaCheckboxGroup: CheckboxGroupConfigurator, - MetaIpSection: IpSectionConfigurator, - MetaRelatedEditor, - MetaRelatedColumns, - MetaTableColumns -} - export { - I18nConfigurator as MetaBindI18n, - VariableConfigurator as MetaBindVariable, - CheckBoxConfigurator as MetaCheckBox, - CodeConfigurator as MetaCodeEditor, - CodeListConfigurator as MetaCodeEditorList, - ColorConfigurator as MetaColor, - DatePickerConfigurator as MetaDatePicker, MetaDescription, - InputConfigurator as MetaInput, MetaList, MetaModal, - NumberConfigurator as MetaNumber, + MetaModalItem, MetaPopover, - RadioConfigurator as MetaRadio, - SelectConfigurator as MetaSelect, - SelectIconConfigurator as MetaSelectIcon, - SliderConfigurator as MetaSlider, - SwitchConfigurator as MetaSwitch, MetaListTitle, MetaListActions, MetaListItems, MetaListItem, - JsSlotConfigurator as MetaJsSlot, - SlotConfigurator as MetaSlot, - HtmlTextConfigurator as MetaHtmlText, - FormConfigurator as MetaForm, + MetaChildItem, + MetaForm, ConfigCollapse, ConfigGroup, ConfigItem, @@ -195,15 +106,12 @@ export { BlockLinkEvent, BlockDescription, PluginBlockList, - CollectionConfigurator as MetaCollection, ButtonGroup, CloseIcon, LifeCycles, EmptyTip, - MetaContainer, MonacoEditor, MaskModal, - HtmlAttributesConfigurator as MetaHtmlAttributes, VueMonaco, setGlobalMonacoEditorTheme, PublicIcon, @@ -211,8 +119,9 @@ export { BindI18n, BlockDeployDialog, ProgressBar, - MetaTableColumns, - SearchEmpty + SearchEmpty, + SplitPanes, + Pane } export { default as Modal } from './component/Modal' diff --git a/packages/common/package.json b/packages/common/package.json index 75118b0691..884f4a15fd 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -27,7 +27,6 @@ "license": "MIT", "homepage": "https://opentiny.design/tiny-engine", "dependencies": { - "@opentiny/tiny-engine-configurator": "workspace:*", "@opentiny/tiny-engine-controller": "workspace:*", "@opentiny/tiny-engine-entry": "workspace:*", "@opentiny/tiny-engine-http": "workspace:*", diff --git a/packages/configurator/package.json b/packages/configurator/package.json index 85adcdd569..854384b88a 100644 --- a/packages/configurator/package.json +++ b/packages/configurator/package.json @@ -29,7 +29,8 @@ "@opentiny/tiny-engine-http": "workspace:*", "@opentiny/tiny-engine-utils": "workspace:*", "@vue/shared": "^3.3.4", - "monaco-editor": "0.33.0" + "monaco-editor": "0.33.0", + "vue-draggable-next": "2.1.0" }, "publishConfig": { "access": "public" diff --git a/packages/common/component/MetaArrayItem.vue b/packages/configurator/src/array-item-configurator/ArrayItemConfigurator.vue similarity index 95% rename from packages/common/component/MetaArrayItem.vue rename to packages/configurator/src/array-item-configurator/ArrayItemConfigurator.vue index b6ea09ba00..d7efd83f49 100644 --- a/packages/common/component/MetaArrayItem.vue +++ b/packages/configurator/src/array-item-configurator/ArrayItemConfigurator.vue @@ -48,15 +48,12 @@ - - diff --git a/packages/configurator/src/components/SvgButton.vue b/packages/configurator/src/components/SvgButton.vue deleted file mode 100644 index e46650d35a..0000000000 --- a/packages/configurator/src/components/SvgButton.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/packages/configurator/src/components/VueMonaco.vue b/packages/configurator/src/components/VueMonaco.vue deleted file mode 100644 index d102449425..0000000000 --- a/packages/configurator/src/components/VueMonaco.vue +++ /dev/null @@ -1,196 +0,0 @@ - - diff --git a/packages/configurator/src/components/index.js b/packages/configurator/src/components/index.js deleted file mode 100644 index 2b0dbafb93..0000000000 --- a/packages/configurator/src/components/index.js +++ /dev/null @@ -1,4 +0,0 @@ -// TODO components 文件夹下的组件是从 @opentiny/tiny-engine-common 复制过来的临时文件,防止循环依赖 -export { default as BindI18n } from './BindI18n.vue' -export { default as SvgButton } from './SvgButton.vue' -export { default as VueMonaco } from './VueMonaco.vue' diff --git a/packages/common/component/MetaContainer.vue b/packages/configurator/src/container-configurator/ContainerConfigurator.vue similarity index 97% rename from packages/common/component/MetaContainer.vue rename to packages/configurator/src/container-configurator/ContainerConfigurator.vue index be0e300b4f..2f0d787569 100644 --- a/packages/common/component/MetaContainer.vue +++ b/packages/configurator/src/container-configurator/ContainerConfigurator.vue @@ -21,7 +21,7 @@ - - diff --git a/packages/common/component/MetaGroupItem.vue b/packages/configurator/src/group-item-configurator/GroupItemConfigurator.vue similarity index 92% rename from packages/common/component/MetaGroupItem.vue rename to packages/configurator/src/group-item-configurator/GroupItemConfigurator.vue index 6833289dd1..1f866c3cc3 100644 --- a/packages/common/component/MetaGroupItem.vue +++ b/packages/configurator/src/group-item-configurator/GroupItemConfigurator.vue @@ -8,10 +8,10 @@ - - diff --git a/packages/canvas/layout/src/CanvasLayout.vue b/packages/canvas/layout/src/CanvasLayout.vue index 9523b1bcd1..ff407552de 100644 --- a/packages/canvas/layout/src/CanvasLayout.vue +++ b/packages/canvas/layout/src/CanvasLayout.vue @@ -18,3 +18,22 @@ const siteCanvasStyle = computed(() => { } }) + + From 2eda8a33ffea1dbed4543f5e2ab5a2c0f16f490b Mon Sep 17 00:00:00 2001 From: Hexqi Date: Sun, 30 Jun 2024 16:54:18 +0800 Subject: [PATCH 245/322] refactor: rename getPluginApi to getMetaApi (#613) --- packages/canvas/breadcrumb/src/CanvasBreadcrumb.vue | 4 ++-- packages/canvas/drag-drop/src/CanvasDragItem.vue | 4 ++-- packages/common/composable/generateCode/README.md | 4 ++-- packages/design-core/src/preview/src/preview/Preview.vue | 4 ++-- packages/register/src/common.js | 2 +- packages/register/src/index.js | 2 +- packages/toolbars/generate-vue/src/Main.vue | 4 ++-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/canvas/breadcrumb/src/CanvasBreadcrumb.vue b/packages/canvas/breadcrumb/src/CanvasBreadcrumb.vue index 5b7f6351ac..228ce941d5 100644 --- a/packages/canvas/breadcrumb/src/CanvasBreadcrumb.vue +++ b/packages/canvas/breadcrumb/src/CanvasBreadcrumb.vue @@ -8,7 +8,7 @@ + + diff --git a/packages/engine-cli/template/plugin/src/composable/index.js b/packages/engine-cli/template/plugin/src/composable/index.js new file mode 100644 index 0000000000..0b8e5620d2 --- /dev/null +++ b/packages/engine-cli/template/plugin/src/composable/index.js @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import useBlock from './usePluginDemo' + +export const PluginDemoService = { + id: 'engine.service.pluginDemoService', + type: 'MetaService', + apis: useBlock() +} diff --git a/packages/engine-cli/template/plugin/src/composable/usePluginDemo.js b/packages/engine-cli/template/plugin/src/composable/usePluginDemo.js new file mode 100644 index 0000000000..5f8990bc39 --- /dev/null +++ b/packages/engine-cli/template/plugin/src/composable/usePluginDemo.js @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +export default function () { + return { + getTitle: () => { + return 'plugin-demo-title' + } + } +} diff --git a/packages/engine-cli/template/plugin/vite.config.js b/packages/engine-cli/template/plugin/vite.config.js new file mode 100644 index 0000000000..4ccc446ac7 --- /dev/null +++ b/packages/engine-cli/template/plugin/vite.config.js @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { defineConfig } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue(), vueJsx()], + publicDir: false, + resolve: {}, + build: { + lib: { + entry: path.resolve(__dirname, './index.js'), + fileName: () => 'index.js', + formats: ['es'] + }, + rollupOptions: { + output: { + banner: 'import "./style.css"' + }, + external: ['vue', /@opentiny\/tiny-engine.*/, /@opentiny\/vue.*/] + } + } +}) From d257c7cf35e19f68cbbe0732adc72fecfe8bb9f3 Mon Sep 17 00:00:00 2001 From: chilingling <26962197+chilingling@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:21:25 -0700 Subject: [PATCH 249/322] fix: mockServer build and add startup script on template (#616) * fix: moServer build and add startup script on template * fix: preserve only frontend script on demo --- designer-demo/package.json | 3 ++- mockServer/package.json | 3 ++- mockServer/src/{services => assets/json}/appinfo.json | 0 mockServer/src/{services => assets/json}/sources.json | 0 mockServer/src/services/app.js | 2 +- mockServer/src/services/blockCategory.js | 2 +- mockServer/src/services/blockGroup.js | 2 +- mockServer/src/services/schema2code.js | 2 +- mockServer/src/services/source.js | 3 +-- packages/engine-cli/template/designer/package.json | 7 +++++-- 10 files changed, 14 insertions(+), 10 deletions(-) rename mockServer/src/{services => assets/json}/appinfo.json (100%) rename mockServer/src/{services => assets/json}/sources.json (100%) diff --git a/designer-demo/package.json b/designer-demo/package.json index d3703904a9..c77534bc2f 100644 --- a/designer-demo/package.json +++ b/designer-demo/package.json @@ -22,6 +22,7 @@ "@vitejs/plugin-vue": "^5.0.4", "cross-env": "^7.0.3", "vite": "^5.2.7", - "@opentiny/tiny-engine-vite-config": "workspace:^" + "@opentiny/tiny-engine-vite-config": "workspace:^", + "@opentiny/tiny-engine-mock": "workspace:^" } } diff --git a/mockServer/package.json b/mockServer/package.json index 7886852d62..d4f7aa0e68 100644 --- a/mockServer/package.json +++ b/mockServer/package.json @@ -66,7 +66,8 @@ "gulp-eslint": "^6.0.0", "gulp-nodemon": "^2.5.0", "jest": "^25.3.0", - "koa-logger": "^3.2.1" + "koa-logger": "^3.2.1", + "ncp": "^2.0.0" }, "engines": { "node": ">= 7.8.0", diff --git a/mockServer/src/services/appinfo.json b/mockServer/src/assets/json/appinfo.json similarity index 100% rename from mockServer/src/services/appinfo.json rename to mockServer/src/assets/json/appinfo.json diff --git a/mockServer/src/services/sources.json b/mockServer/src/assets/json/sources.json similarity index 100% rename from mockServer/src/services/sources.json rename to mockServer/src/assets/json/sources.json diff --git a/mockServer/src/services/app.js b/mockServer/src/services/app.js index 60821e43d9..33f4a4bf17 100644 --- a/mockServer/src/services/app.js +++ b/mockServer/src/services/app.js @@ -25,7 +25,7 @@ export default class AppService { // 获取应用预览数据 getAppPreviewMetaData() { - const appMetaData = require('./appinfo.json') + const appMetaData = require('../assets/json/appinfo.json') const { i18n: i18nEntries, source = [], extension = [], app } = appMetaData // 拼装数据源 diff --git a/mockServer/src/services/blockCategory.js b/mockServer/src/services/blockCategory.js index 401b963dd1..9f3f8ad7df 100644 --- a/mockServer/src/services/blockCategory.js +++ b/mockServer/src/services/blockCategory.js @@ -12,7 +12,7 @@ import path from 'path' import DateStore from '@seald-io/nedb' import { getResponseData } from '../tool/Common' -import appinfo from './appinfo.json' +import appinfo from '../assets/json/appinfo.json' export default class BlockCategoryService { constructor() { this.db = new DateStore({ diff --git a/mockServer/src/services/blockGroup.js b/mockServer/src/services/blockGroup.js index 01cd868f60..8900fedbab 100644 --- a/mockServer/src/services/blockGroup.js +++ b/mockServer/src/services/blockGroup.js @@ -12,7 +12,7 @@ import path from 'path' import DateStore from '@seald-io/nedb' import { getResponseData } from '../tool/Common' -import appinfo from './appinfo.json' +import appinfo from '../assets/json/appinfo.json' export default class BlockGroupService { constructor() { this.db = new DateStore({ diff --git a/mockServer/src/services/schema2code.js b/mockServer/src/services/schema2code.js index 9b27000657..f4171e53fb 100644 --- a/mockServer/src/services/schema2code.js +++ b/mockServer/src/services/schema2code.js @@ -11,7 +11,7 @@ */ import { pageService } from '../routes/main-routes' -import appInfo from './appinfo.json' +import appInfo from '../assets/json/appinfo.json' export default class Schema2CodeServcice { constructor() { diff --git a/mockServer/src/services/source.js b/mockServer/src/services/source.js index be25719f07..e0f0386e0a 100644 --- a/mockServer/src/services/source.js +++ b/mockServer/src/services/source.js @@ -11,11 +11,10 @@ */ import { getResponseData } from '../tool/Common' -import sources from './sources.json' +import sources from '../assets/json/sources.json' export default class soueceService { detail(id) { const sourceData = sources[id] || {} return getResponseData(sourceData) } - } diff --git a/packages/engine-cli/template/designer/package.json b/packages/engine-cli/template/designer/package.json index 18b4a34bdf..9a3ab10de9 100644 --- a/packages/engine-cli/template/designer/package.json +++ b/packages/engine-cli/template/designer/package.json @@ -4,7 +4,9 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "cross-env VITE_THEME=light vite", + "dev": "concurrently 'pnpm:serve:mock' 'pnpm:serve:frontend'", + "serve:frontend": "cross-env VITE_THEME=light vite", + "serve:mock": "node node_modules/@opentiny/tiny-engine-mock/dist/app.js", "build": "cross-env VITE_THEME=light vite build" }, "dependencies": { @@ -22,6 +24,7 @@ "@vitejs/plugin-vue": "^5.0.4", "cross-env": "^7.0.3", "vite": "^5.2.7", - "@opentiny/tiny-engine-vite-config": "latest" + "@opentiny/tiny-engine-vite-config": "latest", + "@opentiny/tiny-engine-mock": "latest" } } From 88d9ae4a90c1227ae44b229d10e672ce798f1f8b Mon Sep 17 00:00:00 2001 From: lichunn <46984087+lichunn@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:28:52 -0700 Subject: [PATCH 250/322] refactor: optimize layout module logic (#600) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:add layout * feat: 调整layout导入 * feat: 把DesignCanvas移到canvas * feat: 暂时不改entry * fix: 添加注释 * feat:layout部分逻辑调整 * fix:调整AI图标 * fix:调整App引用 * feat:抽取Layout全局配置组件 * fix: sync newest change --------- Co-authored-by: chilingling --- packages/design-core/src/App.vue | 63 +++++++- packages/design-core/src/init.js | 10 +- packages/layout/index.js | 6 + packages/layout/src/DesignPlugins.vue | 63 +------- packages/layout/src/Main.vue | 100 ++----------- packages/plugins/robot/meta.js | 6 +- packages/plugins/robot/src/Main.vue | 203 ++++++++++++++++---------- 7 files changed, 221 insertions(+), 230 deletions(-) diff --git a/packages/design-core/src/App.vue b/packages/design-core/src/App.vue index 67241458bf..8c66a99041 100644 --- a/packages/design-core/src/App.vue +++ b/packages/design-core/src/App.vue @@ -3,11 +3,72 @@ - - - - + + + Created with Pixso. + + + + + + + - - - - - \ No newline at end of file + diff --git a/packages/design-core/assets/clear.svg b/packages/design-core/assets/clear.svg index 8619e2169c..e0fb1c7d3f 100644 --- a/packages/design-core/assets/clear.svg +++ b/packages/design-core/assets/clear.svg @@ -1,13 +1,12 @@ - - - ic_eraser_lined - - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/down-arrow.svg b/packages/design-core/assets/down-arrow.svg new file mode 100644 index 0000000000..a006c37b6c --- /dev/null +++ b/packages/design-core/assets/down-arrow.svg @@ -0,0 +1,12 @@ + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/full-screen.svg b/packages/design-core/assets/full-screen.svg index 71f2eb1c4a..3d8a81f822 100644 --- a/packages/design-core/assets/full-screen.svg +++ b/packages/design-core/assets/full-screen.svg @@ -1,30 +1,12 @@ - - - 操作/全屏 - - - - - - - - - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/generate-code.svg b/packages/design-core/assets/generate-code.svg index 2c78583a17..9ef86cf4b8 100644 --- a/packages/design-core/assets/generate-code.svg +++ b/packages/design-core/assets/generate-code.svg @@ -1,17 +1,12 @@ - - - 操作/下载 - - - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/locked.svg b/packages/design-core/assets/locked.svg index dc8a8ebbae..dab711e5a4 100644 --- a/packages/design-core/assets/locked.svg +++ b/packages/design-core/assets/locked.svg @@ -1,10 +1,12 @@ - - - ic_locked_lined - - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/preview.svg b/packages/design-core/assets/preview.svg index da9964e731..26554a1b62 100644 --- a/packages/design-core/assets/preview.svg +++ b/packages/design-core/assets/preview.svg @@ -1,12 +1,12 @@ - - - 操作/播放1 - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/refresh.svg b/packages/design-core/assets/refresh.svg index 762d72dc53..b3a1b75c79 100644 --- a/packages/design-core/assets/refresh.svg +++ b/packages/design-core/assets/refresh.svg @@ -1,13 +1,12 @@ - - - 操作/刷新 2 - - - - - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/save.svg b/packages/design-core/assets/save.svg index 157897bd86..497b322680 100644 --- a/packages/design-core/assets/save.svg +++ b/packages/design-core/assets/save.svg @@ -1,12 +1,12 @@ - - - 操作/保存 - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/unlocked.svg b/packages/design-core/assets/unlocked.svg index 79e990f695..bb3ff81044 100644 --- a/packages/design-core/assets/unlocked.svg +++ b/packages/design-core/assets/unlocked.svg @@ -1,10 +1,12 @@ - - - ic_lock_open_lined - - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/user-locked.svg b/packages/design-core/assets/user-locked.svg index c7b0b46834..f3020646e7 100644 --- a/packages/design-core/assets/user-locked.svg +++ b/packages/design-core/assets/user-locked.svg @@ -1,14 +1,12 @@ - - - 编组 7备份 - - - - - - - - - - - \ No newline at end of file + + + Created with Pixso. + + + + + + + + + diff --git a/packages/design-core/assets/user.svg b/packages/design-core/assets/user.svg new file mode 100644 index 0000000000..53a1e31e06 --- /dev/null +++ b/packages/design-core/assets/user.svg @@ -0,0 +1,12 @@ + + + Created with Pixso. + + + + + + + + + diff --git a/packages/layout/src/DesignSettings.vue b/packages/layout/src/DesignSettings.vue index 43fb6ce344..f344494d92 100644 --- a/packages/layout/src/DesignSettings.vue +++ b/packages/layout/src/DesignSettings.vue @@ -69,7 +69,7 @@ export default { } .tiny-tabs__content { flex: 1; - overflow-y: scroll; + overflow-y: auto; padding: 0; margin: 0; } @@ -85,7 +85,7 @@ export default { } :deep(.tiny-collapse-item__content) { - padding: 8px 16px; + padding: 8px 8px 8px 12px; } } diff --git a/packages/layout/src/DesignToolbars.vue b/packages/layout/src/DesignToolbars.vue index 644ba96c3f..9021812019 100644 --- a/packages/layout/src/DesignToolbars.vue +++ b/packages/layout/src/DesignToolbars.vue @@ -8,6 +8,7 @@
    +
    @@ -19,10 +20,12 @@ import { reactive, nextTick } from 'vue' import { useLayout } from '@opentiny/tiny-engine-meta-register' import { ProgressBar } from '@opentiny/tiny-engine-common' +import ToolbarCollapse from './ToolbarCollapse.vue' export default { components: { - ProgressBar + ProgressBar, + ToolbarCollapse }, props: { toolbars: { @@ -34,13 +37,14 @@ export default { const leftBar = [] const rightBar = [] const centerBar = [] + const collapseBar = [] const state = reactive({ showDeployBlock: false }) props.toolbars.forEach((item) => { if (item.align === 'right') { - rightBar.push(item) + item?.collapsed ? collapseBar.push(item) : rightBar.push(item) } else if (item.align === 'center') { centerBar.push(item) } else { @@ -61,7 +65,8 @@ export default { leftBar, rightBar, centerBar, - state + state, + collapseBar } } } @@ -104,9 +109,9 @@ export default { justify-content: center; align-items: center; vertical-align: middle; - width: 32px; - height: 32px; - border-radius: 6px; + width: 26px; + height: 26px; + border-radius: 4px; position: relative; svg { cursor: pointer; diff --git a/packages/layout/src/ToolbarCollapse.vue b/packages/layout/src/ToolbarCollapse.vue new file mode 100644 index 0000000000..1838f3aa2f --- /dev/null +++ b/packages/layout/src/ToolbarCollapse.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/packages/settings/styles/src/Main.vue b/packages/settings/styles/src/Main.vue index 4fe909cee1..c8df17eda7 100644 --- a/packages/settings/styles/src/Main.vue +++ b/packages/settings/styles/src/Main.vue @@ -205,16 +205,17 @@ export default { + diff --git a/packages/toolbars/lang/meta.js b/packages/toolbars/lang/meta.js index 59f9cf628a..0c2659ad18 100644 --- a/packages/toolbars/lang/meta.js +++ b/packages/toolbars/lang/meta.js @@ -3,5 +3,7 @@ export default { type: 'toolbars', title: 'lang', align: 'right', - icon: '' + icon: '', + collapsed: true, + splitLine: true } diff --git a/packages/toolbars/lang/src/Main.vue b/packages/toolbars/lang/src/Main.vue index 9ae4f17c8d..3008fc6b7b 100644 --- a/packages/toolbars/lang/src/Main.vue +++ b/packages/toolbars/lang/src/Main.vue @@ -5,11 +5,15 @@ popper-class="toolbar-right-popover" append-to-body content="画布中英文切换" + :disabled="true" > @@ -41,6 +45,11 @@ export default { langVal.value = data.value }) + const langSvgIconNameMap = { + zh_CN: 'cn', + en_US: 'en' + } + const options = [ { value: 'zh_CN', @@ -58,7 +67,8 @@ export default { return { options, langVal, - changeLang + changeLang, + langSvgIconNameMap } } } diff --git a/packages/toolbars/lock/meta.js b/packages/toolbars/lock/meta.js index 0cf04b9396..31b874b4b2 100644 --- a/packages/toolbars/lock/meta.js +++ b/packages/toolbars/lock/meta.js @@ -3,5 +3,6 @@ export default { title: 'lock', type: 'toolbars', icon: '', - align: 'right' + align: 'right', + collapsed: true } diff --git a/packages/toolbars/lock/src/Main.vue b/packages/toolbars/lock/src/Main.vue index cae795ffcf..b8539c3d0d 100644 --- a/packages/toolbars/lock/src/Main.vue +++ b/packages/toolbars/lock/src/Main.vue @@ -6,9 +6,10 @@ popper-class="toolbar-right-popover" append-to-body :content="statusMessageMap[state.status]?.nextOptName" + :disabled="true" > diff --git a/packages/toolbars/logo/src/Main.vue b/packages/toolbars/logo/src/Main.vue index a3fbe74047..f2ef0634a7 100644 --- a/packages/toolbars/logo/src/Main.vue +++ b/packages/toolbars/logo/src/Main.vue @@ -3,7 +3,6 @@