Skip to content

Component Parser Configuration Guide

The component parser (componentParsers) is the core configuration for Design-to-Code, used to map component instances in designs to component tags and properties of the target framework. By writing JSON configurations, you can precisely control behaviors such as tag names, properties, texts, icons, child nodes, etc. in the output code.

Table of Contents

Quick Start

Minimal Configuration

Render a component named Button in the design as <el-button>:

json
{
  "__imports__": {
    "el-button": { "from": "element-plus", "named": "ElButton" }
  },
  "Button": {
    "name": "el-button"
  }
}

Vue Output:

vue
<template>
  <el-button></el-button>
</template>
<script setup>
import { ElButton } from "element-plus";
</script>

React Output:

jsx
import { ElButton } from "element-plus";

export default function Page() {
  return <ElButton></ElButton>;
}

Component Matching Rules

The key in the configuration (e.g., "Button") will match the component name in the design. Normalization processing is done automatically during matching:

  • Convert to lowercase
  • Remove all spaces

Therefore, all of the following names can match the "Button" configuration: Button, button, BUTTON, But ton

It prioritizes using the design component's aliasName; if no alias is set, it uses componentNormName.

Configuration Structure Overview

componentParsers: {
  "__imports__": { ... },       // Global import declarations
  "@icons": { ... },            // Public icon configuration
  "@text": { ... },             // Public text configuration
  "ComponentA": { ... },        // Component rule A
  "ComponentB": { ... },        // Component rule B
  ...
}
Reserved KeyTypeDescription
__imports__Record<string, ImportDeclaration>Global import declarations, indexed by tag name
@iconsPublicIconsConfigRender config for icon-prefixed layers
@textPublicTextConfigRender config for TEXT nodes

All other keys are treated as component rules (ComponentParserRule).

Global Configuration codeOptions

The following configurations are set in codeOptions and are used in conjunction with componentParsers:

OptionTypeDefaultDescription
slot_prefixstring"#"Slot identifier prefix. Layers starting with this are rendered as slots.
icon_prefixstring | string[]["@"]Icon identifier prefix. Layers starting with this are rendered as icon components.
ignore_prefixesstring[]["_"]Ignore prefixes. Layers starting with this are skipped during rendering.
ignore_componentstring[]Ignored component names list. Matching components won't generate files or render.

slot_prefix

When a child layer name starts with the slot_prefix, that layer and its child nodes will be rendered as a slot:

Design Layer Structure:

Dialog
├── _title
├── _body
└── #footer          ← Starts with #
    ├── Button 1
    └── Button 2

Vue Output:

vue
<el-dialog>
  <template #footer>
    <el-button>Cancel</el-button>
    <el-button>Confirm</el-button>
  </template>
</el-dialog>

React Output:

jsx
<ElDialog footer={<><ElButton>Cancel</ElButton><ElButton>Confirm</ElButton></>}>
</ElDialog>

icon_prefix

When a child layer name starts with the icon_prefix, the layer is rendered as an icon component. The prefix is removed and converted to PascalCase as the component name:

Design Layer: @arrow-downOutput Component: <ArrowDown />

Needs to be used in combination with @icons and __imports__ to take effect.

ignore_prefixes

Layers starting with the specified prefixes will be completely skipped and not rendered in the output code. Applicable to decorative layers, guide lines, etc. in designs.

json
{ "ignore_prefixes": ["_", "."] }

Layers like _background and .helper-line will not appear in the output.

ignore_component

Specifies a list of component names. Matching components will not generate independent .vue / .tsx files, and their instances will not be rendered on the page.

json
{ "ignore_component": ["Decorator", "Placeholder"] }

Import Declarations __imports__

Registers import statements for all used component tags. The key is the output tag name (corresponding to the name field value or icon component name).

json
{
  "__imports__": {
    "el-button": { "from": "element-plus", "named": "ElButton" },
    "el-input": { "from": "element-plus", "named": "ElInput" },
    "SearchIcon": { "from": "@element-plus/icons-vue", "named": "SearchIcon" }
  }
}

ImportDeclaration Fields

FieldTypeRequiredDescription
fromstringYesPackage name, e.g., "element-plus"
namedstringNoNamed import, e.g., "ElButton"
defaultbooleanNoWhether it is a default import

Generation Examples:

ConfigurationOutput
{ "from": "element-plus", "named": "ElButton" }import { ElButton } from "element-plus"
{ "from": "antd", "default": true }import antd from "antd"
{ "from": "style.css" }import "style.css"

