@mybricks/to-code-taro 1.1.2 → 1.1.4

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.
Files changed (82) hide show
  1. package/dist/cjs/core/utils/PopupRenderer.js +1 -1
  2. package/dist/cjs/core/utils/hooks.js +102 -38
  3. package/dist/cjs/core/utils/slots.js +11 -4
  4. package/dist/cjs/core/utils/useContext.js +6 -4
  5. package/dist/cjs/core/utils/with.js +3 -3
  6. package/dist/cjs/generate/generateTaroProjectJson.js +7 -4
  7. package/dist/cjs/generate/utils/commonDir.js +12 -1
  8. package/dist/cjs/generate/utils/pageImages.d.ts +14 -0
  9. package/dist/cjs/generate/utils/pageImages.js +36 -0
  10. package/dist/cjs/handleCom.js +37 -14
  11. package/dist/cjs/handleDom.d.ts +2 -0
  12. package/dist/cjs/handleDom.js +5 -2
  13. package/dist/cjs/handleGlobal.js +4 -2
  14. package/dist/cjs/handleSlot.d.ts +3 -0
  15. package/dist/cjs/handleSlot.js +31 -7
  16. package/dist/cjs/taro-template.json +1250 -946
  17. package/dist/cjs/toCodeTaro.d.ts +1 -0
  18. package/dist/cjs/toCodeTaro.js +80 -1
  19. package/dist/cjs/utils/config/content/converter.js +2 -2
  20. package/dist/cjs/utils/config/content/pageConfig.js +4 -1
  21. package/dist/cjs/utils/config/content/saveBase64Image.d.ts +10 -0
  22. package/dist/cjs/utils/config/content/saveBase64Image.js +44 -3
  23. package/dist/cjs/utils/config/content/tabBarConfig.js +8 -2
  24. package/dist/cjs/utils/logic/handleProcess.js +3 -3
  25. package/dist/cjs/utils/logic/processChildren.d.ts +14 -1
  26. package/dist/cjs/utils/logic/processChildren.js +30 -6
  27. package/dist/cjs/utils/style/converter.js +34 -72
  28. package/dist/cjs/utils/templates/index.d.ts +1 -0
  29. package/dist/cjs/utils/templates/index.js +11 -2
  30. package/dist/cjs/utils/templates/renderManager.d.ts +4 -0
  31. package/dist/cjs/utils/templates/renderManager.js +10 -3
  32. package/dist/cjs/utils/templates/scene.js +2 -0
  33. package/dist/esm/core/utils/PopupRenderer.js +1 -1
  34. package/dist/esm/core/utils/hooks.js +137 -53
  35. package/dist/esm/core/utils/popupRouter.js +2 -1
  36. package/dist/esm/core/utils/slots.js +24 -22
  37. package/dist/esm/core/utils/useContext.js +8 -10
  38. package/dist/esm/core/utils/with.js +3 -3
  39. package/dist/esm/generate/generateTaroProjectJson.js +7 -2
  40. package/dist/esm/generate/utils/commonDir.js +15 -0
  41. package/dist/esm/generate/utils/pageImages.d.ts +14 -0
  42. package/dist/esm/generate/utils/pageImages.d.ts.map +1 -0
  43. package/dist/esm/generate/utils/pageImages.js +15 -0
  44. package/dist/esm/handleCom.js +44 -17
  45. package/dist/esm/handleDom.d.ts +2 -0
  46. package/dist/esm/handleDom.js +6 -4
  47. package/dist/esm/handleGlobal.js +4 -2
  48. package/dist/esm/handleSlot.d.ts +3 -0
  49. package/dist/esm/handleSlot.js +52 -10
  50. package/dist/esm/taro-template.json +1250 -946
  51. package/dist/esm/toCodeTaro.d.ts +1 -0
  52. package/dist/esm/toCodeTaro.d.ts.map +1 -1
  53. package/dist/esm/toCodeTaro.js +89 -4
  54. package/dist/esm/utils/config/content/converter.js +2 -2
  55. package/dist/esm/utils/config/content/pageConfig.js +4 -1
  56. package/dist/esm/utils/config/content/saveBase64Image.d.ts +10 -0
  57. package/dist/esm/utils/config/content/saveBase64Image.js +42 -1
  58. package/dist/esm/utils/config/content/tabBarConfig.js +7 -2
  59. package/dist/esm/utils/config/handlePageConfig.d.ts.map +1 -0
  60. package/dist/esm/utils/logic/genJSModules.d.ts.map +1 -0
  61. package/dist/esm/utils/logic/handleProcess.js +3 -3
  62. package/dist/esm/utils/logic/processChildren.d.ts +14 -1
  63. package/dist/esm/utils/logic/processChildren.js +45 -8
  64. package/dist/esm/utils/style/converter.js +57 -106
  65. package/dist/esm/utils/templates/index.d.ts +1 -0
  66. package/dist/esm/utils/templates/index.js +9 -2
  67. package/dist/esm/utils/templates/renderManager.d.ts +4 -0
  68. package/dist/esm/utils/templates/renderManager.js +17 -4
  69. package/dist/esm/utils/templates/scene.js +1 -0
  70. package/package.json +1 -1
  71. package/dist/esm/generate/utils/commonDir.d.ts.map +0 -1
  72. package/dist/esm/handleCom.d.ts.map +0 -1
  73. package/dist/esm/handleDom.d.ts.map +0 -1
  74. package/dist/esm/handleGlobal.d.ts.map +0 -1
  75. package/dist/esm/utils/config/content/converter.d.ts.map +0 -1
  76. package/dist/esm/utils/config/content/pageConfig.d.ts.map +0 -1
  77. package/dist/esm/utils/config/content/saveBase64Image.d.ts.map +0 -1
  78. package/dist/esm/utils/config/content/tabBarConfig.d.ts.map +0 -1
  79. package/dist/esm/utils/logic/handleProcess.d.ts.map +0 -1
  80. package/dist/esm/utils/logic/processChildren.d.ts.map +0 -1
  81. package/dist/esm/utils/templates/index.d.ts.map +0 -1
  82. package/dist/esm/utils/templates/renderManager.d.ts.map +0 -1
