@mybricks/plugin-ai 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rollupPluginBabelHelpers.js +164 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/dist/agents/app.js +335 -0
- package/dist/agents/app.js.map +1 -0
- package/dist/agents/common.js +483 -0
- package/dist/agents/common.js.map +1 -0
- package/dist/agents/custom.js +16 -0
- package/dist/agents/custom.js.map +1 -0
- package/dist/agents/index.js +38 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/knowledges/knowledge-base.js +579 -0
- package/dist/agents/knowledges/knowledge-base.js.map +1 -0
- package/dist/agents/knowledges/knowledge-node.js +228 -0
- package/dist/agents/knowledges/knowledge-node.js.map +1 -0
- package/dist/agents/knowledges/types.js +105 -0
- package/dist/agents/knowledges/types.js.map +1 -0
- package/dist/agents/utils/config.js +229 -0
- package/dist/agents/utils/config.js.map +1 -0
- package/dist/agents/workspace/coding-manager.js +20 -0
- package/dist/agents/workspace/coding-manager.js.map +1 -0
- package/dist/agents/workspace/components-manager.js +113 -0
- package/dist/agents/workspace/components-manager.js.map +1 -0
- package/dist/agents/workspace/outline-focus.js +167 -0
- package/dist/agents/workspace/outline-focus.js.map +1 -0
- package/dist/agents/workspace/outline-info.js +430 -0
- package/dist/agents/workspace/outline-info.js.map +1 -0
- package/dist/agents/workspace/page-tree-generator.js +70 -0
- package/dist/agents/workspace/page-tree-generator.js.map +1 -0
- package/dist/agents/workspace/workspace.js +251 -0
- package/dist/agents/workspace/workspace.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js +100 -0
- package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js +120 -0
- package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js +146 -0
- package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/test.js +242 -0
- package/dist/agents/workspace-by-knowledges/test.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/utils/components-manager.js +132 -0
- package/dist/agents/workspace-by-knowledges/utils/components-manager.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/utils/outline-focus.js +167 -0
- package/dist/agents/workspace-by-knowledges/utils/outline-focus.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/utils/outline-info.js +430 -0
- package/dist/agents/workspace-by-knowledges/utils/outline-info.js.map +1 -0
- package/dist/agents/workspace-by-knowledges/workspace.js +169 -0
- package/dist/agents/workspace-by-knowledges/workspace.js.map +1 -0
- package/dist/api/cloud-components.js +85 -0
- package/dist/api/cloud-components.js.map +1 -0
- package/dist/api-record-replay/manager.js +168 -0
- package/dist/api-record-replay/manager.js.map +1 -0
- package/dist/api-record-replay/recorder.js +107 -0
- package/dist/api-record-replay/recorder.js.map +1 -0
- package/dist/api-record-replay/replayer.js +136 -0
- package/dist/api-record-replay/replayer.js.map +1 -0
- package/dist/components/attachments/index.js +124 -0
- package/dist/components/attachments/index.js.map +1 -0
- package/dist/components/attachments/index.less.js +8 -0
- package/dist/components/attachments/index.less.js.map +1 -0
- package/dist/components/icons/index.js +112 -0
- package/dist/components/icons/index.js.map +1 -0
- package/dist/components/icons/index.less.js +8 -0
- package/dist/components/icons/index.less.js.map +1 -0
- package/dist/components/mention/index.js +19 -0
- package/dist/components/mention/index.js.map +1 -0
- package/dist/components/mention/index.less.js +8 -0
- package/dist/components/mention/index.less.js.map +1 -0
- package/dist/components/messages/index.js +429 -0
- package/dist/components/messages/index.js.map +1 -0
- package/dist/components/messages/index.less.js +8 -0
- package/dist/components/messages/index.less.js.map +1 -0
- package/dist/components/sender/index.js +244 -0
- package/dist/components/sender/index.js.map +1 -0
- package/dist/components/sender/index.less.js +8 -0
- package/dist/components/sender/index.less.js.map +1 -0
- package/dist/context/RequestStatusTracker.js +44 -0
- package/dist/context/RequestStatusTracker.js.map +1 -0
- package/dist/context/index.js +45 -0
- package/dist/context/index.js.map +1 -0
- package/dist/data.js +4 -0
- package/dist/data.js.map +1 -0
- package/dist/index.js +306 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js +27 -0
- package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js.map +1 -0
- package/dist/plugin-ai/package.json.js +8 -0
- package/dist/plugin-ai/package.json.js.map +1 -0
- package/dist/plugin-ai/test/index.js +206 -0
- package/dist/plugin-ai/test/index.js.map +1 -0
- package/dist/preset/createTemplates.js +29 -0
- package/dist/preset/createTemplates.js.map +1 -0
- package/dist/preset/index.js +13 -0
- package/dist/preset/index.js.map +1 -0
- package/dist/preset/prompts.js +34 -0
- package/dist/preset/prompts.js.map +1 -0
- package/dist/preset/user.js +7 -0
- package/dist/preset/user.js.map +1 -0
- package/dist/requestAsStream.js +269 -0
- package/dist/requestAsStream.js.map +1 -0
- package/dist/rxai/node_modules/idb/build/index.js +277 -0
- package/dist/rxai/node_modules/idb/build/index.js.map +1 -0
- package/dist/rxai/src/agent/base.js +16 -0
- package/dist/rxai/src/agent/base.js.map +1 -0
- package/dist/rxai/src/agent/planning.js +1076 -0
- package/dist/rxai/src/agent/planning.js.map +1 -0
- package/dist/rxai/src/agent/rxai.js +254 -0
- package/dist/rxai/src/agent/rxai.js.map +1 -0
- package/dist/rxai/src/error/base.js +39 -0
- package/dist/rxai/src/error/base.js.map +1 -0
- package/dist/rxai/src/prompt/base.js +11 -0
- package/dist/rxai/src/prompt/base.js.map +1 -0
- package/dist/rxai/src/prompt/planning.js +23 -0
- package/dist/rxai/src/prompt/planning.js.map +1 -0
- package/dist/rxai/src/prompt/tool.js +14 -0
- package/dist/rxai/src/prompt/tool.js.map +1 -0
- package/dist/rxai/src/request/request.js +123 -0
- package/dist/rxai/src/request/request.js.map +1 -0
- package/dist/rxai/src/tool/getHistoryRecords.js +65 -0
- package/dist/rxai/src/tool/getHistoryRecords.js.map +1 -0
- package/dist/rxai/src/tool/util.js +424 -0
- package/dist/rxai/src/tool/util.js.map +1 -0
- package/dist/rxai/src/utils/events.js +43 -0
- package/dist/rxai/src/utils/events.js.map +1 -0
- package/dist/rxai/src/utils/idb.js +240 -0
- package/dist/rxai/src/utils/idb.js.map +1 -0
- package/dist/rxai/src/utils/retry.js +32 -0
- package/dist/rxai/src/utils/retry.js.map +1 -0
- package/dist/rxai/src/utils/uuid.js +7 -0
- package/dist/rxai/src/utils/uuid.js.map +1 -0
- package/dist/startView/components/header/header.js +12 -0
- package/dist/startView/components/header/header.js.map +1 -0
- package/dist/startView/components/header/header.less.js +8 -0
- package/dist/startView/components/header/header.less.js.map +1 -0
- package/dist/startView/index.js +62 -0
- package/dist/startView/index.js.map +1 -0
- package/dist/startView/index.less.js +8 -0
- package/dist/startView/index.less.js.map +1 -0
- package/dist/tools/analyze-and-expand-prd.js +116 -0
- package/dist/tools/analyze-and-expand-prd.js.map +1 -0
- package/dist/tools/analyze-requirement-and-components.js +208 -0
- package/dist/tools/analyze-requirement-and-components.js.map +1 -0
- package/dist/tools/answer.js +33 -0
- package/dist/tools/answer.js.map +1 -0
- package/dist/tools/build-process.js +550 -0
- package/dist/tools/build-process.js.map +1 -0
- package/dist/tools/coding-subagent-as-tool.js +101 -0
- package/dist/tools/coding-subagent-as-tool.js.map +1 -0
- package/dist/tools/generate-ui-content.js +528 -0
- package/dist/tools/generate-ui-content.js.map +1 -0
- package/dist/tools/index.js +31 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/open-dsl.js +49 -0
- package/dist/tools/open-dsl.js.map +1 -0
- package/dist/tools/refactor-ui-content.js +292 -0
- package/dist/tools/refactor-ui-content.js.map +1 -0
- package/dist/tools/utils.js +832 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/view/components/header/header.js +59 -0
- package/dist/view/components/header/header.js.map +1 -0
- package/dist/view/components/header/header.less.js +8 -0
- package/dist/view/components/header/header.less.js.map +1 -0
- package/dist/view/index.js +184 -0
- package/dist/view/index.js.map +1 -0
- package/dist/view/index.less.js +8 -0
- package/dist/view/index.less.js.map +1 -0
- package/package.json +33 -6
- package/src/agents/app.ts +0 -173
- package/src/agents/common.ts +0 -111
- package/src/agents/index.ts +0 -7
- package/src/components/icons/index.less +0 -8
- package/src/components/icons/index.tsx +0 -24
- package/src/components/messages/index.less +0 -806
- package/src/components/messages/index.tsx +0 -236
- package/src/context/index.ts +0 -21
- package/src/data.ts +0 -5
- package/src/index.tsx +0 -84
- package/src/mock.ts +0 -1267
- package/src/startView/index.less +0 -216
- package/src/startView/index.tsx +0 -229
- package/src/tools/analyze-and-expand-prd.ts +0 -166
- package/src/tools/answer-user.ts +0 -35
- package/src/tools/focus-element.ts +0 -47
- package/src/tools/generate-page.ts +0 -750
- package/src/tools/get-component-info-by-ids.ts +0 -166
- package/src/tools/get-component-info.ts +0 -53
- package/src/tools/get-components-doc-and-prd.ts +0 -137
- package/src/tools/get-focus-mybricks-dsl.ts +0 -26
- package/src/tools/get-mybricks-dsl.ts +0 -73
- package/src/tools/index.ts +0 -25
- package/src/tools/modify-component.ts +0 -385
- package/src/tools/type.d.ts +0 -12
- package/src/tools/utils.ts +0 -62
- package/src/types.d.ts +0 -65
- package/src/view/components/header/header.less +0 -17
- package/src/view/components/header/header.tsx +0 -15
- package/src/view/components/index.ts +0 -3
- package/src/view/components/messages/messages.less +0 -228
- package/src/view/components/messages/messages.tsx +0 -172
- package/src/view/components/sender/sender.less +0 -44
- package/src/view/components/sender/sender.tsx +0 -62
- package/src/view/index.less +0 -5
- package/src/view/index.tsx +0 -18
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { RxaiError } from '../rxai/src/error/base.js';
|
|
3
|
+
import '../rxai/node_modules/idb/build/index.js';
|
|
4
|
+
import 'node-forge';
|
|
5
|
+
import { fileFormat } from '../rxai/src/prompt/base.js';
|
|
6
|
+
import { createActionsParser, ComIdTransform, PromiseStack, getFiles, getComponentOperationSummary } from './utils.js';
|
|
7
|
+
import { context } from '../context/index.js';
|
|
8
|
+
|
|
9
|
+
var NAME = 'refactor-components-in-canvas';
|
|
10
|
+
refactorUiContent.toolName = NAME;
|
|
11
|
+
function refactorUiContent(config) {
|
|
12
|
+
var _config$getFocusEleme;
|
|
13
|
+
var streamActionsParser = createActionsParser({
|
|
14
|
+
enabledActionTags: context.enabledActionTags
|
|
15
|
+
});
|
|
16
|
+
createActionsParser({
|
|
17
|
+
enabledActionTags: context.enabledActionTags
|
|
18
|
+
});
|
|
19
|
+
var hasChildren = config.getFocusElementHasChildren() !== false;
|
|
20
|
+
var fileNameToContent = {};
|
|
21
|
+
var displayContent = "";
|
|
22
|
+
|
|
23
|
+
// TODO,因为updateCom不支持修改_root_,所以在聚焦组件时修改页面使用updatePage,目前是用第一个action的ID来判断是修改页面还是修改组件
|
|
24
|
+
var firstActionId;
|
|
25
|
+
var actionType = 'page';
|
|
26
|
+
var pageId = config === null || config === void 0 ? void 0 : config.getTargetId();
|
|
27
|
+
var comIdTransform = new ComIdTransform(config.getComIds());
|
|
28
|
+
var promiseStack = new PromiseStack();
|
|
29
|
+
return {
|
|
30
|
+
name: NAME,
|
|
31
|
+
displayName: "局部修改/重构",
|
|
32
|
+
description: "\u6839\u636E\u7528\u6237\u9700\u6C42/\u9644\u4EF6\u56FE\u7247\u5BF9\u753B\u5E03\u4E2D\u7684UI\u5185\u5BB9\u8FDB\u884C\u5C40\u90E8\u4FEE\u6539/\u91CD\u6784/\u79FB\u52A8/\u5220\u9664\u3002\n\u53C2\u6570\uFF1A\u65E0\n\u5DE5\u5177\u5206\u7C7B\uFF1A\u64CD\u4F5C\u6267\u884C\u7C7B\n\u4F5C\u7528\uFF1A\n 1. \u5C40\u90E8\u4FEE\u6539\u7EC4\u4EF6\u914D\u7F6E\uFF1B\n 2. \u901A\u8FC7\u6DFB\u52A0/\u5220\u9664\u7EC4\u4EF6\u6765\u91CD\u6784\u6574\u4E2A\u7EC4\u4EF6\u63D2\u69FD\u4E2D\u7684UI\u5185\u5BB9\uFF1B\n 3. \u5BF9\u7EC4\u4EF6\u8FDB\u884C\u79FB\u52A8\u548C\u5220\u9664\uFF1B\n\u524D\u7F6E\u4F9D\u8D56\uFF1A\n - \u5FC5\u987B\u786E\u4FDD\u4E4B\u524D\u8FDB\u884C\u8FC7\u300C\u83B7\u53D6DSL\u300D\uFF1B\n - \u5982\u679C\u9700\u8981\u4FEE\u6539\u7EC4\u4EF6\u914D\u7F6E\uFF0C\u786E\u4FDD\u4E4B\u524D\u6709\u6267\u884C\u8FC7\u300C\u83B7\u53D6DSL\u300D\uFF0C\u8FD9\u4E2A\u5DE5\u5177\u90FD\u4F1A\u81EA\u52A8\u83B7\u53D6\u7EC4\u4EF6\u4F7F\u7528\u6587\u6863\uFF0C\u7EC4\u4EF6\u7684\u4FEE\u6539\u5FC5\u987B\u4E25\u683C\u53C2\u8003\u7EC4\u4EF6\u4F7F\u7528\u6587\u6863\uFF1B\n - \u5982\u679C\u9700\u8981\u6DFB\u52A0\u7EC4\u4EF6\uFF0C\u786E\u4FDD\u4E4B\u524D\u6709\u8FDB\u884C\u8FC7\u300C\u7EC4\u4EF6\u9009\u578B\u300D\uFF0C\u6DFB\u52A0\u7EC4\u4EF6\u5FC5\u987B\u901A\u8FC7\u7EC4\u4EF6\u9009\u578B\u6765\u83B7\u53D6\u7EC4\u4EF6\u914D\u7F6E\u6587\u6863\uFF1B\n\u6CE8\u610F\uFF1A\u6B64\u5DE5\u5177\u53EA\u80FD\u5BF9UI\u5185\u5BB9\u8FDB\u884C\u64CD\u4F5C\u3002\n\n\u4F7F\u7528\u573A\u666F\u793A\u4F8B\uFF1A\n - \u8FD9\u4E2A\u5361\u7247\u6539\u6210\u7F8E\u56E2\u8D2D\u7269\u5361\u7247\n \u5206\u6790\uFF1A\u7531\u4E8E\u5361\u7247\u5185\u5BB9\u5B8C\u5168\u53D8\u5316\uFF0C\u53EF\u80FD\u6D89\u53CA\u65B0\u589E\u7EC4\u4EF6\uFF0C\u5E76\u4E14\u9700\u8981\u4FEE\u6539\u5361\u7247\u7EC4\u4EF6\u7684\u914D\u7F6E\uFF0C\u6240\u4EE5\u9700\u8981\u300C\u83B7\u53D6DSL\u300D->\u300C\u7EC4\u4EF6\u9009\u578B\u5206\u6790\u300D-> \u300C\u5C40\u90E8\u91CD\u6784\u300D\u7684\u89C4\u5212\n - \u5185\u5BB9\u4E0D\u7B26\u5408\u8981\u6C42\uFF0C\u4FEE\u6539\u91CC\u9762\u7684\u5185\u5BB9\n \u5206\u6790\uFF1A\u7531\u4E8E\u9700\u8981\u4FEE\u6539\u91CC\u9762\u7684\u5185\u5BB9\u53EF\u80FD\u6D89\u53CA\u65B0\u589E\u7EC4\u4EF6\uFF0C\u6240\u4EE5\u9700\u8981\u300C\u83B7\u53D6DSL\u300D->\u300C\u7EC4\u4EF6\u9009\u578B\u5206\u6790\u300D->\u300C\u5C40\u90E8\u91CD\u6784\u300D\u7684\u89C4\u5212\n - \u4FEE\u6539XX\u7EC4\u4EF6\u7684\u6837\u5F0F/\u914D\u7F6E\n \u5206\u6790\uFF1A\u7531\u4E8E\u4EC5\u4FEE\u6539\u7EC4\u4EF6\u914D\u7F6E\uFF0C\u6240\u4EE5\u4EC5\u9700\u8981\u300C\u83B7\u53D6DSL\u300D->\u300C\u5C40\u90E8\u91CD\u6784\u300D\u7684\u89C4\u5212\n - \u56FE\u7247\u6362\u4E2A\u94FE\u63A5\n \u5206\u6790\uFF1A\u7531\u4E8E\u4EC5\u4FEE\u6539\u7EC4\u4EF6\u914D\u7F6E\uFF0C\u6240\u4EE5\u4EC5\u9700\u8981\u300C\u83B7\u53D6DSL\u300D->\u300C\u5C40\u90E8\u91CD\u6784\u300D\u7684\u89C4\u5212\n - \u6DFB\u52A0\u4E00\u4E2AXX\u7EC4\u4EF6\n \u5206\u6790\uFF1A\u7531\u4E8E\u9700\u8981\u65B0\u589E\u7EC4\u4EF6\uFF0C\u6240\u4EE5\u9700\u8981\u300C\u83B7\u53D6DSL\u300D->\u300C\u7EC4\u4EF6\u9009\u578B\u5206\u6790\u300D->\u300C\u5C40\u90E8\u91CD\u6784\u300D\u7684\u89C4\u5212\n - \u5220\u9664\u7EC4\u4EF6\n \u5206\u6790\uFF1A\u7531\u4E8E\u4EC5\u5220\u9664\u7EC4\u4EF6\uFF0C\u6240\u4EE5\u4EC5\u9700\u8981\u300C\u5C40\u90E8\u91CD\u6784\u300D\u7684\u89C4\u5212\n - \u548C\u67D0\u67D0\u4EA4\u6362\u4F4D\u7F6E\n \u5206\u6790\uFF1A\u7531\u4E8E\u79FB\u52A8\u7EC4\u4EF6\u9700\u8981\u6307\u5BFC\u63D2\u69FDid\u53CA\u5176\u5B50\u7EC4\u4EF6\u60C5\u51B5\uFF0C\u6240\u4EE5\u4EC5\u9700\u8981\u300C\u83B7\u53D6DSL\u300D->\u300C\u5C40\u90E8\u91CD\u6784\u300D\u7684\u89C4\u5212\n",
|
|
33
|
+
getPrompts() {
|
|
34
|
+
return "<\u5DE5\u5177\u603B\u89C8>\n \u4F60\u662F\u4E00\u4E2A\u4FEE\u6539UI\u533A\u57DF\u642D\u5EFA\u6548\u679C\u7684\u5DE5\u5177\uFF0C\u4F60\u4F5C\u4E3AMyBricks\u4F4E\u4EE3\u7801\u5E73\u53F0\uFF08\u4EE5\u4E0B\u7B80\u79F0MyBricks\u5E73\u53F0\u6216MyBricks\uFF09\u7684\u8D44\u6DF1\u642D\u5EFA\u52A9\u624B\uFF0C\u53CA\u5BA2\u670D\u4E13\u5BB6\uFF0C\u7ECF\u9A8C\u4E30\u5BCC\u3001\u5B9E\u4E8B\u6C42\u662F\u3001\u903B\u8F91\u4E25\u8C28\u3002\n\n <\u4EFB\u52A1\u76EE\u6807>\n \u4F60\u7684\u4EFB\u52A1\u662F\u901A\u8FC7 actions \u5E8F\u5217\u5B8C\u6210\u7528\u6237\u7684\u76EE\u6807\u3002\n !IMPORTANT: \u5F53\u524D\u5DE5\u5177\u53EA\u80FD\u5B8C\u6210UI\u754C\u9762\u642D\u5EFA\uFF0C\u4E5F\u5C31\u662F\u53EA\u80FD\u642D\u5EFAUI\u90E8\u5206\uFF0C\u53EA\u80FD\u4FEE\u6539/\u914D\u7F6EUI\u7EC4\u4EF6\uFF0C\u903B\u8F91\u90E8\u5206\u8BF7\u7559\u5230\u540E\u7EED\u7684\u903B\u8F91\u642D\u5EFA\u5DE5\u5177\u4E2D\u5B8C\u6210\u3002\n </\u4EFB\u52A1\u76EE\u6807>\n</\u5DE5\u5177\u603B\u89C8>\n\n<\u5F53\u524D\u753B\u5E03\u6839\u7EC4\u4EF6\u4FE1\u606F>\n".concat(config.getRootComponentDoc(), "\n\nIMPORTANT: \u5982\u679C\u8981\u4FEE\u6539UI\u6839\u7EC4\u4EF6\uFF0C\u8BF7\u4F7F\u7528\u6B64\u6587\u6863\u3002\n</\u5F53\u524D\u753B\u5E03\u6839\u7EC4\u4EF6\u4FE1\u606F>\n\n<\u5982\u4F55\u642D\u5EFAUI\u4EE5\u53CA\u4FEE\u6539>\n \u901A\u8FC7\u4E00\u7CFB\u5217\u7684action\u6765\u5206\u6B65\u9AA4\u5B8C\u6210\u5BF9\u7EC4\u4EF6\u7684\u4FEE\u6539\uFF0C\u8BF7\u8FD4\u56DE\u4EE5\u4E0B\u683C\u5F0F\u4EE5\u9A71\u52A8MyBricks\u5BF9\u7EC4\u4EF6\u8FDB\u884C\u4FEE\u6539\uFF1A\n \n <\u5173\u4E8Eactions>\n actions.json\u6587\u4EF6\u7531\u591A\u4E2Aaction\u6784\u6210,\u6BCF\u4E2A action \u5728\u7ED3\u6784\u4E0A\u90FD\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u683C\u5F0F\uFF1A[comId, target, type, params];\n - comId \u4EE3\u8868\u8981\u64CD\u4F5C\u7684\u76EE\u6807\u7EC4\u4EF6\u7684id(\u5BF9\u4E8E\u9700\u8981\u751F\u6210\u7684\u65B0\u7684id\uFF0C\u5FC5\u987B\u91C7\u7528u_xxxxx\uFF0Cxxxxx\u662F3-7\u4F4D\u552F\u4E00\u7684\u5B57\u6BCD\u6570\u5B57\u7EC4\u5408);\n - target \u6307\u7684\u662F\u7EC4\u4EF6\u7684\u6574\u4F53\u6216\u67D0\u4E2A\u90E8\u5206\uFF0C\u4EE5\u9009\u62E9\u5668\u7684\u5F62\u5F0F\u8868\u793A\n - \u5F53type=addChild\u65F6\uFF0Ctarget\u4E3A\u63D2\u69FDid;\n - \u5F53type=move\u65F6\uFF0Ctarget\u4E3A:root\u6216\u63D2\u69FDid;\n - type action\u7684\u7C7B\u578B\uFF0C\u5305\u62EC\u4E86 setLayout\u3001doConfig\u3001addChild\u3001move\u3001delete \u52A8\u4F5C;\n - params \u4E3A\u4E0D\u540Ctype\u7C7B\u578B\u5BF9\u5E94\u7684\u53C2\u6570;\n \n \u7EFC\u5408\u800C\u8A00\uFF0C\u6BCF\u4E2Aaction\u7684\u8BED\u4E49\u662F\uFF1A\u5BF9\u67D0\u4E2A\u7EC4\u4EF6(comId)\u7684\u6574\u4F53\u6216\u67D0\u4E2A\u90E8\u5206(target)\uFF0C\u6267\u884C\u67D0\u4E2A\u52A8\u4F5C(type)\uFF0C\u5E76\u4F20\u5165\u53C2\u6570(params)\u3002\n \n \u6CE8\u610F\uFF1A\n - \u5728\u8FD4\u56DE\u591A\u4E2A\u6B65\u9AA4\u65F6\uFF0C\u52A1\u5FC5\u6CE8\u610F\u5176\u903B\u8F91\u987A\u5E8F\uFF0C\u4F8B\u5982\u6709\u4E9Baction\u9700\u8981\u5148\u5B8C\u6210\uFF0C\u540E\u7EED\u7684action\uFF08\u53EF\u80FD\u53D7\u63A7\u4E8EifVisible,\u53EA\u6709ifVislble\u8FD4\u56DEtrue\u624D\u80FD\u4F7F\u7528\uFF09\u624D\u80FD\u8FDB\u884C\uFF1B\n - \u6709\u4E9B\u4FEE\u6539\u9700\u8981\u5148\u5B8C\u6210\u6574\u4F53\u3001\u518D\u8FDB\u884C\u5C40\u90E8\u7684\u4FEE\u6539\uFF1B\n \n \u5404action\u8BE6\u7EC6\u8BF4\u660E\u5982\u4E0B\uFF1A\n \n <setLayout>\n - \u8BBE\u7F6E\u7EC4\u4EF6\u7684\u5E03\u5C40\u548C\u5C3A\u5BF8\u4FE1\u606F\uFF0Cparams\u7684\u683C\u5F0F\u4EE5Typescript\u7684\u5F62\u5F0F\u8BF4\u660E\u5982\u4E0B\uFF1A\n \n ```typescript\n /**\n * \u5BBD\u9AD8\u5C3A\u5BF8\n * number - \u5177\u4F53\u7684px\u503C\n * fit-content - \u9002\u5E94\u5185\u5BB9\n * 100% - \u586B\u5145\uFF0C\u4EC5\u5141\u8BB8100%\uFF0C\u4E0D\u5141\u8BB8\u5176\u4ED6\u767E\u5206\u6BD4\u5BBD\u5EA6\n * auto - \u81EA\u52A8\u586B\u5145\uFF0C\u7B49\u540C\u4E8Eflex=1\n * \u53EA\u80FD\u662F\u4E09\u8005\u5176\u4E00\uFF0C\u660E\u786E\u4E0D\u5141\u8BB8\u4F7F\u7528\u5176\u4ED6\u5C5E\u6027\uFF0C\u6BD4\u5982calc\u7B49\u65B9\u6CD5\n */\n type Size = number | \"fit-content\" | \"100%\" | \"auto\"\n \n /** flex\u4E2D\u5B50\u7EC4\u4EF6\u5B9A\u4F4D\uFF0C\u53EF\u914D\u7F6E\u5982\u4E0Blayout */\n type setLayout_flex_params = {\n width?: Size;\n height?: Size;\n /** \u4E0A\u5916\u8FB9\u8DDD */\n marginTop?: number;\n /** \u53F3\u5916\u8FB9\u8DDD */\n marginRight?: number;\n /** \u4E0B\u5916\u8FB9\u8DDD */\n marginBottom?: number;\n /** \u5DE6\u5916\u8FB9\u8DDD */\n marginLeft?: number;\n }\n ```\n \n \u6CE8\u610F\uFF1A\n - 1. \u53EA\u6709\u5728flex\u5E03\u5C40\u4E2D\u7684\u7EC4\u4EF6\uFF0C\u53EF\u4EE5\u5728layout\u4E2D\u4F7F\u7528margin\u76F8\u5173\u914D\u7F6E\uFF1B\n\n ```typescript\n /** \u5BF9\u4E8Eflex\u5E03\u5C40\u7684\u63D2\u69FD\uFF0C\u6211\u4EEC\u53EF\u4EE5\u6DFB\u52A0absolute\u5B9A\u4F4D\u7684\u7EC4\u4EF6 */\n type setLayout_absolute_params = {\n position: 'absolute';\n width?: Size;\n height?: Size;\n /** \u8DDD\u79BB\u5DE6\u4FA7 */\n left?: number;\n /** \u8DDD\u79BB\u53F3\u4FA7 */\n right?: number;\n /** \u8DDD\u79BB\u4E0A\u65B9 */\n top?: number;\n /** \u8DDD\u79BB\u4E0B\u65B9 */\n bottom?: number;\n }\n ```\n \n ```typescript\n /** \u5982\u679C\u7EC4\u4EF6\u672C\u8EAB\u662Ffixed\u7C7B\u578B\u5B9A\u4F4D\uFF0C\u53EF\u914D\u7F6E\u5982\u4E0Blayout */\n type setLayout_fixed_params = {\n position: 'fixed';\n width?: Size;\n height?: Size;\n /** \u8DDD\u79BB\u5DE6\u4FA7 */\n left?: number;\n /** \u8DDD\u79BB\u53F3\u4FA7 */\n right?: number;\n /** \u8DDD\u79BB\u4E0A\u65B9 */\n top?: number;\n /** \u8DDD\u79BB\u4E0B\u65B9 */\n bottom?: number;\n }\n ```\n \n \u4F8B\u5982\uFF0C\u5F53\u7528\u6237\u8981\u6C42\u5C06\u5F53\u524D\u7EC4\u4EF6\u7684\u5BBD\u5EA6\u8BBE\u7F6E\u4E3A200px\uFF0C\u53EF\u4EE5\u8FD4\u56DE\u4EE5\u4E0B\u5185\u5BB9\uFF1A\n ").concat(fileFormat({
|
|
35
|
+
content: "[\"u_ou1rs\",\":root\",\"setLayout\",{\"width\":200}]",
|
|
36
|
+
fileName: '样式配置步骤.json'
|
|
37
|
+
}), "\n \n \u6CE8\u610F\uFF1A\u5F53\u9700\u8981\u4FEE\u6539\u5E03\u5C40\u548C\u5C3A\u5BF8\u4FE1\u606F\u65F6\uFF0C\u4EC5\u8FD4\u56DE\u7528\u6237\u8981\u6C42\u7684\u5185\u5BB9\u5373\u53EF\uFF0C\u65E0\u9700\u8FD4\u56DE\u6240\u6709\u7684\u5E03\u5C40\u548C\u5C3A\u5BF8\u4FE1\u606F\u5C5E\u6027\u3002\n </setLayout>\n \n <doConfig>\n - \u914D\u7F6E\u7EC4\u4EF6\uFF0C\u4F7F\u7528<\u7EC4\u4EF6\u53EF\u914D\u7F6E\u7684\u5185\u5BB9/>\u7684\u914D\u7F6E\u9879\uFF0C\u5BF9\u7EC4\u4EF6\u7684\u5C5E\u6027\u6216\u6837\u5F0F\u8FDB\u884C\u914D\u7F6E\uFF1B\n - \u5982\u679C\u914D\u7F6E\u9879\u7684type\u5728 <\u5E38\u89C1editType\u7684\u4F7F\u7528 /> \u4E2D\u6709\u8BF4\u660E\uFF0C\u52A1\u5FC5\u9075\u5B88\u5176\u4E2D\u7684\u8BF4\u660E\u53CA\u6CE8\u610F\u4E8B\u9879\uFF1B\n \n - params\u7684\u683C\u5F0F\u4EE5Typescript\u7684\u5F62\u5F0F\u8BF4\u660E\u5982\u4E0B\uFF1A\n \n ```typescript\n //\u914D\u7F6E\u6837\u5F0F\n type configStyle_params = {\n path:string,//\u5728<\u5F53\u524D\u7EC4\u4EF6\u53EF\u914D\u7F6E\u7684\u5185\u5BB9/>\u4E2D\u5BF9\u5E94\u7684\u914D\u7F6E\u9879path\n style: {\n [key: string]: propertyValue; //\u5143\u7D20\u7684\u5185\u8054\u6837\u5F0F\u5BF9\u8C61\uFF0C\u4EC5\u80FD\u914D\u7F6Estyle\u7F16\u8F91\u5668description\u4E2D\u58F0\u660E\u7684\u5C5E\u6027\uFF0C\u4E0D\u8981\u8D85\u51FA\u8303\u56F4\u3002\n }\n }\n \n //\u914D\u7F6E\u5C5E\u6027\n type configProperty_params = {\n path:string,//\u5728<\u5F53\u524D\u7EC4\u4EF6\u53EF\u914D\u7F6E\u7684\u5185\u5BB9/>\u4E2D\u5BF9\u5E94\u7684\u914D\u7F6E\u9879path\n value: any//\u9700\u8981\u914D\u7F6E\u7684value\n }\n ```\n \n \u4F8B\u5982\uFF1A\n - \u5C5E\u6027\u7684\u914D\u7F6E\uFF1A\n ").concat(fileFormat({
|
|
38
|
+
content: "[\"u_ou1rs\",\":root\",\"doConfig\",{\"path\":\"\u5E38\u89C4/\u6807\u9898\",\"value\":\"\u6807\u9898\u5185\u5BB9\"}]",
|
|
39
|
+
fileName: '样式配置步骤.json'
|
|
40
|
+
}), "\n \n - \u6837\u5F0F\u7684\u914D\u7F6E\uFF1A\n ").concat(fileFormat({
|
|
41
|
+
content: "[\"u_ou1rs\",\":root\",\"doConfig\",{\"path\":\"\u5E38\u89C4/banner\u6837\u5F0F\",\"style\":{\"backgroundColor\":\"red\"}}]",
|
|
42
|
+
fileName: '样式配置步骤.json'
|
|
43
|
+
}), "\n \n \u6CE8\u610F\uFF1A\n - \u5F53\u9700\u8981\u4FEE\u6539\u7EC4\u4EF6\u7684\u6837\u5F0F\u65F6\uFF0C\u53EA\u5141\u8BB8\u4FEE\u6539style\u7F16\u8F91\u5668description\u4E2D\u58F0\u660E\u7684\u5C5E\u6027\uFF1B\n - \u5F53\u9700\u8981\u4FEE\u6539\u7EC4\u4EF6\u7684\u6837\u5F0F\u65F6\uFF0C\u80CC\u666F\u7EDF\u4E00\u4F7F\u7528background,\u800C\u975EbackgroundColor\u7B49\u5C5E\u6027\uFF1B\n </doConfig>\n\n <addChild>\n - addChild\u4EE3\u8868\u5411\u76EE\u6807\u7EC4\u4EF6\u7684\u63D2\u69FD\u4E2D\u6DFB\u52A0UI\u7EC4\u4EF6\uFF0C\u9700\u8981\u6EE1\u8DB3\u4E24\u4E2A\u6761\u4EF6:\n 1. \u76EE\u6807\u7EC4\u4EF6\u4E2D\u76EE\u524D\u6709\u5B9A\u4E49\u63D2\u69FD\uFF0C\u4E14\u5DF2\u77E5\u63D2\u69FD\u7684id\u662F\u4EC0\u4E48\uFF1B\n 2. \u88AB\u6DFB\u52A0\u7684\u7EC4\u4EF6\u53EA\u80FD\u4F7F\u7528 <\u5141\u8BB8\u6DFB\u52A0\u7684\u7EC4\u4EF6/> \u4E2D\u58F0\u660E\u7684*UI\u7EC4\u4EF6*\uFF1B\n - params\u7684\u683C\u5F0F\u4EE5Typescript\u7684\u5F62\u5F0F\u8BF4\u660E\u5982\u4E0B\uFF1A\n \n ```typescript\n type add_params = {\n title:string //\u88AB\u6DFB\u52A0\u7EC4\u4EF6\u7684\u6807\u9898\n ns:string //\u5728 <\u5141\u8BB8\u6DFB\u52A0\u7684\u7EC4\u4EF6 /> \u4E2D\u58F0\u660E\u7684UI\u7EC4\u4EF6namespace\n comId:string // \u65B0\u6DFB\u52A0\u7684\u7EC4\u4EF65\u4F4Duuid\uFF0C\u7981\u6B62\u91CD\u590D\uFF0C\u5728\u6240\u6709UI\u7EC4\u4EF6\u4E2D\u552F\u4E00\n index?: number | 'last' = 'last' // \u6DFB\u52A0\u5230\u63D2\u69FD\u7684\u4F4D\u7F6E\uFF0Cindex=0\u8868\u793A\u7B2C\u4E00\u4F4D\uFF0Cindex=1\u8868\u793A\u7B2C\u4E8C\u4F4D\u3002\u4E0D\u6307\u5B9A\u65F6\u9ED8\u8BA4\u4E3Alast\uFF0C\u6DFB\u52A0\u5230\u672B\u5C3E\n layout?: setLayout_flex_params \uFF5C setLayout_fixed_params \uFF5C setLayout_absolute_params //\u53EF\u9009\uFF0C\u6DFB\u52A0\u7EC4\u4EF6\u65F6\u53EF\u4EE5\u6307\u5B9A\u4F4D\u7F6E\u548C\u5C3A\u5BF8\u4FE1\u606F\n configs?: Array<configStyle_params | configProperty_params> // \u6DFB\u52A0\u7EC4\u4EF6\u53EF\u4EE5\u914D\u7F6E\u7684\u4FE1\u606F\n // \u6E32\u67D3\u4F18\u5316\n ignore?: boolean //\u53EF\u9009\uFF0C\u662F\u5426\u6DFB\u52A0ignore\u6807\u8BB0\n enhance?: boolean //\u53EF\u9009\uFF0C\u662F\u5426\u6DFB\u52A0enhance\u6807\u8BB0\n }\n ```\n \n \u4F8B\u5982\uFF1A\n - \u6DFB\u52A0\u6587\u672C\u7EC4\u4EF6\u5230\u63D2\u69FD\u672B\u5C3E\uFF1A\n ").concat(fileFormat({
|
|
44
|
+
content: "[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u7684\u6587\u672C\u7EC4\u4EF6\",\"ns\":\"namespace\u5360\u4F4D\",\"comId\":\"u_iiusd7\"}]",
|
|
45
|
+
fileName: '添加文本组件步骤.json'
|
|
46
|
+
}), "\n\n - \u6DFB\u52A0\u7EC4\u4EF6\u5E26\u6709\u914D\u7F6E\u5C5E\u6027\uFF0C\u540C\u65F6\u6307\u5B9A\u4F4D\u7F6E\uFF1A\n ").concat(fileFormat({
|
|
47
|
+
content: "[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"\u80CC\u666F\u56FE\",\"ns\":\"namespace\u5360\u4F4D\",\"comId\":\"u_iiusd7\",\"index\":2,\"layout\":{\"width\":\"100%\",\"height\":200,\"marginTop\":8,\"marginLeft\":12,\"marginRight\":12},\"configs\":[{\"path\":\"\u5E38\u89C4/\u56FE\u7247\u5730\u5740\",\"value\":\"https://ai.mybricks.world/image-search?term=\u98CE\u666F\"},{\"path\":\"\u6837\u5F0F/\u56FE\u7247\",\"style\":{\"borderRadius\":\"8px\"}}]}]",
|
|
48
|
+
fileName: '添加带配置属性的步骤.json'
|
|
49
|
+
}), "\n\n - \u6DFB\u52A0\u7EC4\u4EF6\u5E26index\u6307\u5B9A\u4F4D\u7F6E\uFF1A\n ").concat(fileFormat({
|
|
50
|
+
content: "[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u7684\u6587\u672C\u7EC4\u4EF6\",\"ns\":\"namespace\u5360\u4F4D\",\"comId\":\"u_iiusd7\",\"index\":2}]",
|
|
51
|
+
fileName: '添加带index指定位置的步骤.json'
|
|
52
|
+
}), "\n \n - \u6DFB\u52A0\u7EC4\u4EF6\u5E26ignore\u6807\u8BB0\uFF1A\n ").concat(fileFormat({
|
|
53
|
+
content: "[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u7684\u5E03\u5C40\u7EC4\u4EF6\",\"ns\":\"namespace\u5360\u4F4D\",\"comId\":\"u_iiusd7\",\"ignore\": true}]",
|
|
54
|
+
fileName: '添加带ignore标记的步骤.json'
|
|
55
|
+
}), "\n \n \u6CE8\u610F:\n - \u65B0\u6DFB\u52A0\u7684\u7EC4\u4EF6ID\u5FC5\u987B\u4F7F\u75285\u4F4D\u552F\u4E00\u7684\u5B57\u6BCD\u6570\u5B57\u7EC4\u5408\uFF0C\u7981\u6B62\u91CD\u590D\uFF0C\u5728\u6240\u6709UI\u7EC4\u4EF6\u4E2D\u552F\u4E00\uFF1B\n - index\u53C2\u6570\u63A7\u5236\u7EC4\u4EF6\u5728\u63D2\u69FD\u4E2D\u7684\u987A\u5E8F\u4F4D\u7F6E\u3002\u6267\u884CaddChild\u524D\uFF0C\u9700\u660E\u786E\u76EE\u6807\u4F4D\u7F6E\uFF1B\n </addChild>\n \n <move>\n - \u79FB\u52A8\u7EC4\u4EF6\uFF0C\u6216\u8005\u79FB\u52A8\u7EC4\u4EF6\u67D0\u4E2A\u63D2\u69FD\u4E0B\u7684\u6240\u6709\u7EC4\u4EF6\n - index\u4E3A\u76EE\u6807\u63D2\u69FD\u7684\u5177\u4F53\u4F4D\u7F6E\n - \u7531\u4E8E\u88AB\u6DFB\u52A0\u7684\u7EC4\u4EF6\u6C38\u8FDC\u5728\u6700\u540E\u4E00\u4F4D\uFF0C\u5982\u679C\u6709\u4F4D\u7F6E\u8981\u6C42\uFF0C\u53EF\u4EE5\u6DFB\u52A0\u4E00\u4E2Amove\u64CD\u4F5C\u6765\u79FB\u52A8\u4F4D\u7F6E\n\n - params\u7684\u683C\u5F0F\u4EE5Typescript\u7684\u5F62\u5F0F\u8BF4\u660E\u5982\u4E0B\uFF1A\n ```typescript\n type moveToComParams = {\n comId:string, // \u79FB\u52A8\u5230\u76EE\u6807\u7EC4\u4EF6\n slotId:string, // \u9700\u8981\u79FB\u52A8\u7684\u76EE\u6807\u63D2\u69FD\n index:number, // \u79FB\u52A8\u5230\u7684\u4F4D\u7F6E\uFF0Cindex=0\u8868\u793A\u653E\u5230\u7B2C\u4E00\u4F4D\uFF0Cindex=1\u8868\u793A\u653E\u5230\u7B2C\u4E8C\u4F4D\n }\n ```\n\n \u4F8B\u5982\uFF0C\u5F53\u7528\u6237\u8981\u6C42\u5C06\u7EC4\u4EF6u_ou1rs\u79FB\u52A8\u5230\u7EC4\u4EF6u_iek32\u7684\u67D0\u4E2A\u63D2\u69FD\u4E2D\uFF0C\u5E76\u4E14\u653E\u5230\u7B2C\u4E00\u4F4D\uFF0C\u53EF\u4EE5\u8FD4\u56DE\u4EE5\u4E0B\u5185\u5BB9\uFF1A\n ").concat(fileFormat({
|
|
56
|
+
content: "[\"u_ou1rs\",\":root\",\"move\",{\"comId\":\"u_iek32\",\"slotId\":\"\u63D2\u69FDid\",\"index\":0}]",
|
|
57
|
+
fileName: '移动组件步骤.json'
|
|
58
|
+
}), "\n </move>\n\n <delete>\n - \u5220\u9664\u7EC4\u4EF6\n\n \u4F8B\u5982\uFF0C\u5F53\u7528\u6237\u8981\u6C42\u5220\u9664\u7EC4\u4EF6u_o21rs\uFF0C\u53EF\u4EE5\u8FD4\u56DE\u4EE5\u4E0B\u5185\u5BB9\uFF1A\n ").concat(fileFormat({
|
|
59
|
+
content: "[\"u_o21rs\",\":root\",\"delete\"]",
|
|
60
|
+
fileName: '删除组件整体.json'
|
|
61
|
+
}), "\n\n \u6CE8\u610F\uFF1A\n - \u5220\u9664\u65F6\uFF0C\u5FC5\u987B\u5220\u9664\u7EC4\u4EF6\u7684\u6574\u4F53\uFF0C\u4E0D\u80FD\u5220\u9664\u7EC4\u4EF6\u7684\u67D0\u4E2A\u90E8\u5206\uFF0C\u6240\u4EE5\u4F7F\u7528:root\u9009\u62E9\u5668\u3002\n - \u5728\u89C4\u5212\u591A\u4E2Aaction\u65F6\uFF0C\u9700\u8981\u8003\u8651delete\u5BF9\u540E\u7EEDaddChild\u3001move\u64CD\u4F5C\u4E2Dindex\u53C2\u6570\u7684\u5F71\u54CD\n </delete>\n \n \u6CE8\u610F\uFF1Aactions\u6587\u4EF6\u6BCF\u4E00\u884C\u9075\u5FAA JSON \u8BED\u6CD5\uFF0C\u7981\u6B62\u975E\u6CD5\u4EE3\u7801\uFF0C\u7981\u6B62\u51FA\u73B0\u5185\u5BB9\u7701\u7565\u63D0\u793A\u3001\u5355\u884C\u6CE8\u91CA\u3001\u7701\u7565\u5B57\u7B26\u3002\n - actions\u8FD4\u56DE\u7684\u5185\u5BB9\u683C\u5F0F\u9700\u8981\u4E00\u884C\u4E00\u4E2Aaction\uFF0C\u6BCF\u4E00\u4E2Aaction\u9700\u8981\u538B\u7F29\uFF0C\u4E0D\u8981\u5305\u542B\u7F29\u8FDB\u7B49\u591A\u4F59\u7684\u7A7A\u767D\u5B57\u7B26\uFF1B\n - \u7981\u6B62\u5305\u542B\u4EFB\u4F55\u6CE8\u91CA\uFF08\u5305\u62EC\u5355\u884C//\u548C\u591A\u884C/* */\uFF09\n - \u7981\u6B62\u51FA\u73B0\u7701\u7565\u53F7(...)\u6216\u4EFB\u4F55\u5360\u4F4D\u7B26\n - \u786E\u4FDD\u6240\u6709\u4EE3\u7801\u90FD\u662F\u5B8C\u6574\u53EF\u6267\u884C\u7684\uFF0C\u4E0D\u5305\u542B\u793A\u4F8B\u7247\u6BB5\n - \u7981\u6B62\u4F7F\u7528{}\u3001{{}}\u8FD9\u7C7B\u53D8\u91CF\u7ED1\u5B9A\u8BED\u6CD5\uFF0C\u5E76\u4E0D\u652F\u6301\u6B64\u8BED\u6CD5\n - \u7981\u6B62\u4F7F\u7528\u975E\u6CD5\u5B57\u7B26\u6216\u7279\u6B8A\u7B26\u53F7\n - \u6240\u6709\u5185\u5BB9\u5747\u4E3A\u9759\u6001\u6570\u636E\uFF0C\u7981\u6B62\u89E3\u6784\uFF0C\u7981\u6B62\u4F7F\u7528\u53D8\u91CF\n\n \n \u6CE8\u610F\uFF1A\n - \u8FD4\u56DEactions\u6587\u4EF6\u5185\u5BB9\u65F6\uFF0C\u52A1\u5FC5\u6CE8\u610F\u64CD\u4F5C\u6B65\u9AA4\u7684\u5148\u540E\u987A\u5E8F\uFF1B\n - \u6709\u4E9B\u64CD\u4F5C\u9700\u8981\u5728\u524D\u9762\u64CD\u4F5C\u5B8C\u6210\u540E\u624D\u80FD\u8FDB\u884C\uFF1B\n - \u6709\u4E9B\u64CD\u4F5C\u9700\u8981\u5728\u5176\u4ED6\u64CD\u4F5C\u5F00\u542F\uFF08\u5E03\u5C14\u7C7B\u578B\u7684\u914D\u7F6E\u9879\uFF09\u540E\u624D\u80FD\u8FDB\u884C\uFF1B\n - \u7981\u6B62\u91CD\u590D\u4F7F\u7528\u76F8\u540C\u7684action\uFF1B\n </\u5173\u4E8Eactions>\n\n <UI\u642D\u5EFA\u539F\u5219>\n \u754C\u9762\u53EA\u6709\u4E24\u7C7B\u57FA\u672C\u8981\u7D20:\u7EC4\u4EF6\u3001\u4EE5\u53CA\u7EC4\u4EF6\u7684\u63D2\u69FD\uFF0C\u7EC4\u4EF6\u7684\u63D2\u69FD\u53EF\u4EE5\u5D4C\u5957\u5176\u4ED6\u7EC4\u4EF6\u3002\n \n <\u7EC4\u4EF6\u7684\u5B9A\u4F4D\u539F\u5219>\n \u7EC4\u4EF6\u7684\u5B9A\u4F4D\u6709\u4E09\u79CD\u65B9\u5F0F\uFF1Aflex\u5B9A\u4F4D\u3001absolute\u5B9A\u4F4D\u3001fixed\u5B9A\u4F4D\u3002\n\n **flex\u5B9A\u4F4D**\n - \u7EC4\u4EF6\u4F1A\u76F8\u5BF9\u4E8E\u6240\u5728\u7684\u63D2\u69FD\u8FDB\u884C\u5B9A\u4F4D\uFF1B\n - \u901A\u8FC7\u5C3A\u5BF8\uFF08width\u3001height\uFF09 + \u5916\u95F4\u8DDD\uFF08margin\uFF09\u6765\u8FDB\u884C\u5B9A\u4F4D\uFF1B\n - flex\u5E03\u5C40\u4E0B\u7684\u7EC4\u4EF6\u4E0D\u5141\u8BB8\u4F7F\u7528left\u3001top\u3001right\u3001bottom\u7B49\u5B9A\u4F4D\u5C5E\u6027\uFF1B\n\n **absolute\u5B9A\u4F4D**\n - \u7EC4\u4EF6\u4F1A\u76F8\u5BF9\u4E8E\u5F53\u524D\u7EC4\u4EF6\u7684\u63D2\u69FD\u8FDB\u884C\u5B9A\u4F4D\uFF0C\u4E14\u8131\u79BB\u6587\u6863\u6D41\uFF1B\n - \u901A\u8FC7\u5C3A\u5BF8\uFF08width\u3001height\uFF09 + \u4F4D\u7F6E\uFF08left\u3001top\u3001right\u3001bottom\uFF09\u6765\u8FDB\u884C\u5B9A\u4F4D\uFF1B\n - absolute\u5B9A\u4F4D\u7684\u7EC4\u4EF6\u4E0D\u5141\u8BB8\u4F7F\u7528margin\uFF1B\n \n \u4F7F\u7528absolute\u5B9A\u4F4D\u7684\u4F8B\u5B50:\n ").concat(fileFormat({
|
|
62
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u7EDD\u5BF9\u5B9A\u4F4D\u7EC4\u4EF6\",\"comId\":\"u_fixed\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"position\":\"absolute\",\"width\":\"100%\",\"height\":84,\"top\":12,\"left\":0},\"configs\":[]}]",
|
|
63
|
+
fileName: '添加一个absolute定位组件.json'
|
|
64
|
+
}), "\n \n **fixed\u5B9A\u4F4D**\n - \u7EC4\u4EF6\u4F1A\u76F8\u5BF9\u4E8E\u6574\u4E2A\u753B\u5E03\u8FDB\u884C\u5B9A\u4F4D\uFF0C\u4E14\u8131\u79BB\u6587\u6863\u6D41\uFF1B\n - \u901A\u8FC7\u5C3A\u5BF8\uFF08width\u3001height\uFF09 + \u4F4D\u7F6E\uFF08left\u3001top\u3001right\u3001bottom\uFF09\u6765\u8FDB\u884C\u5B9A\u4F4D\uFF1B\n - fixed\u5B9A\u4F4D\u7684\u7EC4\u4EF6\u4E0D\u5141\u8BB8\u4F7F\u7528margin\uFF1B\n \n \u4F7F\u7528fixed\u5B9A\u4F4D\u7684\u4F8B\u5B50:\n ").concat(fileFormat({
|
|
65
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u56FA\u5B9A\u5B9A\u4F4D\u7EC4\u4EF6\",\"comId\":\"u_fixed\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"position\":\"fixed\",\"width\":\"100%\",\"height\":84,\"bottom\":0,\"left\":0},\"configs\":[]}]",
|
|
66
|
+
fileName: '添加一个fixed定位组件.json'
|
|
67
|
+
}), "\n\n \u5728\u63D2\u69FD\u7684\u4E0D\u540C\u5E03\u5C40\u4E0B\uFF0C\u7EC4\u4EF6\u7684\u5B9A\u4F4D\u7531\u6240\u5728\u63D2\u69FD\u7684\u5E03\u5C40\u65B9\u5F0F\u51B3\u5B9A\uFF1A\n - \u5728\u5F53\u524D\u7EC4\u4EF6\u7684\u63D2\u69FD\u4E2D\uFF0C\u53EF\u4EE5\u6DFB\u52A0fixed\u5B9A\u4F4D\u7684\u7EC4\u4EF6\uFF0C\u7981\u6B62\u5728\u5176\u4ED6\u63D2\u69FD\u4E2D\u6DFB\u52A0fixed\u5B9A\u4F4D\u7684\u7EC4\u4EF6\uFF1B\n - \u5982\u679C\u63D2\u69FD\u662Fflex\u5E03\u5C40\uFF0C\u5219\u5B50\u7EC4\u4EF6\u53EA\u80FD\u4F7F\u7528flex\u5B9A\u4F4D \u6216\u8005 absolute\u5B9A\u4F4D\uFF1B\n - \u5982\u679C\u63D2\u69FD\u662Frelative\u5E03\u5C40\uFF0C\u5219\u5B50\u7EC4\u4EF6\u53EA\u80FD\u4F7F\u7528absolute\u5B9A\u4F4D\uFF1B\n </\u7EC4\u4EF6\u7684\u5B9A\u4F4D\u539F\u5219>\n \n <\u5E03\u5C40\u539F\u5219>\n \u63D2\u69FD\u7684\u5E03\u5C40(display=flex)\u6307\u7684\u662F\u5BF9\u4E8E\u5185\u90E8\u7EC4\u4EF6\uFF08\u4EC5\u5BF9\u5176\u76F4\u63A5\u5B50\u7EC4\u4EF6\uFF0C\u5BF9\u4E8E\u5B50\u7EC4\u4EF6\u63D2\u69FD\u4E2D\u7684\u5B50\u7EC4\u4EF6\u65E0\u5F71\u54CD)\u7684\u5E03\u5C40\u7EA6\u675F:\n \n **flex\u5E03\u5C40**\n \uFF08\u57FA\u672C\u7B49\u540C\u4E8ECSS3\u89C4\u8303\u4E2D\u7684flex\u5E03\u5C40\uFF09\u63D2\u69FD\u4E2D\u7684\u6240\u6709\u5B50\u7EC4\u4EF6\u901A\u8FC7\u5BBD\u9AD8\u548Cmargin\u8FDB\u884C\u5E03\u5C40\u3002\n\n <\u8F85\u52A9\u6807\u8BB0\u4F7F\u7528>\n \u5728mybricks\u4E2D\uFF0C\u7EC4\u4EF6\u6700\u7EC8\u4F1A\u7ED8\u5236\u5230\u642D\u5EFA\u753B\u5E03\u4E0A\uFF0C\u786E\u5B9A\u6240\u6709\u7EC4\u4EF6\u7684\u5C3A\u5BF8\u548C\u4F4D\u7F6E\uFF0C\u53EF\u4EE5\u5C06\u591A\u4F59\u7684\u5D4C\u5957\u5E03\u5C40\u7EC4\u4EF6\u4F18\u5316\u6389\uFF0C\u6240\u4EE5\u9700\u8981\u901A\u8FC7\u8F85\u52A9\u6807\u8BB0ignore\u6765\u5FFD\u7565\u591A\u4F59\u7684\u5D4C\u5957\u5E03\u5C40\u3002\n \u914D\u7F6E\u6D41\u7A0B\u5982\u4E0B\uFF1A\n \u5F53\u5E03\u5C40\u7EC4\u4EF6\u7684\u7236\u7EC4\u4EF6\u4E5F\u4E3A\u5E03\u5C40\u7EC4\u4EF6\u65F6\uFF0C\u89C2\u5BDF\u5F53\u524D\u7EC4\u4EF6\u662F\u5426\u914D\u7F6E\u6837\u5F0F\uFF08\u8FB9\u6846\u3001\u80CC\u666F\u3001\u5185\u95F4\u8DDD\u7B49\uFF09\uFF0C\u662F\u5426\u53EF\u80FD\u9700\u8981\u652F\u6301\u4E8B\u4EF6\uFF08\u70B9\u51FB\uFF09\uFF0C\u7236\u7EC4\u4EF6\u662F\u5426\u4E5F\u662F\u5E03\u5C40\u7EC4\u4EF6\uFF1F\n - 1. \u5982\u679C\u5E03\u5C40\u7EC4\u4EF6\u4E0D\u914D\u7F6E\u6837\u5F0F\u4E5F\u4E0D\u9700\u8981\u70B9\u51FB\u529F\u80FD\uFF0C\u53EF\u4EE5\u6DFB\u52A0ignore\u6807\u8BB0\uFF0C\u8868\u793A\u8BE5\u5E03\u5C40\u7EC4\u4EF6\u4EC5\u627F\u62C5\u5E03\u5C40\u529F\u80FD\uFF0C\u53EF\u4EE5\u88AB\u4F18\u5316\u6389\uFF1B\n - 2. \u5982\u679C\u5E03\u5C40\u7EC4\u4EF6\u914D\u7F6E\u4E86\u6837\u5F0F\u6216\u8005\u6709\u53EF\u80FD\u9700\u8981\u70B9\u51FB\u529F\u80FD\uFF0C\u4E0D\u80FD\u6DFB\u52A0ignore\u6807\u8BB0\uFF0C\u8868\u793A\u8BE5\u5E03\u5C40\u7EC4\u4EF6\u627F\u62C5\u6837\u5F0F\u529F\u80FD\uFF0C\u4E0D\u80FD\u88AB\u4F18\u5316\u6389\uFF1B\n - 2.1 \u5982\u4F55\u5224\u65AD\u6709\u6CA1\u6709\u53EF\u80FD\u9700\u8981\u652F\u6301\u4E8B\u4EF6\uFF1F\n - 2.1.1 \u5982\u679C\u5F53\u524D\u5E03\u5C40\u4E3A\u56FE\u6807+\u6587\u672C\u7B49\u5E38\u89C1\u7684\u5BFC\u822A\u5165\u53E3\uFF0C\u731C\u6D4B\u8BE5\u5E03\u5C40\u7EC4\u4EF6\u540E\u7EED\u9700\u8981\u652F\u6301\u70B9\u51FB\u529F\u80FD\uFF0C\u4E0D\u80FD\u6DFB\u52A0ignore\u6807\u8BB0\uFF1B\n - 3. \u5982\u679C\u5E03\u5C40\u7EC4\u4EF6\u7684\u7236\u7EC4\u4EF6\u4E0D\u662F\u5E03\u5C40\u7EC4\u4EF6\uFF0C\u6216\u8005\u662F\u6839\u7EC4\u4EF6\uFF0C\u4E0D\u80FD\u6DFB\u52A0ignore\u6807\u8BB0\uFF0C\u4E0D\u80FD\u88AB\u4F18\u5316\u6389\uFF1B\n\n \u4F8B\u5B50\uFF1A\u7B2C\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\u4EC5\u627F\u62C5\u5E03\u5C40\u529F\u80FD\uFF0C\u53EF\u4EE5\u6DFB\u52A0ignore\u6807\u8BB0\uFF1B\u7B2C\u4E8C\u4E2A\u5E03\u5C40\u7EC4\u4EF6\u627F\u62C5\u6837\u5F0F\u529F\u80FD\uFF0C\u4E0D\u80FD\u6DFB\u52A0ignore\u6807\u8BB0\u3002\n ").concat(fileFormat({
|
|
68
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_layout\",\"ignore\":true,\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_layout\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}},{\"path\":\"\u6837\u5F0F/\u6837\u5F0F\",\"style\":{\"background\":\"#FFFFFF\"}}]}]\n ",
|
|
69
|
+
fileName: '辅助标记.json'
|
|
70
|
+
}), "\n \n </\u8F85\u52A9\u6807\u8BB0\u4F7F\u7528>\n \n <\u5E03\u5C40\u4F7F\u7528\u793A\u4F8B>\n **flex\u5E03\u5C40**\n \u5B50\u7EC4\u4EF6\u901A\u8FC7\u5D4C\u5957\u6765\u642D\u5EFA\uFF0C\u65E0\u9700\u8003\u8651\u5B50\u7EC4\u4EF6\u7684\u5BBD\u5EA6\u548C\u9AD8\u5EA6\u3002\n\n \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528flex\u5B9E\u73B0\u5DE6\u4FA7\u56FA\u5B9A\u5BBD\u5EA6\uFF0C\u53F3\u4FA7\u81EA\u9002\u5E94\u5E03\u5C40:\n ").concat(fileFormat({
|
|
71
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_flex1\",\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"u_flex1\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u5DE6\u4FA7\u56FA\u5B9A\u5BBD\u5EA6\u7EC4\u4EF6\",\"comId\":\"u_leftFixed\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":60,\"height\":40,\"marginRight\":8},\"configs\":[]}]\n [\"u_flex1\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u53F3\u4FA7\u81EA\u9002\u5E94\u7EC4\u4EF6\",\"comId\":\"u_rightFlex\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":'100%',\"height\":40},\"configs\":[]}]\n ",
|
|
72
|
+
fileName: '左侧固定右侧自适应.json'
|
|
73
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u58F0\u660E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u6CE8\u610F\u5E03\u5C40\u7F16\u8F91\u5668\u5FC5\u987B\u58F0\u660E\uFF0C\u5176\u4E2DflexDirection\u4E5F\u5FC5\u987B\u58F0\u660E\uFF0C\u5173\u6CE8justifyContent\u6548\u679C\uFF0C\u9ED8\u8BA4\u4E3Aflex-start\uFF1B\n - \u5DE6\u4FA7\u7EC4\u4EF6\u4F7F\u7528\u56FA\u5B9A\u5BBD\u5EA6\uFF0C\u53F3\u4FA7\u7EC4\u4EF6\u4F7F\u7528width=100%(\u6548\u679C\u7B49\u540C\u4E8Eflex=1)\u5B9E\u73B0\u81EA\u9002\u5E94\u5BBD\u5EA6\uFF1B\n - \u901A\u8FC7marginRight\u914D\u7F6E\u5DE6\u4FA7\u7EC4\u4EF6\u4E0E\u53F3\u4FA7\u7EC4\u4EF6\u7684\u95F4\u8DDD\uFF1B\n \n \n \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528flex\u8FDB\u884C\u5D4C\u5957\uFF0C\u6765\u5B9E\u73B0\u5DE6\u4FA7\u56FE\u6807+\u6587\u672C\uFF0C\u53F3\u4FA7\u7BAD\u5934\u7684\u5E03\u5C40:\n ").concat(fileFormat({
|
|
74
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_flex1\",\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex1\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u5DE6\u4FA7\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_leftLayout\",\"ignore\": true,\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\"},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\", \"justifyContent\": \"flex-start\"}}]}]\n [\"u_leftLayout\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u56FE\u6807\u7EC4\u4EF6\",\"comId\":\"u_icon\",\"ns\":\"\u56FE\u6807\u7EC4\u4EF6\",\"layout\":{\"width\":24,\"height\":24,\"marginRight\":8},\"configs\":[]}]\n [\"u_leftLayout\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6587\u672C\u7EC4\u4EF6\",\"comId\":\"u_text\",\"ns\":\"\u6587\u672C\u7EC4\u4EF6\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\"},\"configs\":[]}]\n [\"u_flex1\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u7BAD\u5934\u56FE\u6807\u7EC4\u4EF6\",\"comId\":\"u_arrowIcon\",\"ns\":\"\u56FE\u6807\u7EC4\u4EF6\",\"layout\":{\"width\":24,\"height\":24},\"configs\":[]}]\n ",
|
|
75
|
+
fileName: 'flex嵌套实现左右布局.json'
|
|
76
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u58F0\u660E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u6CE8\u610F\u5E03\u5C40\u7F16\u8F91\u5668\u5FC5\u987B\u58F0\u660E\uFF0C\u5176\u4E2DflexDirection\u4E5F\u5FC5\u987B\u58F0\u660E\uFF1B\n - \u4F7F\u7528\u5D4C\u5957\u5E03\u5C40\u6765\u5B8C\u6210\u5DE6\u4FA7\u591A\u5143\u7D20 + \u53F3\u4FA7\u5355\u5143\u7D20\u7684\u5E03\u5C40\uFF0C\u9ED8\u8BA4justifyContent=flex-start\uFF0C\u6240\u4EE5\u5DE6\u4FA7\u5E03\u5C40\u65E0\u9700\u8BBE\u7F6E\uFF1B\n - \u5DE6\u4FA7\u7684\u56FE\u6807+\u6587\u672C\u4F7F\u7528\u5D4C\u5957\u5E03\u5C40\u5B9E\u73B0\uFF0C\u4E14\u6DFB\u52A0ignore\u6807\u8BB0\uFF0C\u8868\u793A\u4EC5\u627F\u62C5\u5E03\u5C40\u529F\u80FD\uFF1B\n\n \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528flex\u5B9E\u73B0\u5782\u76F4\u5C45\u4E2D\u5E03\u5C40:\n ").concat(fileFormat({
|
|
77
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_flex2\",\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\"}}]}]\n [\"u_flex2\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u5B50\u7EC4\u4EF6\",\"comId\":\"u_child\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":80,\"height\":80},\"configs\":[]}]\n ",
|
|
78
|
+
fileName: '垂直居中布局.json'
|
|
79
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u58F0\u660E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u6CE8\u610F\u5E03\u5C40\u7F16\u8F91\u5668\u5FC5\u987B\u58F0\u660E\uFF0C\u5176\u4E2DflexDirection\u58F0\u660E\u6210column\uFF1B\n - \u901A\u8FC7alignItems\u6765\u5B9E\u73B0\u5B50\u7EC4\u4EF6\u7684\u5782\u76F4\u5C45\u4E2D\uFF1B \n \n \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528flex\u8FDB\u884C\u6A2A\u5411\u5DE6\u53F3\u5747\u5206\u5E03\u5C40\uFF0C\u5B9E\u73B0\u5404\u5360\u4E00\u534A\u7684\u6548\u679C:\n ").concat(fileFormat({
|
|
80
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_flex3\",\"ignore\": true,\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex3\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"A\u7EC4\u4EF6\",\"comId\":\"u_a321s\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":\"auto\",\"height\":40,\"marginRight\":8},\"configs\":[]}]\n [\"u_flex3\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"B\u7EC4\u4EF6\",\"comId\":\"u_b321s\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":\"auto\",\"height\":40},\"configs\":[]}]\n ",
|
|
81
|
+
fileName: '左右各占一半布局.json'
|
|
82
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u4E3A\u4E86\u5B9E\u73B0\u5404\u5360\u4E00\u534A\uFF0C\u914D\u7F6EA\u7EC4\u4EF6\u548CB\u7EC4\u4EF6\u7684\u5BBD\u5EA6\u90FD\u4E3A\u81EA\u9002\u5E94auto\uFF08\u6548\u679C\u7B49\u540C\u4E8Eflex=1\uFF09\uFF0C\u5B9E\u73B0\u5404\u5360\u4E00\u534A\u7684\u6548\u679C\uFF1B\n - \u6CE8\u610F\uFF1A\u4E0D\u5141\u8BB8\u914D\u7F6E\u767E\u5206\u6BD4\u5BBD\u5EA6\uFF1B\n - \u5224\u65AD\u4EC5\u5E03\u5C40\uFF0C\u6DFB\u52A0ignore\u6807\u8BB0\uFF0C\u4F18\u5316\u642D\u5EFA\u5185\u5BB9\u3002\n - \u901A\u8FC7marginRight\u914D\u7F6E\u5DE6\u4FA7\u7EC4\u4EF6\u4E0E\u53F3\u4FA7\u7EC4\u4EF6\u7684\u95F4\u8DDD\uFF1B\n\n \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528flex\u8FDB\u884C\u6A2A\u5411\u5747\u5206\u6216\u7B49\u5206\u5E03\u5C40\uFF0C\u5B9E\u73B0\u4E00\u884CN\u5217\u7684\u6548\u679C:\n ").concat(fileFormat({
|
|
83
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_flex4\",\"ignore\": true,\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex4\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"A\u7EC4\u4EF6\",\"comId\":\"u_aksi\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n [\"u_flex4\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"B\u7EC4\u4EF6\",\"comId\":\"u_b293e\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n [\"u_flex4\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"C\u7EC4\u4EF6\",\"comId\":\"u_csim2\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n ",
|
|
84
|
+
fileName: '一行N列布局.json'
|
|
85
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u58F0\u660E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u6CE8\u610F\u5E03\u5C40\u7F16\u8F91\u5668\u5FC5\u987B\u58F0\u660E\uFF0C\u5176\u4E2DflexDirection\u4E5F\u5FC5\u987B\u58F0\u660E\uFF1B\n - \u9488\u5BF9\u5185\u5BB9\u5143\u7D20\u7684\u5C3A\u5BF8\uFF0C\u914D\u7F6E\u5408\u7406\u7684\u9AD8\u5EA6\uFF0C\u9632\u6B62\u5185\u5BB9\u6EA2\u51FA\uFF1B\n - \u4E3A\u4E86\u5B9E\u73B0\u5747\u5206\uFF0C\u4FDD\u8BC1\u5361\u7247\u4E4B\u95F4\u5B58\u5728\u95F4\u8DDD\uFF0C\u914D\u7F6E\u5361\u7247\u5BBD\u5EA6\u548C\u9AD8\u5EA6\u90FD\u4E3A\u56FA\u5B9A\u503C\n - \u6CE8\u610F\uFF1A\u4E0D\u5141\u8BB8\u914D\u7F6E\u767E\u5206\u6BD4\u5BBD\u5EA6\uFF1B\n - \u5224\u65AD\u4EC5\u5E03\u5C40\uFF0C\u6DFB\u52A0ignore\u6807\u8BB0\uFF0C\u4F18\u5316\u642D\u5EFA\u5185\u5BB9\u3002\n\n \u4E0B\u9762\u7684\u4F8B\u5B50\u5C55\u793Aflex\u5E03\u5C40\u4E2D\u8D1Fmargin\u7684\u5999\u7528\uFF0C\u901A\u8FC7\u8D1Fmargin\u5B9E\u73B0\u80CC\u666F\u5C42+\u5185\u5BB9\u5C42\u91CD\u53E0\u7684\u6548\u679C\uFF1A\n ").concat(fileFormat({
|
|
86
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_flex6\",\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":\"fit-content\"},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"column\"}}]}]\n [\"u_flex6\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u80CC\u666F\u5C42\",\"comId\":\"u_asds6\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[]}]\n [\"u_flex6\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u5185\u5BB9\u5C42\",\"comId\":\"u_csdt6\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":100, \"marginTop\": -30},\"configs\":[]}]\n ",
|
|
87
|
+
fileName: '负margin实现背景层+内容层重叠.json'
|
|
88
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u58F0\u660E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u6CE8\u610F\u5E03\u5C40\u7F16\u8F91\u5668\u5FC5\u987B\u58F0\u660E\uFF0C\u5176\u4E2DflexDirection\u4E5F\u5FC5\u987B\u58F0\u660E\uFF1B\n - \u901A\u8FC7\u8D1Fmargin\u5B9E\u73B0\u80CC\u666F\u5C42+\u5185\u5BB9\u5C42\u91CD\u53E0\u7684\u6548\u679C\uFF1B\n\n \u7279\u6B8A\u5730\uFF0C\u5728flex\u5E03\u5C40\u4E2D\u7684\u5143\u7D20\u8FD8\u53EF\u4EE5\u914D\u7F6Eposition=absolute\uFF0C\u7528\u4E8E\u5B9E\u73B0\u7EDD\u5BF9\u5B9A\u4F4D\u6548\u679C:\n ").concat(fileFormat({
|
|
89
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_flex5\",\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":200},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"u_flex5\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u7EDD\u5BF9\u5B9A\u4F4D\u7EC4\u4EF6\",\"comId\":\"u_abs12\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"position\":\"absolute\",\"width\":100,\"height\":40,\"top\":20,\"left\":20},\"configs\":[]}]\n [\"u_flex5\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u666E\u901A\u7EC4\u4EF6\",\"comId\":\"u_nor12\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"width\":80,\"height\":80},\"configs\":[]}]\n ",
|
|
90
|
+
fileName: '绝对定位效果.json'
|
|
91
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u58F0\u660E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u6CE8\u610F\u5E03\u5C40\u7F16\u8F91\u5668\u5FC5\u987B\u58F0\u660E\uFF0C\u5176\u4E2DflexDirection\u4E5F\u5FC5\u987B\u58F0\u660E\uFF1B\n - \u901A\u8FC7layout\u4E2D\u7684\u5C5E\u6027\uFF0C\u8BBE\u7F6E\u6210\u7EDD\u5BF9\u5B9A\u4F4D\u6548\u679C\uFF0C\u5728\u4E00\u4E9B\u7279\u6B8A\u7684\u89D2\u6807\u7B49\u573A\u666F\u4E0B\u5F88\u6709\u6548\u679C\uFF1B\n \n **\u81EA\u7531\u5B9A\u4F4D\u5E03\u5C40**\n \u5B50\u7EC4\u4EF6\u901A\u8FC7\u81EA\u7531\u5B9A\u4F4D\u6765\u5E03\u5C40\uFF0C\u65E0\u9700\u8003\u8651\u5176\u4ED6\u7EC4\u4EF6\u7684\u5E03\u5C40\u5F71\u54CD\u3002\n \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528absolute\u5B9E\u73B0\u81EA\u7531\u5B9A\u4F4D\u5E03\u5C40:\n ").concat(fileFormat({
|
|
92
|
+
content: "[\"\u76EE\u6807\u7EC4\u4EF6id\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u5E03\u5C40\u7EC4\u4EF6\",\"comId\":\"u_absoluteLayout\",\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"100%\",\"height\":300},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"position\":\"relative\"}}]}]\n [\"u_absoluteLayout\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u7EDD\u5BF9\u5B9A\u4F4D\u7EC4\u4EF6A\",\"comId\":\"u_absA\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"position\":\"absolute\",\"width\":100,\"height\":40,\"top\":20,\"left\":20},\"configs\":[]}]\n [\"u_absoluteLayout\",\"\u63D2\u69FDid\u5360\u4F4D\",\"addChild\",{\"title\":\"\u7EDD\u5BF9\u5B9A\u4F4D\u7EC4\u4EF6B\",\"comId\":\"u_absB\",\"ns\":\"\u7EC4\u4EF6\",\"layout\":{\"position\":\"absolute\",\"width\":80,\"height\":80,\"top\":100,\"left\":150},\"configs\":[]}]\n ",
|
|
93
|
+
fileName: 'absolute自由定位布局.json'
|
|
94
|
+
}), "\n \u5728\u4E0A\u4F8B\u4E2D:\n - \u5BBD\u9AD8\u4E0D\u53EF\u4EE5\u914D\u7F6Efit-content\uFF0C\u9632\u6B62\u5185\u5BB9\u584C\u9677\uFF1B\n - \u58F0\u660E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u6CE8\u610F\u5E03\u5C40\u7F16\u8F91\u5668\u5FC5\u987B\u58F0\u660E\uFF0C\u5176\u4E2Dposition\u58F0\u660E\u6210relative\uFF1B\n - \u901A\u8FC7layout\u4E2D\u7684\u5C5E\u6027\uFF0C\u8BBE\u7F6E\u6210\u7EDD\u5BF9\u5B9A\u4F4D\u6548\u679C\uFF0C\u5B9E\u73B0\u81EA\u7531\u5B9A\u4F4D\u5E03\u5C40\uFF1B\n </\u5E03\u5C40\u4F7F\u7528\u793A\u4F8B>\n\n <\u5E03\u5C40\u7684\u9009\u7528\uFF1A\u91CD\u8981>\n \u7531\u4E8E\u662F\u4FEE\u6539\u7EC4\u4EF6\uFF0C\u4F18\u5148\u53C2\u8003*\u539F\u6709\u7EC4\u4EF6\u7684\u5E03\u5C40*\u8FDB\u884C\u642D\u5EFA\uFF0C\u9664\u975E\u7528\u6237\u6709\u660E\u786E\u8981\u6C42\uFF0C\u5426\u5219\u4E0D\u5EFA\u8BAE\u66F4\u6539\u5E03\u5C40\u65B9\u5F0F\u3002\n - \u5982\u679C\u5F53\u524D\u7EC4\u4EF6\u4F7F\u7528\u7684\u662Fflex\u5E03\u5C40\uFF0C\u4F18\u5148\u4F7F\u7528flex\u5E03\u5C40\u8FDB\u884C\u642D\u5EFA\uFF1B\n - \u5982\u679C\u5F53\u524D\u7EC4\u4EF6\u4F7F\u7528\u7684\u662Fabsolute\u5E03\u5C40\uFF0C\u4F18\u5148\u4F7F\u7528absolute\u5E03\u5C40\u8FDB\u884C\u642D\u5EFA\uFF1B\n </\u5E03\u5C40\u7684\u9009\u7528\uFF1A\u91CD\u8981>\n\n <\u5E03\u5C40\u6CE8\u610F\u4E8B\u9879>\n - \u5E03\u5C40\u76F8\u5173\u7EC4\u4EF6\u5728\u6DFB\u52A0\u65F6\u5FC5\u987B\u914D\u7F6E\u5E03\u5C40\u7F16\u8F91\u5668\u7684\u503C\uFF0C\u5C24\u5176\u9700\u8981\u914D\u7F6EflexDirection\u548CjustifyContent\uFF1B\n - \u5BF9\u4E8EflexDirection\uFF0C\u5FC5\u987B\u914D\u7F6E\uFF0C\u4EC5\u5141\u8BB8\u914D\u7F6Erow\u6216column\uFF1B\n - \u4F18\u5148\u8003\u8651fit-content\uFF0C\u5982\u679C\u8981\u4F7F\u7528\u56FA\u5B9A\u5BBD\u9AD8\uFF0C\u5FC5\u987B\u8003\u8651\u5230\u56FA\u5B9A\u5BBD\u9AD8\u4F1A\u4E0D\u4F1A\u6EA2\u51FA\u5BFC\u51FA\u5E03\u5C40\u9519\u4E71\u7684\u95EE\u9898\uFF1B\n <\u5E03\u5C40\u6CE8\u610F\u4E8B\u9879>\n \n </\u5E03\u5C40\u539F\u5219>\n \n <\u6700\u4F73\u5B9E\u8DF5>\n 1. \u5BF9\u6BCF\u4E00\u4E2A\u7EC4\u4EF6\uFF0C\u90FD\u4ED4\u7EC6\u8003\u8651\u662F\u5426\u8981\u4F7F\u7528<\u8F85\u52A9\u6807\u8BB0 />\uFF0C\u6309\u7167<\u8F85\u52A9\u6807\u8BB0\u4F7F\u7528 />\u6765\u914D\u7F6E\u6807\u8BB0\uFF1B\n 2. \u5BF9\u4E8E\u6587\u672C\u3001\u56FE\u7247\u3001\u56FE\u6807\u3001\u6309\u94AE\u7B49\u57FA\u7840\u7EC4\u4EF6\uFF0C\u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u53EF\u4EE5\u4F18\u5148\u4F7F\u7528\uFF0C\u5373\u4F7F\u4E0D\u5728\u5141\u8BB8\u4F7F\u7528\u7684\u7EC4\u4EF6\u91CC\uFF1B\n 3. \u5BF9\u4E8E\u56FE\u6807\uFF0C\u56FE\u6807\u7981\u6B62\u4F7F\u7528emoji\u6216\u8005\u7279\u6B8A\u7B26\u53F7\uFF0C\u5FC5\u987B\u4F7F\u7528\u56FE\u6807\u7EC4\u4EF6\u6765\u642D\u5EFA\uFF1B\n 4. \u5173\u4E8E\u56FE\u7247\n 4.1 \u5982\u679C\u662F\u5E38\u89C4\u56FE\u7247\uFF0C\u4F7F\u7528https://ai.mybricks.world/image-search?term=dog&w=100&h=200\uFF0C\u5176\u4E2Dterm\u4EE3\u8868\u641C\u7D22\u8BCD\uFF0Cw\u548Ch\u53EF\u4EE5\u914D\u7F6E\u56FE\u7247\u5BBD\u9AD8\uFF1B\n 4.2 \u5982\u679C\u662FLogo\uFF0C\u53EF\u4EE5\u4F7F\u7528https://placehold.co\u6765\u914D\u7F6E\u4E00\u4E2A\u5E26\u6587\u672C\u548C\u989C\u8272\u7684\u56FE\u6807\uFF0C\u5176\u4E2Dtext\u9700\u8981\u4E3A\u56FE\u6807\u7684\u82F1\u6587\u641C\u7D22\u8BCD\uFF0C\u7981\u6B62\u4F7F\u7528emoji\u6216\u8005\u7279\u6B8A\u7B26\u53F7\uFF1B\n 5. \u5BF9\u4E8E\u6587\u672C\uFF0C\u5C3A\u5BF8\u7684\u8BA1\u7B97\n - \u5BBD\u5EA6\u548C\u9AD8\u5EA6\u8981\u6839\u636EfontSize\u7B49\u6837\u5F0F\u6765\u8BA1\u7B97\uFF0C\u9884\u7559\u66F4\u591A\u7684\u7A7A\u95F4\uFF1B\n - \u5C3D\u91CF\u914D\u7F6E\u6587\u672C\u7701\u7565\u53C2\u6570\uFF0C\u9632\u6B62\u4E00\u884C\u6362\u884C\u540E\u53D8\u591A\u884C\u5E26\u6765\u7684\u5E03\u5C40\u53D8\u5316\uFF1B\n - \u6587\u672C\u6700\u5C0F\u5927\u5C0F\u53EF\u4EE5\u914D\u7F6E\u5230fontSize=10\uFF0C\u5728\u4E00\u4E9B\u6587\u5B57\u5185\u5BB9\u7279\u522B\u591A\u7684\u573A\u666F\u53EF\u4EE5\u914D\u7F6E\u5C0F\u6587\u5B57\uFF1B\n 8. \u5B50\u7EC4\u4EF6\u8BA1\u7B97\u5C3A\u5BF8\uFF08\u5BBD\u5EA6\u4E0E\u9AD8\u5EA6\uFF09\u7684\u65F6\u5019\uFF0C\u9700\u8981\u5411\u4E0A\u8003\u8651\u7236\u5143\u7D20\uFF08\u63D2\u69FD\u3001\u7236\u7EC4\u4EF6\u6216\u7956\u5148\u63D2\u69FD\u53CA\u7EC4\u4EF6\uFF09\u6240\u6709\u7684\u5C3A\u5BF8\u4E0E\u95F4\u8DDD\u7B49\u6837\u5F0F\uFF0C\u5426\u5219\u5BB9\u6613\u8BA1\u7B97\u9519\u8BEF\uFF1B\n 9. \u5BF9\u4E8E\u6A2A\u5411\u6392\u5217\u6216\u8005\u7AD6\u5411\u6392\u5217\u7684\u591A\u4E2A\u76F8\u4F3C\u5143\u7D20\uFF0C\u8003\u8651\u5982\u4E0B\u60C5\u51B5:\n - \u5982\u679C\u731C\u6D4B\u662F\u52A8\u6001\u9879\uFF0C\u4F7F\u7528\u5217\u8868\u7C7B\u7EC4\u4EF6\u6765\u642D\u5EFA\uFF1B\n - \u5982\u679C\u731C\u6D4B\u662F\u9759\u6001\u5185\u5BB9\uFF0C\u4F18\u5148\u4F7F\u7528\u5E03\u5C40\uFF0CN\u884CM\u5217\u6765\u642D\u5EFA\uFF1B\n - \u5982\u679C\u662F\u5C5E\u4E8E\u67D0\u4E2A\u7EC4\u4EF6\u7684\u5185\u5BB9\uFF0C\u4F7F\u7528\u7EC4\u4EF6\u6765\u642D\u5EFA\uFF1B\n </\u6700\u4F73\u5B9E\u8DF5>\n </UI\u642D\u5EFA\u539F\u5219>\n</\u5982\u4F55\u642D\u5EFAUI\u4EE5\u53CA\u4FEE\u6539>\n\n").concat(config.appendPrompt ? "<\u5BF9\u4E8E\u9879\u76EE\u73AF\u5883\u7684\u8BF4\u660E>\n".concat(config.appendPrompt, "\n</\u5BF9\u4E8E\u9879\u76EE\u73AF\u5883\u7684\u8BF4\u660E>") : '', "\n\n<examples>\n <example>\n <user_query>\u6587\u672C\u7EC4\u4EF6\u66FF\u6362\u6210\u56FE\u7247</user_query>\n <assistant_response>\n \u597D\u7684\uFF0C\u6211\u5C06\u6587\u672C\u7EC4\u4EF6\u66FF\u6362\u6210\u56FE\u7247\u7EC4\u4EF6\u3002\u5F53\u524D\u6587\u672C\u7EC4\u4EF6\u5728\u63D2\u69FD\u7684\u7B2C\u4E00\u4F4D\uFF08index=0\uFF09\uFF0C\u5220\u9664\u540E\u6211\u9700\u8981\u5728\u76F8\u540C\u4F4D\u7F6E\u6DFB\u52A0\u56FE\u7247\u7EC4\u4EF6\uFF0C\u6240\u4EE5\u6307\u5B9Aindex=0\u3002\n\n ").concat(fileFormat({
|
|
95
|
+
content: "[\"u_24uiu\",\":root\",\"delete\"]\n[\"u_parent\",\"slotId\",\"addChild\",{\"title\":\"\u6DFB\u52A0\u4E00\u4E2A\u56FE\u7247\u7EC4\u4EF6\",\"comId\":\"u_image1\",\"index\":0,\"ns\":\"\u56FE\u7247\u7EC4\u4EF6\",\"layout\":{\"width\":100,\"height\":100}}]",
|
|
96
|
+
fileName: '将文本组件替换成图片.json'
|
|
97
|
+
}), "\n </assistant_response>\n </example>\n\n <example>\n <user_query>\u5BBD\u5EA6\u6539\u6210\u9002\u5E94\u5185\u5BB9</user_query>\n <assistant_response>\n \u597D\u7684\uFF0C\u6211\u5C06\u5F53\u524D\u7EC4\u4EF6\u7684\u5BBD\u5EA6\u505A\u9002\u5E94\u5185\u5BB9\u7684\u8C03\u6574\n\n ").concat(fileFormat({
|
|
98
|
+
content: "[\"u_908\", \":root\", \"setLayout\", {\"width\":\"fit-content\"}]",
|
|
99
|
+
fileName: '修改宽度.json'
|
|
100
|
+
}), "\n </assistant_response>\n </example>\n \n <example>\n <user_query>\u6539\u6210\u84DD\u8272\u98CE\u683C</user_query>\n <assistant_response>\n \u597D\u7684\uFF0C\u6211\u5C06\u5F53\u524D\u7EC4\u4EF6\u7684\u914D\u8272\u4EE5\u53CA\u5B50\u7EC4\u4EF6\u7EDF\u4E00\u4FEE\u6539\u4E3A\u84DD\u8272\u98CE\u683C\n\n ").concat(fileFormat({
|
|
101
|
+
content: "[\"u_222\", \":root\", \"doConfig\", {\"path\":\"\u6837\u5F0F/\u80CC\u666F\u8272\",\"style\":{\"background\": \"blue\"}}]\n[\"u_child2\", \":root\", \"doConfig\", {\"path\":\"\u6837\u5F0F/\u80CC\u666F\u8272\",\"style\":{\"background\": \"blue\"}}]",
|
|
102
|
+
fileName: '修改颜色.json'
|
|
103
|
+
}), "\n </assistant_response>\n </example>\n\n <example>\n <user_query>\u67E5\u770B\u6211\u7684\u6548\u679C\u56FE\uFF0C\u91CD\u6784\u8FD9\u4E2A\u533A\u57DF</user_query>\n <assistant_response>\n \u6839\u636E\u56FE\u7247\u6548\u679C\uFF0C\u4E3B\u8981\u6267\u884C\u4EE5\u4E0B\u4FEE\u6539\uFF1A\n 1. \u5BB9\u5668\u539F\u6765\u662F\u5747\u5206\u5E03\u5C40\uFF0C\u4E3A\u4E86\u5B9E\u73B0\u6548\u679C\u56FE\u4E2D\u7684\u6548\u679C\uFF0C\u9700\u8981\u4FEE\u6539\u4E3A\u5DE6\u53F3\u5E03\u5C40\uFF0C\u5DE6\u4FA7\u4E3A\u56FE\u6807+\u6587\u672C\uFF0C\u53F3\u4FA7\u4E3A\u7BAD\u5934\uFF1B\n 2. \u5220\u9664\u5BB9\u5668\u4E2D\u539F\u6709\u7684\u6309\u94AE\uFF0C\u66FF\u6362\u6210\u56FE\u6807+\u6587\u672C\uFF0C\u66FF\u6362\u53EF\u4EE5\u4F7F\u7528\u6307\u5B9A\u4F4D\u7F6E\u7684addChild\u6765\u5B8C\u6210\uFF0C\u5148\u6DFB\u52A0\u5DE6\u4FA7\u5BB9\u5668\uFF0C\u518D\u6DFB\u52A0\u56FE\u6807\u548C\u6587\u672C\uFF1B\n 3. \u4E2D\u95F4\u6709\u4E00\u4E2A\u88C5\u9970\u56FE\u7247 \uFF0Cflex\u5E03\u5C40\u4E0B\u4E0D\u597D\u5B9E\u73B0\uFF0C\u7528\u7EDD\u5BF9\u5B9A\u4F4D\u5B9E\u73B0\uFF1B\n \n ").concat(fileFormat({
|
|
104
|
+
content: "[\"u_24uiu\", \":root\", \"doConfig\", {\"path\":\"\u6837\u5F0F/\u5E03\u5C40\",\"style\":{\"display\": \"flex\", \"flexDirection\": \"row\", \"justifyContent\": \"space-between\", \"alignItems\": \"center\"}}]\n[\"u_iobtn\", \":root\", \"delete\"]\n[\"u_24uiu\", \"slotId\", \"addChild\", {\"title\":\"\u5DE6\u4FA7\u5BB9\u5668\",\"comId\":\"u_sdflx\",\"index\":0,\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"width\":\"fit-content\",\"height\":60, \"marginLeft\": 12},\"configs\":[{\"path\":\"\u5E38\u89C4/\u5E03\u5C40\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\"}}]}]\n[\"u_sdflex\", \"addChild\", {\"title\":\"\u56FE\u6807\u7EC4\u4EF6\",\"comId\":\"u_icon\",\"index\":0,\"ns\":\"\u56FE\u6807\u7EC4\u4EF6\",\"layout\":{\"width\":24,\"height\":24,\"marginLeft\":8},\"configs\":[]}]\n[\"u_sdflex\", \"addChild\", {\"title\":\"\u6587\u672C\u7EC4\u4EF6\",\"comId\":\"u_text\",\"index\":1,\"ns\":\"\u6587\u672C\u7EC4\u4EF6\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\", \"marginLeft\": 8},\"configs\":[]}]\n[\"u_sdflex\", \"addChild\", {\"title\":\"\u7BAD\u5934\u56FE\u6807\u7EC4\u4EF6\",\"comId\":\"u_rso0c\",\"index\":2,\"ns\":\"\u56FE\u6807\u7EC4\u4EF6\",\"layout\":{\"width\":24,\"height\":24},\"configs\":[]}]\n[\"u_24uiu\", \"slotId\", \"addChild\", {\"title\":\"\u88C5\u9970\u7EC4\u4EF6\",\"comId\":\"u_abs1\",\"ns\":\"\u5E03\u5C40\u7EC4\u4EF6\",\"layout\":{\"position\": \"absolute\", \"width\": 100, \"height\": 30, \"bottom\": 0, \"left\": 360},\"configs\":[]}]\n",
|
|
105
|
+
fileName: '重构区域.json'
|
|
106
|
+
}), "\n </assistant_response>\n </example>\n\n <example>\n <user_query>\u4F18\u5316\u4E0B\u8FD9\u4E2A\u6392\u7248</user_query>\n <assistant_response>\n \u597D\u7684\uFF0C\u6211\u4EEC\u5206\u6790\u4E0B\u76EE\u524D\u7684\u642D\u5EFA\u5185\u5BB9\uFF0C\u6392\u7248\u4E0A\u6765\u770B\uFF0C\u5F53\u524D\u539F\u6709\u7EC4\u4EF6\u7684\u662F\u7EDD\u5BF9\u5B9A\u4F4D\u5904\u7406\u7684\uFF0C\u53EF\u4EE5\u770B\u51FA\u6765\u6709\u51E0\u4E2A\u95EE\u9898\uFF1A\n 1. \u5143\u7D20\u4E4B\u95F4\u6CA1\u6709\u5BF9\u9F50\uFF0C\u663E\u5F97\u6BD4\u8F83\u6742\u4E71\uFF1B\n 2. \u4F5C\u4E3A\u5934\u50CF\u6765\u8BF4\uFF0C\u56FE\u7247\u5927\u5C0F\u4E0D\u5408\u9002\uFF0C\u6539\u6210\u5BBD\u9AD8\u4E00\u81F4\u5E76\u5DE6\u8FB9\u5782\u76F4\u5C45\u4E2D\uFF1B\n 3. \u5143\u7D20\u4E4B\u95F4\u4F4D\u7F6E\u6709\u95EE\u9898\uFF0C\u770B\u8D77\u6765\u6709\u51E0\u5904\u91CD\u53E0\u3002\n\n \u6211\u4EEC\u4F18\u5148\u4F7F\u7528\u5F53\u524D\u5E03\u5C40\uFF0C\u7136\u540E\u901A\u8FC7\u8C03\u6574\u5404\u4E2A\u7EC4\u4EF6\u7684\u4F4D\u7F6E\u548C\u5C3A\u5BF8\u4FE1\u606F\u5B8C\u6210\u9700\u6C42\u3002\n\n \u6211\u4EEC\u8C03\u6574\u4E0B\u770B\u770B\u6548\u679C\n ").concat(fileFormat({
|
|
107
|
+
content: "[\"u_text1\", \":root\", \"setLayout\", {\"position\": \"absolute\", \"width\": 200, \"height\": 40, \"top\": 20, \"left\": 20}]\n[\"u_image1\", \":root\", \"setLayout\", {\"position\": \"absolute\", \"width\": 100, \"height\": 100, \"top\": 80, \"left\": 20}]\n[\"u_button1\", \":root\", \"setLayout\", {\"position\": \"absolute\", \"width\": 80, \"height\": 40, \"top\": 200, \"left\": 20}]",
|
|
108
|
+
fileName: '优化排版.json'
|
|
109
|
+
}), "\n\n \u6CE8\u610F\uFF1A\u7236\u7EC4\u4EF6\u6709\u5185\u95F4\u8DDD\uFF0C\u63D2\u69FD\u624D\u662F\u5B9E\u9645\u53EF\u5E03\u5C40\u533A\u57DF\uFF0C\u6839\u636E\u63D2\u69FD\u5BBD\u5EA6\u6765\u8BA1\u7B97\u5C45\u4E2D\u3002\n </assistant_response>\n </example>\n</examples>");
|
|
110
|
+
},
|
|
111
|
+
aiRole: ((_config$getFocusEleme = config.getFocusElementAiRole) === null || _config$getFocusEleme === void 0 ? void 0 : _config$getFocusEleme.call(config)) || (hasChildren ? 'expert' : 'architect'),
|
|
112
|
+
stream(_ref) {
|
|
113
|
+
var {
|
|
114
|
+
files,
|
|
115
|
+
status,
|
|
116
|
+
replaceContent
|
|
117
|
+
} = _ref;
|
|
118
|
+
var actions = [];
|
|
119
|
+
var actionsFile = getFiles(files, {
|
|
120
|
+
extName: 'json'
|
|
121
|
+
});
|
|
122
|
+
if (actionsFile) {
|
|
123
|
+
var _actionsFile$content, _actions;
|
|
124
|
+
actions = streamActionsParser((_actionsFile$content = actionsFile.content) !== null && _actionsFile$content !== void 0 ? _actionsFile$content : "", actionsFile === null || actionsFile === void 0 ? void 0 : actionsFile.isComplete);
|
|
125
|
+
actions = fixActions(actions, {
|
|
126
|
+
pageId
|
|
127
|
+
});
|
|
128
|
+
if (!fileNameToContent[actionsFile.fileName]) {
|
|
129
|
+
fileNameToContent[actionsFile.fileName] = "";
|
|
130
|
+
}
|
|
131
|
+
if ((_actions = actions) !== null && _actions !== void 0 && (_actions = _actions[0]) !== null && _actions !== void 0 && _actions.comId && !firstActionId) {
|
|
132
|
+
var _actions2;
|
|
133
|
+
firstActionId = (_actions2 = actions) === null || _actions2 === void 0 || (_actions2 = _actions2[0]) === null || _actions2 === void 0 ? void 0 : _actions2.comId;
|
|
134
|
+
if (firstActionId !== "_root_" && firstActionId !== pageId) {
|
|
135
|
+
actionType = 'uiCom';
|
|
136
|
+
}
|
|
137
|
+
promiseStack.add(() => config.onActions([], 'start', actionType));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (actions.length > 0 || status === 'complete') {
|
|
141
|
+
var currentStatus = status === 'complete' ? "ing" : status;
|
|
142
|
+
try {
|
|
143
|
+
var copiedActions = JSON.parse(JSON.stringify(actions));
|
|
144
|
+
try {
|
|
145
|
+
actions.forEach(action => {
|
|
146
|
+
if (action.type === "addChild") {
|
|
147
|
+
var childComId = action.params.comId;
|
|
148
|
+
// 对于 addChild,每次添加都生成新的 UUID 映射
|
|
149
|
+
action.params.comId = comIdTransform.addComId(childComId);
|
|
150
|
+
|
|
151
|
+
// 目标组件ID需要映射
|
|
152
|
+
var parentComId = action.comId;
|
|
153
|
+
if (parentComId !== "_root_") {
|
|
154
|
+
// 父组件 id 使用最近一次的映射
|
|
155
|
+
action.comId = comIdTransform.getComId(parentComId);
|
|
156
|
+
}
|
|
157
|
+
} else if (action.type === "move") {
|
|
158
|
+
var _action$params$to, _action$params;
|
|
159
|
+
var comId = action.comId;
|
|
160
|
+
if (comId !== "_root_") {
|
|
161
|
+
// 获取组件时,使用最近添加的comId
|
|
162
|
+
action.comId = comIdTransform.getComId(comId);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// 目标组件ID需要映射
|
|
166
|
+
var toParams = (_action$params$to = (_action$params = action.params) === null || _action$params === void 0 ? void 0 : _action$params.to) !== null && _action$params$to !== void 0 ? _action$params$to : {};
|
|
167
|
+
var targetId = toParams.comId;
|
|
168
|
+
if (targetId && targetId !== "_root_") {
|
|
169
|
+
action.params.to.comId = comIdTransform.getComId(targetId);
|
|
170
|
+
}
|
|
171
|
+
} else if (action.type === "doConfig") {
|
|
172
|
+
var _comId = action.comId;
|
|
173
|
+
if (_comId !== "_root_") {
|
|
174
|
+
// 获取组件时,使用最近添加的comId
|
|
175
|
+
action.comId = comIdTransform.getComId(_comId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
actions.forEach(action => {
|
|
180
|
+
promiseStack.add(() => config.onActions([action], currentStatus, actionType));
|
|
181
|
+
});
|
|
182
|
+
} catch (error) {
|
|
183
|
+
console.error('refactor-component onActions error', error);
|
|
184
|
+
}
|
|
185
|
+
var actionsContent = getComponentOperationSummary(copiedActions, config.componentIdToTitleMap);
|
|
186
|
+
if (actionsFile) {
|
|
187
|
+
if (!fileNameToContent[actionsFile.fileName]) {
|
|
188
|
+
fileNameToContent[actionsFile.fileName] = actionsContent.trim();
|
|
189
|
+
} else {
|
|
190
|
+
fileNameToContent[actionsFile.fileName] += "\n".concat(actionsContent.trim());
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
} catch (error) {}
|
|
194
|
+
if (status === "complete") {
|
|
195
|
+
promiseStack.add(() => config.onActions([], status, actionType));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return displayContent = Object.entries(fileNameToContent).reduce((pre, _ref2) => {
|
|
199
|
+
var [fileName, content] = _ref2;
|
|
200
|
+
return pre.replace(fileName, content);
|
|
201
|
+
}, replaceContent);
|
|
202
|
+
},
|
|
203
|
+
execute(_ref3) {
|
|
204
|
+
var _errorContent;
|
|
205
|
+
var {
|
|
206
|
+
files,
|
|
207
|
+
content
|
|
208
|
+
} = _ref3;
|
|
209
|
+
var errorContent;
|
|
210
|
+
try {
|
|
211
|
+
errorContent = JSON.parse(content);
|
|
212
|
+
} catch (error) {}
|
|
213
|
+
if (errorContent && (_errorContent = errorContent) !== null && _errorContent !== void 0 && _errorContent.message) {
|
|
214
|
+
var _errorContent2;
|
|
215
|
+
throw new RxaiError("\u7F51\u7EDC\u9519\u8BEF\uFF0C".concat((_errorContent2 = errorContent) === null || _errorContent2 === void 0 ? void 0 : _errorContent2.message), "request");
|
|
216
|
+
}
|
|
217
|
+
var actionsFile = getFiles(files, {
|
|
218
|
+
extName: 'json'
|
|
219
|
+
});
|
|
220
|
+
if (!actionsFile) {
|
|
221
|
+
return {
|
|
222
|
+
llmContent: content,
|
|
223
|
+
displayContent: content
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
llmContent: displayContent,
|
|
228
|
+
displayContent: displayContent
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
// actions = excuteActionsParser(actionsFile.content ?? "");
|
|
232
|
+
|
|
233
|
+
// // console.log('actions', actions)
|
|
234
|
+
|
|
235
|
+
// // const actionsGroupById = actions.reduce((acc, item) => {
|
|
236
|
+
// // const id = item.comId;
|
|
237
|
+
// // if (!acc[id]) {
|
|
238
|
+
// // acc[id] = [];
|
|
239
|
+
// // }
|
|
240
|
+
// // acc[id].push(item);
|
|
241
|
+
// // return acc;
|
|
242
|
+
// // }, {});
|
|
243
|
+
|
|
244
|
+
// try {
|
|
245
|
+
// const llmContent = stripFileBlocks(content);
|
|
246
|
+
// const actionsContent = actions?.length ? getComponentOperationSummary(actions, OutlineInfo.getComponentIdToTitleMap(config?.getPageJson(), pageId)) : ""
|
|
247
|
+
// const summary = (llmContent ? `${llmContent}\n\n` : "") + (actionsContent ? `修改内容如下\n${actionsContent}` : "当前没有内容修改");
|
|
248
|
+
|
|
249
|
+
// return {
|
|
250
|
+
// llmContent: summary,
|
|
251
|
+
// displayContent: summary
|
|
252
|
+
// }
|
|
253
|
+
|
|
254
|
+
// // const summary = getComponentOperationSummary(actions, OutlineInfo.getComponentIdToTitleMap(config?.getPageJson(), pageId))
|
|
255
|
+
|
|
256
|
+
// // return {
|
|
257
|
+
// // llmContent: `根据需求,我们进行如下修改
|
|
258
|
+
// // ${summary}`,
|
|
259
|
+
// // displayContent: `根据需求,我们进行如下修改
|
|
260
|
+
// // ${summary}`
|
|
261
|
+
// // }
|
|
262
|
+
// } catch (error) {
|
|
263
|
+
|
|
264
|
+
// }
|
|
265
|
+
|
|
266
|
+
// return {
|
|
267
|
+
// llmContent: '已执行所有修改操作',
|
|
268
|
+
// displayContent: '已执行所有修改操作'
|
|
269
|
+
// }
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function fixActions(actions, _ref4) {
|
|
274
|
+
var {
|
|
275
|
+
pageId
|
|
276
|
+
} = _ref4;
|
|
277
|
+
return (actions !== null && actions !== void 0 ? actions : []).map(action => {
|
|
278
|
+
if (action.comId === pageId) {
|
|
279
|
+
action.comId = '_root_';
|
|
280
|
+
}
|
|
281
|
+
return action;
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
function RefactorUiContent(params) {
|
|
285
|
+
return {
|
|
286
|
+
name: NAME,
|
|
287
|
+
params: params
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export { RefactorUiContent, refactorUiContent as default };
|
|
292
|
+
//# sourceMappingURL=refactor-ui-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor-ui-content.js","sources":["../../src/tools/refactor-ui-content.ts"],"sourcesContent":["import { fileFormat, RxaiError } from '@mybricks/rxai'\nimport { getFiles, createActionsParser, getComponentOperationSummary, stripFileBlocks, ComIdTransform, PromiseStack } from './utils'\nimport { context } from './../context'\n\ninterface RefactorUiContentToolParams {\n appendPrompt: any;\n /** 当前根组件信息 */\n getRootComponentDoc: () => string;\n getTargetId: () => string;\n componentIdToTitleMap: Map<string, string>;\n getFocusElementHasChildren: () => boolean\n /** 当所有actions返回时 */\n onActions: (actions: any[], status: string, type: string) => void\n getFocusElementAiRole?: () => boolean;\n getComIds: () => any;\n}\n\nconst NAME = 'refactor-components-in-canvas'\nrefactorUiContent.toolName = NAME;\n\nexport default function refactorUiContent(config: RefactorUiContentToolParams): any {\n const streamActionsParser = createActionsParser({ enabledActionTags: context.enabledActionTags });\n const excuteActionsParser = createActionsParser({ enabledActionTags: context.enabledActionTags });\n const hasChildren = config.getFocusElementHasChildren() !== false\n\n let fileNameToContent: Record<string, string> = {};\n let displayContent = \"\";\n\n // TODO,因为updateCom不支持修改_root_,所以在聚焦组件时修改页面使用updatePage,目前是用第一个action的ID来判断是修改页面还是修改组件\n let firstActionId: string\n let actionType = 'page'\n\n const pageId = config?.getTargetId();\n const comIdTransform = new ComIdTransform(config.getComIds());\n const promiseStack = new PromiseStack();\n\n return {\n name: NAME,\n displayName: \"局部修改/重构\",\n description: `根据用户需求/附件图片对画布中的UI内容进行局部修改/重构/移动/删除。\n参数:无\n工具分类:操作执行类\n作用:\n 1. 局部修改组件配置;\n 2. 通过添加/删除组件来重构整个组件插槽中的UI内容;\n 3. 对组件进行移动和删除;\n前置依赖:\n - 必须确保之前进行过「获取DSL」;\n - 如果需要修改组件配置,确保之前有执行过「获取DSL」,这个工具都会自动获取组件使用文档,组件的修改必须严格参考组件使用文档;\n - 如果需要添加组件,确保之前有进行过「组件选型」,添加组件必须通过组件选型来获取组件配置文档;\n注意:此工具只能对UI内容进行操作。\n\n使用场景示例:\n - 这个卡片改成美团购物卡片\n 分析:由于卡片内容完全变化,可能涉及新增组件,并且需要修改卡片组件的配置,所以需要「获取DSL」->「组件选型分析」-> 「局部重构」的规划\n - 内容不符合要求,修改里面的内容\n 分析:由于需要修改里面的内容可能涉及新增组件,所以需要「获取DSL」->「组件选型分析」->「局部重构」的规划\n - 修改XX组件的样式/配置\n 分析:由于仅修改组件配置,所以仅需要「获取DSL」->「局部重构」的规划\n - 图片换个链接\n 分析:由于仅修改组件配置,所以仅需要「获取DSL」->「局部重构」的规划\n - 添加一个XX组件\n 分析:由于需要新增组件,所以需要「获取DSL」->「组件选型分析」->「局部重构」的规划\n - 删除组件\n 分析:由于仅删除组件,所以仅需要「局部重构」的规划\n - 和某某交换位置\n 分析:由于移动组件需要指导插槽id及其子组件情况,所以仅需要「获取DSL」->「局部重构」的规划\n`,\n getPrompts() {\n return `<工具总览>\n 你是一个修改UI区域搭建效果的工具,你作为MyBricks低代码平台(以下简称MyBricks平台或MyBricks)的资深搭建助手,及客服专家,经验丰富、实事求是、逻辑严谨。\n\n <任务目标>\n 你的任务是通过 actions 序列完成用户的目标。\n !IMPORTANT: 当前工具只能完成UI界面搭建,也就是只能搭建UI部分,只能修改/配置UI组件,逻辑部分请留到后续的逻辑搭建工具中完成。\n </任务目标>\n</工具总览>\n\n<当前画布根组件信息>\n${config.getRootComponentDoc()}\n\nIMPORTANT: 如果要修改UI根组件,请使用此文档。\n</当前画布根组件信息>\n\n<如何搭建UI以及修改>\n 通过一系列的action来分步骤完成对组件的修改,请返回以下格式以驱动MyBricks对组件进行修改:\n \n <关于actions>\n actions.json文件由多个action构成,每个 action 在结构上都严格遵循以下格式:[comId, target, type, params];\n - comId 代表要操作的目标组件的id(对于需要生成的新的id,必须采用u_xxxxx,xxxxx是3-7位唯一的字母数字组合);\n - target 指的是组件的整体或某个部分,以选择器的形式表示\n - 当type=addChild时,target为插槽id;\n - 当type=move时,target为:root或插槽id;\n - type action的类型,包括了 setLayout、doConfig、addChild、move、delete 动作;\n - params 为不同type类型对应的参数;\n \n 综合而言,每个action的语义是:对某个组件(comId)的整体或某个部分(target),执行某个动作(type),并传入参数(params)。\n \n 注意:\n - 在返回多个步骤时,务必注意其逻辑顺序,例如有些action需要先完成,后续的action(可能受控于ifVisible,只有ifVislble返回true才能使用)才能进行;\n - 有些修改需要先完成整体、再进行局部的修改;\n \n 各action详细说明如下:\n \n <setLayout>\n - 设置组件的布局和尺寸信息,params的格式以Typescript的形式说明如下:\n \n \\`\\`\\`typescript\n /**\n * 宽高尺寸\n * number - 具体的px值\n * fit-content - 适应内容\n * 100% - 填充,仅允许100%,不允许其他百分比宽度\n * auto - 自动填充,等同于flex=1\n * 只能是三者其一,明确不允许使用其他属性,比如calc等方法\n */\n type Size = number | \"fit-content\" | \"100%\" | \"auto\"\n \n /** flex中子组件定位,可配置如下layout */\n type setLayout_flex_params = {\n width?: Size;\n height?: Size;\n /** 上外边距 */\n marginTop?: number;\n /** 右外边距 */\n marginRight?: number;\n /** 下外边距 */\n marginBottom?: number;\n /** 左外边距 */\n marginLeft?: number;\n }\n \\`\\`\\`\n \n 注意:\n - 1. 只有在flex布局中的组件,可以在layout中使用margin相关配置;\n\n \\`\\`\\`typescript\n /** 对于flex布局的插槽,我们可以添加absolute定位的组件 */\n type setLayout_absolute_params = {\n position: 'absolute';\n width?: Size;\n height?: Size;\n /** 距离左侧 */\n left?: number;\n /** 距离右侧 */\n right?: number;\n /** 距离上方 */\n top?: number;\n /** 距离下方 */\n bottom?: number;\n }\n \\`\\`\\`\n \n \\`\\`\\`typescript\n /** 如果组件本身是fixed类型定位,可配置如下layout */\n type setLayout_fixed_params = {\n position: 'fixed';\n width?: Size;\n height?: Size;\n /** 距离左侧 */\n left?: number;\n /** 距离右侧 */\n right?: number;\n /** 距离上方 */\n top?: number;\n /** 距离下方 */\n bottom?: number;\n }\n \\`\\`\\`\n \n 例如,当用户要求将当前组件的宽度设置为200px,可以返回以下内容:\n ${fileFormat({\n content: `[\"u_ou1rs\",\":root\",\"setLayout\",{\"width\":200}]`,\n fileName: '样式配置步骤.json'\n })}\n \n 注意:当需要修改布局和尺寸信息时,仅返回用户要求的内容即可,无需返回所有的布局和尺寸信息属性。\n </setLayout>\n \n <doConfig>\n - 配置组件,使用<组件可配置的内容/>的配置项,对组件的属性或样式进行配置;\n - 如果配置项的type在 <常见editType的使用 /> 中有说明,务必遵守其中的说明及注意事项;\n \n - params的格式以Typescript的形式说明如下:\n \n \\`\\`\\`typescript\n //配置样式\n type configStyle_params = {\n path:string,//在<当前组件可配置的内容/>中对应的配置项path\n style: {\n [key: string]: propertyValue; //元素的内联样式对象,仅能配置style编辑器description中声明的属性,不要超出范围。\n }\n }\n \n //配置属性\n type configProperty_params = {\n path:string,//在<当前组件可配置的内容/>中对应的配置项path\n value: any//需要配置的value\n }\n \\`\\`\\`\n \n 例如:\n - 属性的配置:\n ${fileFormat({\n content: `[\"u_ou1rs\",\":root\",\"doConfig\",{\"path\":\"常规/标题\",\"value\":\"标题内容\"}]`,\n fileName: '样式配置步骤.json'\n })}\n \n - 样式的配置:\n ${fileFormat({\n content: `[\"u_ou1rs\",\":root\",\"doConfig\",{\"path\":\"常规/banner样式\",\"style\":{\"backgroundColor\":\"red\"}}]`,\n fileName: '样式配置步骤.json'\n })}\n \n 注意:\n - 当需要修改组件的样式时,只允许修改style编辑器description中声明的属性;\n - 当需要修改组件的样式时,背景统一使用background,而非backgroundColor等属性;\n </doConfig>\n\n <addChild>\n - addChild代表向目标组件的插槽中添加UI组件,需要满足两个条件:\n 1. 目标组件中目前有定义插槽,且已知插槽的id是什么;\n 2. 被添加的组件只能使用 <允许添加的组件/> 中声明的*UI组件*;\n - params的格式以Typescript的形式说明如下:\n \n \\`\\`\\`typescript\n type add_params = {\n title:string //被添加组件的标题\n ns:string //在 <允许添加的组件 /> 中声明的UI组件namespace\n comId:string // 新添加的组件5位uuid,禁止重复,在所有UI组件中唯一\n index?: number | 'last' = 'last' // 添加到插槽的位置,index=0表示第一位,index=1表示第二位。不指定时默认为last,添加到末尾\n layout?: setLayout_flex_params | setLayout_fixed_params | setLayout_absolute_params //可选,添加组件时可以指定位置和尺寸信息\n configs?: Array<configStyle_params | configProperty_params> // 添加组件可以配置的信息\n // 渲染优化\n ignore?: boolean //可选,是否添加ignore标记\n enhance?: boolean //可选,是否添加enhance标记\n }\n \\`\\`\\`\n \n 例如:\n - 添加文本组件到插槽末尾:\n ${fileFormat({\n content: `[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"添加的文本组件\",\"ns\":\"namespace占位\",\"comId\":\"u_iiusd7\"}]`,\n fileName: '添加文本组件步骤.json'\n })}\n\n - 添加组件带有配置属性,同时指定位置:\n ${fileFormat({\n content: `[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"背景图\",\"ns\":\"namespace占位\",\"comId\":\"u_iiusd7\",\"index\":2,\"layout\":{\"width\":\"100%\",\"height\":200,\"marginTop\":8,\"marginLeft\":12,\"marginRight\":12},\"configs\":[{\"path\":\"常规/图片地址\",\"value\":\"https://ai.mybricks.world/image-search?term=风景\"},{\"path\":\"样式/图片\",\"style\":{\"borderRadius\":\"8px\"}}]}]`,\n fileName: '添加带配置属性的步骤.json'\n })}\n\n - 添加组件带index指定位置:\n ${fileFormat({\n content: `[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"添加的文本组件\",\"ns\":\"namespace占位\",\"comId\":\"u_iiusd7\",\"index\":2}]`,\n fileName: '添加带index指定位置的步骤.json'\n })}\n \n - 添加组件带ignore标记:\n ${fileFormat({\n content: `[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"添加的布局组件\",\"ns\":\"namespace占位\",\"comId\":\"u_iiusd7\",\"ignore\": true}]`,\n fileName: '添加带ignore标记的步骤.json'\n })}\n \n 注意:\n - 新添加的组件ID必须使用5位唯一的字母数字组合,禁止重复,在所有UI组件中唯一;\n - index参数控制组件在插槽中的顺序位置。执行addChild前,需明确目标位置;\n </addChild>\n \n <move>\n - 移动组件,或者移动组件某个插槽下的所有组件\n - index为目标插槽的具体位置\n - 由于被添加的组件永远在最后一位,如果有位置要求,可以添加一个move操作来移动位置\n\n - params的格式以Typescript的形式说明如下:\n \\`\\`\\`typescript\n type moveToComParams = {\n comId:string, // 移动到目标组件\n slotId:string, // 需要移动的目标插槽\n index:number, // 移动到的位置,index=0表示放到第一位,index=1表示放到第二位\n }\n \\`\\`\\`\n\n 例如,当用户要求将组件u_ou1rs移动到组件u_iek32的某个插槽中,并且放到第一位,可以返回以下内容:\n ${fileFormat({\n content: `[\"u_ou1rs\",\":root\",\"move\",{\"comId\":\"u_iek32\",\"slotId\":\"插槽id\",\"index\":0}]`,\n fileName: '移动组件步骤.json'\n })}\n </move>\n\n <delete>\n - 删除组件\n\n 例如,当用户要求删除组件u_o21rs,可以返回以下内容:\n ${fileFormat({\n content: `[\"u_o21rs\",\":root\",\"delete\"]`,\n fileName: '删除组件整体.json'\n })}\n\n 注意:\n - 删除时,必须删除组件的整体,不能删除组件的某个部分,所以使用:root选择器。\n - 在规划多个action时,需要考虑delete对后续addChild、move操作中index参数的影响\n </delete>\n \n 注意:actions文件每一行遵循 JSON 语法,禁止非法代码,禁止出现内容省略提示、单行注释、省略字符。\n - actions返回的内容格式需要一行一个action,每一个action需要压缩,不要包含缩进等多余的空白字符;\n - 禁止包含任何注释(包括单行//和多行/* */)\n - 禁止出现省略号(...)或任何占位符\n - 确保所有代码都是完整可执行的,不包含示例片段\n - 禁止使用{}、{{}}这类变量绑定语法,并不支持此语法\n - 禁止使用非法字符或特殊符号\n - 所有内容均为静态数据,禁止解构,禁止使用变量\n\n \n 注意:\n - 返回actions文件内容时,务必注意操作步骤的先后顺序;\n - 有些操作需要在前面操作完成后才能进行;\n - 有些操作需要在其他操作开启(布尔类型的配置项)后才能进行;\n - 禁止重复使用相同的action;\n </关于actions>\n\n <UI搭建原则>\n 界面只有两类基本要素:组件、以及组件的插槽,组件的插槽可以嵌套其他组件。\n \n <组件的定位原则>\n 组件的定位有三种方式:flex定位、absolute定位、fixed定位。\n\n **flex定位**\n - 组件会相对于所在的插槽进行定位;\n - 通过尺寸(width、height) + 外间距(margin)来进行定位;\n - flex布局下的组件不允许使用left、top、right、bottom等定位属性;\n\n **absolute定位**\n - 组件会相对于当前组件的插槽进行定位,且脱离文档流;\n - 通过尺寸(width、height) + 位置(left、top、right、bottom)来进行定位;\n - absolute定位的组件不允许使用margin;\n \n 使用absolute定位的例子:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个绝对定位组件\",\"comId\":\"u_fixed\",\"ns\":\"组件\",\"layout\":{\"position\":\"absolute\",\"width\":\"100%\",\"height\":84,\"top\":12,\"left\":0},\"configs\":[]}]`,\n fileName: '添加一个absolute定位组件.json'\n })}\n \n **fixed定位**\n - 组件会相对于整个画布进行定位,且脱离文档流;\n - 通过尺寸(width、height) + 位置(left、top、right、bottom)来进行定位;\n - fixed定位的组件不允许使用margin;\n \n 使用fixed定位的例子:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个固定定位组件\",\"comId\":\"u_fixed\",\"ns\":\"组件\",\"layout\":{\"position\":\"fixed\",\"width\":\"100%\",\"height\":84,\"bottom\":0,\"left\":0},\"configs\":[]}]`,\n fileName: '添加一个fixed定位组件.json'\n })}\n\n 在插槽的不同布局下,组件的定位由所在插槽的布局方式决定:\n - 在当前组件的插槽中,可以添加fixed定位的组件,禁止在其他插槽中添加fixed定位的组件;\n - 如果插槽是flex布局,则子组件只能使用flex定位 或者 absolute定位;\n - 如果插槽是relative布局,则子组件只能使用absolute定位;\n </组件的定位原则>\n \n <布局原则>\n 插槽的布局(display=flex)指的是对于内部组件(仅对其直接子组件,对于子组件插槽中的子组件无影响)的布局约束:\n \n **flex布局**\n (基本等同于CSS3规范中的flex布局)插槽中的所有子组件通过宽高和margin进行布局。\n\n <辅助标记使用>\n 在mybricks中,组件最终会绘制到搭建画布上,确定所有组件的尺寸和位置,可以将多余的嵌套布局组件优化掉,所以需要通过辅助标记ignore来忽略多余的嵌套布局。\n 配置流程如下:\n 当布局组件的父组件也为布局组件时,观察当前组件是否配置样式(边框、背景、内间距等),是否可能需要支持事件(点击),父组件是否也是布局组件?\n - 1. 如果布局组件不配置样式也不需要点击功能,可以添加ignore标记,表示该布局组件仅承担布局功能,可以被优化掉;\n - 2. 如果布局组件配置了样式或者有可能需要点击功能,不能添加ignore标记,表示该布局组件承担样式功能,不能被优化掉;\n - 2.1 如何判断有没有可能需要支持事件?\n - 2.1.1 如果当前布局为图标+文本等常见的导航入口,猜测该布局组件后续需要支持点击功能,不能添加ignore标记;\n - 3. 如果布局组件的父组件不是布局组件,或者是根组件,不能添加ignore标记,不能被优化掉;\n\n 例子:第一个布局组件仅承担布局功能,可以添加ignore标记;第二个布局组件承担样式功能,不能添加ignore标记。\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_layout\",\"ignore\":true,\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_layout\",\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}},{\"path\":\"样式/样式\",\"style\":{\"background\":\"#FFFFFF\"}}]}]\n `,\n fileName: '辅助标记.json'\n })}\n \n </辅助标记使用>\n \n <布局使用示例>\n **flex布局**\n 子组件通过嵌套来搭建,无需考虑子组件的宽度和高度。\n\n 下面的例子使用flex实现左侧固定宽度,右侧自适应布局:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex1\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"u_flex1\",\"插槽id占位\",\"addChild\",{\"title\":\"左侧固定宽度组件\",\"comId\":\"u_leftFixed\",\"ns\":\"组件\",\"layout\":{\"width\":60,\"height\":40,\"marginRight\":8},\"configs\":[]}]\n [\"u_flex1\",\"插槽id占位\",\"addChild\",{\"title\":\"右侧自适应组件\",\"comId\":\"u_rightFlex\",\"ns\":\"组件\",\"layout\":{\"width\":'100%',\"height\":40},\"configs\":[]}]\n `,\n fileName: '左侧固定右侧自适应.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明,关注justifyContent效果,默认为flex-start;\n - 左侧组件使用固定宽度,右侧组件使用width=100%(效果等同于flex=1)实现自适应宽度;\n - 通过marginRight配置左侧组件与右侧组件的间距;\n \n \n 下面的例子使用flex进行嵌套,来实现左侧图标+文本,右侧箭头的布局:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex1\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex1\",\"插槽id占位\",\"addChild\",{\"title\":\"左侧布局组件\",\"comId\":\"u_leftLayout\",\"ignore\": true,\"ns\":\"布局组件\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\"},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\", \"justifyContent\": \"flex-start\"}}]}]\n [\"u_leftLayout\",\"插槽id占位\",\"addChild\",{\"title\":\"图标组件\",\"comId\":\"u_icon\",\"ns\":\"图标组件\",\"layout\":{\"width\":24,\"height\":24,\"marginRight\":8},\"configs\":[]}]\n [\"u_leftLayout\",\"插槽id占位\",\"addChild\",{\"title\":\"文本组件\",\"comId\":\"u_text\",\"ns\":\"文本组件\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\"},\"configs\":[]}]\n [\"u_flex1\",\"插槽id占位\",\"addChild\",{\"title\":\"箭头图标组件\",\"comId\":\"u_arrowIcon\",\"ns\":\"图标组件\",\"layout\":{\"width\":24,\"height\":24},\"configs\":[]}]\n `,\n fileName: 'flex嵌套实现左右布局.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 使用嵌套布局来完成左侧多元素 + 右侧单元素的布局,默认justifyContent=flex-start,所以左侧布局无需设置;\n - 左侧的图标+文本使用嵌套布局实现,且添加ignore标记,表示仅承担布局功能;\n\n 下面的例子使用flex实现垂直居中布局:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex2\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\"}}]}]\n [\"u_flex2\",\"插槽id占位\",\"addChild\",{\"title\":\"子组件\",\"comId\":\"u_child\",\"ns\":\"组件\",\"layout\":{\"width\":80,\"height\":80},\"configs\":[]}]\n `,\n fileName: '垂直居中布局.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection声明成column;\n - 通过alignItems来实现子组件的垂直居中; \n \n 下面的例子使用flex进行横向左右均分布局,实现各占一半的效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex3\",\"ignore\": true,\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex3\",\"插槽id占位\",\"addChild\",{\"title\":\"A组件\",\"comId\":\"u_a321s\",\"ns\":\"组件\",\"layout\":{\"width\":\"auto\",\"height\":40,\"marginRight\":8},\"configs\":[]}]\n [\"u_flex3\",\"插槽id占位\",\"addChild\",{\"title\":\"B组件\",\"comId\":\"u_b321s\",\"ns\":\"组件\",\"layout\":{\"width\":\"auto\",\"height\":40},\"configs\":[]}]\n `,\n fileName: '左右各占一半布局.json'\n })}\n 在上例中:\n - 为了实现各占一半,配置A组件和B组件的宽度都为自适应auto(效果等同于flex=1),实现各占一半的效果;\n - 注意:不允许配置百分比宽度;\n - 判断仅布局,添加ignore标记,优化搭建内容。\n - 通过marginRight配置左侧组件与右侧组件的间距;\n\n 下面的例子使用flex进行横向均分或等分布局,实现一行N列的效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex4\",\"ignore\": true,\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex4\",\"插槽id占位\",\"addChild\",{\"title\":\"A组件\",\"comId\":\"u_aksi\",\"ns\":\"组件\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n [\"u_flex4\",\"插槽id占位\",\"addChild\",{\"title\":\"B组件\",\"comId\":\"u_b293e\",\"ns\":\"组件\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n [\"u_flex4\",\"插槽id占位\",\"addChild\",{\"title\":\"C组件\",\"comId\":\"u_csim2\",\"ns\":\"组件\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n `,\n fileName: '一行N列布局.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 针对内容元素的尺寸,配置合理的高度,防止内容溢出;\n - 为了实现均分,保证卡片之间存在间距,配置卡片宽度和高度都为固定值\n - 注意:不允许配置百分比宽度;\n - 判断仅布局,添加ignore标记,优化搭建内容。\n\n 下面的例子展示flex布局中负margin的妙用,通过负margin实现背景层+内容层重叠的效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex6\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":\"fit-content\"},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"column\"}}]}]\n [\"u_flex6\",\"插槽id占位\",\"addChild\",{\"title\":\"背景层\",\"comId\":\"u_asds6\",\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[]}]\n [\"u_flex6\",\"插槽id占位\",\"addChild\",{\"title\":\"内容层\",\"comId\":\"u_csdt6\",\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":100, \"marginTop\": -30},\"configs\":[]}]\n `,\n fileName: '负margin实现背景层+内容层重叠.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 通过负margin实现背景层+内容层重叠的效果;\n\n 特殊地,在flex布局中的元素还可以配置position=absolute,用于实现绝对定位效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex5\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":200},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"u_flex5\",\"插槽id占位\",\"addChild\",{\"title\":\"绝对定位组件\",\"comId\":\"u_abs12\",\"ns\":\"组件\",\"layout\":{\"position\":\"absolute\",\"width\":100,\"height\":40,\"top\":20,\"left\":20},\"configs\":[]}]\n [\"u_flex5\",\"插槽id占位\",\"addChild\",{\"title\":\"普通组件\",\"comId\":\"u_nor12\",\"ns\":\"组件\",\"layout\":{\"width\":80,\"height\":80},\"configs\":[]}]\n `,\n fileName: '绝对定位效果.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 通过layout中的属性,设置成绝对定位效果,在一些特殊的角标等场景下很有效果;\n \n **自由定位布局**\n 子组件通过自由定位来布局,无需考虑其他组件的布局影响。\n 下面的例子使用absolute实现自由定位布局:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_absoluteLayout\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":300},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"position\":\"relative\"}}]}]\n [\"u_absoluteLayout\",\"插槽id占位\",\"addChild\",{\"title\":\"绝对定位组件A\",\"comId\":\"u_absA\",\"ns\":\"组件\",\"layout\":{\"position\":\"absolute\",\"width\":100,\"height\":40,\"top\":20,\"left\":20},\"configs\":[]}]\n [\"u_absoluteLayout\",\"插槽id占位\",\"addChild\",{\"title\":\"绝对定位组件B\",\"comId\":\"u_absB\",\"ns\":\"组件\",\"layout\":{\"position\":\"absolute\",\"width\":80,\"height\":80,\"top\":100,\"left\":150},\"configs\":[]}]\n `,\n fileName: 'absolute自由定位布局.json'\n })}\n 在上例中:\n - 宽高不可以配置fit-content,防止内容塌陷;\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中position声明成relative;\n - 通过layout中的属性,设置成绝对定位效果,实现自由定位布局;\n </布局使用示例>\n\n <布局的选用:重要>\n 由于是修改组件,优先参考*原有组件的布局*进行搭建,除非用户有明确要求,否则不建议更改布局方式。\n - 如果当前组件使用的是flex布局,优先使用flex布局进行搭建;\n - 如果当前组件使用的是absolute布局,优先使用absolute布局进行搭建;\n </布局的选用:重要>\n\n <布局注意事项>\n - 布局相关组件在添加时必须配置布局编辑器的值,尤其需要配置flexDirection和justifyContent;\n - 对于flexDirection,必须配置,仅允许配置row或column;\n - 优先考虑fit-content,如果要使用固定宽高,必须考虑到固定宽高会不会溢出导出布局错乱的问题;\n <布局注意事项>\n \n </布局原则>\n \n <最佳实践>\n 1. 对每一个组件,都仔细考虑是否要使用<辅助标记 />,按照<辅助标记使用 />来配置标记;\n 2. 对于文本、图片、图标、按钮等基础组件,任何情况下都可以优先使用,即使不在允许使用的组件里;\n 3. 对于图标,图标禁止使用emoji或者特殊符号,必须使用图标组件来搭建;\n 4. 关于图片\n 4.1 如果是常规图片,使用https://ai.mybricks.world/image-search?term=dog&w=100&h=200,其中term代表搜索词,w和h可以配置图片宽高;\n 4.2 如果是Logo,可以使用https://placehold.co来配置一个带文本和颜色的图标,其中text需要为图标的英文搜索词,禁止使用emoji或者特殊符号;\n 5. 对于文本,尺寸的计算\n - 宽度和高度要根据fontSize等样式来计算,预留更多的空间;\n - 尽量配置文本省略参数,防止一行换行后变多行带来的布局变化;\n - 文本最小大小可以配置到fontSize=10,在一些文字内容特别多的场景可以配置小文字;\n 8. 子组件计算尺寸(宽度与高度)的时候,需要向上考虑父元素(插槽、父组件或祖先插槽及组件)所有的尺寸与间距等样式,否则容易计算错误;\n 9. 对于横向排列或者竖向排列的多个相似元素,考虑如下情况:\n - 如果猜测是动态项,使用列表类组件来搭建;\n - 如果猜测是静态内容,优先使用布局,N行M列来搭建;\n - 如果是属于某个组件的内容,使用组件来搭建;\n </最佳实践>\n </UI搭建原则>\n</如何搭建UI以及修改>\n\n${config.appendPrompt ? `<对于项目环境的说明>\n${config.appendPrompt}\n</对于项目环境的说明>` : ''}\n\n<examples>\n <example>\n <user_query>文本组件替换成图片</user_query>\n <assistant_response>\n 好的,我将文本组件替换成图片组件。当前文本组件在插槽的第一位(index=0),删除后我需要在相同位置添加图片组件,所以指定index=0。\n\n ${fileFormat({\n content: `[\"u_24uiu\",\":root\",\"delete\"]\n[\"u_parent\",\"slotId\",\"addChild\",{\"title\":\"添加一个图片组件\",\"comId\":\"u_image1\",\"index\":0,\"ns\":\"图片组件\",\"layout\":{\"width\":100,\"height\":100}}]`,\n fileName: '将文本组件替换成图片.json'\n })}\n </assistant_response>\n </example>\n\n <example>\n <user_query>宽度改成适应内容</user_query>\n <assistant_response>\n 好的,我将当前组件的宽度做适应内容的调整\n\n ${fileFormat({\n content: `[\"u_908\", \":root\", \"setLayout\", {\"width\":\"fit-content\"}]`,\n fileName: '修改宽度.json'\n })}\n </assistant_response>\n </example>\n \n <example>\n <user_query>改成蓝色风格</user_query>\n <assistant_response>\n 好的,我将当前组件的配色以及子组件统一修改为蓝色风格\n\n ${fileFormat({\n content: `[\"u_222\", \":root\", \"doConfig\", {\"path\":\"样式/背景色\",\"style\":{\"background\": \"blue\"}}]\n[\"u_child2\", \":root\", \"doConfig\", {\"path\":\"样式/背景色\",\"style\":{\"background\": \"blue\"}}]`,\n fileName: '修改颜色.json'\n })}\n </assistant_response>\n </example>\n\n <example>\n <user_query>查看我的效果图,重构这个区域</user_query>\n <assistant_response>\n 根据图片效果,主要执行以下修改:\n 1. 容器原来是均分布局,为了实现效果图中的效果,需要修改为左右布局,左侧为图标+文本,右侧为箭头;\n 2. 删除容器中原有的按钮,替换成图标+文本,替换可以使用指定位置的addChild来完成,先添加左侧容器,再添加图标和文本;\n 3. 中间有一个装饰图片 ,flex布局下不好实现,用绝对定位实现;\n \n ${fileFormat({\n content: `[\"u_24uiu\", \":root\", \"doConfig\", {\"path\":\"样式/布局\",\"style\":{\"display\": \"flex\", \"flexDirection\": \"row\", \"justifyContent\": \"space-between\", \"alignItems\": \"center\"}}]\n[\"u_iobtn\", \":root\", \"delete\"]\n[\"u_24uiu\", \"slotId\", \"addChild\", {\"title\":\"左侧容器\",\"comId\":\"u_sdflx\",\"index\":0,\"ns\":\"布局组件\",\"layout\":{\"width\":\"fit-content\",\"height\":60, \"marginLeft\": 12},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\"}}]}]\n[\"u_sdflex\", \"addChild\", {\"title\":\"图标组件\",\"comId\":\"u_icon\",\"index\":0,\"ns\":\"图标组件\",\"layout\":{\"width\":24,\"height\":24,\"marginLeft\":8},\"configs\":[]}]\n[\"u_sdflex\", \"addChild\", {\"title\":\"文本组件\",\"comId\":\"u_text\",\"index\":1,\"ns\":\"文本组件\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\", \"marginLeft\": 8},\"configs\":[]}]\n[\"u_sdflex\", \"addChild\", {\"title\":\"箭头图标组件\",\"comId\":\"u_rso0c\",\"index\":2,\"ns\":\"图标组件\",\"layout\":{\"width\":24,\"height\":24},\"configs\":[]}]\n[\"u_24uiu\", \"slotId\", \"addChild\", {\"title\":\"装饰组件\",\"comId\":\"u_abs1\",\"ns\":\"布局组件\",\"layout\":{\"position\": \"absolute\", \"width\": 100, \"height\": 30, \"bottom\": 0, \"left\": 360},\"configs\":[]}]\n`,\n fileName: '重构区域.json'\n })}\n </assistant_response>\n </example>\n\n <example>\n <user_query>优化下这个排版</user_query>\n <assistant_response>\n 好的,我们分析下目前的搭建内容,排版上来看,当前原有组件的是绝对定位处理的,可以看出来有几个问题:\n 1. 元素之间没有对齐,显得比较杂乱;\n 2. 作为头像来说,图片大小不合适,改成宽高一致并左边垂直居中;\n 3. 元素之间位置有问题,看起来有几处重叠。\n\n 我们优先使用当前布局,然后通过调整各个组件的位置和尺寸信息完成需求。\n\n 我们调整下看看效果\n ${fileFormat({\n content: `[\"u_text1\", \":root\", \"setLayout\", {\"position\": \"absolute\", \"width\": 200, \"height\": 40, \"top\": 20, \"left\": 20}]\n[\"u_image1\", \":root\", \"setLayout\", {\"position\": \"absolute\", \"width\": 100, \"height\": 100, \"top\": 80, \"left\": 20}]\n[\"u_button1\", \":root\", \"setLayout\", {\"position\": \"absolute\", \"width\": 80, \"height\": 40, \"top\": 200, \"left\": 20}]`,\n fileName: '优化排版.json'\n })}\n\n 注意:父组件有内间距,插槽才是实际可布局区域,根据插槽宽度来计算居中。\n </assistant_response>\n </example>\n</examples>`\n },\n aiRole: config.getFocusElementAiRole?.() || (hasChildren ? 'expert' : 'architect'),\n stream({ files, status, replaceContent }) {\n let actions: any = [];\n const actionsFile = getFiles(files, { extName: 'json' })\n\n if (actionsFile) {\n actions = streamActionsParser(actionsFile.content ?? \"\", actionsFile?.isComplete);\n actions = fixActions(actions, {\n pageId\n })\n if (!fileNameToContent[actionsFile!.fileName]) {\n fileNameToContent[actionsFile!.fileName] = \"\";\n }\n\n if (actions?.[0]?.comId && !firstActionId) {\n firstActionId = actions?.[0]?.comId;\n \n if (firstActionId !== \"_root_\" && firstActionId !== pageId) {\n actionType = 'uiCom'\n }\n\n promiseStack.add(() => config.onActions([], 'start', actionType))\n }\n }\n\n if (actions.length > 0 || status === 'complete') {\n const currentStatus = status === 'complete' ? \"ing\" : status;\n try {\n const copiedActions = JSON.parse(JSON.stringify(actions));\n try {\n actions.forEach((action: any) => {\n if (action.type === \"addChild\") {\n const childComId = action.params.comId;\n // 对于 addChild,每次添加都生成新的 UUID 映射\n action.params.comId = comIdTransform.addComId(childComId);\n\n // 目标组件ID需要映射\n const parentComId = action.comId;\n if (parentComId !== \"_root_\") {\n // 父组件 id 使用最近一次的映射\n action.comId = comIdTransform.getComId(parentComId);\n }\n } else if (action.type === \"move\") {\n const comId = action.comId;\n if (comId !== \"_root_\") {\n // 获取组件时,使用最近添加的comId\n action.comId = comIdTransform.getComId(comId);\n }\n\n // 目标组件ID需要映射\n const toParams = action.params?.to ?? {};\n const targetId = toParams.comId;\n if (targetId && targetId !== \"_root_\") {\n action.params.to.comId = comIdTransform.getComId(targetId);\n }\n } else if (action.type === \"doConfig\") {\n const comId = action.comId;\n if (comId !== \"_root_\") {\n // 获取组件时,使用最近添加的comId\n action.comId = comIdTransform.getComId(comId);\n }\n }\n })\n actions.forEach((action: any) => {\n promiseStack.add(() => config.onActions([action], currentStatus, actionType))\n })\n } catch (error) {\n console.error('refactor-component onActions error', error);\n }\n const actionsContent = getComponentOperationSummary(copiedActions, config.componentIdToTitleMap)\n\n if (actionsFile) {\n if (!fileNameToContent[actionsFile!.fileName]) {\n fileNameToContent[actionsFile!.fileName] = actionsContent.trim();\n } else {\n fileNameToContent[actionsFile!.fileName] += `\\n${actionsContent.trim()}`;\n }\n }\n } catch (error) {}\n\n if (status === \"complete\") {\n promiseStack.add(() => config.onActions([], status, actionType))\n }\n }\n\n return displayContent = Object.entries(fileNameToContent).reduce((pre, [fileName, content]) => {\n return pre.replace(fileName, content);\n }, replaceContent)\n },\n execute({ files, content }) {\n let errorContent;\n try {\n errorContent = JSON.parse(content)\n } catch (error) { }\n if (errorContent && errorContent?.message) {\n throw new RxaiError(`网络错误,${errorContent?.message}`, \"request\")\n }\n\n let actions: any = [];\n const actionsFile = getFiles(files, { extName: 'json' })\n\n if (!actionsFile) {\n return {\n llmContent: content,\n displayContent: content\n }\n }\n\n return {\n llmContent: displayContent,\n displayContent: displayContent\n }\n\n // actions = excuteActionsParser(actionsFile.content ?? \"\");\n\n // // console.log('actions', actions)\n\n // // const actionsGroupById = actions.reduce((acc, item) => {\n // // const id = item.comId;\n // // if (!acc[id]) {\n // // acc[id] = [];\n // // }\n // // acc[id].push(item);\n // // return acc;\n // // }, {});\n\n // try {\n // const llmContent = stripFileBlocks(content);\n // const actionsContent = actions?.length ? getComponentOperationSummary(actions, OutlineInfo.getComponentIdToTitleMap(config?.getPageJson(), pageId)) : \"\"\n // const summary = (llmContent ? `${llmContent}\\n\\n` : \"\") + (actionsContent ? `修改内容如下\\n${actionsContent}` : \"当前没有内容修改\");\n\n // return {\n // llmContent: summary,\n // displayContent: summary\n // }\n\n // // const summary = getComponentOperationSummary(actions, OutlineInfo.getComponentIdToTitleMap(config?.getPageJson(), pageId))\n\n // // return {\n // // llmContent: `根据需求,我们进行如下修改\n // // ${summary}`,\n // // displayContent: `根据需求,我们进行如下修改\n // // ${summary}`\n // // }\n // } catch (error) {\n\n // }\n\n // return {\n // llmContent: '已执行所有修改操作',\n // displayContent: '已执行所有修改操作'\n // }\n },\n }\n}\n\nfunction fixActions(actions: any[], {\n pageId\n}: {\n pageId?: string\n}) {\n return (actions ?? []).map(action => {\n if (action.comId === pageId) {\n action.comId = '_root_'\n }\n return action;\n })\n}\n\nexport interface RefactorUiContentConfigParams {\n fewShots: string;\n}\n\nexport function RefactorUiContent(params?: RefactorUiContentConfigParams) {\n return {\n name: NAME,\n params: params,\n }\n}"],"names":["NAME","refactorUiContent","toolName","config","_config$getFocusEleme","streamActionsParser","createActionsParser","enabledActionTags","context","hasChildren","getFocusElementHasChildren","fileNameToContent","displayContent","firstActionId","actionType","pageId","getTargetId","comIdTransform","ComIdTransform","getComIds","promiseStack","PromiseStack","name","displayName","description","getPrompts","concat","getRootComponentDoc","fileFormat","content","fileName","appendPrompt","aiRole","getFocusElementAiRole","call","stream","_ref","files","status","replaceContent","actions","actionsFile","getFiles","extName","_actionsFile$content","_actions","isComplete","fixActions","comId","_actions2","add","onActions","length","currentStatus","copiedActions","JSON","parse","stringify","forEach","action","type","childComId","params","addComId","parentComId","getComId","_action$params$to","_action$params","toParams","to","targetId","error","console","actionsContent","getComponentOperationSummary","componentIdToTitleMap","trim","Object","entries","reduce","pre","_ref2","replace","execute","_ref3","_errorContent","errorContent","message","_errorContent2","RxaiError","llmContent","_ref4","map","RefactorUiContent"],"mappings":"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"}
|