( node: SceneNode & BaseFrameMixin & MinimalBlendMixin, )
| 226 | }; |
| 227 | |
| 228 | const composeFrame = ( |
| 229 | node: SceneNode & BaseFrameMixin & MinimalBlendMixin, |
| 230 | ): string => { |
| 231 | const hasAbsoluteChildren = node.children.some( |
| 232 | (child: any) => (child as any).layoutPositioning === "ABSOLUTE", |
| 233 | ); |
| 234 | |
| 235 | if (hasAbsoluteChildren && node.layoutMode !== "NONE") { |
| 236 | addWarning( |
| 237 | `Frame "${node.name}" has absolute positioned children. Using Box instead of ${ |
| 238 | node.layoutMode === "HORIZONTAL" ? "Row" : "Column" |
| 239 | }.`, |
| 240 | ); |
| 241 | } |
| 242 | |
| 243 | const children = composeWidgetGenerator(node.children); |
| 244 | |
| 245 | if (hasAbsoluteChildren) { |
| 246 | return composeContainer( |
| 247 | node, |
| 248 | generateComposeWidget("Box", { |
| 249 | content: children !== "" ? [children] : [], |
| 250 | }), |
| 251 | ); |
| 252 | } |
| 253 | |
| 254 | if (node.layoutMode !== "NONE") { |
| 255 | const rowColumnWrap = makeRowColumnWrap(node, children); |
| 256 | return composeContainer(node, rowColumnWrap); |
| 257 | } else { |
| 258 | if (node.inferredAutoLayout) { |
| 259 | const rowColumnWrap = makeRowColumnWrap( |
| 260 | node.inferredAutoLayout, |
| 261 | children, |
| 262 | ); |
| 263 | return composeContainer(node, rowColumnWrap); |
| 264 | } |
| 265 | |
| 266 | if (node.isAsset) { |
| 267 | return composeContainer( |
| 268 | node, |
| 269 | "Icon(Icons.Default.Home, contentDescription = null)", |
| 270 | ); |
| 271 | } |
| 272 | |
| 273 | return composeContainer( |
| 274 | node, |
| 275 | generateComposeWidget("Box", { |
| 276 | content: children !== "" ? [children] : [], |
| 277 | }), |
| 278 | ); |
| 279 | } |
| 280 | }; |
| 281 | |
| 282 | const makeRowColumnWrap = ( |
| 283 | autoLayout: InferredAutoLayoutResult, |
no test coverage detected