@@ -1,12 +1,13 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
2
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  import { convertComponentStyle, convertStyleAryToCss } from "./utils/style/converter";
6
- import { indentation, firstCharToUpperCase, formatSlotContent, getUiComponentCode } from "./utils/templates/index";
6
+ import { indentation, firstCharToUpperCase, getUiComponentCode } from "./utils/templates/index";
7
7
  import { genSlotRenderRef } from "./utils/templates/component";
8
8
  import { RenderManager } from "./utils/templates/renderManager";
9
9
  import handleSlot from "./handleSlot";
10
+ import handleDom from "./handleDom";
10
11
  import { processComEvents } from "./processors/processComEvents";
11
12
  import { handleProcess } from "./utils/logic/handleProcess";
12
13
  /**
@@ -52,6 +53,11 @@ export var handleCom = function handleCom(com, config) {
52
53
  rootStyle = _prepareStyles.rootStyle;
53
54
  var accumulatedCssContent = cssContent;
54
55
 
56
+ // 鸿蒙化:如果存在内置子节点(child),确保容器为 relative,以便内部绝对定位生效
57
+ if (com.child) {
58
+ rootStyle.position = "relative";
59
+ }
60
+
55
61
  // 4. 处理插槽
56
62
  var _processComSlots = processComSlots(com, config, accumulatedCssContent),
57
63
  slotsCode = _processComSlots.slotsCode,
@@ -60,15 +66,28 @@ export var handleCom = function handleCom(com, config) {
60
66
  childrenResults = _processComSlots.childrenResults;
61
67
  accumulatedCssContent = slotCss;
62
68
 
63
- // 5. 生成 UI 代码
64
- var ui = generateUiCode(com, config, componentName, rootStyle, comEventCode, slotsCode, eventHandlers);
69
+ // 5. 处理组件内置子节点 (child 属性,常用于自由布局中的绝对定位包装层)
70
+ var childrenUi = "";
71
+ if (com.child) {
72
+ var childResult = handleDom(com.child, _objectSpread(_objectSpread({}, config), {}, {
73
+ depth: config.depth + 1
74
+ }));
75
+ childrenUi = childResult.ui;
76
+ if (childResult.cssContent) {
77
+ accumulatedCssContent += (accumulatedCssContent ? "\n" : "") + childResult.cssContent;
78
+ }
79
+ }
80
+
81
+ // 6. 生成 UI 代码 (支持嵌套子节点)
82
+ var ui = generateUiCode(com, config, componentName, rootStyle, comEventCode, slotsCode, eventHandlers, childrenUi);
83
+ var hasEvents = Object.keys(eventHandlers).length > 0;
65
84
  return {
66
85
  slots: [],
67
86
  scopeSlots: [],
68
87
  ui: ui,
69
88
  js: eventCode,
70
89
  cssContent: accumulatedCssContent,
71
- outputsConfig: Object.keys(eventHandlers).length > 0 ? _defineProperty({}, meta.id, eventHandlers) : undefined,
90
+ outputsConfig: hasEvents ? _defineProperty({}, meta.id, eventHandlers) : undefined,
72
91
  childrenResults: childrenResults,
73
92
  name: meta.name,
74
93
  // 返回解析后的稳定名称
@@ -147,9 +166,12 @@ var processComSlots = function processComSlots(com, config, initialCss) {
147
166
  var _ref3 = _slicedToArray(_ref2, 2),
148
167
  slotId = _ref3[0],
149
168
  slot = _ref3[1];
150
- // 鸿蒙规范:如果插槽内没有组件,跳过渲染
169
+ // 鸿蒙规范:如果插槽内没有组件,直接渲染空
151
170
  var children = slot.comAry || slot.children || [];
171
+ var isLast = index === slotEntries.length - 1;
172
+ var slotIndent = indentation(config.codeStyle.indent * (config.depth + 2));
152
173
  if (children.length === 0) {
174
+ slotsCode += "".concat(slotIndent).concat(slotId, ": {\n").concat(slotIndent, " render: () => null\n").concat(slotIndent, "}").concat(isLast ? '' : ',', "\n");
153
175
  return;
154
176
  }
155
177
  var slotLayout = (_com$props$data = com.props.data) === null || _com$props$data === void 0 ? void 0 : _com$props$data.layout;
@@ -160,6 +182,8 @@ var processComSlots = function processComSlots(com, config, initialCss) {
160
182
  depth: 1,
161
183
  renderManager: renderManager,
162
184
  slotKey: slotId,
185
+ // 给 slot 根容器打标用(slot wrapper className)
186
+ parentComId: meta.id,
163
187
  // 鸿蒙化:传递父容器的布局配置给插槽
164
188
  layout: slotLayout
165
189
  }));
@@ -168,15 +192,16 @@ var processComSlots = function processComSlots(com, config, initialCss) {
168
192
  accumulatedCssContent += (accumulatedCssContent ? "\n" : "") + result.cssContent;
169
193
  }
170
194
  var renderId = "".concat(meta.id, "_").concat(slotId);
171
- var baseIndentSize = config.codeStyle.indent;
172
- var renderBodyIndent = indentation(config.codeStyle.indent * 2);
173
- var formattedContent = formatSlotContent(result.ui, baseIndentSize, renderBodyIndent);
195
+
196
+ // 关键:不再预先 formatSlotContent,而是将原始 ui 传给 renderManager
197
+ // 这样 RenderManager 在内部进行精确字符串替换时才能匹配成功
198
+ var rawContent = result.ui;
174
199
 
175
200
  // 鸿蒙化处理:针对表单容器进行别名对齐
176
- if (meta.def.namespace === "mybricks.taro.formContainer" && Array.isArray((_props$data2 = props.data) === null || _props$data2 === void 0 ? void 0 : _props$data2.items) && result.childrenResults) {
201
+ if (meta.def.namespace === "mybricks.taro.formContainer" && Array.isArray((_props$data2 = props.data) === null || _props$data2 === void 0 ? void 0 : _props$data2.items) && result.directChildren) {
177
202
  var _props$data3;
178
203
  var items = (_props$data3 = props.data) === null || _props$data3 === void 0 ? void 0 : _props$data3.items;
179
- result.childrenResults.forEach(function (childRes) {
204
+ result.directChildren.forEach(function (childRes) {
180
205
  var itemConfig = items.find(function (it) {
181
206
  return it.id === childRes.id;
182
207
  });
@@ -192,22 +217,23 @@ var processComSlots = function processComSlots(com, config, initialCss) {
192
217
  var logicCode = buildSlotLogicCode({
193
218
  parentComId: meta.id,
194
219
  slotKey: slotId,
195
- children: result.childrenResults,
220
+ children: result.directChildren,
196
221
  config: config
197
222
  });
198
223
 
199
224
  // 生成插槽描述注释内容
200
225
  var description = "".concat(meta.title || meta.id, "\u7684").concat(slot.title || slotId, "\u63D2\u69FD");
201
- renderManager.register(renderId, formattedContent, result.childrenResults, logicCode, slot.type, slot.wrap || slot.itemWrap || ((_COM_PROTOCOL$meta$de = COM_PROTOCOL[meta.def.namespace]) === null || _COM_PROTOCOL$meta$de === void 0 ? void 0 : _COM_PROTOCOL$meta$de.useWrap), description);
226
+ renderManager.register(renderId, rawContent, result.directChildren,
227
+ // 仅传入直接子组件,避免递归替换导致的结构破坏
228
+ logicCode, slot.type, slot.wrap || slot.itemWrap || ((_COM_PROTOCOL$meta$de = COM_PROTOCOL[meta.def.namespace]) === null || _COM_PROTOCOL$meta$de === void 0 ? void 0 : _COM_PROTOCOL$meta$de.useWrap), description);
202
229
  if (result.childrenResults) {
203
230
  allChildrenResults = allChildrenResults.concat(result.childrenResults);
204
231
  }
205
- var slotIndent = indentation(config.codeStyle.indent * (config.depth + 2));
206
232
  slotsCode += genSlotRenderRef({
207
233
  slotId: slotId,
208
234
  renderId: renderId,
209
235
  indent: slotIndent,
210
- isLast: index === slotEntries.length - 1
236
+ isLast: isLast
211
237
  });
212
238
  });
213
239
  return {
@@ -263,7 +289,7 @@ var buildSlotLogicCode = function buildSlotLogicCode(args) {
263
289
  /**
264
290
  * 生成 UI 代码
265
291
  */