Component Rules

Each component rule supports the following fields:

FieldTypeDescription
namestringOutput tag name
propsPropsConfigProperty extraction configuration
textTextConfig | TextConfig[]Text extraction configuration
iconIconConfig | IconConfig[]Icon parsing configuration
attrAttrConfig | AttrConfig[]Style → property mapping
traverseTraverseConfigChild node traversal control
objectObjectConfigObject parser (aggregates child instances into arrays)

name — Tag Renaming

Replaces the design component name with the target framework's component tag name.

json
{
  "Button": {
    "name": "el-button"
  }
}

The Button instance in the design will be output as <el-button> instead of the default <Button>.

Note: The value of name needs a corresponding declaration in __imports__ to generate the import statement.

props — Property Extraction

Extracts values from the design component's variant properties and outputs them as component properties.

typescript
interface PropsConfig {
  filter?: string[];                      // Property values to filter out
  showTrueValue?: boolean;                // Whether to explicitly output true
  customProps?: Record<string, string>;   // Custom property bindings
}

Basic Usage

json
{
  "Button": {
    "name": "el-button",
    "props": {}
  }
}

The Button in the design has variant properties size=large, type=primary:

Vue Output: <el-button size="large" type="primary">

filter — Filtering Default Values

Adds values that do not need to be output to the filter list. "md", "default", and "false" are filtered by default.

json
{
  "Button": {
    "name": "el-button",
    "props": {
      "filter": ["md", "default", "normal"]
    }
  }
}

The variant size=md will be filtered and will not appear in the output.

showTrueValue — Explicit Output for Booleans

By default, boolean properties with a value of true use the shorthand form. Once set to true, the value is explicitly output:

showTrueValueVue OutputReact Output
false (Default)<el-checkbox disabled><ElCheckbox disabled>
true<el-checkbox :disabled="true"><ElCheckbox disabled={true}>
json
{
  "Checkbox": {
    "name": "el-checkbox",
    "props": {
      "showTrueValue": true
    }
  }
}

customProps — Custom Property Bindings

Used in conjunction with the object parser. When the value is in the format of "{name}", it refers to an array aggregated by the child component's object:

json
{
  "Tabs": {
    "name": "el-tabs",
    "props": {
      "customProps": {
        "items": "{tabs}",
        "type": "card"
      }
    }
  }
}
  • items references the child component's object array named tabs:items="[...]"
  • type is not in "{...}" format → Outputs directly as type="card"

text — Text Extraction

Extracts text content from child TEXT nodes of the design component.

typescript
interface TextConfig {
  nodeName?: string;    // Target text layer name
  textAttr?: string;    // Output as a property name (if not set, outputs as children)
}

Case 1: Text as Children

json
{
  "Button": {
    "name": "el-button",
    "text": { "nodeName": "_text" }
  }
}

Design:

Button
└── _text: "Submit"

Output: <el-button>Submit</el-button>

Case 2: Text as Property

json
{
  "Input": {
    "name": "el-input",
    "text": { "nodeName": "placeholder", "textAttr": "placeholder" }
  }
}

Design:

Input
└── placeholder: "Please enter username"

Output: <el-input placeholder="Please enter username" />

Case 3: Multiple Text Extractions

json
{
  "Dialog": {
    "name": "el-dialog",
    "text": [
      { "nodeName": "_title" },
      { "nodeName": "_body" }
    ]
  }
}

Design:

Dialog
├── _title: "Confirm deletion"
└── _body: "This action cannot be undone"

Output: <el-dialog>Confirm deletionThis action cannot be undone</el-dialog>

icon — Icon Parsing

Extracts icons from child layers of the design component, supporting multiple output modes.

typescript
interface IconConfig {
  nodeName: string | { name: string; deepFind?: boolean };
  attrName: string;
  getComponentName?: boolean | "string";
  childComponent?: boolean | {
    parentType?: "slot" | "frame";
    parentTag?: string;
  };
}
FieldTypeDescription
nodeNamestring | { name, deepFind }Target layer name or lookup rule
attrNamestringOutput property name (e.g., "icon")
getComponentNameboolean | "string"Output as component name (instead of string)
childComponentboolean | objectOutput as a child component

Case 1: Icon as String Property (Default)

json
{
  "Button": {
    "name": "el-button",
    "icon": {
      "nodeName": "icon",
      "attrName": "icon"
    }
  }
}

The Button in the design has a child layer icon with the name el-icon-search:

Output: <el-button icon="el-icon-search">

Case 2: Deep Find

When an icon is wrapped in multiple layers of frames, use deepFind to search recursively:

json
{
  "icon": {
    "nodeName": { "name": "icon", "deepFind": true },
    "attrName": "icon"
  }
}

Design:

Button
└── icon-wrapper
    └── search-icon    ← deepFind will recursively find this

Output: <el-button icon="search-icon">

Case 3: getComponentName — Component Reference

getComponentName: true outputs as a bound expression:

json
{
  "icon": {
    "nodeName": "SearchIcon",
    "attrName": "icon",
    "getComponentName": true
  }
}
FrameworkOutput
Vue<el-button :icon="SearchIcon">
React<ElButton icon={<SearchIcon />}>

getComponentName: "string" outputs as a string (such as in Tag's closable scenario):

json
{
  "icon": {
    "nodeName": "close",
    "attrName": "closable",
    "getComponentName": "string"
  }
}

Output: <el-tag closable="close"> (Outputs attribute value if layer exists)

Case 4: childComponent — Icon as Child Component

4a. Direct Child Component
json
{
  "icon": {
    "nodeName": "Star",
    "attrName": "icon",
    "childComponent": true
  }
}

Output:

vue
<el-button>
  <Star />
</el-button>
4b. Wrapped in slot (Vue only)
json
{
  "icon": {
    "nodeName": "Close",
    "attrName": "icon",
    "childComponent": { "parentType": "slot", "parentTag": "template" }
  }
}

Vue Output:

vue
<el-button>
  <template #icon>
    <Close />
  </template>
</el-button>
4c. Wrapped in frame
json
{
  "icon": {
    "nodeName": "Search",
    "attrName": "icon",
    "childComponent": { "parentType": "frame", "parentTag": "div" }
  }
}

Output:

vue
<el-button>
  <div>
    <Search />
  </div>
</el-button>

Multiple Icon Extractions

Configuring as an array can extract multiple icon slots simultaneously:

json
{
  "Input": {
    "name": "el-input",
    "icon": [
      { "nodeName": "prefix-icon", "attrName": "prefix-icon" },
      { "nodeName": "suffix-icon", "attrName": "suffix-icon" }
    ]
  }
}

Output: <el-input prefix-icon="search" suffix-icon="clear" />

attr — Style Mapping Properties

Exracts values from the design component's visual styles and converts them to component properties via a mapping table.

typescript
interface AttrConfig {
  valueFrom: "background" | "borderColor" | "color" | "radius"
           | "borderStyle" | "opacity" | "gap" | "padding" | "boxShadow";
  attrName: string;
  mappings: Record<string, string>;
}

Supported Style Sources for valueFrom

valueFromSourceCommon Scenarios
"background"Fill color (hex value of the first fillPaint)Button types, status colors
"borderColor"Stroke color (hex value of the first strokePaint)Input statuses, border styles
"color"Text color or fill colorText color mappings
"radius"Corner radius valueCircular buttons, card shapes
"borderStyle"Solid/dashed stroke ("solid" or "dashed")Tab types
"opacity"Opacity (0~1)Disabled states
"gap"Auto layout gapCompact/loose layouts
"padding"PaddingSize mapping
"boxShadow"Shadow type ("shadow"/"inner"/""/"both")Hover and inset effects

Case 1: Background Color → Button Type

json
{
  "Button": {
    "name": "el-button",
    "attr": {
      "valueFrom": "background",
      "attrName": "type",
      "mappings": {
        "#409EFF": "primary",
        "#67C23A": "success",
        "#E6A23C": "warning",
        "#F56C6C": "danger",
        "#909399": "info"
      }
    }
  }
}

Button in the design has background #409EFFOutput: <el-button type="primary">

Case 2: Radius → Round Button

json
{
  "attr": {
    "valueFrom": "radius",
    "attrName": "round",
    "mappings": {
      "20": "true",
      "50": "true"
    }
  }
}

When radius is 20 or 50 → Output: <el-button round="true">

Case 3: Stroke Color → Input Status

json
{
  "attr": {
    "valueFrom": "borderColor",
    "attrName": "status",
    "mappings": {
      "#F56C6C": "error",
      "#67C23A": "success"
    }
  }
}

Multiple attr Rules

Configuring as an array extracts properties from multiple style dimensions:

json
{
  "Button": {
    "name": "el-button",
    "attr": [
      {
        "valueFrom": "background",
        "attrName": "type",
        "mappings": { "#409EFF": "primary" }
      },
      {
        "valueFrom": "radius",
        "attrName": "round",
        "mappings": { "20": "true" }
      }
    ]
  }
}

Colors in mappings use uppercase hex format (e.g., #409EFF). The system automatically converts extracted colors to uppercase before matching.

traverse — Child Node Traversal

Controls whether child nodes of the component participate in code generation.

typescript
interface TraverseConfig {
  filter?: string;   // Name of child node to filter
}

Behavior Overview

ConfigurationBehavior
No traverse definedDo not traverse — Controlled completely by text/icon/attr
traverse: {}Traverse all — Child instances recursively rendered
traverse: { filter: "_arrow" }Traverse and filter — Skips nodes named _arrow

Case 1: No Traversal (Default)

json
{
  "Button": {
    "name": "el-button",
    "text": { "nodeName": "_text" }
  }
}

All child nodes of Button are not rendered as child elements, only pulling text from _text.

Case 2: Traverse Child Nodes

json
{
  "Badge": {
    "name": "el-badge",
    "text": { "nodeName": "_value" },
    "traverse": {}
  }
}

Child instances of Badge (e.g., a nested Button) will be rendered normally:

vue
<el-badge>
  <el-button>New Msg</el-button>
</el-badge>

Case 3: Traverse and Filter

json
{
  "Select": {
    "name": "el-select",
    "text": { "nodeName": "placeholder", "textAttr": "placeholder" },
    "traverse": { "filter": "_arrow" }
  }
}

The _arrow decoration layer inside Select is filtered, while Option child instances render normally:

vue
<el-select placeholder="Please select">
  <el-option>Option 1</el-option>
  <el-option>Option 2</el-option>
</el-select>

Note: traverse works together with slot_prefix and ignore_prefixes. Execution priority:

  1. slot_prefix (#) → Rendered as slot
  2. object aggregation → Aggregated as data object
  3. ignore_prefixes (_) → Skipped
  4. Normal children → Recursively rendered

object — Object Parser

Aggregates child component instances into array data, binding them to parent component properties. Best for list-type components like Tabs, Menus, Steps, etc.

typescript
interface ObjectConfig {
  name: string;
  mappings: Record<string, string | ObjectFieldMapping>;
}

interface ObjectFieldMapping {
  text?: TextConfig;    // Reuse text extraction
  icon?: IconConfig;    // Reuse icon extraction
  attr?: AttrConfig;    // Reuse style mapping
}

How it Works

  1. Child rules configure object to define how to extract fields from each instance.
  2. Parent rules configure customProps: { propName: "{name}" } referencing the aggregated array.
  3. Runtime: Matching object child instances do not render tags but aggregate into array data.

mapping Value Types

TypeValueBehavior
Empty string ""Auto-incrementOutputs "1", "2", "3", etc.
Fixed stringe.g. "default"Same fixed value for each item
{ text: TextConfig }Text ExtractorExtracts TEXT node from child instance
{ icon: IconConfig }Icon ExtractorExtracts icon from child instance
{ attr: AttrConfig }Style ExtractorExtracts mapped value from style

Full Case: Tabs + TabItem

Config:

json
{
  "__imports__": {
    "el-tabs": { "from": "element-plus", "named": "ElTabs" }
  },
  "Tabs": {
    "name": "el-tabs",
    "props": {
      "customProps": {
        "items": "{tabs}"
      }
    },
    "traverse": {}
  },
  "TabItem": {
    "object": {
      "name": "tabs",
      "mappings": {
        "key": "",
        "label": {
          "text": { "nodeName": "_label" }
        }
      }
    }
  }
}

Design Structure:

Tabs
├── TabItem 1
│   └── _label: "Home"
├── TabItem 2
│   └── _label: "Settings"
└── TabItem 3
    └── _label: "About"

Vue Output:

vue
<el-tabs :items="[{ key: '1', label: 'Home' }, { key: '2', label: 'Settings' }, { key: '3', label: 'About' }]">
</el-tabs>

React Output:

jsx
<ElTabs items={[{ key: '1', label: 'Home' }, { key: '2', label: 'Settings' }, { key: '3', label: 'About' }]}>
</ElTabs>

Note: <TabItem> tags do not appear in the output, child instances are grouped into the items array.

Advanced Case: Using attr Extraction

json
{
  "StepItem": {
    "object": {
      "name": "steps",
      "mappings": {
        "key": "",
        "title": {
          "text": { "nodeName": "_title" }
        },
        "status": {
          "attr": {
            "valueFrom": "background",
            "attrName": "status",
            "mappings": {
              "#409EFF": "process",
              "#67C23A": "finish",
              "#C0C4CC": "wait"
            }
          }
        }
      }
    }
  }
}

Public Icon Configuration @icons

Configures how layers prefixed with icon_prefix (default @) render as icon components.

json
{
  "@icons": {
    "width": { "stylePrefix": "fontSize" },
    "background": { "stylePrefix": "color" }
  }
}
KeySourceDescription
"width"Width → pxOften mapped to fontSize
"height"Height → pxOften mapped to height
"fontSize"Text size → px
"background"Fill hexOften mapped to color
"color"Fill hex
"opacity"Opacity

PublicIconRenderOption Fields

FieldTypeDescription
stylePrefixstringOutput property name (e.g. "fontSize"fontSize="24px")
filterstring | string[]Filters specified values (does not output)
classPrefixstringOutputs as class prefix
getCssVarbooleanOutputs as CSS variable

Workflow

  1. Layer @arrow-down matches icon_prefix.
  2. Prefix removed, PascalCase applied → ArrowDown.
  3. Locate component from __imports__.
  4. Extract style props per @icons.

Design:

@arrow-down  (width: 24, fill: #333333)

Output:

vue
<ArrowDown fontSize="24px" color="#333333" />

Public Text Configuration @text

Configures all TEXT nodes to render as specified text components, extracting typography styles into properties.

json
{
  "@text": {
    "name": "Typography",
    "fontSize": {},
    "fontWeight": { "filter": ["400"] },
    "color": {}
  }
}
FieldDescription
nameComponent name ("Typography"), must be in __imports__
fontSizeExtract font size → fontSize="14px"
fontWeightExtract font weight → fontWeight="700"
colorExtract text color → color="#333333"
textAlignExtract text alignment → textAlign="center"
lineHeightExtract line height → lineHeight="20px"
letterSpacingExtract letter spacing → letterSpacing="0.5px"

Property filter skips defaults (e.g. fontWeight: 400).

Design:

TEXT: "Title" (fontSize: 16, fontWeight: 700, color: #333333)

Output:

vue
<Typography fontSize="16px" fontWeight="700" color="#333333">Title</Typography>

Complete Configuration Example

Below is a complete Element Plus parser setup covering major features:

json
{
  "__imports__": {
    "el-button": { "from": "element-plus", "named": "ElButton" },
    "el-input": { "from": "element-plus", "named": "ElInput" },
    "el-select": { "from": "element-plus", "named": "ElSelect" },
    "el-option": { "from": "element-plus", "named": "ElOption" },
    "el-checkbox": { "from": "element-plus", "named": "ElCheckbox" },
    "el-radio": { "from": "element-plus", "named": "ElRadio" },
    "el-switch": { "from": "element-plus", "named": "ElSwitch" },
    "el-tag": { "from": "element-plus", "named": "ElTag" },
    "el-dialog": { "from": "element-plus", "named": "ElDialog" },
    "el-tabs": { "from": "element-plus", "named": "ElTabs" }
  },

  "@icons": {
    "width": { "stylePrefix": "fontSize" },
    "background": { "stylePrefix": "color" }
  },

  "@text": {
    "name": "Typography",
    "fontSize": {},
    "fontWeight": { "filter": ["400"] },
    "color": {}
  },

  "Button": {
    "name": "el-button",
    "props": { "filter": ["md", "default"] },
    "text": { "nodeName": "_text" },
    "icon": {
      "nodeName": { "name": "icon", "deepFind": true },
      "attrName": "icon"
    },
    "attr": [
      {
        "valueFrom": "background",
        "attrName": "type",
        "mappings": {
          "#409EFF": "primary",
          "#67C23A": "success",
          "#E6A23C": "warning",
          "#F56C6C": "danger",
          "#909399": "info"
        }
      },
      {
        "valueFrom": "radius",
        "attrName": "round",
        "mappings": { "20": "true", "50": "true" }
      }
    ]
  },

  "Input": {
    "name": "el-input",
    "props": {},
    "text": { "nodeName": "placeholder", "textAttr": "placeholder" },
    "icon": [
      { "nodeName": { "name": "prefix-icon", "deepFind": true }, "attrName": "prefix-icon" },
      { "nodeName": { "name": "suffix-icon", "deepFind": true }, "attrName": "suffix-icon" }
    ],
    "attr": {
      "valueFrom": "borderColor",
      "attrName": "status",
      "mappings": {
        "#F56C6C": "error",
        "#67C23A": "success"
      }
    }
  },

  "Select": {
    "name": "el-select",
    "props": { "filter": ["md", "default"] },
    "text": { "nodeName": "placeholder", "textAttr": "placeholder" },
    "traverse": { "filter": "_arrow" }
  },

  "Option": {
    "name": "el-option",
    "props": {},
    "text": { "nodeName": "_text" }
  },

  "Checkbox": {
    "name": "el-checkbox",
    "props": { "filter": ["default"], "showTrueValue": true },
    "text": { "nodeName": "_label" },
    "attr": {
      "valueFrom": "background",
      "attrName": "checked",
      "mappings": { "#409EFF": "true" }
    }
  },

  "Switch": {
    "name": "el-switch",
    "props": {},
    "attr": {
      "valueFrom": "background",
      "attrName": "model-value",
      "mappings": {
        "#409EFF": "true",
        "#DCDFE6": "false"
      }
    }
  },

  "Tag": {
    "name": "el-tag",
    "props": { "filter": ["md", "default"] },
    "text": { "nodeName": "_text" },
    "attr": [
      {
        "valueFrom": "background",
        "attrName": "type",
        "mappings": {
          "#409EFF": "primary",
          "#67C23A": "success",
          "#E6A23C": "warning",
          "#F56C6C": "danger",
          "#909399": "info"
        }
      },
      {
        "valueFrom": "radius",
        "attrName": "round",
        "mappings": { "20": "true" }
      }
    ],
    "icon": {
      "nodeName": "close",
      "attrName": "closable",
      "getComponentName": "string"
    }
  },

  "Dialog": {
    "name": "el-dialog",
    "props": { "filter": ["default"] },
    "text": [
      { "nodeName": "_title" },
      { "nodeName": "_body" }
    ],
    "traverse": { "filter": "_mask" }
  },

  "Tabs": {
    "name": "el-tabs",
    "props": {
      "customProps": { "items": "{tabs}" }
    },
    "traverse": {}
  },

  "TabItem": {
    "object": {
      "name": "tabs",
      "mappings": {
        "key": "",
        "label": { "text": { "nodeName": "_label" } }
      }
    }
  }
}

Equivalent codeOptions:

json
{
  "slot_prefix": "#",
  "icon_prefix": ["@"],
  "ignore_prefixes": ["_"],
  "ignore_component": ["Decorator"],
  "componentParsers": { ... }
}

Field Reference Sheet

ComponentParserRule

FieldTypeDescriptionExample
namestringOutput tag name"el-button"
propsPropsConfigVariant prop extraction{ "filter": ["md"] }
props.filterstring[]Filters out prop values["md", "default"]
props.showTrueValuebooleanExplicitly outputs truetrue
props.customPropsRecord<string, string>Custom property bindings{ "items": "{tabs}" }
textTextConfig | TextConfig[]Text extraction{ "nodeName": "_text" }
text.nodeNamestringTarget text layer name"_text"
text.textAttrstringOutput as property name"placeholder"
iconIconConfig | IconConfig[]Icon parsing{ "nodeName": "icon", "attrName": "icon" }
icon.nodeNamestring | { name, deepFind }Icon layer lookup rule{ "name": "icon", "deepFind": true }
icon.attrNamestringOutput property name"icon"
icon.getComponentNameboolean | "string"Output as component nametrue
icon.childComponentboolean | { parentType, parentTag }Output child component{ "parentType": "slot", "parentTag": "template" }
attrAttrConfig | AttrConfig[]Style mapping{ "valueFrom": "background", ... }
attr.valueFromstringStyle source"background"
attr.attrNamestringOutput property name"type"
attr.mappingsRecord<string, string>Value mapping table{ "#409EFF": "primary" }
traverseTraverseConfigChild traversal control{ "filter": "_arrow" }
traverse.filterstringFiltered child nodes"_mask"
objectObjectConfigObject parser{ "name": "tabs", "mappings": {...} }
object.namestringArray reference name"tabs"
object.mappingsRecord<string, string | ObjectFieldMapping>Field mapping{ "key": "", "label": { "text": {...} } }

codeOptions

FieldTypeDefaultDescription
slot_prefixstring"#"Slot prefix
icon_prefixstring | string[]["@"]Icon prefix
ignore_prefixesstring[]["_"]Ignored prefixes
ignore_componentstring[]Ignored component list