266
- var generateUiCode = function generateUiCode(com, config, componentName, rootStyle, comEventCode, slotsCode, eventHandlers) {
292
+ var generateUiCode = function generateUiCode(com, config, componentName, rootStyle, comEventCode, slotsCode, eventHandlers, childrenUi) {
267
293
  var _scene$coms, _sceneCom$inputs, _sceneCom$outputs, _meta$outputs;
268
294
  var meta = com.meta,
269
295
  props = com.props;
@@ -280,7 +306,8 @@ var generateUiCode = function generateUiCode(com, config, componentName, rootSty
280
306
  componentOutputs: ((sceneCom === null || sceneCom === void 0 || (_sceneCom$outputs = sceneCom.outputs) === null || _sceneCom$outputs === void 0 ? void 0 : _sceneCom$outputs.length) || 0) > 0 ? sceneCom.outputs : (((_meta$outputs = meta.outputs) === null || _meta$outputs === void 0 ? void 0 : _meta$outputs.length) || 0) > 0 ? meta.outputs : undefined,
281
307
  comEventCode: comEventCode,
282
308
  slotsCode: slotsCode,
283
- eventHandlers: eventHandlers
309
+ eventHandlers: eventHandlers,
310
+ childrenUi: childrenUi
284
311
  }, {
285
312
  codeStyle: config.codeStyle,
286
313
  depth: config.depth + 1,
@@ -14,6 +14,8 @@ type HandleDomResult = {
14
14
  slots: string[];
15
15
  scopeSlots: string[];
16
16
  cssContent: string;
17
+ directChildren?: any[];
18
+ childrenResults?: any[];
17
19
  };
18
20
  declare const handleDom: (dom: Dom, config: HandleDomConfig) => HandleDomResult;
19
21
  export default handleDom;
@@ -1,11 +1,11 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
2
  import { indentation, convertStyleAryToCss, convertRootStyle } from "./utils";
3
- import { processChildren } from "./utils/logic/processChildren";
3
+ import { normalizeChildren, processChildren } from "./utils/logic/processChildren";
4
4
  var handleDom = function handleDom(dom, config) {
5
5
  var _domProps$style;
6
- var props = dom.props,
7
- children = dom.children;
6
+ var props = dom.props;
8
7
  var domProps = props;
8
+ var children = normalizeChildren(dom);
9
9
  var childResults = processChildren(children, _objectSpread(_objectSpread({}, config), {}, {
10
10
  depth: config.depth + 1
11
11
  }));
@@ -18,7 +18,9 @@ var handleDom = function handleDom(dom, config) {
18
18
  js: childResults.js,
19
19
  slots: childResults.slots,
20
20
  scopeSlots: childResults.scopeSlots,
21
- cssContent: cssContent
21
+ cssContent: cssContent,
22
+ directChildren: childResults.directChildren,
23
+ childrenResults: childResults.childrenResults
22
24
  };
23
25
  };
24
26
  export default handleDom;
@@ -8,6 +8,7 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
8
8
  /* eslint-disable @typescript-eslint/no-explicit-any */
9
9
  import { ImportManager, indentation } from "./utils";
10
10
  import { handleProcess } from "./utils/logic/handleProcess";
11
+ import { getSafeVarName } from "./utils/common/string";
11
12
  var handleGlobal = function handleGlobal(params, config) {
12
13
  var tojson = params.tojson,
13
14
  globalFxs = params.globalFxs,
@@ -50,8 +51,9 @@ var handleGlobal = function handleGlobal(params, config) {
50
51
  return tojson.global;
51
52
  }
52
53
  }));
53
- globalVarsRegisterChangeCode += "\n".concat(indent2, "this.").concat(com.title, ".registerChange((value: any) => {") + "\n".concat(res) + "\n".concat(indent2, "})");
54
- globalVarsInitCode += "".concat(indent).concat(com.title, ": any = createVariable(").concat(JSON.stringify(com.model.data.initValue || {}), ")\n");
54
+ var varKey = getSafeVarName(com);
55
+ globalVarsRegisterChangeCode += "\n".concat(indent2, "this.").concat(varKey, ".registerChange((value: any) => {") + "\n".concat(res) + "\n".concat(indent2, "})");
56
+ globalVarsInitCode += "".concat(indent).concat(varKey, ": any = createVariable(").concat(JSON.stringify(com.model.data.initValue || {}), ")\n");
55
57
  });
56
58
  var globalFxsInitCode = "";
57
59
  globalFxs.forEach(function (event) {
@@ -12,6 +12,8 @@ interface HandleSlotConfig extends BaseConfig {
12
12
  hasPopups?: boolean;
13
13
  /** handleCom 处理 slots 时的 slot key(如 item/content),用于识别 scope 入参 */
14
14
  slotKey?: string;
15
+ /** 父组件 id(用于给插槽根容器打标 className) */
16
+ parentComId?: string;
15
17
  }
16
18
  declare const handleSlot: (ui: UI, config: HandleSlotConfig) => {
17
19
  js: string;
@@ -20,6 +22,7 @@ declare const handleSlot: (ui: UI, config: HandleSlotConfig) => {
20
22
  cssContent: string;
21
23
  slots: any[];
22
24
  scopeSlots: any[];
25
+ directChildren: any[];
23
26
  childrenResults: any[];
24
27
  };
25
28
  export default handleSlot;
@@ -2,15 +2,15 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
2
  import { ImportManager, indentation, convertStyleAryToCss, convertRootStyle, getRootComponentClassName } from "./utils";
3
3
  import { genRootDefineCode, genSlotDefineCode, genComponentTemplate, wrapInEffect } from "./utils/templates/scene";
4
4
  import { RenderManager } from "./utils/templates/renderManager";
5
- import { processChildren } from "./utils/logic/processChildren";
5
+ import { processChildren, normalizeChildren } from "./utils/logic/processChildren";
6
6
  import { processSceneLogic } from "./processors/processSceneLogic";
7
7
  var handleSlot = function handleSlot(ui, config) {
8
8
  var _meta, _props$style;
9
9
  var importManager = new ImportManager(config);
10
10
  var _ui$props = ui.props,
11
11
  props = _ui$props === void 0 ? {} : _ui$props;
12
- // 支持 children 或 comAry (DSL 常用名)
13
- var children = ui.children || ui.comAry || [];
12
+ // 使用归一化处理器
13
+ var children = normalizeChildren(ui);
14
14
  var isRoot = config.checkIsRoot();
15
15
  var slotId = ((_meta = ui.meta) === null || _meta === void 0 ? void 0 : _meta.id) || ui.id;
16
16
 
@@ -59,7 +59,7 @@ var handleSlot = function handleSlot(ui, config) {
59
59
  var combinedJsCode = "".concat(envDefineCode).concat(childResults.js).concat(initCode).concat(wrapInEffect(indent2, effectCode));
60
60
 
61
61
  // 5. 生成 UI 结构
62
- var uiResult = generateSlotUi(ui, props, childResults.ui, config);
62
+ var uiResult = generateSlotUi(ui, props, childResults.ui, childResults.childrenResults, config);
63
63
 
64
64
  // 6. 如果是根场景,生成完整文件
65
65
  if (isRoot) {
@@ -73,6 +73,7 @@ var handleSlot = function handleSlot(ui, config) {
73
73
  cssContent: cssContent,
74
74
  slots: [],
75
75
  scopeSlots: [],
76
+ directChildren: childResults.directChildren,
76
77
  childrenResults: childResults.childrenResults
77
78
  };
78
79
  };
@@ -97,7 +98,6 @@ var setupImports = function setupImports(addImport, config, isRoot) {
97
98
  importType: "named"
98
99
  });
99
100
 
100
- // SlotProvider/ScopedComContextProvider 属于 runtime 内部实现(core/utils/slots.tsx)使用,
101
101
  // 页面/插槽产物通常不直接使用,避免生成未使用的 import。
102
102
  var dependencyNames = ["WithCom", "WithWrapper"];
103
103
  if (isRoot && config.hasPopups) {
@@ -114,9 +114,14 @@ var setupImports = function setupImports(addImport, config, isRoot) {
114
114
  importType: "named"
115
115
  });
116
116
  if (isRoot) {
117
+ addImport({
118
+ packageName: "@/common/pageLife",
119
+ dependencyNames: ["usePageLife"],
120
+ importType: "named"
121
+ });
117
122
  if (config.hasPopups) {
118
123
  addImport({
119
- packageName: "../../common/popup",
124
+ packageName: "@/common/popup",
120
125
  dependencyNames: ["POPUP_MAP", "POPUP_IDS"],
121
126
  importType: "named"
122
127
  });
@@ -132,19 +137,33 @@ var setupImports = function setupImports(addImport, config, isRoot) {
132
137
  /**
133
138
  * 生成 Slot 的 UI 代码
134
139
  */
135
- var generateSlotUi = function generateSlotUi(ui, props, childrenUi, config) {
140
+ var generateSlotUi = function generateSlotUi(ui, props, childrenUi, childrenResults, config) {
136
141
  var indent = indentation(config.codeStyle.indent * config.depth);
142
+ var slotStyle = ui.style || {};
143
+ var propsStyle = props.style || {};
137
144
  var mergedStyle = _objectSpread(_objectSpread({
138
145
  width: "100%",
139
146
  height: "100%"
140
- }, ui.style || {}), props.style || {});
147
+ }, slotStyle), propsStyle);
148
+
141
149
  // 鸿蒙化:优先使用 config 中传递的 layout(来自父容器 data.layout),否则使用 slot 自身的 layout
142
150
  var layout = config.layout || ui.layout || mergedStyle.layout;
151
+ var smart = isSmartLayout(layout);
152
+ var layoutAdjustment = smart ? {
153
+ position: isHasInSmartLayout(childrenResults) ? "fixed" : "relative"
154
+ } : hasFixedChildren(childrenResults) ? {
155
+ transform: "translateX(0)"
156
+ } : {};
143
157
  var styleCode = JSON.stringify(convertRootStyle(_objectSpread(_objectSpread({}, mergedStyle), {}, {
144
158
  layout: layout
145
- })));
159
+ }, layoutAdjustment)));
146
160
  var rootClassName = getRootComponentClassName(config.getCurrentScene(), config.checkIsRoot());
147
- var classNameAttr = rootClassName ? " className='".concat(rootClassName, "'") : "";
161
+ // 插槽根容器增强:加上可读的标识,便于用户定位/调试
162
+ // - className: slot-<parentComId>
163
+ var parentComId = config === null || config === void 0 ? void 0 : config.parentComId;
164
+ var slotMarkClass = parentComId ? "slot-".concat(parentComId) : "";
165
+ var classNameStr = [rootClassName, slotMarkClass].filter(Boolean).join(" ");
166
+ var classNameAttr = classNameStr ? " className='".concat(classNameStr, "'") : "";
148
167
  return "".concat(indent, "<View").concat(classNameAttr, " style={").concat(styleCode, "}>\n").concat(childrenUi, "\n").concat(indent, "</View>");
149
168
  };
150
169
 
@@ -172,4 +191,27 @@ var finalizeRootComponent = function finalizeRootComponent(ui, config, importMan
172
191
  name: fileName
173
192
  });
174
193
  };
194
+
195
+ /**
196
+ * 检查子元素是否有固定定位的元素
197
+ */
198
+ var hasFixedChildren = function hasFixedChildren(childrenResults) {
199
+ return childrenResults.some(function (item) {
200
+ var _item$rootStyle;
201
+ return (item === null || item === void 0 || (_item$rootStyle = item.rootStyle) === null || _item$rootStyle === void 0 ? void 0 : _item$rootStyle.position) === "fixed";
202
+ });
203
+ };
204
+
205
+ /**
206
+ * 检查是否是智能布局
207
+ */
208
+ var isSmartLayout = function isSmartLayout(layout) {
209
+ return layout === "smart" || (layout === null || layout === void 0 ? void 0 : layout.position) === "smart";
210
+ };
211
+ var isHasInSmartLayout = function isHasInSmartLayout(childrenResults) {
212
+ return childrenResults.some(function (item) {
213
+ var _item$rootStyle2;
214
+ return (item === null || item === void 0 || (_item$rootStyle2 = item.rootStyle) === null || _item$rootStyle2 === void 0 ? void 0 : _item$rootStyle2.inSmartLayout) === true;
215
+ });
216
+ };
175
217
  export default handleSlot;