[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nquote_type = single\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".eslintignore",
    "content": "build/\ncoverage/\ndist/\nes/\nlib/\nnode_modules/\n**/*.min.js\n**/*-min.js\n**/*.bundle.js\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  extends: [\n    'eslint-config-ali/typescript/react',\n    'prettier',\n    'prettier/@typescript-eslint',\n    'prettier/react',\n  ],\n};\n"
  },
  {
    "path": ".gitignore",
    "content": "lowcode_es/\r\nlowcode_lib/\r\n# project custom\nbuild\ndist\nsite\n.tmp\nes\npublic/resources/meta.json\npackages/*/lib/\npackages/*/es/\npackages/*/dist/\npackages/*/output/\npackage-lock.json\nyarn.lock\ndeploy-space/packages\ndeploy-space/.env\n\n\n# IDE\n.vscode\n.idea\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\nlib\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n.env.test\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# next.js build output\n.next\n\n# nuxt.js build output\n.nuxt\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# mac config files\n.DS_Store\n\n# codealike\ncodealike.json\n\nsrc/assets.js\nsrc/assets.json\nsrc/assets.container.js\nsrc/assets.container.json\nassets.json\nassets.container.json\nmaterial-meta.json\n"
  },
  {
    "path": ".markdownlint.json",
    "content": "{\n  \"extends\": \"markdownlint-config-ali\"\n}\n"
  },
  {
    "path": ".markdownlintignore",
    "content": "node_modules/\nbuild/\ndist/\ncoverage/\nes/\nlib/\n\n"
  },
  {
    "path": ".prettierrc.js",
    "content": "module.exports = {\n  printWidth: 100,\n  tabWidth: 2,\n  semi: true,\n  singleQuote: true,\n  trailingComma: 'all',\n  arrowParens: 'always',\n};\n"
  },
  {
    "path": ".stylelintignore",
    "content": "node_modules/\nbuild/\ndist/\ncoverage/\nes/\nlib/\n**/*.min.css\n**/*-min.css\n**/*.bundle.css\n\n"
  },
  {
    "path": ".stylelintrc.js",
    "content": "module.exports = {\n  extends: 'stylelint-config-ali',\n};\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 Alibaba\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">Lowcode Materials</h1>\n\n<div align=\"center\">\n\n基于 [Fusion Design](https://fusion.design) 和 [Ant Design](https://ant.design) 设计规范的低代码基础物料库\n\n</div>\n\n## 介绍 / Introduce\n\n物料（Material）是指能够被沉淀下来的前端能力，一般表现为组件、区块和模板。而低代码物料库，则是一套专门用于低代码开发模式（Lowcode）的物料，它除了包含物料组件，还有一套描述组件信息的低代码引擎物料协议。简单来说，低代码物料库包含了两个部分：\n\n- 组件的实现，即组件的代码和样式\n- 遵循[《低代码引擎物料协议规范》](https://lowcode-engine.cn/material)的物料协议\n\n低代码物料应该配合[低代码引擎](https://lowcode-engine.cn/)使用，如果你还不了解低代码引擎，请先阅读相关文档。\n\n在使用中遇到的任何问题，请在[lowcode-engine](https://github.com/alibaba/lowcode-engine)项目中反馈。\n\n<h2><img width=\"50\" src=\"https://img.alicdn.com/tfs/TB1YsoiHVzqK1RjSZFCXXbbxVXa-159-99.svg\"> Fusion Design For Lowcode</h2>\n\n[![NPM version][npm-image-fusion]][npm-url-fusion]\n\n### [在线示例 / DEMO](https://alifd.alicdn.com/npm/@alilc/lowcode-materials@1.2.1/build/lowcode/index.html)\n\n### 使用 / Usage\n\n#### NPM\n\n```js\nconst { material } from '@alilc/lowcode-engine';\nconst assets = require('@alilc/lowcode-materials/dist/assets.json');\n\n// in GeneralWorkbench init\nmaterial.setAssets(assets);\n```\n\n#### CDN\n\n```js\n// in GeneralWorkbench init\nconst assets = await fetch(\n  `https://alifd.alicdn.com/npm/@alilc/lowcode-materials@1.2.1/dist/assets.json`,\n).then((res) => res.json());\nmaterial.setAssets(assets);\n```\n\n[npm-image-fusion]: https://img.shields.io/npm/v/@alilc/lowcode-materials.svg?style=flat-square\n[npm-url-fusion]: http://npmjs.org/package/@alilc/lowcode-materials\n\n<h2><img width=\"30\" src=\"https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg\"> Ant Design For Lowcode</h2>\n\n[![NPM version][npm-image-antd]][npm-url-antd]\n\n### [在线示例 / DEMO](https://alifd.alicdn.com/npm/@alilc/antd-lowcode-materials@1.2.2/build/lowcode/index.html)\n\n### 使用 / Usage\n\n#### NPM\n\n```js\nconst { material } from '@alilc/lowcode-engine';\nconst assets = require('@alilc/antd-lowcode-materials/build/lowcode/assets-prod.json');\n\n// in GeneralWorkbench init\nmaterial.setAssets(assets);\n```\n\n#### CDN\n\n```js\n// in GeneralWorkbench init\nconst assets = await fetch(\n  `https://alifd.alicdn.com/npm/@alilc/antd-lowcode-materials@1.2.2/build/lowcode/assets-prod.json`,\n).then((res) => res.json());\nmaterial.setAssets(assets);\n```\n\n[npm-image-antd]: https://img.shields.io/npm/v/@alilc/antd-lowcode-materials.svg?style=flat-square\n[npm-url-antd]: http://npmjs.org/package/@alilc/antd-lowcode-materials\n\n## 如何贡献 / How-to-contribute\n\n### 目录结构 / Structure\n\n```\n|-packages\n    |-{package-name} // fusion 或 antd 低代码组件包\n        |-lowcode // 组件低代码描述文件\n            |-{component-name}\n                |-meta.ts // 组件低代码描述协议\n                |-meta.design.ts // 【可选】面向设计者的组件低代码描述，移除面向研发的高级配置能力，可做静态搭建和简单的交互\n        |-src\n            |-index.tsx // 组件库导出文件\n            |-components // 组件库源码\n                |-{component-name}\n                |-index.tsx\n                |-index.scss\n    |-build.lowcode.js // 低代码调试和构建使用的配置文件\n    |-build.json // 源码调试和构建使用的配置文件\n```\n\n### 常用命令 / Commands\n\n#### 低代码 / LowCode\n\n```bash\ncd packages/fusion-lowcode-materilas\n# OR `cd packages/antd-lowcode-materilas`\nnpm run lowcode:dev\nnpm run lowcode:build\n```\n\n#### 源码 / ProCode\n\n```bash\nnpm start\nnpm run build\n```\n\n#### 其他命令 / Other Commands\n\n```bash\n# 更新 README 中的版本号\nnpm run update-readme\n```\n\n### 贡献者 / Contributors\n\n因无法保留开源前的提交记录，这里列出开源前的贡献者（花名）：\n\n@荣彬 @度城 @屹凡 @启剑 @春希 @梧忌 @褚天 @莫夭 @金禅 @默吉 @旅途 @斩鲌 @永元 @听鸿 @晓吉 @与白 @若泉 @独寒 @尤恩 @馨焱\n"
  },
  {
    "path": "commitlint.config.js",
    "content": "module.exports = {\n  extends: ['ali'],\n};\n"
  },
  {
    "path": "f2elint.config.js",
    "content": "module.exports = {\n  enableStylelint: true,\n  enableMarkdownlint: true,\n  enablePrettier: true,\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"lowcode-materials\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"description\": \"Materials for LowCode\",\n  \"scripts\": {\n    \"prettier\": \"prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'\",\n    \"f2elint-scan\": \"f2elint scan\",\n    \"f2elint-fix\": \"f2elint fix\",\n    \"update-readme\": \"node scripts/update-readme.js\",\n    \"prepublishOnly\": \"npm run build && npm run lowcode:build && npm run lowcode:antd:build\"\n  },\n  \"lint-staged\": {\n    \"*.ts?(x)\": [\n      \"prettier --parser=typescript --write\"\n    ],\n    \"*.{js,jsx,less,md,json}\": [\n      \"prettier --write\"\n    ]\n  },\n  \"devDependencies\": {\n    \"f2elint\": \"^2.2.0\",\n    \"glob\": \"^11.0.0\",\n    \"lint-staged\": \"^10.5.3\",\n    \"prettier\": \"^1.19.1\",\n    \"typescript\": \"^3.9.3\",\n    \"yorkie\": \"^2.0.0\"\n  },\n  \"authors\": [\n    {\n      \"name\": \"金禅\"\n    },\n    {\n      \"name\": \"荣彬\"\n    },\n    {\n      \"name\": \"屹凡\"\n    },\n    {\n      \"name\": \"启剑\"\n    },\n    {\n      \"name\": \"春希\"\n    },\n    {\n      \"name\": \"度城\"\n    },\n    {\n      \"name\": \"梧忌\"\n    },\n    {\n      \"name\": \"莫夭\"\n    }\n  ],\n  \"license\": \"MIT\",\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"f2elint commit-file-scan\",\n      \"commit-msg\": \"f2elint commit-msg-scan\"\n    }\n  }\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/README.md",
    "content": "<h2><img width=\"30\" src=\"https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg\"> Ant Design For Lowcode</h2>\n\n[![NPM version][npm-image-antd]][npm-url-antd]\n\n### [在线示例 / DEMO](https://alifd.alicdn.com/npm/@alilc/antd-lowcode-materials@1.2.2/build/lowcode/index.html)\n\n### 使用 / Usage\n#### NPM\n```js\nconst { material } from '@alilc/lowcode-engine';\nconst assets = require('@alilc/antd-lowcode-materials/build/lowcode/assets-prod.json');\n\n// in GeneralWorkbench init\nmaterial.setAssets(assets);\n```\n\n#### CDN\n```js\n// in GeneralWorkbench init\nconst assets = await (await fetch(`https://alifd.alicdn.com/npm/@alilc/antd-lowcode-materials@1.2.2/build/lowcode/assets-prod.json`)).json();\nmaterial.setAssets(assets);\n```\n\n[npm-image-antd]: https://img.shields.io/npm/v/@alilc/antd-lowcode-materials.svg?style=flat-square\n[npm-url-antd]: http://npmjs.org/package/@alilc/antd-lowcode-materials\n"
  },
  {
    "path": "packages/antd-lowcode-materials/build.json",
    "content": "{\n  \"sourceMap\": false,\n  \"alias\": {\n    \"@\": \"./src\",\n    \"@components\": \"./src/components\"\n  },\n  \"plugins\": [[\"build-plugin-component\"]]\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/build.lowcode.js",
    "content": "const { name, version } = require(\"./package.json\");\n\nconst library = 'AntdLowcode';\n\nmodule.exports = {\n  sourceMap: false,\n  alias: {\n    '@': './src',\n    lowcode: './lowcode'\n  },\n  plugins: [\n    [\n      '@alifd/build-plugin-lowcode',\n      {\n        noParse: true,\n        engineScope: '@alilc',\n        library,\n        staticResources: {\n          engineCoreCssUrl:\n            'https://alifd.alicdn.com/npm/@alilc/lowcode-engine@1.2.1/dist/css/engine-core.css',\n          engineExtCssUrl:\n            'https://alifd.alicdn.com/npm/@alilc/lowcode-engine-ext@1.0.6/dist/css/engine-ext.css',\n          engineCoreJsUrl:\n            'https://alifd.alicdn.com/npm/@alilc/lowcode-engine@1.2.1/dist/js/engine-core.js',\n          engineExtJsUrl:\n            'https://alifd.alicdn.com/npm/@alilc/lowcode-engine-ext@1.0.6/dist/js/engine-ext.js',\n        },\n        npmInfo: {\n          package: name,\n          version,\n        },\n        lowcodeDir: 'lowcode',\n        entryPath: 'src/index.tsx',\n        categories: ['通用', '导航', '信息输入', '信息展示', '信息反馈'],\n        baseUrl: {\n          prod: `https://alifd.alicdn.com/npm/${name}@${version}`,\n          daily: `https://alifd.alicdn.com/npm/${name}@${version}`,\n        },\n        builtinAssets: [\n          {\n            packages: [\n              {\n                package: 'moment',\n                version: '2.24.0',\n                urls: ['https://g.alicdn.com/mylib/moment/2.24.0/min/moment.min.js'],\n                library: 'moment',\n              },\n              {\n                package: 'lodash',\n                library: '_',\n                urls: ['https://g.alicdn.com/platform/c/lodash/4.6.1/lodash.min.js'],\n              },\n              {\n                package: 'iconfont-icons',\n                urls: '//at.alicdn.com/t/font_2369445_ukrtsovd92r.js',\n              },\n              {\n                package: '@ant-design/icons',\n                version: '4.7.0',\n                urls: [`//g.alicdn.com/code/npm/@ali/ant-design-icons-cdn/4.5.0/index.umd.min.js`],\n                library: 'icons',\n              },\n              {\n                package: 'antd',\n                version: '4.23.0',\n                urls: [\n                  `//g.alicdn.com/code/lib/antd/4.23.0/antd.min.js`,\n                  `//g.alicdn.com/code/lib/antd/4.23.0/antd.min.css`,\n                ],\n                library: 'antd',\n              },\n            ],\n            components: [],\n          },\n        ],\n      },\n    ],\n  ],\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/_setters/antd-icon-setter/index.tsx",
    "content": "import React, { useState, useEffect, Component } from 'react';\n// setter使用@alifd/next，和编辑器保持一致\nimport { Input, Icon as NextIcon, Radio, Balloon, Search } from '@alifd/next';\nimport { get } from '../../_utils/utils';\nimport './style.less';\n\ntype IconGroup = 'outlined' | 'filled' | 'two-tone' | 'iconfont';\nconst IconGroupNameMap: Record<IconGroup, string> = {\n  outlined: '线框风格',\n  filled: '实底风格',\n  'two-tone': '双色风格',\n  iconfont: 'Iconfont',\n};\n\nfunction getIconfontIconList() {\n  const iframe = document.querySelector<HTMLIFrameElement>(\n    'iframe.lc-simulator-content-frame',\n  )!;\n\n  const antdIcons = get(iframe, 'contentWindow.icons', {}) as Record<\n    string,\n    any\n  >;\n\n  // iconfont的js会在页面中添加svg元素\n  const symbols = Array.prototype.slice.call(\n    iframe.contentDocument!.querySelectorAll(\n      'svg[style=\"position: absolute; width: 0px; height: 0px; overflow: hidden;\"][aria-hidden=\"true\"] > symbol',\n    ),\n  );\n\n  const Icon = antdIcons.createFromIconfontCN();\n\n  return symbols.map(symbol => {\n    const { id } = symbol;\n    return {\n      name: id,\n      group: 'iconfont',\n      icon: (props: any) => (\n        <span role=\"img\" className=\"anticon\">\n          <svg\n            viewBox=\"64 64 896 896\"\n            width=\"1em\"\n            height=\"1em\"\n            fill=\"currentColor\"\n            dangerouslySetInnerHTML={{ __html: symbol.innerHTML }}\n          />\n        </span>\n      ),\n    };\n  });\n}\n\nfunction getAntdIconList() {\n  const iframe = document.querySelector<HTMLIFrameElement>(\n    'iframe.lc-simulator-content-frame',\n  );\n\n  const icons: Record<string, any> = {};\n\n  // document.querySelectorAll('svg[style=\"position: absolute; width: 0px; height: 0px; overflow: hidden;\"][aria-hidden=\"true\"]')\n  const antdIcons = get(iframe, 'contentWindow.icons', {}) as Record<\n    string,\n    any\n  >;\n\n  return Object.keys(antdIcons)\n    .map(key => {\n      const item = (antdIcons as any)[key];\n\n      if (typeof item !== 'object') {\n        return null;\n      }\n\n      const name = item?.displayName ?? item?.render?.displayName ?? key;\n      let group: IconGroup = 'outlined';\n\n      const lowercaseName = name.toLowerCase();\n\n      if (/outlined$/.test(lowercaseName)) {\n        group = 'outlined';\n      } else if (/filled$/.test(lowercaseName)) {\n        group = 'filled';\n      } else if (/twotone$/.test(lowercaseName)) {\n        group = 'two-tone';\n      } else {\n        return null;\n      }\n\n      return {\n        name,\n        group,\n        icon: item,\n      };\n    })\n    .filter(Boolean);\n}\n\nfunction getIconList() {\n  const iconfontIconList = getIconfontIconList();\n  const antdIconList = getAntdIconList();\n\n  return [...antdIconList, ...iconfontIconList];\n}\n\nconst Icon = (props: any) => {\n  const { type, icons = {}, ...rest } = props;\n  const Comp = icons[type];\n  if (!Comp) return null;\n  return <Comp {...rest} />;\n};\n\ninterface AntdIconSetterProps {\n  value: string;\n  type: string;\n  defaultValue: string;\n  placeholder: string;\n  hasClear: boolean;\n  onChange: (icon: string | object) => undefined;\n  icons: string[];\n}\n\nconst Tooltip = Balloon.Tooltip;\n\nconst AntdIconSetter = (props: AntdIconSetterProps) => {\n  const [search, setSearch] = useState('');\n  const [icons, setIcons] = useState<Record<string, any>>({});\n  const [groups, setGroups] = useState<{ group: IconGroup; list: any[] }[]>([]);\n  const [selectedGroup, setSelectedGroup] = useState<IconGroup>('outlined');\n  const [firstLoad, setFirstLoad] = useState(true);\n  const [list, setList] = useState<any[]>([]);\n\n  const { value, defaultValue, type, onChange, placeholder, hasClear } = props;\n\n  const _value =\n    typeof value === 'object' ? (value as any)?.props?.type : value;\n  if (firstLoad && defaultValue && typeof value === 'undefined') {\n    onChange(defaultValue);\n    setFirstLoad(false);\n  }\n\n  const handleChange = (icon: string) => {\n    if (type === 'string') {\n      onChange(icon);\n    } else if (type === 'node') {\n      onChange({\n        componentName: 'Icon',\n        props: {\n          type: icon,\n        },\n      });\n    }\n  };\n\n  useEffect(() => {\n    const iconList = getIconList();\n\n    const groups: { group: IconGroup; list: any[] }[] = [];\n    const icons: any = {};\n\n    iconList.forEach(item => {\n      const { group, name, icon } = item!;\n      if (groups.every(item => item.group !== group)) {\n        groups.push({ group: group as IconGroup, list: [] });\n      }\n      const target = groups.find(item => item.group === group)!;\n      target.list.push(item);\n      icons[item!.name] = item?.icon;\n    });\n\n    setIcons(icons);\n    setGroups(groups);\n    setSelectedGroup(groups[0]?.group);\n  }, []);\n\n  useEffect(() => {\n    const currentGroup = groups.find(item => item.group === selectedGroup);\n    setList(\n      (currentGroup?.list ?? []).filter(item => {\n        return search\n          ? item.name.toLowerCase().indexOf(search.toLowerCase()) > -1\n          : true;\n      }),\n    );\n  }, [selectedGroup, search, groups]);\n\n  const currentIcon = (\n    <Icon type={_value} icons={icons} style={{ fontSize: 16 }} />\n  );\n  const clearIcon = hasClear && (\n    <NextIcon\n      size=\"xs\"\n      id=\"icon-clear\"\n      type=\"delete-filling\"\n      onClick={e => {\n        e.preventDefault();\n        e.stopPropagation();\n        handleChange('');\n      }}\n    />\n  );\n\n  const triggerNode = (\n    <div>\n      <Input\n        placeholder={placeholder}\n        addonTextBefore={currentIcon}\n        onChange={handleChange}\n        value={_value}\n        defaultValue={defaultValue}\n        readOnly\n        addonTextAfter={clearIcon}\n      />\n    </div>\n  );\n\n  return (\n    <div className=\"lc-antd-icon-setter\">\n      <Balloon\n        className=\"lc-antd-icon-setter-balloon\"\n        trigger={triggerNode}\n        needAdjust\n        triggerType=\"click\"\n        closable={false}\n        alignEdge\n        align=\"lt\"\n        style={{ width: 300 }}\n      >\n        <div className=\"lc-antd-icon-setter-header\">\n          <Radio.Group\n            className=\"lc-antd-icon-setter-header-style\"\n            shape=\"button\"\n            value={selectedGroup}\n            onChange={value => setSelectedGroup(value as any)}\n          >\n            {groups.map(item => (\n              <Radio key={item.group} value={item.group}>\n                {IconGroupNameMap[item.group]}\n              </Radio>\n            ))}\n          </Radio.Group>\n          <Search\n            className=\"lc-antd-icon-setter-header-search\"\n            size=\"medium\"\n            shape=\"simple\"\n            onChange={setSearch}\n          />\n        </div>\n        <div className=\"lc-antd-icon-setter-content\">\n          <ul className=\"lc-antd-icon-setter-list\">\n            {list.map(item => (\n              <li\n                key={item.name}\n                className=\"lc-antd-icon-setter-list-item\"\n                onClick={() => handleChange(item.name)}\n              >\n                <Tooltip v2 trigger={<Icon type={item.name} icons={icons} />} popupStyle= {{backgroundColor: \"#fff\"}}>\n                  {item.name}\n                </Tooltip>\n              </li>\n            ))}\n          </ul>\n        </div>\n      </Balloon>\n    </div>\n  );\n};\n\nAntdIconSetter.defaultProps = {\n  value: undefined,\n  type: 'string',\n  defaultValue: '',\n  hasClear: false,\n  placeholder: '请点击选择 Icon',\n  onChange: () => undefined,\n};\n\n// 因为下面这个问题，setter必须使用class组件\n// http://gitlab.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/issues/109046\nexport default class extends Component<AntdIconSetterProps> {\n  render() {\n    return <AntdIconSetter {...this.props} />;\n  }\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/_setters/antd-icon-setter/style.less",
    "content": ".lc-antd-icon-setter {\n  &-header {\n    &-style {\n      width: 100%;\n      margin-bottom: 12px;\n      display: flex;\n\n      > label {\n        flex: 1;\n        text-align: center;\n      }\n    }\n\n    &-search {\n      width: 100%;\n      margin-bottom: 12px;\n      padding-bottom: 12px;\n      border-bottom: 1px solid #ddd;\n    }\n  }\n\n  &-list {\n    display: block;\n    max-height: 400px;\n    overflow-y: auto;\n    overflow-x: hidden;\n\n    &-item {\n      display: inline-block;\n      position: relative;\n      width: 36px;\n      height: 36px;\n      line-height: 36px;\n      text-align: center;\n      font-size: 24px;\n      border-radius: 4px;\n      transition: background-color 0.2s;\n\n      &-name {\n        display: none;\n        font-size: 14px;\n        position: absolute;\n        height: 30px;\n        word-break: keep-all;\n        white-space: nowrap;\n        bottom: -24px;\n        left: 50%;\n        z-index: 100;\n        height: 24px;\n        line-height: 24px;\n        padding: 0 5px;\n        border-radius: 4px;\n        background-color: #fff;\n        pointer-events: none;\n        transform: translateX(-50%);\n        box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n          0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n      }\n\n      &:hover {\n        background-color: #f1f2f3;\n\n        .lc-antd-icon-setter-list-item-name {\n          display: block;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/_setters/index.tsx",
    "content": "export { default as AntdIconSetter } from './antd-icon-setter';\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/_utils/hoc.tsx",
    "content": "import React, { ComponentType, ReactNode, useState } from 'react';\nimport moment from 'moment';\nimport { get, set, has } from './utils';\n\nfunction convertProps(\n  props: Record<string, any>,\n  list: string[],\n  mapper: (v: any, key: string) => any,\n) {\n  const out: Record<string, any> = {};\n  list.forEach(key => {\n    if (has(props, key)) {\n      set(out, key, mapper(get(props, key), key));\n    }\n  });\n  return out;\n}\n\n/**\n * 简单包装，不做任何处理\n * 部分组件ref比较特殊，包一层会解决这个问题\n */\nexport function withWrap(Comp: ComponentType<any>) {\n  return (props: any) => {\n    return <Comp {...props} />;\n  };\n}\n\n/**\n * 某些组件会用React.Children.only检查子节点\n * 需要做处理避免报错\n */\nexport function withSingleChild(\n  Comp: ComponentType<any>,\n  needsConvert = ['children'],\n) {\n  return (props: any) => {\n    const convertedProps = convertProps(props, needsConvert, prop => {\n      let node = React.Children.toArray(prop)[0];\n      if (node === null || typeof node !== 'object') {\n        node = <div>{node}</div>;\n      }\n      return node;\n    });\n\n    return <Comp {...(props as any)} {...(convertedProps as any)} />;\n  };\n}\n\nexport function withSingleFunctionChild(Comp: ComponentType<any>) {\n  return (props: any) => {\n    const { children } = props;\n\n    let node;\n    if (typeof children === 'function') {\n      node = children;\n    }\n    if (\n      Array.isArray(children) &&\n      children.length === 1 &&\n      typeof children[0] === 'function'\n    ) {\n      node = children[0];\n    }\n\n    if (node) {\n      return <Comp {...(props as any)}>{node}</Comp>;\n    }\n    return <div>{children}</div>;\n  };\n}\n\n/**\n * moment对象在序列化后会被转为字符串\n * 需要让日期类组件支持接受字符串值\n */\nexport function withMomentProps(\n  Comp: ComponentType<any>,\n  needsConvert = ['value', 'defaultValue'],\n) {\n  return (props: any) => {\n    const convertedProps = convertProps(props, needsConvert, prop => {\n      if (prop) {\n        if (Array.isArray(prop)) {\n          return prop.map(v => (moment.isMoment(v) ? v : moment(v)));\n        }\n        return moment.isMoment(prop) ? prop : moment(prop);\n      }\n    });\n\n    return <Comp {...(props as any)} {...(convertedProps as any)} />;\n  };\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/_utils/transform-meta.ts",
    "content": "import {\n  FieldConfig,\n  PropConfig,\n  PropType,\n  SetterType,\n  OneOf,\n  ObjectOf,\n  ArrayOf,\n  TransformedComponentMetadata,\n} from '@ali/lowcode-types';\n\n// http://gitlab.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/merge_requests/1054678\n// 这个MR合并后可以去掉这个文件\n\nfunction propConfigToFieldConfig(\n  propConfig: PropConfig,\n  supportVariable: boolean,\n): FieldConfig {\n  const { name, description } = propConfig;\n  const title = {\n    label: {\n      type: 'i18n',\n      'en-US': name,\n      'zh-CN': description?.slice(0, 10) || name,\n    },\n    tip: description ? `${name} | ${description}` : undefined,\n  };\n\n  let setter =\n    (propConfig as any).setter ||\n    propTypeToSetter(propConfig.propType, supportVariable);\n\n  if (supportVariable && (propConfig as any).supportVariable !== false) {\n    if (\n      setter.componentName === 'MixedSetter' &&\n      setter.props?.setters &&\n      setter.props?.setters?.every((setter: any) => {\n        return (\n          setter?.componentName !== 'VariableSetter' &&\n          setter !== 'VariableSetter'\n        );\n      })\n    ) {\n      setter.props.setters.push('VariableSetter');\n    } else if (\n      setter &&\n      setter !== 'VariableSetter' &&\n      setter.componentName !== 'VariableSetter'\n    ) {\n      setter = {\n        componentName: 'MixedSetter',\n        props: {\n          setters: [setter, 'VariableSetter'],\n        },\n      };\n    }\n  }\n\n  return {\n    title,\n    ...propConfig,\n    // TODO 这边直接用propConfig，将setter丢在propconfig里，需要确认是否在PropConfig扩展还是换实现\n    setter,\n  };\n}\n\nfunction propTypeToSetter(\n  propType: PropType,\n  supportVariable: boolean,\n): SetterType {\n  let typeName: string;\n  let isRequired: boolean | undefined = false;\n  if (typeof propType === 'string') {\n    typeName = propType;\n  } else if (typeof propType === 'object') {\n    typeName = propType.type;\n    isRequired = propType.isRequired;\n  } else {\n    typeName = 'string';\n  }\n  // TODO: use mixinSetter wrapper\n  switch (typeName) {\n    case 'string':\n      return {\n        componentName: 'StringSetter',\n        isRequired,\n        initialValue: '',\n      };\n    case 'number':\n      return {\n        componentName: 'NumberSetter',\n        isRequired,\n        initialValue: 0,\n      };\n    case 'bool':\n      return {\n        componentName: 'BoolSetter',\n        isRequired,\n        initialValue: false,\n      };\n    case 'oneOf':\n      const dataSource = ((propType as OneOf).value || []).map(\n        (value, index) => {\n          const t = typeof value;\n          return {\n            label:\n              t === 'string' || t === 'number' || t === 'boolean'\n                ? String(value)\n                : `value ${index}`,\n            value,\n          };\n        },\n      );\n      const componentName =\n        dataSource.length >= 4 ? 'SelectSetter' : 'RadioGroupSetter';\n      return {\n        componentName,\n        props: { dataSource, options: dataSource },\n        isRequired,\n        initialValue: dataSource[0] ? dataSource[0].value : null,\n      };\n\n    case 'element':\n    case 'node': // TODO: use Mixin\n      return {\n        // slotSetter\n        componentName: 'SlotSetter',\n        props: {\n          mode: typeName,\n        },\n        isRequired,\n        initialValue: {\n          type: 'JSSlot',\n          value: [],\n        },\n      };\n    case 'shape':\n    case 'exact':\n      const items = ((propType as any).value || []).map((item: any) =>\n        propConfigToFieldConfig(item, supportVariable),\n      );\n      return {\n        componentName: 'ObjectSetter',\n        props: {\n          config: {\n            items,\n            extraSetter:\n              typeName === 'shape'\n                ? propTypeToSetter('any', supportVariable)\n                : null,\n          },\n        },\n        isRequired,\n        initialValue: (field: any) => {\n          const data: any = {};\n          items.forEach((item: any) => {\n            let initial = item.defaultValue;\n            if (\n              initial == null &&\n              item.setter &&\n              typeof item.setter === 'object'\n            ) {\n              initial = (item.setter as any).initialValue;\n            }\n            data[item.name] = initial\n              ? typeof initial === 'function'\n                ? initial(field)\n                : initial\n              : null;\n          });\n          return data;\n        },\n      };\n    case 'object':\n    case 'objectOf':\n      return {\n        componentName: 'ObjectSetter',\n        props: {\n          config: {\n            extraSetter: propTypeToSetter(\n              typeName === 'objectOf' ? (propType as ObjectOf).value : 'any',\n              supportVariable,\n            ),\n          },\n        },\n        isRequired,\n        initialValue: {},\n      };\n    case 'array':\n    case 'arrayOf':\n      return {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: propTypeToSetter(\n            typeName === 'arrayOf' ? (propType as ArrayOf).value : 'any',\n            supportVariable,\n          ),\n        },\n        isRequired,\n        initialValue: [],\n      };\n    case 'func':\n      return {\n        componentName: 'FunctionSetter',\n        isRequired,\n      };\n    case 'color':\n      return {\n        componentName: 'ColorSetter',\n        isRequired,\n      };\n    case 'oneOfType':\n      return {\n        componentName: 'MixedSetter',\n        props: {\n          // TODO:\n          setters: (propType as any).value.map((item: any) =>\n            propTypeToSetter(item, supportVariable),\n          ),\n        },\n        isRequired,\n      };\n    default:\n    // do nothing\n  }\n  return {\n    componentName: 'MixedSetter',\n    isRequired,\n    props: {},\n  };\n}\n\nconst NO_EVENTS = ['beforeUpload'];\nconst EVENT_RE = /^on|after|before[A-Z][\\w]*$/;\n\nexport default function(\n  metadata: TransformedComponentMetadata,\n  supportVariable: boolean,\n): TransformedComponentMetadata {\n  const { configure = {} } = metadata;\n  // TODO types后续补充\n  let extendsProps: any = null;\n  if (configure.props) {\n    if (Array.isArray(configure.props)) {\n      return metadata;\n    }\n    const { isExtends, override = [] } = configure.props;\n    // 不开启继承时，直接返回configure配置\n    if (!isExtends) {\n      return {\n        ...metadata,\n        configure: {\n          ...configure,\n          props: [...override],\n        },\n      };\n    }\n\n    extendsProps = {};\n    // 开启继承后，缓存重写内容的配置\n    override.forEach((prop: any) => {\n      extendsProps[prop.name] = prop;\n    });\n  }\n\n  if (!metadata.props) {\n    return {\n      ...metadata,\n      configure: {\n        ...configure,\n        props: [],\n      },\n    };\n  }\n  const { component = {}, supports = {} } = configure;\n  const supportedEvents: any[] | null = (supports as any).events ? null : [];\n  const props: FieldConfig[] = [];\n\n  metadata.props.forEach(prop => {\n    const { name, propType, description } = prop;\n    if (\n      name === 'children' &&\n      (component.isContainer ||\n        propType === 'node' ||\n        propType === 'element' ||\n        propType === 'any')\n    ) {\n      if (component.isContainer !== false) {\n        component.isContainer = true;\n        props.push(propConfigToFieldConfig(prop, supportVariable));\n        return;\n      }\n    }\n\n    if (\n      EVENT_RE.test(name) &&\n      NO_EVENTS.indexOf(name) < 0 &&\n      (propType === 'func' || propType === 'any')\n    ) {\n      if (supportedEvents) {\n        supportedEvents.push({\n          name,\n          description,\n        });\n        (supports as any).events = supportedEvents;\n      }\n      return;\n    }\n\n    if (name === 'className' && (propType === 'string' || propType === 'any')) {\n      if ((supports as any).className == null) {\n        (supports as any).className = true;\n      }\n      return;\n    }\n\n    if (name === 'style' && (propType === 'object' || propType === 'any')) {\n      if ((supports as any).style == null) {\n        (supports as any).style = true;\n      }\n      return;\n    }\n\n    // 存在覆盖配置时\n    if (extendsProps) {\n      if (name in extendsProps) {\n        prop = extendsProps[name];\n      }\n    }\n\n    props.push(propConfigToFieldConfig(prop, supportVariable));\n  });\n\n  return {\n    ...metadata,\n    configure: {\n      ...configure,\n      props,\n      supports,\n      component,\n    },\n  } as any;\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/_utils/utils.ts",
    "content": "export { get, set, has } from 'lodash';\n\n// simple uuid\nexport function uuid() {\n  return ((Math.random() * 1e6) >> 0).toString(36);\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/affix/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Affix',\n  title: '固钉',\n  category: '导航',\n  props: [\n    {\n      name: 'offsetBottom',\n      title: { label: '底部触发距离', tip: '距离窗口底部达到指定偏移量后触发' },\n      propType: 'number',\n    },\n    {\n      name: 'offsetTop',\n      title: { label: '顶部触发距离', tip: '距离窗口顶部达到指定偏移量后触发' },\n      propType: 'number',\n    },\n    {\n      name: 'target',\n      title: {\n        label: '获取触发元素',\n        tip: '设置 `Affix` 需要监听其滚动事件的元素，值为一个返回对应 DOM 元素的函数',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      title: { label: '监听状态改变', tip: '固定状态改变时触发的回调函数' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(affixed,${extParams}){\\n// 固定状态变更回调函数\\nconsole.log('onChange', affixed);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/affix/snippets.ts",
    "content": "export default [\n  {\n    title: '固钉',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/affix-1.jpg',\n    schema: {\n      componentName: 'Affix',\n      props: {\n        offsetTop: 100,\n      },\n      children: [\n        {\n          componentName: 'Button',\n          props: {\n            children: 'Affix Top',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/alert/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Alert',\n  title: '警告提示',\n  category: '反馈',\n  props: [\n    {\n      name: 'afterClose',\n      title: {\n        label: '关闭动画结束后触发的回调函数',\n        tip: '关闭动画结束后触发的回调函数',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'banner',\n      title: { label: '顶部公告', tip: '是否用作顶部公告' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'closable',\n      title: { label: '可关闭', tip: '默认不显示关闭按钮' },\n      propType: 'bool',\n    },\n    {\n      name: 'closeText',\n      title: { label: '自定义关闭按钮', tip: '自定义关闭按钮' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'description',\n      title: {\n        label: '描述信息',\n        tip: '警告提示的辅助性文字介绍',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'icon',\n      title: {\n        label: '图标',\n        tip: '自定义图标，`showIcon` 为 true 时有效',\n      },\n      propType: 'node',\n    },\n    {\n      name: 'message',\n      title: { label: '警告提示内容', tip: '警告提示内容' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'showIcon',\n      title: { label: '显示图标', tip: '是否显示辅助图标' },\n      propType: 'bool',\n    },\n    {\n      name: 'type',\n      title: { label: '类型', tip: '类型' },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'info', 'warning', 'error'],\n      },\n    },\n    {\n      name: 'onClose',\n      title: { label: '关闭时触发的回调函数', tip: '关闭时触发的回调函数' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onClose',\n          template:\n            \"onChange(event,${extParams}){\\n// 关闭时触发的回调函数\\nconsole.log('onChange');}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/alert/snippets.ts",
    "content": "export default [\n  {\n    title: '成功提示',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/alert-1.png',\n    schema: {\n      componentName: 'Alert',\n      props: {\n        message: 'Success Tips',\n        description: 'Detailed description and advice about successful copywriting.',\n        type: 'success',\n        showIcon: true,\n      },\n    },\n  },\n  {\n    title: '信息提示',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/alert-2.png',\n    schema: {\n      componentName: 'Alert',\n      props: {\n        message: 'Informational Notes',\n        description: 'Additional description and information about copywriting.',\n        type: 'info',\n        showIcon: true,\n      },\n    },\n  },\n  {\n    title: '警告提示',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/alert-3.png',\n    schema: {\n      componentName: 'Alert',\n      props: {\n        message: 'Warning',\n        description: 'This is a warning notice about copywriting.',\n        type: 'warning',\n        showIcon: true,\n      },\n    },\n  },\n  {\n    title: '错误提示',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/alert-4.png',\n    schema: {\n      componentName: 'Alert',\n      props: {\n        message: 'Error',\n        description: 'This is an error message about copywriting.',\n        type: 'error',\n        showIcon: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/anchor/snippets.ts",
    "content": "export default [\n  {\n    title: '锚点',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/anchor-1.png',\n    schema: {\n      componentName: 'Anchor',\n      props: {},\n      children: [\n        {\n          componentName: 'Anchor.Link',\n          props: {\n            title: 'Document',\n          },\n        },\n        {\n          componentName: 'Anchor.Link',\n          props: {\n            title: 'API',\n          },\n        },\n        {\n          componentName: 'Anchor.Link',\n          props: {\n            title: 'Demo',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/anchor.link/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Anchor.Link',\n  title: '锚点链接',\n  category: '其他',\n  props: [\n    {\n      name: 'href',\n      title: { label: '锚点链接', tip: '锚点链接' },\n      propType: 'string',\n    },\n    {\n      name: 'target',\n      title: {\n        label: 'target',\n        tip: '该属性指定在何处显示链接的资源',\n      },\n      propType: 'string',\n    },\n    {\n      name: 'title',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/anchor.link/snippets.ts",
    "content": "export default [];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/auto-complete/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'AutoComplete',\n  title: '辅助提示输入框',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认选中值' },\n      propType: 'string',\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前选中值' },\n      propType: 'string',\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'options',\n      title: { label: '选项内容', tip: '选项列表' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'label',\n                    title: '选项名',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'value',\n                    title: '选项值',\n                    setter: 'StringSetter',\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                label: '选项名',\n                value: uuid(),\n              };\n            },\n          },\n        },\n      },\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'backfill',\n      title: {\n        label: '键盘选中回填',\n        tip: '使用键盘选择选项的时候把选中项回填到输入框中',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'defaultActiveFirstOption',\n      title: { label: '默认高亮首个选项', tip: '是否默认高亮第一个选项' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'filterOption',\n      title: { label: '可选项筛选', tip: '是否根据输入项进行筛选' },\n      propType: 'bool',\n    },\n    {\n      name: 'placeholder',\n      title: { label: '输入框提示', tip: '输入框提示' },\n      propType: 'string',\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点时的回调', tip: '失去焦点时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      title: {\n        label: 'value变化时的回调',\n        tip: '选中 option，或 input 的 value 变化时，调用此函数',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获得焦点时的回调', tip: '获得焦点时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onSearch',\n      title: { label: '搜索补全项的时候调用', tip: '搜索补全项的时候调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onSelect',\n      title: {\n        label: '被选中时的回调',\n        tip: '被选中时调用，参数为选中项的 value 值',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'defaultOpen',\n      title: { label: '默认展开菜单', tip: '是否默认展开下拉菜单' },\n      propType: 'bool',\n    },\n    // {\n    //   name: 'open',\n    //   title: { label: '展开下拉菜单', tip: '是否展开下拉菜单' },\n    //   propType: 'bool',\n    // },\n    {\n      name: 'onDropdownVisibleChange',\n      title: { label: '展开下拉菜单的回调', tip: '展开下拉菜单的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'notFoundContent',\n      title: { label: '无数据展示', tip: '当下拉列表为空时显示的内容' },\n      propType: 'string',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'defaultValue',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '默认值',\n            en_US: 'Default Value',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: defaultValue | 说明: 默认值',\n            en_US: 'prop: defaultValue | description: defaultValue',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'value',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '当前值',\n            en_US: 'Value',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: Value | 说明: 当前值',\n            en_US: 'prop: Value | description: Value',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'allowClear',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '支持清除',\n            en_US: 'Allow Clear',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: allowClear | 说明：是否允许清除',\n            en_US: 'prop: allowClear | description: Allow Clear',\n          }\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'options',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '选项内容',\n            en_US: 'Options',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: options | 说明：选项列表',\n            en_US: 'prop: options | description: Options',\n          }\n        },\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'label',\n                      title: '选项名',\n                      setter: 'StringSetter',\n                      isRequired: true\n                    },\n                    {\n                      name: 'value',\n                      title: '选项值',\n                      setter: 'StringSetter',\n                      isRequired: true\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  label: '选项名',\n                  value: uuid(),\n                };\n              },\n            },\n          },\n        },\n      },\n      {\n        name: 'autoFocus',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '自动聚焦',\n            en_US: 'Auto Focus',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: autoFocus | 说明：自动获取焦点',\n            en_US: 'prop: autoFocus | description: Auto Focus',\n          }\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'backfill',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '键盘选中回填',\n            en_US: 'Backfill',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: backfill | 说明：使用键盘选择选项的时候把选中项回填到输入框中',\n            en_US: 'prop: backfill | description: When using the keyboard to select options, backfill the selected items into the input box',\n          }\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'defaultActiveFirstOption',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '默认高亮首个选项',\n            en_US: 'Default Active First Option',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: defaultActiveFirstOption | 说明：是否默认高亮第一个选项',\n            en_US: 'prop: defaultActiveFirstOption | description: Whether to highlight the first option by default',\n          }\n        },\n        setter: 'BoolSetter',\n        defaultValue: true,\n        supportVariable: true,\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否禁用',\n            en_US: 'Disabled',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: disabled | 说明：是否为禁用状态',\n            en_US: 'prop: disabled | description: Disable',\n          }\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'filterOption',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '可选项筛选',\n            en_US: 'Filter Option',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: filterOption | 说明：是否根据输入项进行筛选',\n            en_US: 'prop: filterOption | description: Filter based on input',\n          }\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框提示',\n            en_US: 'Placeholder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: placeholder | 说明: 输入框提示',\n            en_US: 'prop: placeholder | description: Placeholder',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'defaultOpen',\n        propType: 'bool',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '默认展开菜单',\n            en_US: 'Default Open',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: defaultOpen | 说明：是否默认展开下拉菜单',\n            en_US: 'prop: defaultOpen | description: Expand drop-down menu by default',\n          }\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      // {\n      //   name: 'open',\n      //   title: {\n      //     label: {\n      //       type: 'i18n',\n      //       zh_CN: '展开下拉菜单',\n      //       en_US: 'Open',\n      //     },\n      //     tip: {\n      //       type: 'i18n',\n      //       zh_CN: '属性: open | 说明：是否展开下拉菜单',\n      //       en_US: 'prop: open | description: Expand drop-down menu',\n      //     }\n      //   },\n      //   setter: 'BoolSetter',\n      //   supportVariable: true,\n      // },\n      {\n        name: 'notFoundContent',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '无数据展示',\n            en_US: 'Not Found Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: notFoundContent | 说明: 当下拉列表为空时显示的内容',\n            en_US: 'prop: notFoundContent | description: Content displayed when the drop-down list is empty',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n    ],\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onBlur',\n          template: \"onBlur(${extParams}){\\n// 失去焦点时的回调\\nconsole.log('onBlur');}\",\n        },\n        {\n          name: 'onChange',\n          template:\n            \"onChange(value,${extParams}){\\n// 选中 option，或 input 的 value 变化时，调用此函数\\nconsole.log('onChange', value);}\",\n        },\n        {\n          name: 'onFocus',\n          template:\n            \"onFocus(${extParams}){\\n// 选中 option，或 input 的 value 变化时，调用此函数\\nconsole.log('onFocus')}\",\n        },\n        {\n          name: 'onSearch',\n          template:\n            \"onSearch(value,${extParams}){\\n// 搜索补全项的时候调用\\nconsole.log('onSearch',value);}\",\n        },\n        {\n          name: 'onSelect',\n          template:\n            \"onSelect(value,option,${extParams}){\\n// 被选中时调用\\nconsole.log('onSelect', value, option);}\",\n        },\n        {\n          name: 'onDropdownVisibleChange',\n          template:\n            \"onDropdownVisibleChange(open,${extParams}){\\n// 展开下拉菜单的回调\\nconsole.log('onDropdownVisibleChange', open);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/auto-complete/snippets.ts",
    "content": "export default [\n  {\n    title: '辅助提示输入框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/auto-complete-1.png',\n    schema: {\n      componentName: 'AutoComplete',\n      props: {\n        placeholder: '请输入',\n        options: [\n          {\n            label: '测试1',\n            value: 'aaa',\n          },\n          {\n            label: '测试2',\n            value: 'bbb',\n          },\n        ],\n        filterOption: true,\n        style: {\n          width: '200px',\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/avatar/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Avatar',\n  title: '头像',\n  category: '数据展示',\n  props: [\n    {\n      name: 'icon',\n      title: { label: '头像图标', tip: '设置头像的自定义图标' },\n      propType: 'node',\n    },\n    {\n      name: 'shape',\n      title: { label: '头像形状', tip: '指定头像的形状' },\n      propType: { type: 'oneOf', value: ['circle', 'square'] },\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '设置头像的大小' },\n      propType: {\n        type: 'oneOfType',\n        value: ['number', { type: 'oneOf', value: ['large', 'small', 'default'] }],\n      },\n      defaultValue: 'default',\n    },\n    {\n      name: 'src',\n      title: { label: '图片地址', tip: '图片类头像的资源地址' },\n      propType: 'string',\n    },\n    {\n      name: 'alt',\n      title: {\n        label: '替代文本',\n        tip: '图像无法显示时的替代文本',\n      },\n      propType: 'string',\n    },\n    {\n      name: 'onError',\n      title: {\n        label: '图片加载失败的事件',\n        tip: '图片加载失败的事件，返回 false 会关闭组件默认的 fallback 行为',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'gap',\n      title: {\n        label: '文字边距',\n        tip: '字符类型距离左右两侧边界单位像素',\n      },\n      propType: 'number',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onError',\n          template: \"onError(${extParams}){\\n// 图片加载失败的事件\\nconsole.log('onError');}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/avatar/snippets.ts",
    "content": "export default [\n  {\n    title: '头像',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/avatar-1.jpg',\n    schema: {\n      componentName: 'Avatar',\n      props: {\n        src: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/back-top/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'BackTop',\n  title: '回到顶部',\n  category: '其他',\n  props: [\n    {\n      name: 'target',\n      title: {\n        label: '监听元素',\n        tip: '设置需要监听其滚动事件的元素，值为一个返回对应 DOM 元素的函数',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'visibilityHeight',\n      title: {\n        label: '可见高度',\n        tip: '滚动高度达到此参数值才出现 BackTop',\n      },\n      propType: 'number',\n    },\n    {\n      name: 'onClick',\n      title: { label: '点击按钮的回调函数', tip: '点击按钮的回调函数' },\n      propType: 'func',\n    },\n    {\n      name: 'duration',\n      title: { label: '滚动时间', tip: '回到顶部所需时间（ms）' },\n      propType: 'number',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onClick',\n          template: \"onClick(${extParams}){\\n// 点击按钮的回调函数\\nconsole.log('onClick');}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/back-top/snippets.ts",
    "content": "export default [\n  {\n    title: '回到顶部',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/back-top-1.jpg',\n    schema: {\n      componentName: 'BackTop',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/badge/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Badge',\n  title: '徽标数',\n  category: '数据展示',\n  props: [\n    {\n      name: 'color',\n      title: { label: '圆点颜色', tip: '自定义小圆点的颜色' },\n      propType: 'string',\n    },\n    {\n      name: 'count',\n      title: {\n        label: '展示数字',\n        tip: '展示的数字，大于 overflowCount 时显示为 `${overflowCount}+`，为 0 时隐藏',\n      },\n      propType: 'node',\n    },\n    {\n      name: 'dot',\n      title: {\n        label: '展示圆点',\n        tip: '不展示数字，只有一个小红点',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'offset',\n      title: {\n        label: '圆点偏移',\n        tip: '设置状态点的位置偏移 [number, number]',\n      },\n      propType: { type: 'arrayOf', value: 'number' },\n    },\n    {\n      name: 'overflowCount',\n      title: { label: '封顶值', tip: '展示封顶的数字值' },\n      propType: 'number',\n    },\n    {\n      name: 'showZero',\n      title: {\n        label: '展示零值',\n        tip: '当数值为 0 时，是否展示 Badge',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'status',\n      title: { label: '状态', tip: '设置 Badge 为状态点' },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'processing', 'default', 'error', 'warning'],\n      },\n    },\n    {\n      name: 'text',\n      title: {\n        label: '状态文本',\n        tip: '在设置了 `status` 的前提下有效，设置状态点的文本',\n      },\n      condition(target) {\n        return !!target.getProps().getPropValue('status');\n      },\n      propType: 'string',\n    },\n    {\n      name: 'title',\n      title: {\n        label: '悬浮提示',\n        tip: '设置鼠标放在状态点上时显示的文字',\n      },\n      propType: 'string',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/badge/snippets.ts",
    "content": "export default [\n  {\n    title: '徽标数',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/badge-1.png',\n    schema: {\n      componentName: 'Badge',\n      props: {\n        count: 25,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/breadcrumb/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Breadcrumb',\n  title: '面包屑',\n  category: '导航',\n  props: [\n    {\n      title: '基础',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'routes',\n          title: { label: '路由栈信息', tip: 'router 的路由栈信息' },\n          propType: {\n            type: 'arrayOf',\n            value: {\n              type: 'shape',\n              value: [\n                { name: 'path', propType: 'string' },\n                { name: 'breadcrumbName', propType: 'string' },\n              ],\n            },\n          },\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'ObjectSetter',\n                props: {\n                  config: {\n                    items: [\n                      {\n                        name: 'path',\n                        title: { label: '路由路径', tip: 'path | 路由路径' },\n                        propType: 'string',\n                        setter: 'StringSetter',\n                        isRequired: true\n                      },\n                      {\n                        name: 'breadcrumbName',\n                        title: {\n                          label: '路由名称',\n                          tip: 'breadcrumbName | 路由名称',\n                        },\n                        propType: 'string',\n                        setter: 'StringSetter',\n                        isRequired: true\n                      },\n                    ],\n                  },\n                },\n                initialValue: {\n                  path: 'path',\n                  breadcrumbName: 'breadcrumbName',\n                },\n              },\n            },\n          },\n        },\n        {\n          name: 'params',\n          title: { label: '路由的参数', tip: '路由的参数' },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n        {\n          name: 'separator',\n          title: { label: '分隔符自定义', tip: '分隔符自定义' },\n          propType: { type: 'oneOfType', value: ['string', 'node'] },\n          setter: [\n            'StringSetter',\n            {\n              componentName: 'SlotSetter',\n              initialValue: {\n                type: 'JSSlot',\n                value: [],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    {\n      title: '扩展',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'itemRender',\n          title: {\n            label: '自定义渲染',\n            tip: 'itemRender | 自定义渲染',\n          },\n          propType: { type: 'oneOfType', value: ['func', 'node'] },\n          setter: [\n            {\n              componentName: 'SlotSetter',\n              title: '自定义渲染插槽',\n              initialValue: {\n                type: 'JSSlot',\n                params: ['route', 'params', 'routes', 'paths'],\n                value: [],\n              },\n            },\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'itemRender(route, params, routes, paths,${extParams}){\\n// 自定义渲染\\nreturn `${route.breadcrumbName}`}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/breadcrumb/snippets.ts",
    "content": "export default [\n  {\n    title: '面包屑',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/breadcrumb-1.jpg',\n    schema: {\n      componentName: 'Breadcrumb',\n      props: {\n        routes: [\n          {\n            path: 'a',\n            breadcrumbName: 'Home',\n          },\n          {\n            path: 'center',\n            breadcrumbName: 'Application Center',\n          },\n          {\n            path: 'app',\n            breadcrumbName: 'An Application',\n          },\n        ],\n        itemRender: {\n          type: 'JSSlot',\n          params: ['route', 'params', 'routes', 'paths'],\n          value: [\n            {\n              componentName: 'Typography.Link',\n              props: {\n                href: {\n                  type: 'JSExpression',\n                  value: 'this.route.path',\n                },\n                children: {\n                  type: 'JSExpression',\n                  value: 'this.route.breadcrumbName',\n                },\n              },\n            },\n          ],\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/button/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  componentName: 'Button',\n  title: '按钮',\n  category: '通用',\n  props: [\n    {\n      title: '功能',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'children',\n          title: {\n            label: '内容',\n            tip: 'children | 内容',\n          },\n          propType: {\n            type: 'oneOfType',\n            value: ['node', 'string'],\n          },\n          setter: ['SlotSetter', 'StringSetter', 'VariableSetter'],\n        },\n        {\n          name: 'htmlType',\n          title: {\n            label: '原生类型',\n            tip: 'htmlType | 设置 `button` 原生的 `type` 值',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['submit', 'reset', 'button'],\n          },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: 'Submit',\n                    value: 'submit',\n                  },\n                  {\n                    title: 'Reset',\n                    value: 'reset',\n                  },\n                  {\n                    title: 'Button',\n                    value: 'button',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n          defaultValue: 'button',\n        },\n        {\n          name: 'href',\n          title: {\n            label: '跳转地址',\n            tip: 'href | 点击跳转的地址，指定此属性 button 的行为和 a 链接一致',\n          },\n          propType: 'string',\n          setter: ['StringSetter', 'VariableSetter'],\n        },\n        {\n          name: 'target',\n          title: {\n            label: 'Target',\n            tip: 'target | 相当于 a 链接的 target 属性，href 存在时生效',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['_self', '_blank', '_parent', '_top'],\n          },\n          setter: [\n            {\n              componentName: 'SelectSetter',\n              props: {\n                options: [\n                  {\n                    title: '本窗口跳转',\n                    value: '_self',\n                  },\n                  {\n                    title: '打开新标签页',\n                    value: '_blank',\n                  },\n                  {\n                    title: '父窗口跳转',\n                    value: '_parent',\n                  },\n                  {\n                    title: '顶层窗口跳转',\n                    value: '_top',\n                  },\n                ],\n              },\n            },\n            'StringSetter',\n            'VariableSetter',\n          ],\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"href\")?.trim()',\n          },\n        },\n      ],\n    },\n    {\n      title: '外观',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'type',\n          title: { label: '类型', tip: 'type | 设置按钮类型' },\n          propType: {\n            type: 'oneOf',\n            value: ['primary', 'ghost', 'dashed', 'danger', 'link', 'text'],\n          },\n          setter: [\n            {\n              componentName: 'SelectSetter',\n              props: {\n                options: [\n                  {\n                    title: '主按钮',\n                    value: 'primary',\n                  },\n                  {\n                    title: '虚线框按钮',\n                    value: 'dashed',\n                  },\n                  {\n                    title: '危险按钮',\n                    value: 'danger',\n                  },\n                  {\n                    title: '链接按钮',\n                    value: 'link',\n                  },\n                  {\n                    title: '类文本按钮',\n                    value: 'text',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'size',\n          title: { label: '尺寸', tip: 'size | 设置按钮大小' },\n          propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '大',\n                    value: 'large',\n                  },\n                  {\n                    title: '中',\n                    value: 'middle',\n                  },\n                  {\n                    title: '小',\n                    value: 'small',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n          defaultValue: 'middle',\n        },\n        {\n          name: 'shape',\n          title: {\n            label: '形状',\n            tip: 'shape | 设置按钮形状，可选值为 `circle`、 `round` 或者不设',\n          },\n          propType: { type: 'oneOf', value: ['default', 'circle', 'round'] },\n          defaultValue: 'default',\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '默认',\n                    value: 'default',\n                  },\n                  {\n                    title: '圆形',\n                    value: 'circle',\n                  },\n                  {\n                    title: '圆角',\n                    value: 'round',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'icon',\n          title: { label: '图标', tip: 'icon | 设置按钮的图标组件' },\n          propType: 'node',\n          setter: {\n            componentName: 'SlotSetter',\n            initialValue: {\n              type: 'JSSlot',\n              value: [\n                {\n                  componentName: 'Icon',\n                  props: {\n                    type: 'SmileOutlined',\n                    size: 20,\n                    rotate: 0,\n                    spin: false,\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'block',\n          title: {\n            label: '自适应',\n            tip: 'block | 将按钮宽度调整为其父宽度的选项',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'danger',\n          title: { label: '危险按钮', tip: 'danger | 设置危险按钮' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'ghost',\n          title: { label: '幽灵属性', tip: 'ghost | 幽灵属性，使按钮背景透明' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n      ],\n    },\n    {\n      title: '状态',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'loading',\n          title: { label: '载入状态', tip: 'loading | 设置按钮载入状态' },\n          propType: 'bool',\n          setter: ['BoolSetter', 'VariableSetter'],\n        },\n        {\n          name: 'disabled',\n          title: { label: '是否禁用', tip: 'disabled | 是否为禁用状态' },\n          propType: 'bool',\n          setter: ['BoolSetter', 'VariableSetter'],\n          defaultValue: false,\n        },\n      ],\n    },\n    {\n      name: 'onClick',\n      title: { label: '点击回调', tip: '点击按钮时的回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      events: [\n        {\n          name: 'onClick',\n          template:\n            \"onClick(event,${extParams}){\\n// 点击按钮时的回调\\nconsole.log('onClick', event);}\",\n        },\n      ],\n      style: true,\n    },\n  },\n  snippets,\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/button/snippets.ts",
    "content": "export default [\n  {\n    title: '主按钮',\n    screenshot: require('./__screenshots__/button-1.png'),\n    schema: {\n      componentName: 'Button',\n      props: {\n        type: 'primary',\n        children: '主按钮',\n      },\n    },\n  },\n  {\n    title: '次按钮',\n    screenshot: require('./__screenshots__/button-2.png'),\n    schema: {\n      componentName: 'Button',\n      props: {\n        type: 'default',\n        children: '次按钮',\n      },\n    },\n  },\n  {\n    title: '危险按钮',\n    screenshot: require('./__screenshots__/button-3.png'),\n    schema: {\n      componentName: 'Button',\n      props: {\n        type: 'danger',\n        children: '危险按钮',\n      },\n    },\n  },\n  {\n    title: '文字按钮',\n    screenshot: require('./__screenshots__/button-4.png'),\n    schema: {\n      componentName: 'Button',\n      props: {\n        type: 'text',\n        children: '文字按钮',\n      },\n    },\n  },\n  {\n    title: '虚框按钮',\n    screenshot: require('./__screenshots__/button-5.png'),\n    schema: {\n      componentName: 'Button',\n      props: {\n        type: 'dashed',\n        children: '虚框按钮',\n      },\n    },\n  },\n  {\n    title: '链接按钮',\n    screenshot: require('./__screenshots__/button-6.png'),\n    schema: {\n      componentName: 'Button',\n      props: {\n        type: 'link',\n        children: '链接按钮',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/calendar/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Calendar',\n  title: '日历',\n  category: '数据展示',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认展示的日期' },\n      propType: 'date',\n      setter: 'DateSetter',\n    },\n    // {\n    //   name: 'dateCellRender',\n    //   title: {\n    //     label: '自定义日期追加渲染',\n    //     tip: '自定义渲染日期单元格，返回内容会被追加到单元格',\n    //   },\n    //   propType: 'func',\n    // },\n    // {\n    //   name: 'dateFullCellRender',\n    //   title: {\n    //     label: '自定义渲染日期单元格，返回内容覆盖单元格',\n    //     tip: '自定义渲染日期单元格，返回内容覆盖单元格',\n    //   },\n    //   propType: 'func',\n    // },\n    {\n      name: 'disabledDate',\n      title: { label: '不可选日期', tip: '不可选择的日期' },\n      propType: 'func',\n    },\n    {\n      name: 'fullscreen',\n      title: { label: '全屏显示', tip: '是否全屏显示' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    // {\n    //   name: 'locale',\n    //   title: { label: '国际化配置', tip: '国际化配置' },\n    //   propType: 'object',\n    // },\n    {\n      name: 'mode',\n      title: { label: '初始模式', tip: '初始模式' },\n      propType: { type: 'oneOf', value: ['month', 'year'] },\n      defaultValue: 'month',\n    },\n    // {\n    //   name: 'monthCellRender',\n    //   title: {\n    //     label: '自定义渲染月单元格，返回内容会被追加到单元格',\n    //     tip: '自定义渲染月单元格，返回内容会被追加到单元格',\n    //   },\n    //   propType: 'func',\n    // },\n    // {\n    //   name: 'monthFullCellRender',\n    //   title: {\n    //     label: '自定义渲染月单元格，返回内容覆盖单元格',\n    //     tip: '自定义渲染月单元格，返回内容覆盖单元格',\n    //   },\n    //   propType: 'func',\n    // },\n    // {\n    //   name: 'validRange',\n    //   title: { label: '设置可以显示的日期', tip: '设置可以显示的日期' },\n    //   propType: { type: 'arrayOf', value: 'object' },\n    // },\n    // {\n    //   name: 'value',\n    //   title: { label: '当前值', tip: '展示日期' },\n    //   propType: 'object',\n    // },\n    {\n      name: 'onPanelChange',\n      title: { label: '日期面板变化回调', tip: '日期面板变化回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onSelect',\n      title: { label: '点击选择日期回调', tip: '点击选择日期回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      title: { label: '日期变化回调', tip: '日期变化回调' },\n      propType: 'func',\n    },\n    // {\n    //   name: 'headerRender',\n    //   title: { label: '自定义头部内容', tip: '自定义头部内容' },\n    //   propType: 'func',\n    // },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onPanelChange',\n          template:\n            \"onPanelChange(date,mode,${extParams}){\\n// 日期面板变化回调\\nconsole.log('onPanelChange', date, mode);}\",\n        },\n        {\n          name: 'onSelect',\n          template:\n            \"onSelect(date,${extParams}){\\n// 点击选择日期回调\\nconsole.log('onSelect', date);}\",\n        },\n        {\n          name: 'onChange',\n          template:\n            \"onChange(date,${extParams}){\\n// 日期变化回调\\nconsole.log('onChange', date);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/calendar/snippets.ts",
    "content": "export default [\n  {\n    title: '日历',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/calendar-1.jpg',\n    schema: {\n      componentName: 'Calendar',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/card/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Card',\n  title: '卡片',\n  category: '数据展示',\n  props: [\n    {\n      name: 'title',\n      title: { label: '卡片标题', tip: '卡片标题' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    // {\n    //   name: 'actions',\n    //   title: { label: '卡片操作组', tip: '卡片操作组，位置在卡片底部' },\n    //   propType: { type: 'arrayOf', value: 'node' },\n    // },\n    // {\n    //   name: 'headStyle',\n    //   title: { label: '标题区域样式', tip: '自定义标题区域样式' },\n    //   propType: 'object',\n    // },\n    // {\n    //   name: 'bodyStyle',\n    //   title: { label: '内容区域样式', tip: '内容区域自定义样式' },\n    //   propType: 'object',\n    // },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'cover',\n      title: { label: '卡片封面', tip: '卡片封面' },\n      propType: 'node',\n    },\n    {\n      name: 'extra',\n      title: { label: '额外元素', tip: '卡片右上角的操作区域' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'hoverable',\n      title: { label: '可浮起', tip: '鼠标移过时可浮起' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'loading',\n      title: {\n        label: 'loading',\n        tip: '当卡片内容还在加载中时，可以用 loading 展示一个占位',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: 'card 的尺寸' },\n      propType: { type: 'oneOf', value: ['default', 'small'] },\n      defaultValue: 'default',\n    },\n    {\n      name: 'type',\n      title: { label: '卡片类型', tip: '卡片类型' },\n      propType: { type: 'oneOf', value: ['default', 'inner'] },\n      defaultValue: 'default',\n    },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onTabChange',\n          template:\n            \"onTabChange(key,${extParams}){\\n// 页签切换的回调\\nconsole.log('onTabChange', key);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/card/snippets.ts",
    "content": "export default [\n  {\n    title: '卡片',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/card-1.png',\n    schema: {\n      componentName: 'Card',\n      props: {\n        title: 'Default size card',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/carousel/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Carousel',\n  title: '走马灯',\n  category: '数据展示',\n  props: [\n    {\n      name: 'afterChange',\n      title: { label: '切换面板的回调', tip: '切换面板的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'autoplay',\n      title: { label: '是否自动切换', tip: '是否自动切换' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'beforeChange',\n      title: { label: '切换面板的回调', tip: '切换面板的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'dotPosition',\n      title: {\n        label: '指示点位置',\n        tip: '面板指示点位置，可选 `top` `bottom` `left` `right`',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'bottom', 'left', 'right'],\n      },\n    },\n    {\n      name: 'dots',\n      title: {\n        label: '显示指示点',\n        tip: '是否显示面板指示点',\n      },\n      propType: { type: 'oneOfType', value: ['bool', 'object'] },\n    },\n    {\n      name: 'easing',\n      title: { label: '动画效果', tip: '动画效果' },\n      propType: 'string',\n    },\n    {\n      name: 'effect',\n      title: { label: '动画效果函数', tip: '动画效果函数' },\n      propType: { type: 'oneOf', value: ['scrollx', 'fade'] },\n    },\n    {\n      name: 'items',\n      title: '折叠项',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            initialValue: () => {\n              return {\n                key: uuid(),\n              };\n            },\n          },\n        },\n      },\n      extraProps: {\n        getValue(target, fieldValue) {\n          console.log('getValue', target.node.children.length);\n          const map = target.node.children.map((child) => {\n            const key = child.getPropValue('key') ? String(child.getPropValue('key')) : child.id;\n            return { key };\n          });\n          return map;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          const map = {};\n          if (!Array.isArray(value)) {\n            value = [];\n          }\n          value.forEach((item) => {\n            const tabItem = Object.assign({}, item);\n            map[item.key] = tabItem;\n          });\n\n          node.children.mergeChildren(\n            (child) => {\n              const key = String(child.getPropValue('key'));\n              if (Object.hasOwnProperty.call(map, key)) {\n                delete map[key];\n                return false;\n              }\n              return true;\n            },\n            () => {\n              const items = [];\n              for (const key in map) {\n                if (Object.hasOwnProperty.call(map, key)) {\n                  items.push({\n                    componentName: 'Card',\n                    props: map[key],\n                  });\n                }\n              }\n              return items;\n            },\n            (child1, child2) => {\n              const a = value.findIndex(\n                (item) => String(item.key) === String(child1.getPropValue('key')),\n              );\n              const b = value.findIndex(\n                (item) => String(item.key) === String(child2.getPropValue('key')),\n              );\n              return a - b;\n            },\n          );\n        },\n      },\n    },\n  ],\n  configure: {\n    supports: { style: true },\n    component: {\n      isContainer: true,\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/carousel/snippets.ts",
    "content": "export default [\n  {\n    title: '走马灯',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/carousel-1.jpg',\n    schema: {\n      componentName: 'Carousel',\n      children: [\n        {\n          componentName: 'Card',\n          props: {\n            key: 'panel-1',\n          },\n        },\n        {\n          componentName: 'Card',\n          props: {\n            key: 'panel-2',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/cascader/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Cascader',\n  title: '级联选择',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认的选中项', tip: '默认的选中项' },\n      propType: {\n        type: 'arrayOf',\n        value: { type: 'oneOfType', value: ['string', 'number'] },\n      },\n    },\n    {\n      name: 'value',\n      title: { label: '当前选中项', tip: '当前选中项' },\n      propType: {\n        type: 'arrayOf',\n        value: { type: 'oneOfType', value: ['string', 'number'] },\n      },\n    },\n    {\n      name: 'options',\n      title: { label: '选项数据', tip: '可选项数据源' },\n      setter: 'JsonSetter',\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'changeOnSelect',\n      title: {\n        label: '点选触发',\n        tip: '点选每级菜单选项值都会触发onChange',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'className',\n      title: { label: '自定义类名', tip: '自定义类名' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'expandTrigger',\n      title: { label: '菜单触发方式', tip: '触发次级菜单的展开的方式' },\n      propType: { type: 'oneOf', value: ['click', 'hover'] },\n    },\n    {\n      name: 'notFoundContent',\n      title: { label: '无数据展示', tip: '无数据' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'placeholder',\n      title: { label: '输入框占位文本', tip: '输入框占位文本' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'placement',\n      title: { label: '浮层预设位置', tip: '浮层预设位置' },\n      propType: {\n        type: 'oneOf',\n        value: ['bottomLeft', 'bottomRight', 'topLeft', 'topRight'],\n      },\n    },\n    {\n      name: 'showSearch',\n      title: { label: '支持搜索', tip: '在选择框中显示搜索框' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '输入框大小' },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'SelectSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'style',\n      title: { label: '自定义样式', tip: '自定义样式' },\n      propType: 'object',\n    },\n    {\n      name: 'onChange',\n      title: { label: '选择完成后的回调', tip: '选择完成后的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onPopupVisibleChange',\n      title: { label: '显示/隐藏浮层的回调', tip: '显示/隐藏浮层的回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(value,selectedOptions,${extParams}){\\n// 选择完成后的回调\\nconsole.log('onChange', value, selectedOptions);}\",\n        },\n        {\n          name: 'onPopupVisibleChange',\n          template:\n            \"onPopupVisibleChange(value,selectedOptions,${extParams}){\\n// 显示/隐藏浮层的回调\\nconsole.log('onPopupVisibleChange', value, selectedOptions);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/cascader/snippets.ts",
    "content": "export default [\n  {\n    title: '级联选择',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/cascader-1.png',\n    schema: {\n      componentName: 'Cascader',\n      props: {\n        options: [\n          {\n            value: 'zhejiang',\n            label: 'Zhejiang',\n            children: [\n              {\n                value: 'hangzhou',\n                label: 'Hangzhou',\n                children: [\n                  {\n                    value: 'xihu',\n                    label: 'West Lake',\n                  },\n                ],\n              },\n            ],\n          },\n          {\n            value: 'jiangsu',\n            label: 'Jiangsu',\n            children: [\n              {\n                value: 'nanjing',\n                label: 'Nanjing',\n                children: [\n                  {\n                    value: 'zhonghuamen',\n                    label: 'Zhong Hua Men',\n                  },\n                ],\n              },\n            ],\n          },\n        ],\n        placeholder: '请选择',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/checkbox/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Checkbox',\n  title: '多选框',\n  category: '表单',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'checked',\n      title: { label: '当前值', tip: '指定当前是否选中' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'defaultChecked',\n      title: { label: '默认值', tip: '初始是否选中' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'indeterminate',\n      title: { label: '不确定状态', tip: 'indeterminate状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'onChange',\n      title: { label: '变化时回调函数', tip: '变化时回调函数' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(event,${extParams}){\\n// 变化时回调函数\\nconsole.log('onChange', event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/checkbox/snippets.ts",
    "content": "export default [\n  {\n    title: '多选框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/checkbox-1.png',\n    schema: {\n      componentName: 'Checkbox',\n      props: {\n        children: 'Checkbox',\n      },\n    },\n  },\n  {\n    title: '多选框组',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/checkbox-group-1.png',\n    schema: {\n      componentName: 'Checkbox.Group',\n      props: {\n        options: [\n          {\n            label: 'A',\n            value: 'A',\n          },\n          {\n            label: 'B',\n            value: 'B',\n          },\n          {\n            label: 'C',\n            value: 'C',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/checkbox.group/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nexport default {\n  componentName: 'Checkbox.Group',\n  title: '多选框组',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认选中值' },\n      propType: { type: 'arrayOf', value: 'string' },\n      defaultValue: [],\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n      supportVariable: true\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前选中的选项' },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n      supportVariable: true\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'name',\n      title: { label: 'name属性', tip: 'name属性' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'options',\n      title: { label: '指定可选项', tip: '指定可选项' },\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'shape',\n          value: [\n            {\n              name: 'label',\n              description: '选项名',\n              propType: 'string',\n              defaultValue: '选项名',\n            },\n            {\n              name: 'value',\n              description: '选项值',\n              propType: 'string',\n              defaultValue: '选项值',\n            },\n            {\n              name: 'disabled',\n              description: '是否禁用',\n              propType: 'bool',\n              defaultValue: false,\n            },\n          ],\n        },\n      },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'label',\n                    title: '选项名',\n                    setter: 'StringSetter',\n                    isRequired: true\n                  },\n                  {\n                    name: 'value',\n                    title: '选项值',\n                    setter: 'StringSetter',\n                    isRequired: true\n                  },\n                  {\n                    name: 'disabled',\n                    title: '是否禁用',\n                    setter: 'BoolSetter',\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                label: '选项名',\n                value: uuid(),\n                disabled: false,\n              };\n            },\n          },\n        },\n      },\n      supportVariable: true\n    },\n    {\n      name: 'onChange',\n      title: { label: '变化时回调函数', tip: '变化时回调函数' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(checkedValue,${extParams}){\\n// 变化时回调函数\\nconsole.log('onChange', checkedValue);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/collapse/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Collapse',\n  title: '折叠面板',\n  category: '数据展示',\n  props: [\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '带边框风格的折叠面板' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'accordion',\n      title: { label: '手风琴模式', tip: '手风琴模式' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'collapsible',\n      title: '可折叠触发区域',\n      propType: {\n        type: 'oneOf',\n        value: ['-', 'header', 'disabled'],\n      },\n    },\n    // {\n    //   name: 'expandIcon',\n    //   title: { label: '自定义切换图标', tip: '自定义切换图标' },\n    //   propType: 'func',\n    // },\n    {\n      name: 'expandIconPosition',\n      title: { label: '图标位置', tip: '设置图标位置' },\n      propType: { type: 'oneOf', value: ['left', 'right'] },\n    },\n    {\n      name: 'destroyInactivePanel',\n      title: { label: '隐藏时销毁', tip: '销毁折叠隐藏的面板' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'ghost',\n      title: { label: '透明无边框', tip: '使折叠面板透明且无边框' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'collapses',\n      title: '折叠项',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid()\n                  },\n                  {\n                    name: 'header',\n                    title: '面板头内容',\n                    setter: 'StringSetter',\n                    initialValue: '折叠项'\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: uuid(),\n                header: '折叠项',\n                showArrow: true,\n                collapsible: undefined,\n                forceRender: false,\n              };\n            },\n          },\n        },\n      },\n      extraProps: {\n        getValue(target, fieldValue) {\n          console.log('getValue', target.node.children.length);\n          const map = target.node.children.map((child) => {\n            const key = child.getPropValue('key') ? String(child.getPropValue('key')) : child.id;\n            return {\n              key,\n              header: child.getPropValue('header'),\n              showArrow: child.getPropValue('showArrow'),\n              collapsible: child.getPropValue('collapsible'),\n              forceRender: child.getPropValue('forceRender'),\n            };\n          });\n          return map;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          const map = {};\n\n          // console.log('setValue',value);\n\n          if (!Array.isArray(value)) {\n            value = [];\n          }\n          value.forEach((item) => {\n            const tabItem = Object.assign({}, item);\n            map[item.key] = tabItem;\n          });\n\n          node.children.mergeChildren(\n            (child) => {\n              const key = String(child.getPropValue('key'));\n              if (Object.hasOwnProperty.call(map, key)) {\n                child.setPropValue('header', map[key].header);\n                child.setPropValue('showArrow', map[key].showArrow);\n                child.setPropValue('collapsible', map[key].collapsible);\n                child.setPropValue('forceRender', map[key].forceRender);\n                delete map[key];\n                return false;\n              }\n              return true;\n            },\n            () => {\n              const items = [];\n              for (const key in map) {\n                if (Object.hasOwnProperty.call(map, key)) {\n                  items.push({\n                    componentName: 'Collapse.Panel',\n                    props: map[key],\n                  });\n                }\n              }\n              return items;\n            },\n            (child1, child2) => {\n              const a = value.findIndex(\n                (item) => String(item.key) === String(child1.getPropValue('key')),\n              );\n              const b = value.findIndex(\n                (item) => String(item.key) === String(child2.getPropValue('key')),\n              );\n              return a - b;\n            },\n          );\n        },\n      },\n    },\n    {\n      name: 'defaultActiveKey',\n      title: { label: '初始化选中面板的 key', tip: '初始化选中面板的 key' },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          { type: 'arrayOf', value: 'string' },\n          'number',\n          { type: 'arrayOf', value: 'number' },\n        ],\n      },\n    },\n    {\n      name: 'activeKey',\n      title: {\n        label: '当前激活 tab 面板的 key',\n        tip: '当前激活 tab 面板的 key',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          { type: 'arrayOf', value: 'string' },\n          'number',\n          { type: 'arrayOf', value: 'number' },\n        ],\n      },\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template: \"onChange(${extParams}){\\n// 切换面板的回调\\nconsole.log('onChange');}\",\n        },\n      ],\n    },\n    component: {\n      isContainer: true,\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/collapse/snippets.ts",
    "content": "export default [\n  {\n    title: '折叠面板',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/collapse-1.png',\n    schema: {\n      componentName: 'Collapse',\n      props: {\n        defaultActiveKey: ['collapse-item-1'],\n      },\n      children: [\n        {\n          componentName: 'Collapse.Panel',\n          props: {\n            header: '折叠项1',\n            key: 'collapse-item-1',\n          },\n        },\n        {\n          componentName: 'Collapse.Panel',\n          props: {\n            header: '折叠项2',\n            key: 'collapse-item-2',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/collapse.pane/meta.ts",
    "content": "// FIXME: 选中tabPane点复制，会出问题，因为复制的组件key一样\n\nexport default {\n  componentName: 'Collapse.Panel',\n  title: '折叠项',\n  category: '',\n  props: [\n    {\n      name: 'key',\n      title: {\n        label: 'key',\n        tip: 'key',\n      },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'header',\n      title: {\n        label: '标题',\n        tip: '标题',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n\n    {\n      name: 'extra',\n      title: {\n        label: '右上角内容',\n        tip: '自定义渲染每个面板右上角的内容',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'collapsible',\n      title: '可折叠触发区域',\n      propType: {\n        type: 'oneOf',\n        value: ['-', 'header', 'disabled'],\n      },\n    },\n    {\n      name: 'showArrow',\n      title: {\n        label: '显示折叠图标',\n        tip: '是否展示当前面板上的箭头',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'forceRender',\n      title: {\n        label: '隐藏时渲染',\n        tip: '被隐藏时是否渲染 DOM 结构',\n      },\n      propType: 'bool',\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Collapse'],\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/comment/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Comment',\n  title: '评论',\n  category: '数据展示',\n  props: [\n    {\n      name: 'actions',\n      title: {\n        label: '操作列表',\n        tip: '在评论内容下面呈现的操作项列表',\n      },\n      propType: { type: 'arrayOf', value: 'node' },\n    },\n    {\n      name: 'author',\n      title: { label: '要显示为注释作者的元素', tip: '要显示为注释作者的元素' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'avatar',\n      title: {\n        label: '头像元素',\n        tip: '要显示为评论头像的元素 - 通常是 antd Avatar 或者 src',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'children',\n      title: {\n        label: '子节点',\n        tip: '嵌套注释应作为注释的子项提供',\n      },\n      propType: 'node',\n    },\n    {\n      name: 'content',\n      title: { label: '评论的主要内容', tip: '评论的主要内容' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'datetime',\n      title: { label: '展示时间描述', tip: '展示时间描述' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/comment/snippets.ts",
    "content": "export default [\n  {\n    title: '评论',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/comment-1.png',\n    schema: {\n      componentName: 'Comment',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/config-provider/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'ConfigProvider',\n  title: '全局化配置',\n  category: '其他',\n  props: [\n    {\n      name: 'autoInsertSpaceInButton',\n      title: {\n        label: '按钮插入空格',\n        tip: '自动在按钮中 2 个汉字之间插入空格',\n      },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'componentSize',\n      title: { label: '组件大小', tip: '设置 antd 组件大小' },\n      propType: { type: 'oneOf', value: ['small', 'middle', 'large'] },\n      default: 'middle',\n    },\n    {\n      name: 'csp',\n      title: {\n        label: 'CSP配置',\n        tip: '设置Content Security Policy配置',\n      },\n      propType: 'object',\n      setter: 'JsonSetter',\n    },\n    {\n      name: 'form',\n      title: {\n        label: 'Form通用属性',\n        tip: '设置 Form 组件的通用属性',\n      },\n      propType: 'object',\n      setter: 'JsonSetter',\n    },\n    {\n      name: 'input',\n      title: {\n        label: 'Input通用属性',\n        tip: '设置 Input 组件的通用属性',\n      },\n      propType: 'object',\n      setter: 'JsonSetter',\n    },\n    // {\n    //   name: 'renderEmpty',\n    //   title: { label: '自定义组件空状态', tip: '自定义组件空状态' },\n    //   propType: 'func',\n    // },\n    {\n      name: 'getPopupContainer',\n      title: {\n        label: '弹出框父节点',\n        tip: '弹出框渲染父节点，默认渲染到 body 上。',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'getTargetContainer',\n      title: {\n        label: '滚动监听容器',\n        tip: '配置 Affix、Anchor 滚动监听容器。',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'locale',\n      title: { label: '语言', tip: '语言' },\n      propType: {\n        type: 'oneOf',\n        value: ['zh-CN', 'en-US'],\n      },\n      defaultValue: 'en-US',\n    },\n    {\n      name: 'prefixCls',\n      title: {\n        label: '样式前缀',\n        tip: '设置统一样式前缀。`注意：这将不会应用由 antd 提供的默认样式`',\n      },\n      propType: 'string',\n    },\n    {\n      name: 'pageHeader',\n      title: {\n        label: '统一设置 PageHeader 的 ghost',\n        tip: '统一设置 PageHeader 的 ghost',\n      },\n      propType: 'object',\n      setter: 'JsonSetter',\n    },\n    {\n      name: 'direction',\n      title: { label: '文本方向', tip: '设置文本展示方向' },\n      propType: { type: 'oneOf', value: ['ltr', 'rtl'] },\n    },\n    {\n      name: 'space',\n      title: { label: '设置 Space 的 尺寸', tip: '设置 Space 的 `size`' },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'middle', 'large', 'number'],\n      },\n    },\n    {\n      name: 'virtual',\n      title: {\n        label: '虚拟滚动',\n        tip: '设置 `false` 时关闭虚拟滚动',\n      },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'dropdownMatchSelectWidth',\n      title: { label: '下拉菜单和选择器同宽', tip: '下拉菜单和选择器同宽' },\n      propType: { type: 'oneOfType', value: ['bool', 'number'] },\n    },\n  ],\n  configure: { component: { isContainer: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/config-provider/snippets.ts",
    "content": "export default [\n  {\n    title: '全局化配置',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/config-provider-1.jpg',\n    schema: {\n      componentName: 'ConfigProvider',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/date-picker/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'DatePicker',\n  title: '日期选择框',\n  category: '表单',\n  props: [\n    {\n      title: '值设置',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'defaultValue',\n          title: {\n            label: '默认值',\n            tip: 'defaultValue | 默认值',\n          },\n          propType: 'date',\n          setter: 'DateSetter',\n        },\n        {\n          name: 'value',\n          title: {\n            label: '当前值',\n            tip: 'value | 当前值',\n          },\n          propType: 'date',\n          setter: 'DateSetter',\n        },\n      ],\n    },\n    {\n      title: '功能选项',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'size',\n          title: {\n            label: '尺寸',\n            tip: 'size | 输入框大小',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['large', 'middle', 'small'],\n          },\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  title: '大',\n                  value: 'large',\n                },\n                {\n                  title: '中',\n                  value: 'middle',\n                },\n                {\n                  title: '小',\n                  value: 'small',\n                },\n              ],\n            },\n          },\n          defaultValue: 'middle',\n        },\n        {\n          name: 'picker',\n          title: {\n            label: '日期类型',\n            tip: 'picker | 选择器日期类型',\n          },\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '日期',\n                  value: 'date',\n                },\n                {\n                  title: '周',\n                  value: 'week',\n                },\n                {\n                  title: '月份',\n                  value: 'month',\n                },\n                {\n                  title: '季度',\n                  value: 'quarter',\n                },\n                {\n                  title: '年份',\n                  value: 'year',\n                },\n              ],\n            },\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['date', 'week', 'month', 'quarter', 'year'],\n          },\n        },\n        {\n          name: 'format',\n          title: {\n            label: '日期格式',\n            tip: 'format | 设置日期格式',\n          },\n          propType: 'string',\n          defaultValue: 'YYYY-MM-DD',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'placeholder',\n          title: {\n            label: '提示文字',\n            tip: 'placeholder | 输入框提示文字',\n          },\n          propType: 'string',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'allowClear',\n          title: {\n            label: '支持清除',\n            tip: 'allowClear | 是否允许清除',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'bordered',\n          title: {\n            label: '显示边框',\n            tip: 'bordered | 是否有边框',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'showToday',\n          title: {\n            label: '展示今天按钮',\n            tip: 'showToday | 是否展示今天按钮',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'autoFocus',\n          title: {\n            label: '自动聚焦',\n            tip: 'autoFocus | 自动获取焦点',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'disabled',\n          title: {\n            label: '是否禁用',\n            tip: 'disabled | 是否为禁用状态',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'inputReadOnly',\n          title: {\n            label: '是否只读',\n            tip: 'inputReadOnly | 避免在移动设备上打开虚拟键盘',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'showTime',\n          title: {\n            label: '时间选择',\n            tip: 'showTime | 是否能选择时间',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n      ],\n    },\n    {\n      title: '高级',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'disabledDate',\n          title: {\n            label: '不可选日期',\n            tip: 'disabledDate | 不可选择的日期',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'disabledDate(currentDate,${extParams}){\\n// 设置不可选择的日期\\nreturn true\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    // {\n    //   name: 'dropdownClassName',\n    //   title: {\n    //     label: '额外的弹出日历 className',\n    //     tip: '额外的弹出日历 className',\n    //   },\n    //   setter: 'ClassNameSetter',\n    // },\n    // {\n    //   name: 'popupStyle',\n    //   title: { label: '额外的弹出日历样式', tip: '额外的弹出日历样式' },\n    //   setter: 'JsonSetter',\n    // },\n    // {\n    //   name: 'suffixIcon',\n    //   title: { label: '自定义的选择框后缀图标', tip: '自定义的选择框后缀图标' },\n    //   setter: 'IconSetter',\n    // },\n    // {\n    //   name: 'style',\n    //   title: { label: '自定义输入框样式', tip: '自定义输入框样式' },\n    //   setter: 'JsonSetter',\n    // },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(date,dateString,${extParams}){\\n// 时间发生变化的回调\\nconsole.log('onChange',date,dateString);}\",\n        },\n        {\n          name: 'onOpenChange',\n          template:\n            \"onOpenChange(open,${extParams}){\\n// 弹出日历和关闭日历的回调\\nconsole.log('onOpenChange',open);}\",\n        },\n        {\n          name: 'onPanelChange',\n          template:\n            \"onPanelChange(value,mode,${extParams}){\\n// 日历面板切换的回调\\nconsole.log('onPanelChange',value,mode);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/date-picker/snippets.ts",
    "content": "export default [\n  {\n    title: '选择日期',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-1.png',\n    schema: {\n      componentName: 'DatePicker',\n      props: {},\n    },\n  },\n  {\n    title: '选择周',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-2.png',\n    schema: {\n      componentName: 'DatePicker',\n      props: {\n        picker: 'week',\n      },\n    },\n  },\n  {\n    title: '选择月份',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-3.png',\n    schema: {\n      componentName: 'DatePicker',\n      props: {\n        picker: 'month',\n      },\n    },\n  },\n  {\n    title: '选择季度',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-4.png',\n    schema: {\n      componentName: 'DatePicker',\n      props: {\n        picker: 'quarter',\n      },\n    },\n  },\n  {\n    title: '选择年份',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-5.png',\n    schema: {\n      componentName: 'DatePicker',\n      props: {\n        picker: 'year',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/date-picker.range-picker/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'DatePicker.RangePicker',\n  title: '日期区间选择',\n  category: '表单',\n  props: [\n    {\n      title: '值设置',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'defaultValue',\n          title: {\n            label: '默认值',\n            tip: 'defaultValue | 默认值',\n          },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n        {\n          name: 'value',\n          title: {\n            label: '当前值',\n            tip: 'value | 当前值',\n          },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n        {\n          name: 'defaultPickerValue',\n          title: {\n            label: '默认面板日期',\n            tip: 'defaultPickerValue | 默认面板日期',\n          },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n      ],\n    },\n    {\n      title: '功能选项',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'size',\n          title: {\n            label: '尺寸',\n            tip: 'size | 输入框大小，large 高度为 40px，small 为 24px，默认是 32px',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['large', 'middle', 'small'],\n          },\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  title: '大',\n                  value: 'large',\n                },\n                {\n                  title: '中',\n                  value: 'middle',\n                },\n                {\n                  title: '小',\n                  value: 'small',\n                },\n              ],\n            },\n          },\n          defaultValue: 'middle',\n        },\n        {\n          name: 'picker',\n          title: {\n            label: '选择器类型',\n            tip: 'picker | 设置选择器类型',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['date', 'week', 'month', 'quarter', 'year'],\n          },\n          defaultValue: 'date',\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '日期',\n                  value: 'date',\n                },\n                {\n                  title: '周',\n                  value: 'week',\n                },\n                {\n                  title: '月份',\n                  value: 'month',\n                },\n                {\n                  title: '季度',\n                  value: 'quarter',\n                },\n                {\n                  title: '年份',\n                  value: 'year',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'mode',\n          title: {\n            label: '面板模式',\n            tip: 'mode | 日期面板的状态',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['time', 'date', 'month', 'year', 'decade'],\n          },\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '日期',\n                  value: 'date',\n                },\n                {\n                  title: '周',\n                  value: 'week',\n                },\n                {\n                  title: '月份',\n                  value: 'month',\n                },\n                {\n                  title: '年份',\n                  value: 'year',\n                },\n                {\n                  title: '十年间隔',\n                  value: 'decade',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'format',\n          title: {\n            label: '日期格式',\n            tip: 'format | 展示的日期格式，配置参考 moment.js',\n          },\n          propType: 'string',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'placeholder',\n          title: {\n            label: '提示文字',\n            tip: 'placeholder | 输入框提示文字',\n          },\n          propType: 'string',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'allowClear',\n          title: {\n            label: '支持清除',\n            tip: 'allowClear | 是否允许清除',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'bordered',\n          title: {\n            label: '显示边框',\n            tip: 'bordered | 是否有边框',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'autoFocus',\n          title: {\n            label: '自动聚焦',\n            tip: 'autoFocus | 自动获取焦点',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'disabled',\n          title: {\n            label: '是否禁用',\n            tip: 'disabled | 是否为禁用状态',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        // {\n        //   name: 'open',\n        //   title: {\n        //     label: '弹层是否展开',\n        //     tip: 'open | 控制弹层是否展开',\n        //   },\n        //   propType: 'bool',\n        //   setter: 'BoolSetter',\n        // },\n        {\n          name: 'showTime',\n          title: {\n            label: '时间选择',\n            tip: 'showTime | 时间选择',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'inputReadOnly',\n          title: {\n            label: '输入框只读',\n            tip: 'inputReadOnly | 设置输入框为只读（避免在移动设备上打开虚拟键盘）',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n      ],\n    },\n    {\n      title: '高级',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'ranges',\n          title: {\n            label: '预设范围',\n            tip: 'ranges | 预设时间范围快捷选择',\n          },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n        {\n          name: 'disabledDate',\n          title: {\n            label: '不可选日期',\n            tip: 'disabledDate | 不可选择的日期',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'disabledDate(currentDate,${extParams}){\\n// 设置不可选择的日期\\nreturn true\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    // {\n    //   name: 'renderExtraFooter',\n    //   title: { label: '在面板中添加额外的页脚', tip: '在面板中添加额外的页脚' },\n    //   propType: 'func',\n    // },\n    // {\n    //   name: 'className',\n    //   title: { label: '选择器 className', tip: '选择器 className' },\n    //   propType: 'string',\n    // },\n    // {\n    //   name: 'dropdownClassName',\n    //   title: {\n    //     label: '额外的弹出日历 className',\n    //     tip: '额外的弹出日历 className',\n    //   },\n    //   propType: 'string',\n    // },\n    // {\n    //   name: 'getPopupContainer',\n    //   title: {\n    //     label: '定义浮层的容器，默认为 body 上新建 div',\n    //     tip: '定义浮层的容器，默认为 body 上新建 div',\n    //   },\n    //   propType: 'func',\n    // },\n    // {\n    //   name: 'locale',\n    //   title: { label: '国际化配置', tip: '国际化配置' },\n    //   propType: 'object',\n    // },\n    // {\n    //   name: 'popupStyle',\n    //   title: { label: '额外的弹出日历样式', tip: '额外的弹出日历样式' },\n    //   propType: 'CSSProperties',\n    //   defaultValue: '{}',\n    // },\n    // {\n    //   name: 'style',\n    //   title: { label: '自定义输入框样式', tip: '自定义输入框样式' },\n    //   propType: 'CSSProperties',\n    //   defaultValue: '{}',\n    // },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(dates,dateStrings,${extParams}){\\n// 日期范围发生变化的回调\\nconsole.log('onChange',dates,dateStrings);}\",\n        },\n        {\n          name: 'onOpenChange',\n          template:\n            \"onOpenChange(open,${extParams}){\\n// 弹出日历和关闭日历的回调\\nconsole.log('onOpenChange',open);}\",\n        },\n        {\n          name: 'onPanelChange',\n          template:\n            \"onPanelChange(value,mode,${extParams}){\\n// 日历面板切换的回调\\nconsole.log('onPanelChange',value,mode);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/date-picker.range-picker/snippets.ts",
    "content": "export default [\n  {\n    title: '日期区间',\n    screenshot:\n      'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-range-picker-1.png',\n    schema: {\n      componentName: 'DatePicker.RangePicker',\n      props: {},\n    },\n  },\n  {\n    title: '周区间',\n    screenshot:\n      'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-range-picker-2.png',\n    schema: {\n      componentName: 'DatePicker.RangePicker',\n      props: {\n        picker: 'week',\n      },\n    },\n  },\n  {\n    title: '月区间',\n    screenshot:\n      'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-range-picker-3.png',\n    schema: {\n      componentName: 'DatePicker.RangePicker',\n      props: {\n        picker: 'month',\n      },\n    },\n  },\n  {\n    title: '年区间',\n    screenshot:\n      'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/date-picker-range-picker-4.png',\n    schema: {\n      componentName: 'DatePicker.RangePicker',\n      props: {\n        picker: 'year',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/descriptions/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Descriptions',\n  title: '描述列表',\n  category: '数据展示',\n  props: [\n    {\n      name: 'title',\n      title: {\n        label: '标题',\n        tip: '描述列表的标题，显示在最顶部',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n    {\n      name: 'items',\n      title: {\n        label: '列表项',\n        tip: '列表项',\n      },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid(),\n                    condition: () => false,\n                  },\n                  {\n                    name: 'label',\n                    title: '标题',\n                    setter: 'StringSetter',\n                    initialValue: '列表项',\n                  },\n                  {\n                    name: 'span',\n                    title: '所占列数',\n                    setter: 'NumberSetter',\n                    initialValue: 1,\n                  },\n                  {\n                    name: 'children',\n                    title: '内容',\n                    setter: {\n                      componentName: 'SlotSetter',\n                      initialValue: {\n                        type: 'JSSlot',\n                        value: [],\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: uuid(),\n                label: '标签项',\n                span: 1,\n                children: {\n                  type: 'JSSlot',\n                  value: [],\n                },\n              };\n            },\n          },\n        },\n      },\n      extraProps: {\n        getValue(target, fieldValue) {\n          const map = target.node.children.map((child) => {\n            const key = child.getPropValue('key') ? String(child.getPropValue('key')) : child.id;\n            return {\n              key,\n              label: child.getPropValue('label'),\n              span: child.getPropValue('span'),\n              children: child.getPropValue('children'),\n            };\n          });\n          return map;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          const map = {};\n\n          if (!Array.isArray(value)) {\n            value = [];\n          }\n          value.forEach((item) => {\n            const tabItem = Object.assign({}, item);\n            map[item.key] = tabItem;\n          });\n\n          node.children.mergeChildren(\n            (child) => {\n              const key = String(child.getPropValue('key'));\n              if (Object.hasOwnProperty.call(map, key)) {\n                child.setPropValue('label', map[key].label);\n                child.setPropValue('span', map[key].span);\n                child.setPropValue('children', map[key].children);\n                delete map[key];\n                return false;\n              }\n              return true;\n            },\n            () => {\n              const items = [];\n              for (const key in map) {\n                if (Object.hasOwnProperty.call(map, key)) {\n                  items.push({\n                    componentName: 'Descriptions.Item',\n                    props: map[key],\n                  });\n                }\n              }\n              return items;\n            },\n            (child1, child2) => {\n              const a = value.findIndex(\n                (item) => String(item.key) === String(child1.getPropValue('key')),\n              );\n              const b = value.findIndex(\n                (item) => String(item.key) === String(child2.getPropValue('key')),\n              );\n              return a - b;\n            },\n          );\n        },\n        // getValue(target, fieldValue) {\n        //   // const node = target.nodes[0];\n        //   // const children = node.getChildren();\n        //   const map = target.node.children.map(child => {\n        //     return {\n        //       key: child.getPropValue('key') || uuid(),\n        //       label: child.getPropValue('label'),\n        //       span: child.getPropValue('span'),\n        //       children: child.getPropValue('children'),\n        //     };\n        //   });\n        //   return map;\n        // },\n        // setValue(target, value) {\n        //   const node = target.node;\n\n        //   if (!Array.isArray(value)) {\n        //     value = [];\n        //   }\n\n        //   node.children.mergeChildren(\n        //     () => true,\n        //     () => {\n        //       return value.map(item => ({\n        //         componentName: 'Descriptions.Item',\n        //         props: Object.assign({}, item),\n        //       }));\n        //     }\n        //   );\n        // },\n      },\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否展示边框' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'column',\n      title: {\n        label: '列数',\n        tip: '一行的列表项数量',\n      },\n      propType: 'number',\n      defaultValue: 3,\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip:\n          '设置列表的大小。可以设置为 `middle` 、`small`, 或不填（只有设置 `bordered={true}` 生效）',\n      },\n      propType: { type: 'oneOf', value: ['default', 'middle', 'small'] },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'layout',\n      title: { label: '布局方向', tip: '描述布局' },\n      propType: { type: 'oneOf', value: ['horizontal', 'vertical'] },\n      defaultValue: 'horizontal',\n    },\n    {\n      name: 'colon',\n      title: {\n        label: '展示冒号',\n        tip: '配置 `Descriptions.Item` 的 `colon` 的默认值',\n      },\n      propType: 'bool',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/descriptions/snippets.ts",
    "content": "export default [\n  {\n    title: '描述列表',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/descriptions-1.jpg',\n    schema: {\n      componentName: 'Descriptions',\n      props: {\n        title: '用户信息',\n        items: [\n          {\n            label: '用户名',\n            children: 'Mo Yao',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/descriptions.item/meta.ts",
    "content": "export default {\n  componentName: 'Descriptions.Item',\n  title: '描述列表项',\n  props: [\n    {\n      name: 'key',\n      title: {\n        label: 'key',\n        tip: 'key',\n      },\n      propType: 'string',\n    },\n    {\n      name: 'tab',\n      title: {\n        label: '标题',\n        tip: '标题',\n      },\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/divider/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Divider',\n  title: '分割线',\n  category: '布局',\n  props: [\n    {\n      name: 'className',\n      title: { label: '分割线样式类', tip: '分割线样式类' },\n      propType: 'string',\n    },\n    {\n      name: 'dashed',\n      title: { label: '是否虚线', tip: '是否虚线' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'orientation',\n      title: { label: '标题位置', tip: '分割线标题的位置' },\n      propType: { type: 'oneOf', value: ['left', 'right', 'center'] },\n    },\n    {\n      name: 'orientationMargin',\n      title: {\n        label: '标题边距',\n        tip:\n          '标题和最近 left/right 边框之间的距离，去除了分割线，同时 orientation 必须为 left 或 right',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'number'] },\n    },\n    {\n      name: 'style',\n      title: { label: '分割线样式对象', tip: '分割线样式对象' },\n      propType: 'object',\n    },\n    {\n      name: 'type',\n      title: { label: '方向', tip: '水平还是垂直类型' },\n      propType: { type: 'oneOf', value: ['horizontal', 'vertical'] },\n    },\n    {\n      name: 'plain',\n      title: {\n        label: '普通正文样式',\n        tip: '文字是否显示为普通正文样式',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    supports: { style: true, className: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/divider/snippets.ts",
    "content": "export default [\n  {\n    title: '分割线',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/divider-1.png',\n    schema: {\n      componentName: 'Divider',\n      props: {},\n    },\n  },\n  {\n    title: '带文字分割线',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/divider-2.png',\n    schema: {\n      componentName: 'Divider',\n      props: {\n        children: [\n          {\n            componentName: 'Typography.Text',\n            props: {\n              children: '分割文字',\n            },\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/drawer/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Drawer',\n  title: '抽屉',\n  category: '反馈',\n  props: [\n    {\n      title: '基础',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'open',\n          title: { label: '是否可见', tip: 'open | Drawer 是否可见' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'title',\n          title: { label: '标题', tip: 'title | 标题' },\n          propType: { type: 'oneOfType', value: ['string', 'node'] },\n          setter: [\n            'StringSetter',\n            {\n              componentName: 'SlotSetter',\n              title: '标题插槽',\n              initialValue: {\n                type: 'JSSlot',\n                value: [],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    {\n      title: '外观',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'placement',\n          title: { label: '位置', tip: 'placement | 抽屉的显示位置' },\n          propType: {\n            type: 'oneOf',\n            value: ['top', 'right', 'bottom', 'left'],\n          },\n          defaultValue: 'right',\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '上方',\n                  value: 'top',\n                },\n                {\n                  title: '右侧',\n                  value: 'right',\n                },\n                {\n                  title: '下方',\n                  value: 'bottom',\n                },\n                {\n                  title: '左侧',\n                  value: 'left',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'size',\n          title: { label: '大小', tip: 'size | 抽屉的大小' },\n          propType: { type: 'oneOf', value: ['default', 'large'] },\n          defaultValue: 'default',\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  title: '默认',\n                  value: 'default',\n                },\n                {\n                  title: '超大',\n                  value: 'large',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'width',\n          title: { label: '宽度', tip: 'width | 宽度' },\n          propType: { type: 'oneOfType', value: ['string', 'number'] },\n          setter: ['StringSetter', 'NumberSetter', 'VariableSetter'],\n        },\n        {\n          name: 'height',\n          title: {\n            label: '高度',\n            tip: 'height | 高度, 在 placement 为 top 或 bottom 时使用',\n          },\n          propType: { type: 'oneOfType', value: ['string', 'number'] },\n          setter: ['StringSetter', 'NumberSetter', 'VariableSetter'],\n        },\n        {\n          name: 'zIndex',\n          title: { label: 'z-index', tip: '设置 Drawer 的 `z-index`' },\n          propType: 'number',\n          setter: 'NumberSetter',\n        },\n      ],\n    },\n    {\n      title: '功能',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'mask',\n          title: { label: '显示遮罩', tip: 'mask | 是否显示遮罩' },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'maskClosable',\n          title: {\n            label: '点击遮罩关闭',\n            tip: 'maskClosable | 点击遮罩是否关闭抽屉',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'autoFocus',\n          title: {\n            label: '自动获得焦点',\n            tip: 'autoFocus | 抽屉展开后是否将焦点切换至其 Dom 节点',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'keyboard',\n          title: {\n            label: '键盘Esc关闭',\n            tip: 'keyboard | 是否支持键盘按 Esc 关闭',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'destroyOnClose',\n          title: {\n            label: '关闭时销毁',\n            tip: 'destroyOnClose | 关闭时销毁 Drawer 里的子元素',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'closable',\n          title: {\n            label: '关闭按钮',\n            tip: 'closable | 是否显示左上角的关闭按钮',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'forceRender',\n          title: { label: '预渲染', tip: 'forceRender | 预渲染 Drawer 内元素' },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n      ],\n    },\n    {\n      title: '插槽扩展',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'closeIcon',\n          title: { label: '关闭图标', tip: 'closeIcon | 自定义关闭图标' },\n          propType: 'node',\n          setter: {\n            componentName: 'SlotSetter',\n            title: '关闭图标插槽',\n            initialValue: {\n              type: 'JSSlot',\n              value: [\n                {\n                  componentName: 'Icon',\n                  props: {\n                    type: 'CloseOutlined',\n                    size: 16\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'extra',\n          title: { label: '操作区域', tip: 'extra | 抽屉右上角的操作区域' },\n          propType: 'node',\n          setter: {\n            componentName: 'SlotSetter',\n            title: '操作区域插槽',\n            initialValue: {\n              type: 'JSSlot',\n              value: [],\n            },\n          },\n        },\n        {\n          name: 'footer',\n          title: { label: '抽屉的页脚', tip: 'footer | 抽屉的页脚' },\n          propType: 'node',\n          setter: {\n            componentName: 'SlotSetter',\n            title: '抽屉页脚插槽',\n            initialValue: {\n              type: 'JSSlot',\n              value: [],\n            },\n          },\n        },\n      ],\n    },\n    {\n      title: '其它',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'className',\n          title: { label: '容器类名', tip: 'className | 对话框外层容器的类名' },\n          propType: 'string',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'drawerStyle',\n          title: '弹出层样式',\n          type: 'group',\n          extraProps: {\n            display: 'entry',\n          },\n          items: [\n            {\n              name: 'drawerStyle',\n              title: {\n                label: '样式设置',\n                tip: 'drawerStyle | 用于设置 Drawer 弹出层的样式',\n              },\n              setter: 'StyleSetter',\n              extraProps: {\n                display: 'block',\n              },\n            },\n          ],\n        },\n        {\n          name: 'contentWrapperStyle',\n          title: '包裹层样式',\n          type: 'group',\n          extraProps: {\n            display: 'entry',\n          },\n          items: [\n            {\n              name: 'contentWrapperStyle',\n              title: {\n                label: '样式设置',\n                tip: 'contentWrapperStyle | 可用于设置 Drawer 包裹内容部分的样式',\n              },\n              setter: 'StyleSetter',\n              extraProps: {\n                display: 'block',\n              },\n            },\n          ],\n        },\n        {\n          name: 'headerStyle',\n          title: '头部样式',\n          type: 'group',\n          extraProps: {\n            display: 'entry',\n          },\n          items: [\n            {\n              name: 'headerStyle',\n              title: {\n                label: '样式设置',\n                tip: 'headerStyle | 用于设置 Drawer 头部的样式',\n              },\n              setter: 'StyleSetter',\n              extraProps: {\n                display: 'block',\n              },\n            },\n          ],\n        },\n        {\n          name: 'bodyStyle',\n          title: '内容样式',\n          type: 'group',\n          extraProps: {\n            display: 'entry',\n          },\n          items: [\n            {\n              name: 'bodyStyle',\n              title: {\n                label: '样式设置',\n                tip: 'bodyStyle | 可用于设置 Drawer 内容部分的样式',\n              },\n              setter: 'StyleSetter',\n              extraProps: {\n                display: 'block',\n              },\n            },\n          ],\n        },\n        {\n          name: 'footerStyle',\n          title: '页脚样式',\n          type: 'group',\n          extraProps: {\n            display: 'entry',\n          },\n          items: [\n            {\n              name: 'footerStyle',\n              title: {\n                label: '样式设置',\n                tip: 'footerStyle | 抽屉页脚部件的样式',\n              },\n              setter: 'StyleSetter',\n              extraProps: {\n                display: 'block',\n              },\n            },\n          ],\n        },\n        {\n          name: 'maskStyle',\n          title: '遮罩样式',\n          type: 'group',\n          extraProps: {\n            display: 'entry',\n          },\n          items: [\n            {\n              name: 'maskStyle',\n              title: {\n                label: '样式设置',\n                tip: 'maskStyle | 遮罩样式',\n              },\n              setter: 'StyleSetter',\n              extraProps: {\n                display: 'block',\n              },\n            },\n          ],\n        },\n      ],\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      nestingRule: {\n        parentWhitelist: ['Page', 'Component'],\n      },\n    },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onClose',\n          template:\n            \"onClose(event,${extParams}){\\n// 点击遮罩层或右上角叉或取消按钮的回调\\nconsole.log('onClose',event);}\",\n        },\n        {\n          name: 'afterOpenChange',\n          template:\n            \"afterOpenChange(open,${extParams}){\\n// 切换抽屉时动画结束后的回调\\nconsole.log('afterOpenChange',open);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/drawer/snippets.ts",
    "content": "export default [\n  {\n    title: '侧边抽屉',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/drawer-1.png',\n    schema: {\n      componentName: 'Drawer',\n      props: {\n        title: 'Basic Drawer',\n        open: true,\n        placement: 'right',\n        destroyOnClose: true,\n      },\n      children: [\n        {\n          componentName: 'Typography.Paragraph',\n          children: 'Some contents...',\n        },\n      ],\n    },\n  },\n  {\n    title: '底部抽屉',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/drawer-2.png',\n    schema: {\n      componentName: 'Drawer',\n      props: {\n        title: 'Basic Drawer',\n        open: true,\n        placement: 'bottom',\n        destroyOnClose: true,\n      },\n      children: [\n        {\n          componentName: 'Typography.Paragraph',\n          children: 'Some contents...',\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/dropdown/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Dropdown',\n  title: '下拉菜单',\n  category: '导航',\n  props: [\n    {\n      name: 'open',\n      title: { label: '菜单是否显示', tip: '菜单是否显示' },\n      propType: { type: 'oneOf', value: [true, false, '-'] },\n      defaultValue: '-',\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '默认非受控',\n              value: '-',\n            },\n            {\n              title: '显示',\n              value: true,\n            },\n            {\n              title: '不显示',\n              value: false,\n            },\n          ],\n        },\n      },\n      extraProps: {\n        getValue(target, fieldValue) {\n          const { node } = target;\n          let value = node.getPropValue('open');\n          if (value === undefined) {\n            value = '-';\n          }\n          return value;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          if (value === '-') {\n            setTimeout(() => {\n              node.clearPropValue('open');\n            });\n          }\n        },\n      },\n    },\n    {\n      name: 'arrow',\n      title: { label: '显示下拉箭头', tip: '是否显示下拉箭头' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n    },\n    // {\n    //   name: 'getPopupContainer',\n    //   title: {\n    //     label: '渲染父节点',\n    //     tip:\n    //       '菜单渲染父节点。默认渲染到 body 上，如果你遇到菜单滚动定位问题，试试修改为滚动的区域，并相对其定位。[示例](https://codepen.io/afc163/pen/zEjNOy?editors=0010)',\n    //   },\n    //   propType: 'func',\n    // },\n    {\n      name: 'overlay',\n      title: { label: '菜单', tip: '菜单' },\n      propType: { type: 'oneOfType', value: ['node', 'func'] },\n    },\n    // {\n    //   name: 'overlayClassName',\n    //   title: { label: '根元素的类名称', tip: '根元素的类名称' },\n    //   propType: 'string',\n    // },\n    // {\n    //   name: 'overlayStyle',\n    //   title: { label: '根元素的样式', tip: '根元素的样式' },\n    //   propType: 'object',\n    // },\n    {\n      name: 'placement',\n      title: {\n        label: '弹出位置',\n        tip:\n          '菜单弹出位置：`bottomLeft` `bottomCenter` `bottomRight` `topLeft` `topCenter` `topRight`',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['bottomLeft', 'bottomCenter', 'bottomRight', 'topLeft', 'topCenter', 'topRight'],\n      },\n    },\n    {\n      name: 'trigger',\n      title: {\n        label: '触发下拉的行为',\n        tip: '触发下拉的行为, 移动端不支持 hover',\n      },\n      propType: {\n        type: 'arrayOf',\n        value: { type: 'oneOf', value: ['click', 'hover', 'contextMenu'] },\n      },\n    },\n    {\n      name: 'onOpenChange',\n      title: {\n        label: '显示状态回调',\n        tip: '菜单显示状态改变时调用，参数为 `open`',\n      },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onOpenChange',\n          template:\n            \"onOpenChange(open,${extParams}){\\n// 菜单显示状态改变时调用\\nconsole.log('onOpenChange',open);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/dropdown/snippets.ts",
    "content": "export default [\n  {\n    title: '下拉菜单',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/dropdown-1.png',\n    schema: {\n      componentName: 'Dropdown',\n      props: {\n        overlay: {\n          type: 'JSSlot',\n          value: [\n            {\n              componentName: 'Menu',\n              props: {\n                items: [\n                  {\n                    key: 'timeLinei5wd',\n                    category: 'Item',\n                    title: '菜单名',\n                  },\n                ],\n              },\n              children: [\n                {\n                  componentName: 'Menu.Item',\n                  id: 'node_ocky01yzdq3',\n                  props: {\n                    key: 'timeLinei5wd',\n                    category: 'Item',\n                    title: '菜单名',\n                    children: '菜单名',\n                  },\n                },\n              ],\n            },\n          ],\n        },\n      },\n      children: [\n        {\n          componentName: 'Button',\n          props: {\n            type: 'link',\n            children: {\n              type: 'JSSlot',\n              value: [\n                {\n                  componentName: 'Typography.Text',\n                  props: {\n                    children: 'Hover me',\n                    style: {\n                      color: 'inherit',\n                    },\n                  },\n                },\n                {\n                  componentName: 'Icon',\n                  props: {\n                    type: 'DownOutlined',\n                    size: 15,\n                    style: {\n                      marginLeft: 4,\n                      verticalAlign: 'middle',\n                    },\n                  },\n                },\n              ],\n            },\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/empty/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Empty',\n  title: '空状态',\n  category: '数据展示',\n  props: [\n    {\n      name: 'description',\n      title: { label: '内容描述', tip: '自定义描述内容' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    // {\n    //   name: 'imageStyle',\n    //   title: { label: '图片样式', tip: '图片样式' },\n    //   propType: 'object',\n    // },\n    {\n      name: 'image',\n      title: {\n        label: '图片地址',\n        tip: '设置显示图片，为string时表示自定义图片地址。',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/empty/snippets.ts",
    "content": "export default [\n  {\n    title: '空状态',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/empty-1.png',\n    schema: {\n      componentName: 'Empty',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/form/meta.ts",
    "content": "import snippets from './snippets';\nimport { uuid } from '../_utils/utils'\n\nexport default {\n  snippets,\n  componentName: 'Form',\n  title: '表单容器',\n  category: '表单',\n  props: [\n    {\n      name: 'ref',\n      title: {\n        label: 'ref',\n        tip: 'ref | 通过 this.$(\\'xxx\\') 获取到组件实例',\n      },\n      defaultValue: () => {\n        return `form_${uuid()}`\n      },\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'values',\n      title: { label: '表单数据源', tip: '表单数据源' },\n      propType: 'object',\n      setter: 'JsonSetter',\n      supportVariable: true\n    },\n    {\n      name: 'colon',\n      title: { label: '展示冒号', tip: '' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'hideRequiredMark',\n      title: { label: '隐藏必填标记', tip: '隐藏必填标记' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      type: 'group',\n      title: '布局',\n      display: 'accordion',\n      items: [\n        {\n          name: 'labelCol',\n          title: '标签栅格布局设置',\n          display: 'inline',\n          setter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'span',\n                    title: '宽度',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                  {\n                    name: 'offset',\n                    title: '偏移',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n          },\n          description:\n            'label 标签布局，同 `<Col>` 组件，设置 span offset 值，如 {span: 8, offset: 16}，该项仅在垂直表单有效',\n        },\n        {\n          name: 'wrapperCol',\n          title: '\b内容栅格布局设置',\n          display: 'inline',\n          setter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'span',\n                    title: '宽度',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                  {\n                    name: 'offset',\n                    title: '偏移',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n          },\n          description: '需要为输入控件设置布局样式时，使用该属性，用法同 labelCol',\n        },\n      ],\n    },\n    {\n      name: 'labelAlign',\n      title: {\n        label: '标签对齐',\n        tip: 'label 标签的文本对齐方式',\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '左',\n              value: 'left',\n            },\n            {\n              title: '右',\n              value: 'right',\n            },\n          ],\n        },\n      },\n      propType: { type: 'oneOf', value: ['left', 'right'] },\n      defaultValue: 'right',\n    },\n    {\n      name: 'layout',\n      title: { label: '表单布局', tip: '表单布局' },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '水平',\n              value: 'horizontal',\n            },\n            {\n              title: '垂直',\n              value: 'vertical',\n            },\n            {\n              title: '行内',\n              value: 'inline',\n            },\n          ],\n        },\n      },\n      propType: { type: 'oneOf', value: ['horizontal', 'vertical', 'inline'] },\n      defaultValue: 'horizontal',\n    },\n    {\n      name: 'name',\n      title: {\n        label: '表单名称',\n        tip: '表单名称，会作为表单字段 `id` 前缀使用',\n      },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'preserve',\n      title: {\n        label: '删除时保留值',\n        tip: '当字段被删除时保留字段值',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'scrollToFirstError',\n      title: {\n        label: '滚至错误',\n        tip: '提交失败自动滚动到第一个错误字段',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'size',\n      title: {\n        label: '字段组件尺寸',\n        tip: '设置字段组件的尺寸（仅限 antd 组件）',\n      },\n      propType: { type: 'oneOf', value: ['small', 'middle', 'large'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'validateMessages',\n      title: { label: '验证提示模板', tip: '验证提示模板' },\n      setter: 'JsonSetter',\n      defaultValue: { required: \"'${name}' 不能为空\" },\n    },\n    {\n      name: 'validateTrigger',\n      title: { label: '校验时机', tip: '所有字段校验触发时机' },\n      propType: {\n        type: 'oneOf',\n        value: ['onChange', 'onBlur'],\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '当前值变化时',\n              value: 'onChange',\n            },\n            {\n              title: '失去焦点时',\n              value: 'onBlur',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'onFinish',\n      title: {\n        label: '提交表单且数据验证成功后回调事件',\n        tip: '提交表单且数据验证成功后回调事件',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onFinishFailed',\n      title: {\n        label: '提交表单且数据验证失败后回调事件',\n        tip: '提交表单且数据验证失败后回调事件',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onFieldsChange',\n      title: { label: '字段更新时触发回调事件', tip: '字段更新时触发回调事件' },\n      propType: 'func',\n    },\n    {\n      name: 'onValuesChange',\n      title: {\n        label: '字段值更新时触发回调事件',\n        tip: '字段值更新时触发回调事件',\n      },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onFinish',\n          template:\n            \"onFinish(values,${extParams}){\\n// 提交表单且数据验证成功后回调事件\\nconsole.log('onFinish',values);}\",\n        },\n        {\n          name: 'onFinishFailed',\n          template:\n            \"onFinishFailed({values,errorFields,outOfDate},${extParams}){\\n// 提交表单且数据验证失败后回调事件\\nconsole.log('onFinishFailed',values, errorFields, outOfDate);}\",\n        },\n        {\n          name: 'onFieldsChange',\n          template:\n            \"onFieldsChange(changedFields,allFields,${extParams}){\\n// 字段更新时触发回调事件\\nconsole.log('onFieldsChange',changedFields,allFields);}\",\n        },\n        {\n          name: 'onValuesChange',\n          template:\n            \"onValuesChange(changedValues,allValues,${extParams}){\\n// 字段值更新时触发回调事件\\nconsole.log('onValuesChange',changedValues,allValues);}\",\n        },\n      ],\n    },\n    advanced: {\n      callbacks: {\n        onNodeAdd: (dragment, currentNode) => {\n          const comps = [\n            'Input',\n            'Select',\n            'Radio',\n            'Checkbox',\n            'Switch',\n            'Upload',\n            'Datepicker',\n            'Rate',\n            'Transfer',\n          ];\n\n          if (\n            !dragment ||\n            !dragment.componentMeta ||\n            !dragment.componentMeta.npm ||\n            !dragment.componentMeta.npm.package ||\n            dragment.componentMeta.npm.package.indexOf('@alilc/antd-lowcode-materials') === -1 ||\n            comps.every((comp) => dragment.componentName.indexOf(comp) === -1)\n          ) {\n            return;\n          }\n\n          // 为目标元素包裹一层P\n          const layoutPNode = currentNode.document.createNode({\n            componentName: 'Form.Item',\n            props: {\n              label: '表单项: ',\n            },\n            children: [dragment.exportSchema()],\n          });\n          // 当前dragment还未添加入node子节点,需要setTimeout处理\n          setTimeout(() => {\n            currentNode.replaceChild(\n              dragment,\n              layoutPNode.exportSchema(),\n              // 避免生成新的 nodeId\n              { reserveSchemaNodeId: true },\n            );\n          }, 1);\n        },\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/form/snippets.ts",
    "content": "export default [\n  {\n    \"title\": \"表单容器\",\n    \"screenshot\": \"https://alifd.alicdn.com/fusion-cool/icons/icon-antd/form-1.png\",\n    \"schema\": {\n      \"componentName\": \"Form\",\n      \"props\": {\n        \"labelCol\": {\n          \"span\": 6\n        },\n        \"wrapperCol\": {\n          \"span\": 14\n        },\n        \"onValuesChange\": {\n          \"type\": \"JSFunction\",\n          \"value\": \"function onValuesChange(changedValues, allValues) {\\n  console.log('onValuesChange', changedValues, allValues);\\n}\"\n        },\n        \"onFinish\": {\n          \"type\": \"JSFunction\",\n          \"value\": \"function onFinish(values) {\\n  console.log('onFinish', values);\\n}\"\n        },\n        \"onFinishFailed\": {\n          \"type\": \"JSFunction\",\n          \"value\": \"function onFinishFailed({ values, errorFields, outOfDate }) {\\n  console.log('onFinishFailed', values, errorFields, outOfDate);\\n}\"\n        },\n        \"name\": \"basic\"\n      },\n      \"children\": [\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": true,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"name\": \"a\",\n            \"requiredobj\": {\n              \"required\": true,\n              \"message\": \"必填\"\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            }\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Input\",\n              \"props\": {\n                \"placeholder\": \"请输入\",\n                \"bordered\": true,\n                \"disabled\": false,\n                \"size\": \"middle\"\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            },\n            \"name\": \"b\"\n          },\n          \"children\": [\n            {\n              \"componentName\": \"InputNumber\",\n              \"props\": {\n                \"placeholder\": \"请输入\",\n                \"autoFocus\": false,\n                \"disabled\": false,\n                \"controls\": true,\n                \"bordered\": true,\n                \"size\": \"middle\"\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            },\n            \"name\": \"c\"\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Input.Password\",\n              \"props\": {\n                \"bordered\": true,\n                \"disabled\": false,\n                \"visibilityToggle\": true,\n                \"placeholder\": \"请输入\",\n                \"size\": \"middle\"\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            },\n            \"name\": \"d\"\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Input.TextArea\",\n              \"props\": {\n                \"autoSize\": {\n                  \"minRows\": 3,\n                  \"maxRows\": 3\n                },\n                \"placeholder\": \"请输入\",\n                \"bordered\": true,\n                \"disabled\": false,\n                \"showCount\": false,\n                \"size\": \"middle\"\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"name\": \"e\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            }\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Select\",\n              \"props\": {\n                \"style\": {\n                  \"width\": 200\n                },\n                \"options\": [\n                  {\n                    \"label\": \"A\",\n                    \"value\": \"A\"\n                  },\n                  {\n                    \"label\": \"B\",\n                    \"value\": \"B\"\n                  },\n                  {\n                    \"label\": \"C\",\n                    \"value\": \"C\"\n                  }\n                ],\n                \"allowClear\": false,\n                \"autoFocus\": false,\n                \"defaultActiveFirstOption\": true,\n                \"disabled\": false,\n                \"labelInValue\": false,\n                \"showSearch\": false,\n                \"size\": \"middle\",\n                \"loading\": false,\n                \"bordered\": true,\n                \"filterOption\": true,\n                \"optionFilterProp\": \"value\",\n                \"tokenSeparators\": []\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            },\n            \"name\": \"f\"\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Slider\",\n              \"props\": {\n                \"defaultValue\": 30,\n                \"range\": false,\n                \"disabled\": false,\n                \"dots\": false,\n                \"reverse\": false,\n                \"vertical\": false\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"name\": \"g\",\n            \"initialValue\": \"A\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            }\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Checkbox.Group\",\n              \"props\": {\n                \"options\": [\n                  {\n                    \"label\": \"A\",\n                    \"value\": \"A\"\n                  },\n                  {\n                    \"label\": \"B\",\n                    \"value\": \"B\"\n                  },\n                  {\n                    \"label\": \"C\",\n                    \"value\": \"C\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"checked\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            },\n            \"name\": \"i\"\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Switch\",\n              \"props\": {\n                \"defaultChecked\": false,\n                \"autoFocus\": false,\n                \"disabled\": false,\n                \"loading\": false,\n                \"size\": \"default\"\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            },\n            \"name\": \"j\"\n          },\n          \"children\": [\n            {\n              \"componentName\": \"TimePicker\",\n              \"props\": {\n                \"allowClear\": true,\n                \"autoFocus\": false,\n                \"bordered\": true,\n                \"disabled\": false,\n                \"hideDisabledOptions\": false,\n                \"inputReadOnly\": false,\n                \"use12Hours\": false\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"label\": \"表单项\",\n            \"labelAlign\": \"right\",\n            \"colon\": true,\n            \"required\": false,\n            \"noStyle\": false,\n            \"valuePropName\": \"value\",\n            \"requiredobj\": {\n              \"required\": null,\n              \"message\": null\n            },\n            \"typeobj\": {\n              \"type\": null,\n              \"message\": null\n            },\n            \"lenobj\": {\n              \"max\": null,\n              \"min\": null,\n              \"message\": null\n            },\n            \"patternobj\": {\n              \"pattern\": null,\n              \"message\": null\n            },\n            \"name\": \"k\"\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Rate\",\n              \"props\": {\n                \"defaultValue\": 3,\n                \"allowClear\": true,\n                \"allowHalf\": false,\n                \"autoFocus\": false,\n                \"count\": 5,\n                \"disabled\": false,\n                \"tooltips\": []\n              }\n            }\n          ]\n        },\n        {\n          \"componentName\": \"Form.Item\",\n          \"props\": {\n            \"wrapperCol\": {\n              \"offset\": 6\n            }\n          },\n          \"children\": [\n            {\n              \"componentName\": \"Button\",\n              \"props\": {\n                \"type\": \"primary\",\n                \"children\": \"提交\",\n                \"htmlType\": \"submit\"\n              }\n            },\n            {\n              \"componentName\": \"Button\",\n              \"props\": {\n                \"style\": {\n                  \"marginLeft\": 20\n                },\n                \"children\": \"取消\"\n              }\n            }\n          ]\n        }\n      ]\n    }\n  }\n]\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/form.item/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Form.Item',\n  title: '表单项',\n  category: '表单',\n  props: [\n    {\n      name: 'name',\n      title: { label: '字段名', tip: '字段名' },\n      isRequired: true,\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'label',\n      title: { label: '标签', tip: '标签的文本' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'labelAlign',\n      title: { label: '标签对齐', tip: '标签文本对齐方式' },\n      propType: { type: 'oneOf', value: ['left', 'right'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '左',\n              value: 'left',\n            },\n            {\n              title: '右',\n              value: 'right',\n            },\n          ],\n        },\n      },\n      defaultValue: 'right',\n    },\n    {\n      name: 'colon',\n      title: {\n        label: '显示冒号',\n        tip: '配合 label 属性使用，表示是否显示 label 后面的冒号',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'extra',\n      title: {\n        label: '提示信息',\n        tip: '额外的提示信息，和 help 类似，当需要错误信息和提示文案同时出现时，可以使用这个。',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'tooltip',\n      title: {\n        label: '标签提示信息',\n        tip: '标签提示信息，当需要对标签进行解释时，可以使用这个。',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'required',\n      title: {\n        label: '必填标记',\n        tip: '必填样式设置。如不设置，则会根据校验规则自动生成',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    // {\n    //   name: 'hasFeedback',\n    //   title: {\n    //     label: '校验状态图标',\n    //     tip:\n    //       '配合 validateStatus 属性使用，展示校验状态图标，建议只配合 Input 组件使用',\n    //   },\n    //   propType: 'bool',\n    //   defaultValue: false,\n    // },\n    {\n      name: 'initialValue',\n      title: {\n        label: '默认值',\n        tip: '设置子元素默认值，如果与 Form 的 initialValues 冲突则以 Form 为准',\n      },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'noStyle',\n      title: {\n        label: '隐藏标签',\n        tip: '为 true 时不带样式，作为纯字段控件使用',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'valuePropName',\n      title: {\n        label: '子组件值字段',\n        tip: `子节点的值的字段，如 Switch 的是 'checked'`,\n      },\n      propType: 'string',\n      defaultValue: 'value',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'getValueFromEvent',\n      title: {\n        label: 'event转换器',\n        tip: `设置如何将 event 的值转换成字段值，如将上传组件的fileList作为value值传出`,\n      },\n      propType: 'func',\n    },\n    {\n      type: 'group',\n      title: '布局',\n      display: 'accordion',\n      items: [\n        {\n          name: 'labelCol',\n          title: '标签栅格布局设置',\n          display: 'inline',\n          setter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'span',\n                    title: '宽度',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                  {\n                    name: 'offset',\n                    title: '偏移',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n          },\n          description:\n            'label 标签布局，同 `<Col>` 组件，设置 span offset 值，如 {span: 8, offset: 16}，该项仅在垂直表单有效',\n        },\n        {\n          name: 'wrapperCol',\n          title: '内容栅格布局设置',\n          display: 'inline',\n          setter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'span',\n                    title: '宽度',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                  {\n                    name: 'offset',\n                    title: '偏移',\n                    setter: {\n                      componentName: 'NumberSetter',\n                      props: {\n                        min: 0,\n                        max: 24,\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n          },\n          description: '需要为输入控件设置布局样式时，使用该属性，用法同 labelCol',\n        },\n      ],\n    },\n    {\n      name: 'requiredobj',\n      title: { label: '必填设置', tip: '必填设置' },\n      propType: {\n        type: 'shape',\n        value: [\n          {\n            name: 'required',\n            title: '是否必填',\n            propType: 'bool',\n            setter: 'BoolSetter',\n            supportVariable: true,\n            extraProps: {\n              setValue(target: any, value: boolean) {\n                // 同步 必填标记\n                target.parent.parent.setPropValue('required', value);\n              }\n            }\n          },\n          {\n            name: 'message',\n            title: '错误信息提示',\n            propType: 'string',\n            setter: 'StringSetter',\n            supportVariable: true\n          },\n        ],\n      },\n    },\n    {\n      name: 'typeobj',\n      title: { label: '输入类型设置', tip: '输入类型设置' },\n      propType: {\n        type: 'shape',\n        value: [\n          {\n            name: 'type',\n            title: '输入类型',\n            setter: {\n              componentName: 'SelectSetter',\n              props: {\n                options: [\n                  {\n                    title: '字符串',\n                    value: 'string',\n                  },\n                  // {\n                  //   title: '纯数字',\n                  //   value: 'number',\n                  // },\n                  {\n                    title: '邮箱',\n                    value: 'email',\n                  },\n                  {\n                    title: '网址',\n                    value: 'url',\n                  },\n                ],\n              },\n            },\n            propType: {\n              type: 'oneOf',\n              value: ['string', 'number', 'email', 'url'],\n            },\n          },\n          { name: 'message', title: '错误信息提示', propType: 'string' },\n        ],\n      },\n    },\n    {\n      name: 'lenobj',\n      title: { label: '长度校验设置', tip: '长度校验设置' },\n      propType: {\n        type: 'shape',\n        value: [\n          // { name: 'len', title: '固定长度', propType: 'string' },\n          { name: 'max', title: '最大长度', propType: 'number' },\n          { name: 'min', title: '最小长度', propType: 'number' },\n          { name: 'message', title: '错误信息提示', propType: 'string' },\n        ],\n      },\n    },\n    {\n      name: 'patternobj',\n      title: { label: '正则设置', tip: '正则设置' },\n      propType: {\n        type: 'shape',\n        value: [\n          { name: 'pattern', title: '正则', propType: 'string' },\n          { name: 'message', title: '错误信息提示', propType: 'string' },\n        ],\n      },\n    },\n    {\n      name: 'validator',\n      title: {\n        label: '自定义校验函数',\n        tip: '自定义校验，接收 Promise 作为返回值',\n      },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: { childWhitelist: [], parentWhitelist: [] },\n    },\n    supports: { style: true },\n    advanced: {\n      callbacks: {\n        onNodeRemove: (removedNode, currentNode) => {\n          if (!removedNode || !currentNode) {\n            return;\n          }\n          const { children } = currentNode;\n          // 若无children,则说明当前P组件内已为空,需要删除P组件本身\n          if (children && children.length === 0) {\n            currentNode.remove();\n          }\n        },\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/form.item/snippets.ts",
    "content": "export default [\n  {\n    title: '表单项',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/form-item-1.jpg',\n    schema: {\n      componentName: 'Form.Item',\n      props: {\n        label: '表单项',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/form.list/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  componentName: 'Form.List',\n  title: '表单列表',\n  category: '表单',\n  snippets,\n  props: [\n    {\n      name: 'name',\n      title: { label: '字段名', tip: '字段名' },\n      isRequired: true,\n      propType: 'string',\n    },\n    {\n      name: 'initialValue',\n      title: {\n        label: '默认值',\n        tip: '设置子元素默认值，如果与 Form 的 initialValues 冲突则以 Form 为准',\n      },\n      propType: 'object',\n      setter: 'JsonSetter',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    supports: { className: true, style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/form.list/snippets.ts",
    "content": "export default [\n  {\n    title: '表单列表',\n    // TODO: 换成国内OSS地址\n    screenshot: 'https://user-images.githubusercontent.com/5419886/221425341-e982c944-8af4-4bad-9c17-1b2fd3fda835.png',\n    schema: {\n      componentName: 'Form.List',\n      props: {},\n    }\n  }\n]\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/grid.col/meta.ts",
    "content": "import snippets from './snippets';\n\nfunction clamp(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\n\nexport default {\n  snippets,\n  componentName: 'Col',\n  title: '栅格-列',\n  props: [\n    {\n      name: 'span',\n      title: { label: '占位格数', tip: '栅格占位格数' },\n      propType: 'number',\n      setter: {\n        componentName: 'NumberSetter',\n        props: {\n          min: 0,\n          max: 24,\n        },\n      },\n    },\n    {\n      name: 'order',\n      title: { label: '栅格顺序', tip: '栅格顺序' },\n      propType: 'number',\n    },\n    {\n      name: 'pull',\n      title: { label: '右侧偏移', tip: '栅格往右移动格数' },\n      propType: 'number',\n      setter: {\n        componentName: 'NumberSetter',\n        props: {\n          min: 0,\n          max: 24,\n        },\n      },\n    },\n    {\n      name: 'push',\n      title: { label: '左侧偏移', tip: '栅格往左移动格数' },\n      propType: 'number',\n      setter: {\n        componentName: 'NumberSetter',\n        props: {\n          min: 0,\n          max: 24,\n        },\n      },\n    },\n  ],\n  configure: {\n    component: { isContainer: true, nestingRule: { parentWhitelist: ['Row'] } },\n    supports: { style: true },\n    advanced: {\n      getResizingHandlers: () => {\n        return ['e'];\n      },\n      callbacks: {\n        onResizeStart: (e, currentNode) => {\n          const parent = currentNode.parent;\n          if (parent) {\n            const parentNode = parent.getDOMNode();\n            if (parentNode) {\n              currentNode.parentRect = parentNode.getBoundingClientRect();\n            }\n          }\n          currentNode.beforeSpan = currentNode.getPropValue('span') || 24;\n          currentNode.startRect = currentNode.getRect();\n        },\n        onResize: (e, currentNode) => {\n          const { deltaX } = e;\n          const startWidth = currentNode.startRect\n            ? currentNode.startRect.width\n            : currentNode.beforeSpan * (currentNode.parentRect.width / 24);\n          let width = startWidth + deltaX;\n          if (!currentNode.startRect) {\n            currentNode.startRect = { width };\n          }\n          width = clamp(width, 0, currentNode.parentRect.width);\n          const allowMoveX = Math.round(width - startWidth); // 实际被允许的x轴移动\n          currentNode.moveColumn = Math.round(allowMoveX / (currentNode.parentRect.width / 24)); // 计算移动距离所占的列\n          if (allowMoveX > 0) {\n            currentNode.moveColumn++;\n          } else {\n            currentNode.moveColumn--;\n          }\n          currentNode.targetColumn = clamp(currentNode.beforeSpan + currentNode.moveColumn, 1, 24);\n          // currentNode.setPropValue('span', currentNode.targetColumn);\n          const dom = currentNode.getDOMNode();\n          dom.style.width = `${Math.round(width)}px`;\n          dom.style.flex = 'none';\n          dom.style.maxWidth = '100%';\n        },\n        onResizeEnd: (e, currentNode) => {\n          currentNode.getDOMNode().style.cssText = '';\n          currentNode.targetColumn = clamp(currentNode.targetColumn, 1, 24);\n          currentNode.setPropValue('span', currentNode.targetColumn);\n        },\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/grid.col/snippets.ts",
    "content": "export default [];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/grid.row/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Row',\n  title: '栅格-行',\n  category: '布局',\n  props: [\n    {\n      name: 'align',\n      title: { label: '垂直对齐方式', tip: '垂直对齐方式' },\n      propType: { type: 'oneOf', value: ['top', 'middle', 'bottom'] },\n    },\n    {\n      name: 'h-gutter',\n      title: {\n        label: '水平间隔',\n        tip: '栅格水平间隔，单位为像素(px)',\n      },\n      propType: 'number',\n      setter: {\n        componentName: 'NumberSetter',\n        props: {\n          min: 0,\n        },\n      },\n      defaultValue: 0,\n      extraProps: {\n        getValue(target) {\n          const { node } = target;\n          const gutter = node.getPropValue('gutter');\n          if (typeof gutter === 'number') {\n            return gutter;\n          } else if (Array.isArray(gutter)) {\n            return gutter[0];\n          }\n          return 0;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          const gutter = node.getPropValue('gutter');\n          if (Array.isArray(gutter)) {\n            gutter[0] = value;\n            node.setPropValue('gutter', gutter);\n          } else {\n            node.setPropValue('gutter', [value, 0]);\n          }\n        },\n      },\n    },\n    {\n      name: 'v-gutter',\n      title: {\n        label: '垂直间隔',\n        tip: '栅格垂直间隔，单位为像素(px)',\n      },\n      propType: 'number',\n      setter: {\n        componentName: 'NumberSetter',\n        props: {\n          min: 0,\n        },\n      },\n      defaultValue: 0,\n      extraProps: {\n        getValue(target) {\n          const { node } = target;\n          const gutter = node.getPropValue('gutter');\n          if (typeof gutter === 'number') {\n            return 0;\n          } else if (Array.isArray(gutter)) {\n            return gutter[1];\n          }\n          return 0;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          const gutter = node.getPropValue('gutter');\n          if (Array.isArray(gutter)) {\n            gutter[1] = value;\n            node.setPropValue('gutter', gutter);\n          } else {\n            node.setPropValue('gutter', [gutter, value]);\n          }\n        },\n      },\n    },\n    {\n      name: 'justify',\n      title: { label: '水平排列方式', tip: '水平排列方式' },\n      propType: {\n        type: 'oneOf',\n        value: ['start', 'end', 'center', 'space-around', 'space-between'],\n      },\n    },\n    {\n      name: 'wrap',\n      title: { label: '自动换行', tip: '是否自动换行' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    component: { isContainer: true, nestingRule: { childWhitelist: ['Col'] } },\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/grid.row/snippets.ts",
    "content": "export default [\n  {\n    title: '两栏',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/1-1.png',\n    schema: {\n      componentName: 'Row',\n      props: {},\n      children: [\n        {\n          componentName: 'Col',\n          props: {\n            span: 12,\n          },\n        },\n        {\n          componentName: 'Col',\n          props: {\n            span: 12,\n          },\n        },\n      ],\n    },\n  },\n  {\n    title: '三栏',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/1-1-1.png',\n    schema: {\n      componentName: 'Row',\n      props: {},\n      children: [\n        {\n          componentName: 'Col',\n          props: {\n            span: 8,\n          },\n        },\n        {\n          componentName: 'Col',\n          props: {\n            span: 8,\n          },\n        },\n        {\n          componentName: 'Col',\n          props: {\n            span: 8,\n          },\n        },\n      ],\n    },\n  },\n  {\n    title: '四栏',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/1-1-1-1.png',\n    schema: {\n      componentName: 'Row',\n      props: {},\n      children: [\n        {\n          componentName: 'Col',\n          props: {\n            span: 6,\n          },\n        },\n        {\n          componentName: 'Col',\n          props: {\n            span: 6,\n          },\n        },\n        {\n          componentName: 'Col',\n          props: {\n            span: 6,\n          },\n        },\n        {\n          componentName: 'Col',\n          props: {\n            span: 6,\n          },\n        },\n      ],\n    },\n  },\n  {\n    title: '1:3',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/1-3.png',\n    schema: {\n      componentName: 'Row',\n      props: {},\n      children: [\n        {\n          componentName: 'Col',\n          props: {\n            span: 6,\n          },\n        },\n        {\n          componentName: 'Col',\n          props: {\n            span: 18,\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/icon/meta.ts",
    "content": "import snippets from './snippets';\nimport { AntdIconSetter } from '../_setters';\n\nexport default {\n  snippets,\n  componentName: 'Icon',\n  title: '图标',\n  category: '通用',\n  props: [\n    {\n      name: 'className',\n      title: { label: '设置图标的样式名', tip: '设置图标的样式名' },\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      title: {\n        label: '设置图标的样式，例如 `fontSize` 和 `color`',\n        tip: '设置图标的样式，例如 `fontSize` 和 `color`',\n      },\n      propType: 'object',\n    },\n    {\n      name: 'type',\n      description: '图标',\n      propType: 'string',\n      setter: AntdIconSetter,\n    },\n    {\n      name: 'size',\n      description: '大小',\n      propType: 'number',\n      defaultValue: 20,\n    },\n    {\n      name: 'color',\n      description: '颜色',\n      propType: 'string',\n      setter: 'ColorSetter',\n    },\n    {\n      name: 'rotate',\n      title: {\n        label: '旋转角度',\n        tip: '图标旋转角度',\n      },\n      propType: 'number',\n      defaultValue: 0,\n    },\n    {\n      name: 'spin',\n      title: { label: '旋转动画', tip: '是否有旋转动画' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'onClick',\n      title: { label: '点击回调', tip: '点击按钮时的回调' },\n      propType: 'func',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/icon/snippets.ts",
    "content": "export default [\n  {\n    title: '图标',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/icon-1.jpg',\n    schema: {\n      componentName: 'Icon',\n      props: {\n        type: 'SmileOutlined',\n        size: 20,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/image/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Image',\n  title: '图片',\n  category: '数据展示',\n  props: [\n    {\n      name: 'src',\n      title: { label: '图片地址', tip: '图片地址' },\n      propType: { type: 'string', isRequired: true },\n    },\n    {\n      name: 'alt',\n      title: { label: '替换文本', tip: '替换文本' },\n      propType: 'string',\n    },\n    {\n      name: 'preview',\n      title: { label: '支持预览', tip: '支持预览' },\n      defaultValue: true,\n      propType: 'bool',\n    },\n    {\n      name: 'fallback',\n      title: { label: '失败地址', tip: '加载失败容错地址' },\n      propType: 'string',\n    },\n    {\n      name: 'width',\n      title: { label: '宽度', tip: '宽度' },\n      propType: 'number',\n    },\n    {\n      name: 'height',\n      title: { label: '高度', tip: '高度' },\n      propType: 'number',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/image/snippets.ts",
    "content": "export default [\n  {\n    title: '图片',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/image-1.png',\n    schema: {\n      componentName: 'Image',\n      props: {\n        src: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n        height: 120,\n        width: 120,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Input',\n  title: '输入框',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认内容' },\n      propType: 'string',\n      setter: 'StringSetter',\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前值' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'placeholder',\n      title: { label: '占位提示', tip: '占位提示' },\n      propType: 'string',\n      defaultValue: '请输入',\n      setter: 'StringSetter'\n    },\n    // {\n    //   name: 'id',\n    //   title: { label: '输入框ID', tip: '输入框的ID' },\n    //   propType: 'string',\n    // },\n    {\n      name: 'maxLength',\n      title: { label: '最大长度', tip: '最大长度' },\n      propType: 'number',\n      setter: 'NumberSetter',\n    },\n    {\n      name: 'size',\n      title: { label: '控件大小', tip: '控件大小' },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'addonAfter',\n      title: { label: '后置标签', tip: '后置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'addonBefore',\n      title: { label: '前置标签', tip: '前置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'prefix',\n      title: { label: '前缀', tip: '前缀' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'suffix',\n      title: { label: '后缀', tip: '后缀' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'onChange',\n      title: { label: '输入框内容变化时的回调', tip: '输入框内容变化时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onPressEnter',\n      title: { label: '按下回车的回调', tip: '按下回车的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获取焦点回调', tip: '获取焦点回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      title: { label: '按键按下时的回调', tip: '按键按下时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyPress',\n      title: { label: '按键按下后的回调', tip: '按键按下之后释放之前的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyUp',\n      title: { label: '按键释放回调', tip: '按键释放之后的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点回调', tip: '失去焦点回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(event,${extParams}){\\n// 输入框内容变化时的回调\\nconsole.log('onChange',event);}\",\n        },\n        {\n          name: 'onPressEnter',\n          template:\n            \"onPressEnter(event,${extParams}){\\n// 按下回车的回调\\nconsole.log('onPressEnter',event);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(event,${extParams}){\\n// 获取焦点回调\\nconsole.log('onFocus',event);}\",\n        },\n        {\n          name: 'onKeyDown',\n          template:\n            \"onKeyDown(event,${extParams}){\\n// 按键按下时的回调\\nconsole.log('onKeyDown',event);}\",\n        },\n        {\n          name: 'onKeyPress',\n          template:\n            \"onKeyPress(event,${extParams}){\\n// 按键按下后的回调\\nconsole.log('onKeyPress',event);}\",\n        },\n        {\n          name: 'onKeyUp',\n          template: \"onKeyUp(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onKeyUp',event);}\",\n        },\n        {\n          name: 'onBlur',\n          template: \"onBlur(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onBlur',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input/snippets.ts",
    "content": "export default [\n  {\n    title: '输入框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/input-1.png',\n    schema: {\n      componentName: 'Input',\n      props: {\n        placeholder: '请输入',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input-number/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'InputNumber',\n  title: '数字输入框',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认值' },\n      propType: 'number',\n      setter: 'NumberSetter',\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前值' },\n      propType: 'number',\n      setter: 'NumberSetter',\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'placeholder',\n      title: { label: '占位提示', tip: '占位提示' },\n      propType: 'string',\n      defaultValue: '请输入',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'controls',\n      title: { label: '是否显示增减按钮', tip: '是否显示增减按钮' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'addonAfter',\n      title: { label: '后置标签', tip: '后置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'addonBefore',\n      title: { label: '前置标签', tip: '前置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    // {\n    //   name: 'formatter',\n    //   title: {\n    //     label: '指定输入框展示值的格式',\n    //     tip: '指定输入框展示值的格式',\n    //   },\n    //   propType: 'func',\n    // },\n    {\n      name: 'max',\n      title: { label: '最大值', tip: '最大值' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'min',\n      title: { label: '最小值', tip: '最小值' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'precision',\n      title: { label: '数值精度', tip: '数值精度' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    // {\n    //   name: 'decimalSeparator',\n    //   title: { label: '小数点', tip: '小数点' },\n    //   propType: 'string',\n    // },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '输入框大小' },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'step',\n      title: { label: '单步长', tip: '每次改变步数' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'onChange',\n      title: { label: '变化回调', tip: '变化回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onPressEnter',\n      title: { label: '按下回车的回调', tip: '按下回车的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获取焦点回调', tip: '获取焦点回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      title: { label: '按键按下时的回调', tip: '按键按下时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyPress',\n      title: { label: '按键按下后的回调', tip: '按键按下之后释放之前的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyUp',\n      title: { label: '按键释放回调', tip: '按键释放之后的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点回调', tip: '失去焦点回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template: \"onChange(value,${extParams}){\\n// 变化回调\\nconsole.log('onChange',value);}\",\n        },\n        {\n          name: 'onPressEnter',\n          template:\n            \"onPressEnter(event,${extParams}){\\n// 按下回车的回调\\nconsole.log('onPressEnter',event);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(event,${extParams}){\\n// 获取焦点回调\\nconsole.log('onFocus',event);}\",\n        },\n        {\n          name: 'onKeyDown',\n          template:\n            \"onKeyDown(event,${extParams}){\\n// 按键按下时的回调\\nconsole.log('onKeyDown',event);}\",\n        },\n        {\n          name: 'onKeyPress',\n          template:\n            \"onKeyPress(event,${extParams}){\\n// 按键按下后的回调\\nconsole.log('onKeyPress',event);}\",\n        },\n        {\n          name: 'onKeyUp',\n          template: \"onKeyUp(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onKeyUp',event);}\",\n        },\n        {\n          name: 'onBlur',\n          template: \"onBlur(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onBlur',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input-number/snippets.ts",
    "content": "export default [\n  {\n    title: '数字输入框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/input-number-1.png',\n    schema: {\n      componentName: 'InputNumber',\n      props: {\n        placeholder: '请输入',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.group/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Input.Group',\n  title: '输入框组合',\n  category: '表单',\n  props: [\n    {\n      name: 'compact',\n      title: { label: '紧凑模式', tip: '是否用紧凑模式' },\n      propType: 'bool',\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '尺寸大小' },\n      propType: { type: 'oneOf', value: ['large', 'default', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'default',\n    },\n  ],\n  configure: { component: { isContainer: true }, supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.group/snippets.ts",
    "content": "export default [\n  {\n    title: '输入框组合',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/input-group-1.jpg',\n    schema: {\n      componentName: 'Input.Group',\n      props: {},\n      children: [\n        {\n          componentName: 'Input',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n        {\n          componentName: 'Input',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.password/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Input.Password',\n  title: '密码框',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认内容' },\n      propType: 'string',\n      setter: 'StringSetter',\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前值' },\n      propType: 'string',\n      setter: 'StringSetter',\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'visibilityToggle',\n      title: { label: '切换按钮', tip: '是否显示切换按钮' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'placeholder',\n      title: { label: '占位提示', tip: '占位提示' },\n      propType: 'string',\n      defaultValue: '请输入',\n      setter: 'StringSetter'\n    },\n    // {\n    //   name: 'id',\n    //   title: { label: '输入框ID', tip: '输入框的ID' },\n    //   propType: 'string',\n    // },\n    {\n      name: 'maxLength',\n      title: { label: '最大长度', tip: '最大长度' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'size',\n      title: { label: '控件大小', tip: '控件大小' },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'addonAfter',\n      title: { label: '后置标签', tip: '后置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'addonBefore',\n      title: { label: '前置标签', tip: '前置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'prefix',\n      title: { label: '前缀', tip: '前缀' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'onChange',\n      title: { label: '输入框内容变化时的回调', tip: '输入框内容变化时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onPressEnter',\n      title: { label: '按下回车的回调', tip: '按下回车的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获取焦点回调', tip: '获取焦点回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      title: { label: '按键按下时的回调', tip: '按键按下时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyPress',\n      title: { label: '按键按下后的回调', tip: '按键按下之后释放之前的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyUp',\n      title: { label: '按键释放回调', tip: '按键释放之后的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点回调', tip: '失去焦点回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(event,${extParams}){\\n// 输入框内容变化时的回调\\nconsole.log('onChange',event);}\",\n        },\n        {\n          name: 'onPressEnter',\n          template:\n            \"onPressEnter(event,${extParams}){\\n// 按下回车的回调\\nconsole.log('onPressEnter',event);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(event,${extParams}){\\n// 获取焦点回调\\nconsole.log('onFocus',event);}\",\n        },\n        {\n          name: 'onKeyDown',\n          template:\n            \"onKeyDown(event,${extParams}){\\n// 按键按下时的回调\\nconsole.log('onKeyDown',event);}\",\n        },\n        {\n          name: 'onKeyPress',\n          template:\n            \"onKeyPress(event,${extParams}){\\n// 按键按下后的回调\\nconsole.log('onKeyPress',event);}\",\n        },\n        {\n          name: 'onKeyUp',\n          template: \"onKeyUp(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onKeyUp',event);}\",\n        },\n        {\n          name: 'onBlur',\n          template: \"onBlur(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onBlur',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.password/snippets.ts",
    "content": "export default [\n  {\n    title: '密码框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/input-password-1.png',\n    schema: {\n      componentName: 'Input.Password',\n      props: {\n        // defaultValue: '123456',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.search/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Input.Search',\n  title: '搜索框',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认值' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前值' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'loading',\n      title: { label: '加载状态', tip: 'loading' },\n      propType: 'bool',\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'placeholder',\n      title: { label: '占位提示', tip: '占位提示' },\n      propType: 'string',\n      defaultValue: '请输入',\n      setter: 'StringSetter'\n    },\n    // {\n    //   name: 'id',\n    //   title: { label: '输入框ID', tip: '输入框的ID' },\n    //   propType: 'string',\n    // },\n    {\n      name: 'size',\n      title: { label: '控件大小', tip: '控件大小' },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'enterButton',\n      title: {\n        label: '确认按钮',\n        tip: '是否有确认按钮，可设为按钮文字。该属性会与 addonAfter 冲突。',\n      },\n      propType: { type: 'oneOfType', value: ['bool', 'node'] },\n      defaultValue: false,\n    },\n    {\n      name: 'addonAfter',\n      title: { label: '后置标签', tip: '后置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'addonBefore',\n      title: { label: '前置标签', tip: '前置标签' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'prefix',\n      title: { label: '前缀', tip: '前缀' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'suffix',\n      title: { label: '后缀', tip: '后缀' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'onChange',\n      title: { label: '输入框内容变化时的回调', tip: '输入框内容变化时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onPressEnter',\n      title: { label: '按下回车的回调', tip: '按下回车的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onSearch',\n      title: {\n        label: '点击搜索或按下回车键时的回调',\n        tip: '点击搜索或按下回车键时的回调',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获取焦点回调', tip: '获取焦点回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      title: { label: '按键按下时的回调', tip: '按键按下时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyPress',\n      title: { label: '按键按下后的回调', tip: '按键按下之后释放之前的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyUp',\n      title: { label: '按键释放回调', tip: '按键释放之后的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点回调', tip: '失去焦点回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(event,${extParams}){\\n// 输入框内容变化时的回调\\nconsole.log('onChange',event);}\",\n        },\n        {\n          name: 'onPressEnter',\n          template:\n            \"onPressEnter(event,${extParams}){\\n// 按下回车的回调\\nconsole.log('onPressEnter',event);}\",\n        },\n        {\n          name: 'onSearch',\n          template:\n            \"onSearch(value,event,${extParams}){\\n// 点击搜索图标、清除图标，或按下回车键时的回调\\nconsole.log('onSearch',value,event);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(event,${extParams}){\\n// 获取焦点回调\\nconsole.log('onFocus',event);}\",\n        },\n        {\n          name: 'onKeyDown',\n          template:\n            \"onKeyDown(event,${extParams}){\\n// 按键按下时的回调\\nconsole.log('onKeyDown',event);}\",\n        },\n        {\n          name: 'onKeyPress',\n          template:\n            \"onKeyPress(event,${extParams}){\\n// 按键按下后的回调\\nconsole.log('onKeyPress',event);}\",\n        },\n        {\n          name: 'onKeyUp',\n          template: \"onKeyUp(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onKeyUp',event);}\",\n        },\n        {\n          name: 'onBlur',\n          template: \"onBlur(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onBlur',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.search/snippets.ts",
    "content": "export default [\n  {\n    title: '搜索框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/input-search-1.png',\n    schema: {\n      componentName: 'Input.Search',\n      props: {\n        placeholder: '搜索...',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.text-area/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Input.TextArea',\n  title: '长文本',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认内容' },\n      propType: 'string',\n      setter: 'TextAreaSetter',\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前值' },\n      propType: 'string',\n      setter: 'TextAreaSetter',\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'placeholder',\n      title: { label: '占位提示', tip: '占位提示' },\n      propType: 'string',\n      defaultValue: '请输入',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'showCount',\n      title: { label: '展示字数', tip: '是否展示字数' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'id',\n      title: { label: '输入框ID', tip: '输入框的ID' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'maxLength',\n      title: { label: '最大长度', tip: '最大长度' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'size',\n      title: { label: '控件大小', tip: '控件大小' },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'autoSize',\n      title: { label: '高度自适应设置', tip: '高度自适应设置' },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'bool',\n          {\n            type: 'shape',\n            value: [\n              {\n                name: 'minRows',\n                title: '最小行数',\n                setter: 'NumberSetter',\n                defaultValue: 3,\n              },\n              {\n                name: 'maxRows',\n                title: '最大行数',\n                setter: 'NumberSetter',\n                defaultValue: 3,\n              },\n            ],\n          },\n        ],\n      },\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      title: { label: '输入框内容变化时的回调', tip: '输入框内容变化时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onPressEnter',\n      title: { label: '按下回车的回调', tip: '按下回车的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onResize',\n      title: { label: 'resize 回调', tip: 'resize 回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获取焦点回调', tip: '获取焦点回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      title: { label: '按键按下时的回调', tip: '按键按下时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyPress',\n      title: { label: '按键按下后的回调', tip: '按键按下之后释放之前的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyUp',\n      title: { label: '按键释放回调', tip: '按键释放之后的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点回调', tip: '失去焦点回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(event,${extParams}){\\n// 输入框内容变化时的回调\\nconsole.log('onChange',event);}\",\n        },\n        {\n          name: 'onPressEnter',\n          template:\n            \"onPressEnter(event,${extParams}){\\n// 按下回车的回调\\nconsole.log('onPressEnter',event);}\",\n        },\n        {\n          name: 'onResize',\n          template:\n            \"onResize({width,height},${extParams}){\\n// resize 回调\\nconsole.log('onResize',width,height);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(event,${extParams}){\\n// 获取焦点回调\\nconsole.log('onFocus',event);}\",\n        },\n        {\n          name: 'onKeyDown',\n          template:\n            \"onKeyDown(event,${extParams}){\\n// 按键按下时的回调\\nconsole.log('onKeyDown',event);}\",\n        },\n        {\n          name: 'onKeyPress',\n          template:\n            \"onKeyPress(event,${extParams}){\\n// 按键按下后的回调\\nconsole.log('onKeyPress',event);}\",\n        },\n        {\n          name: 'onKeyUp',\n          template: \"onKeyUp(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onKeyUp',event);}\",\n        },\n        {\n          name: 'onBlur',\n          template: \"onBlur(event,${extParams}){\\n// 按键释放回调\\nconsole.log('onBlur',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/input.text-area/snippets.ts",
    "content": "export default [\n  {\n    title: '长文本',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/input-text-area-1.png',\n    schema: {\n      componentName: 'Input.TextArea',\n      props: {\n        autoSize: {\n          minRows: 3,\n          maxRows: 3,\n        },\n        placeholder: '请输入',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/list/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'List',\n  title: '列表',\n  category: '数据展示',\n  props: [\n    {\n      title: '数据源',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'dataSource',\n          title: { label: '列表数据源', tip: '列表数据源' },\n          propType: { type: 'arrayOf', value: 'any' },\n          setter: ['JsonSetter', 'VariableSetter'],\n        },\n        {\n          name: 'loading',\n          title: {\n            label: '是否加载中',\n            tip: 'loading | 当卡片内容还在加载中时，可以用 loading 展示一个占位',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: ['BoolSetter', 'VariableSetter'],\n        },\n        {\n          name: 'rowKey',\n          title: {\n            label: '行Key',\n            tip: 'rowKey | 当 renderItem 自定义渲染列表项有效时，自定义每一行的 key 的获取方式',\n          },\n          propType: {\n            type: 'oneOfType',\n            value: ['string', 'function'],\n          },\n          defaultValue: 'id',\n          setter: [\n            'StringSetter',\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'rowKey(item,${extParams}){\\n// 自定义每一行的 key\\nreturn `key-${item.id}`;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    {\n      title: '外观',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'itemLayout',\n          title: {\n            label: '尺寸',\n            tip: 'itemLayout  | 设置 List.Item 布局, 设置成 vertical 则竖直样式显示, 默认横排',\n          },\n          propType: { type: 'oneOf', value: ['horizontal', 'vertical'] },\n          defaultValue: 'horizontal',\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '水平',\n                    value: 'horizontal',\n                  },\n                  {\n                    title: '垂直',\n                    value: 'vertical',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'size',\n          title: { label: '尺寸', tip: 'size  | 列表的尺寸' },\n          propType: { type: 'oneOf', value: ['default', 'large', 'small'] },\n          defaultValue: 'default',\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '默认',\n                    value: 'default',\n                  },\n                  {\n                    title: '大',\n                    value: 'large',\n                  },\n                  {\n                    title: '小',\n                    value: 'small',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'bordered',\n          title: { label: '显示边框', tip: 'bordered | 是否展示边框' },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'split',\n          title: { label: '展示分割线', tip: 'split | 是否展示分割线' },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n      ],\n    },\n    {\n      title: '栅格',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'gridEnable',\n          title: { label: '启用栅格', tip: 'grid | 是否启用栅格' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          extraProps: {\n            setValue(target, value) {\n              if (value === false) {\n                const { node } = target;\n                node.setPropValue('grid', false);\n              }\n            },\n          },\n        },\n        {\n          name: 'grid.column',\n          title: { label: '列数', tip: 'grid.column | 栅格的列数' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          defaultValue: 4,\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"gridEnable\")',\n          },\n        },\n        {\n          name: 'grid.gutter',\n          title: { label: '间隔', tip: 'grid.gutter | 栅格的间隔' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          defaultValue: 0,\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"gridEnable\")',\n          },\n        },\n      ],\n    },\n    {\n      title: '分页',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'pagination',\n          title: { label: '显示分页', tip: 'pagination | 显示分页' },\n          propType: 'object',\n          setter: 'BoolSetter',\n          extraProps: {\n            setValue: (target, value) => {\n              if (value) {\n                target.parent.setPropValue('pagination', {\n                  pageSize: 5,\n                });\n              }\n            },\n          },\n        },\n        {\n          name: 'pagination.pageSize',\n          title: { label: '每页条数', tip: 'pagination.pageSize | 每页条数' },\n          setter: 'NumberSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.total',\n          title: { label: '数据总数', tip: 'pagination.total | 数据总数' },\n          setter: 'NumberSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        // {\n        //   name: 'pagination.defaultCurrent',\n        //   title: {\n        //     label: '默认当前页',\n        //     tip: 'pagination.defaultCurrent | 默认的当前页数',\n        //   },\n        //   setter: [\n        //     {\n        //       componentName: 'NumberSetter',\n        //       props: {\n        //         initialValue: 1,\n        //       },\n        //     },\n        //     'VariableSetter',\n        //   ],\n        //   condition: {\n        //     type: 'JSFunction',\n        //     value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n        //   },\n        // },\n        {\n          name: 'pagination.current',\n          title: { label: '当前页数', tip: 'pagination.current | 当前页数' },\n          setter: 'NumberSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.showTotal',\n          title: {\n            label: '显示总数',\n            tip: 'pagination.showTotal | 用于显示数据总量和当前数据顺序',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'showTotal(total,range,${extParams}){\\n// 用于格式化显示表格数据总量\\nreturn `共 ${total} 条`;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.showSizeChanger',\n          title: {\n            label: '页数切换',\n            tip: 'pagination.showSizeChanger | 是否展示 pageSize 切换器',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.showQuickJumper',\n          title: {\n            label: '快速跳转',\n            tip: 'pagination.showQuickJumper | 是否可以快速跳转至某页',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.simple',\n          title: { label: '简单分页', tip: 'pagination.simple | 简单分页' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.size',\n          title: { label: '分页尺寸', tip: 'pagination.size | 分页尺寸' },\n          propType: {\n            type: 'oneOf',\n            value: ['default', 'small'],\n          },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '默认',\n                    value: 'default',\n                  },\n                  {\n                    title: '小',\n                    value: 'small',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n          defaultValue: 'default',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.position',\n          title: { label: '分页位置', tip: 'pagination.position | 分页位置' },\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '上',\n                  value: 'top',\n                },\n                {\n                  title: '下',\n                  value: 'bottom',\n                },\n                {\n                  title: '上下',\n                  value: 'both',\n                },\n              ],\n            },\n            initialValue: 'bottomRight',\n          },\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n      ],\n    },\n    {\n      title: '扩展',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'renderItem',\n          title: {\n            label: '渲染函数',\n            tip: 'renderItem | 当使用 dataSource 时，可以用 `renderItem` 自定义渲染列表项',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'SlotSetter',\n              title: '渲染函数插槽',\n              initialValue: {\n                type: 'JSSlot',\n                params: ['item'],\n                value: [\n                  {\n                    componentName: 'List.Item',\n                    props: {},\n                    children: {\n                      componentName: 'Typography.Text',\n                      props: {\n                        children: {\n                          type: 'JSExpression',\n                          value: 'this.item.text',\n                        },\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template: 'renderItem(item,${extParams}){\\n// 自定义渲染列表项\\nreturn `item`;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'header',\n          title: {\n            label: '列表头部',\n            tip: 'header | 列表头部',\n          },\n          propType: 'node',\n          setter: {\n            componentName: 'SlotSetter',\n            initialValue: {\n              type: 'JSSlot',\n              value: [\n                {\n                  componentName: 'Typography.Text',\n                  props: {\n                    children: '列表头部',\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'footer',\n          title: {\n            label: '列表底部',\n            tip: 'footer | 列表底部',\n          },\n          propType: 'node',\n          setter: {\n            componentName: 'SlotSetter',\n            initialValue: {\n              type: 'JSSlot',\n              value: [\n                {\n                  componentName: 'Typography.Text',\n                  props: {\n                    children: '列表底部',\n                  },\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'loadMore',\n          title: {\n            label: '加载更多',\n            tip: 'loadMore | 加载更多',\n          },\n          propType: 'node',\n          setter: {\n            componentName: 'SlotSetter',\n            initialValue: {\n              type: 'JSSlot',\n              value: [\n                {\n                  componentName: 'Button',\n                  props: {\n                    children: 'loading more',\n                  },\n                },\n              ],\n            },\n          },\n        },\n      ],\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'pagination.onChange',\n          template: 'onChange(page,pageSize,${extParams}){\\n// 页码或 pageSize 改变的回调\\n}',\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/list/snippets.ts",
    "content": "export default [\n  {\n    title: '简单列表',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/list-1.png',\n    schema: {\n      componentName: 'List',\n      props: {\n        dataSource: [\n          {\n            id: 1,\n            text: 'Racing car sprays burning fuel into crowd.',\n          },\n          {\n            id: 2,\n            text: 'Japanese princess to wed commoner.',\n          },\n          {\n            id: 3,\n            text: 'Australian walks 100km after outback crash.',\n          },\n          {\n            id: 4,\n            text: 'Man charged over missing wedding girl.',\n          },\n          {\n            id: 5,\n            text: 'Los Angeles battles huge wildfires.',\n          },\n        ],\n        renderItem: {\n          type: 'JSSlot',\n          params: ['item'],\n          value: [\n            {\n              componentName: 'List.Item',\n              props: {},\n              children: {\n                componentName: 'Typography.Text',\n                props: {\n                  children: {\n                    type: 'JSExpression',\n                    value: 'this.item.text',\n                  },\n                },\n              },\n            },\n          ],\n        },\n        header: {\n          type: 'JSSlot',\n          value: [\n            {\n              componentName: 'Typography.Text',\n              props: {\n                children: '列表头部',\n              },\n            },\n          ],\n        },\n        footer: {\n          type: 'JSSlot',\n          value: [\n            {\n              componentName: 'Typography.Text',\n              props: {\n                children: '列表底部',\n              },\n            },\n          ],\n        },\n        itemLayout: 'horizontal',\n        size: 'default',\n        bordered: true,\n        split: true,\n        pagination: {\n          pageSize: 5,\n          total: 10,\n          current: 1,\n        },\n      },\n    },\n  },\n  {\n    title: '基础列表',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/list-1.png',\n    schema: {\n      componentName: 'List',\n      props: {\n        dataSource: [\n          {\n            id: 1,\n            title: 'Ant Design Title 1',\n            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png',\n            description:\n              'Ant Design, a design language for background applications, is refined by Ant UED Team',\n          },\n          {\n            id: 2,\n            title: 'Ant Design Title 2',\n            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png',\n            description:\n              'Ant Design, a design language for background applications, is refined by Ant UED Team',\n          },\n          {\n            id: 3,\n            title: 'Ant Design Title 3',\n            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png',\n            description:\n              'Ant Design, a design language for background applications, is refined by Ant UED Team',\n          },\n          {\n            id: 4,\n            title: 'Ant Design Title 4',\n            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png',\n            description:\n              'Ant Design, a design language for background applications, is refined by Ant UED Team',\n          },\n          {\n            id: 5,\n            title: 'Ant Design Title 5',\n            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png',\n            description:\n              'Ant Design, a design language for background applications, is refined by Ant UED Team',\n          },\n        ],\n        renderItem: {\n          type: 'JSSlot',\n          params: ['item'],\n          value: [\n            {\n              componentName: 'List.Item',\n              props: {},\n              children: {\n                componentName: 'List.Item.Meta',\n                props: {\n                  avatar: {\n                    type: 'JSSlot',\n                    value: [\n                      {\n                        componentName: 'Avatar',\n                        props: {\n                          icon: {\n                            componentName: 'Icon',\n                            props: {\n                              type: 'UserOutlined',\n                            },\n                          },\n                          src: {\n                            type: 'JSExpression',\n                            value: 'this.item.avatar',\n                          },\n                        },\n                      },\n                    ],\n                  },\n                  title: {\n                    type: 'JSSlot',\n                    value: [\n                      {\n                        componentName: 'Typography.Link',\n                        props: {\n                          children: {\n                            type: 'JSExpression',\n                            value: 'this.item.title',\n                          },\n                        },\n                      },\n                    ],\n                  },\n                  description: {\n                    type: 'JSSlot',\n                    value: [\n                      {\n                        componentName: 'Typography.Text',\n                        props: {\n                          children: {\n                            type: 'JSExpression',\n                            value: 'this.item.description',\n                          },\n                        },\n                      },\n                    ],\n                  },\n                },\n              },\n            },\n          ],\n        },\n        itemLayout: 'horizontal',\n        size: 'default',\n        bordered: true,\n        split: true,\n        pagination: {\n          pageSize: 10,\n          total: 15,\n          current: 1,\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/list.item/meta.ts",
    "content": "// FIXME: 选中tabPane点复制，会出问题，因为复制的组件key一样\n\nexport default {\n  componentName: 'List.Item',\n  title: '列表项',\n  category: '',\n  props: [\n    {\n      name: 'actions',\n      title: {\n        label: '列表操作组',\n        tip: '列表操作组',\n      },\n      propType: { type: 'arrayOf', value: 'node' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'SlotSetter',\n            title: '操作组插槽',\n            initialValue: {\n              type: 'JSSlot',\n              value: [],\n            },\n          },\n        },\n      },\n    },\n    {\n      name: 'extra',\n      title: {\n        label: '额外内容',\n        tip: '额外内容',\n      },\n      propType: 'node',\n      setter: 'SlotSetter',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['List'],\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/list.item.meta/meta.ts",
    "content": "export default {\n  componentName: 'List.Item.Meta',\n  title: '列表项内容',\n  category: '',\n  props: [\n    {\n      name: 'avatar',\n      title: {\n        label: '列表元素图标',\n        tip: '列表元素的图标',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'title',\n      title: {\n        label: '列表元素标题',\n        tip: '列表元素的标题',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'avatar',\n      title: {\n        label: '列表元素描述内容',\n        tip: '列表元素的描述内容',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n  ],\n  configure: {\n    component: {\n      nestingRule: {\n        parentWhitelist: ['List'],\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/mentions/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Mentions',\n  title: '提及',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认值' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获得焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'filterOption',\n      title: { label: '自定义过滤逻辑', tip: '自定义过滤逻辑' },\n      propType: { type: 'oneOfType', value: ['bool', 'func'] },\n    },\n    {\n      name: 'notFoundContent',\n      title: {\n        label: '空值展示',\n        tip: '当下拉列表为空时显示的内容',\n      },\n      propType: 'node',\n    },\n    {\n      name: 'placement',\n      title: { label: '弹出层展示位置', tip: '弹出层展示位置' },\n      propType: { type: 'oneOf', value: ['top', 'bottom'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '上',\n              value: 'top',\n            },\n            {\n              title: '下',\n              value: 'bottom',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'prefix',\n      title: { label: '设置触发关键字', tip: '设置触发关键字' },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', { type: 'arrayOf', value: 'string' }],\n      },\n    },\n    {\n      name: 'split',\n      title: { label: '设置选中项前后分隔符', tip: '设置选中项前后分隔符' },\n      propType: 'string',\n    },\n    {\n      name: 'validateSearch',\n      title: { label: '自定义触发验证逻辑', tip: '自定义触发验证逻辑' },\n      propType: 'func',\n    },\n    // {\n    //   name: 'value',\n    //   title: { label: '设置值', tip: '设置值' },\n    //   propType: 'string',\n    // },\n    {\n      name: 'onChange',\n      title: { label: '值改变时触发', tip: '值改变时触发' },\n      propType: 'func',\n    },\n    {\n      name: 'onSelect',\n      title: { label: '选择选项时触发', tip: '选择选项时触发' },\n      propType: 'func',\n    },\n    {\n      name: 'onSearch',\n      title: { label: '搜索时触发', tip: '搜索时触发' },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获得焦点时触发', tip: '获得焦点时触发' },\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点时触发', tip: '失去焦点时触发' },\n      propType: 'func',\n    },\n    // {\n    //   name: 'getPopupContainer',\n    //   title: {\n    //     label: '指定建议框挂载的 HTML 节点',\n    //     tip: '指定建议框挂载的 HTML 节点',\n    //   },\n    //   propType: 'func',\n    // },\n    {\n      name: 'autoSize',\n      title: {\n        label: '内容高度',\n        tip: '自适应内容高度，可设置为 true | false 或对象：{ minRows: 2, maxRows: 6 }',\n      },\n      propType: { type: 'oneOfType', value: ['bool', 'object'] },\n    },\n    {\n      name: 'onResize',\n      title: { label: 'resize 回调', tip: 'resize 回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template: \"onChange(text,${extParams}){\\n// 值改变时触发\\nconsole.log('onChange',text);}\",\n        },\n        {\n          name: 'onSelect',\n          template:\n            \"onSelect(option,prefix,${extParams}){\\n// 选择选项时触发\\nconsole.log('onSelect',option,prefix);}\",\n        },\n        {\n          name: 'onSearch',\n          template:\n            \"onSearch(text,prefix,${extParams}){\\n// 搜索时触发\\nconsole.log('onSearch',text,prefix);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(${extParams}){\\n// 获得焦点时触发\\nconsole.log('onFocus');}\",\n        },\n        {\n          name: 'onBlur',\n          template: \"onBlur(${extParams}){\\n// 失去焦点时触发\\nconsole.log('onBlur');}\",\n        },\n        {\n          name: 'onResize',\n          template:\n            \"onResize({width,height},${extParams}){\\n// resize 回调\\nconsole.log('onResize',width,height);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/mentions/snippets.ts",
    "content": "export default [\n  {\n    title: '提及',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/mentions-1.png',\n    schema: {\n      componentName: 'Mentions',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\nimport { itemsExtraProps } from './utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Menu',\n  title: '导航菜单',\n  category: '导航',\n  props: [\n    {\n      name: 'items',\n      title: '菜单项',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid(),\n                  },\n                  {\n                    name: 'children',\n                    title: '菜单名称',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'category',\n                    title: {\n                      label: '类型',\n                      tip: '菜单项类型',\n                    },\n                    propType: {\n                      type: 'oneOf',\n                      value: ['Menu.Item', 'Menu.SubMenu', 'Menu.ItemGroup'],\n                    },\n                    setter: [\n                      {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'Item',\n                              value: 'Menu.Item',\n                            },\n                            {\n                              title: 'SubMenu',\n                              value: 'Menu.SubMenu',\n                            },\n                            {\n                              title: 'ItemGroup',\n                              value: 'Menu.ItemGroup',\n                            },\n                          ],\n                        },\n                      },\n                      'VariableSetter',\n                    ],\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: 'item-' + uuid(),\n                category: 'Menu.Item',\n                children: '菜单名',\n              };\n            },\n          },\n        },\n      },\n      extraProps: itemsExtraProps,\n    },\n    {\n      name: 'defaultOpenKeys',\n      title: {\n        label: '初始展开菜单项',\n        tip: '初始展开的 SubMenu 菜单项 key 数组',\n      },\n      propType: { type: 'arrayOf', value: 'string' },\n    },\n    {\n      name: 'defaultSelectedKeys',\n      title: { label: '初始选中的菜单项', tip: '初始选中的菜单项 key 数组' },\n      propType: { type: 'arrayOf', value: 'string' },\n    },\n    {\n      name: 'forceSubMenuRender',\n      title: {\n        label: '子菜单预渲染',\n        tip: '在子菜单展示之前就渲染进 DOM',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'inlineCollapsed',\n      title: { label: '是否收起', tip: 'inline 时菜单是否收起状态' },\n      propType: 'bool',\n    },\n    {\n      name: 'inlineIndent',\n      title: { label: '缩进宽度', tip: 'inline 模式的菜单缩进宽度' },\n      propType: 'number',\n    },\n    {\n      name: 'mode',\n      title: {\n        label: '菜单类型',\n        tip: '菜单类型，现在支持垂直、水平、和内嵌模式三种',\n      },\n      propType: { type: 'oneOf', value: ['vertical', 'horizontal', 'inline'] },\n    },\n    {\n      name: 'multiple',\n      title: { label: '是否允许多选', tip: '是否允许多选' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'openKeys',\n      title: {\n        label: '当前展开的菜单项',\n        tip: '当前展开的 SubMenu 菜单项 key 数组',\n      },\n      propType: { type: 'arrayOf', value: 'string' },\n    },\n    {\n      name: 'selectable',\n      title: { label: '是否允许选中', tip: '是否允许选中' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'selectedKeys',\n      title: { label: '当前选中项', tip: '当前选中的菜单项 key 数组' },\n      propType: { type: 'arrayOf', value: 'string' },\n    },\n    {\n      name: 'style',\n      title: { label: '根节点样式', tip: '根节点样式' },\n      propType: 'object',\n    },\n    {\n      name: 'subMenuCloseDelay',\n      title: {\n        label: '关闭延时',\n        tip: '用户鼠标离开子菜单后关闭延时，单位：秒',\n      },\n      propType: 'number',\n    },\n    {\n      name: 'subMenuOpenDelay',\n      title: {\n        label: '开启延时',\n        tip: '用户鼠标进入子菜单后开启延时，单位：秒',\n      },\n      propType: 'number',\n    },\n    {\n      name: 'theme',\n      title: { label: '主题颜色', tip: '主题颜色' },\n      propType: { type: 'oneOf', value: ['light', 'dark'] },\n    },\n    {\n      name: 'onClick',\n      title: { label: '点击 MenuItem 调用函数', tip: '点击 MenuItem 调用函数' },\n      propType: 'func',\n    },\n    {\n      name: 'onDeselect',\n      title: {\n        label: '取消选中时调用函数',\n        tip: '取消选中时调用，仅在 multiple 生效',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'triggerSubMenuAction',\n      title: {\n        label: '触发方式',\n        tip: '展开/关闭的触发行为',\n      },\n      propType: { type: 'oneOf', value: ['hover', 'click'] },\n    },\n    {\n      name: 'onOpenChange',\n      title: { label: 'SubMenu 展开/关闭的回调', tip: '展开/关闭的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onSelect',\n      title: { label: '被选中时调用函数', tip: '被选中时调用函数' },\n      propType: 'func',\n    },\n    {\n      name: 'overflowedIndicator',\n      title: { label: '折叠图标', tip: '自定义 Menu 折叠时的图标' },\n      propType: 'node',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onClick',\n          template:\n            \"onClick({item,key,keyPath,domEvent},${extParams}){\\n// 点击 MenuItem 调用此函数\\nconsole.log('onClick',item,key,keyPath,domEvent);}\",\n        },\n        {\n          name: 'onDeselect',\n          template:\n            \"onDeselect({item,key,keyPath,selectedKeys,domEvent},${extParams}){\\n// 取消选中时调用，仅在 multiple 生效\\nconsole.log('onDeselect',item,key,keyPath,selectedKeys,domEvent);}\",\n        },\n        {\n          name: 'onOpenChange',\n          template:\n            \"onOpenChange(openKeys,${extParams}){\\n// SubMenu 展开/关闭的回调\\nconsole.log('onOpenChange',openKeys);}\",\n        },\n        {\n          name: 'onSelect',\n          template:\n            \"onSelect({item,key,keyPath,selectedKeys,domEvent},${extParams}){\\n// 被选中时调用\\nconsole.log('onSelect',item,key,keyPath,selectedKeys,domEvent);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu/snippets.ts",
    "content": "export default [\n  {\n    title: '导航菜单',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/menu-1.jpg',\n    schema: {\n      componentName: 'Menu',\n      props: {\n        mode: 'inline',\n        defaultSelectedKeys: ['1'],\n        defaultOpenKeys: ['sub1'],\n        theme: 'dark',\n        items: [\n          {\n            key: 'item-i5wd',\n            category: 'Menu.Item',\n            children: '菜单名',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu/utils.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nexport const itemsExtraProps = {\n  getValue(target, fieldValue) {\n    const map = target.node.children.map((child) => {\n      const key = child.getPropValue('key') ? String(child.getPropValue('key')) : child.id;\n      const result = {\n        key,\n        category: child.componentName,\n      };\n      ['children', 'items', 'title'].forEach((propKey) => {\n        if (child.getPropValue(propKey)) {\n          result[propKey] = child.getPropValue(propKey);\n        }\n      });\n      return result;\n    });\n    return map.length === 0 ? fieldValue : map;\n  },\n  setValue(target, value) {\n    const { node } = target;\n    const map = {};\n\n    if (!Array.isArray(value)) {\n      value = [];\n    }\n    value.forEach((item) => {\n      const tabItem = Object.assign({}, item);\n      map[item.key] = tabItem;\n    });\n    node.children.mergeChildren(\n      (child) => {\n        const key = String(child.getPropValue('key'));\n\n        if (\n          Object.hasOwnProperty.call(map, key) &&\n          child.componentName.includes(map[key].category)\n        ) {\n          if (map[key].category === 'Menu.Item') {\n            child.setPropValue('children', map[key].children);\n          } else {\n            child.setPropValue('title', map[key].title || map[key].children);\n          }\n          delete map[key];\n          return false;\n        }\n        return true;\n      },\n      () => {\n        const items = [];\n        for (const key in map) {\n          const itemProps = map[key];\n\n          if (Object.hasOwnProperty.call(map, key)) {\n            if (itemProps.category === 'Menu.Item') {\n              items.push({\n                componentName: 'Menu.Item',\n                props: {\n                  key: itemProps.key,\n                  children: itemProps.children,\n                },\n              });\n            } else {\n              items.push({\n                componentName: 'Menu.SubMenu',\n                props: {\n                  key: itemProps.key,\n                  title: itemProps.title || itemProps.children,\n                  items:\n                    itemProps.items && itemProps.items.length === 0\n                      ? itemProps.items\n                      : [\n                          {\n                            key: `item-${uuid()}`,\n                            category: 'Menu.Item',\n                            children: '子菜单名',\n                          },\n                        ],\n                },\n              });\n            }\n          }\n        }\n        return items;\n      },\n      (child1, child2) => {\n        const a = value.findIndex(\n          (item) => String(item.key) === String(child1.getPropValue('key')),\n        );\n        const b = value.findIndex(\n          (item) => String(item.key) === String(child2.getPropValue('key')),\n        );\n        return a - b;\n      },\n    );\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu.item/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Menu.Item',\n  title: '菜单项',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'danger',\n      title: { label: '错误状态', tip: '展示错误状态样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'icon',\n      title: { label: '菜单图标', tip: '菜单图标' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n      defaultValue: false,\n    },\n    {\n      name: 'key',\n      title: { label: '唯一标志', tip: 'item 的唯一标志' },\n      propType: 'string',\n    },\n    {\n      name: 'title',\n      title: {\n        label: '悬浮标题',\n        tip: '设置收缩时展示的悬浮标题',\n      },\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: { parentWhitelist: ['Menu'] },\n    },\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu.item/snippets.ts",
    "content": "export default [];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu.item-group/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\nimport { itemsExtraProps } from '../menu/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Menu.ItemGroup',\n  title: '菜单组',\n  props: [\n    {\n      name: 'items',\n      title: '菜单组项',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid(),\n                  },\n                  {\n                    name: 'children',\n                    tite: '菜单名',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'category',\n                    title: {\n                      label: '类型',\n                      tip: '菜单项类型',\n                    },\n                    propType: {\n                      type: 'oneOf',\n                      value: ['Menu.Item', 'Menu.SubMenu', 'Menu.ItemGroup'],\n                    },\n                    setter: [\n                      {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'Item',\n                              value: 'Menu.Item',\n                            },\n                            {\n                              title: 'SubMenu',\n                              value: 'Menu.SubMenu',\n                            },\n                            {\n                              title: 'ItemGroup',\n                              value: 'Menu.ItemGroup',\n                            },\n                          ],\n                        },\n                      },\n                      'VariableSetter',\n                    ],\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: `item-${uuid()}`,\n                category: 'Menu.Item',\n                children: '子菜单名',\n              };\n            },\n          },\n        },\n      },\n      extraProps: itemsExtraProps,\n    },\n    {\n      name: 'children',\n      title: { label: '分组的菜单项', tip: '分组的菜单项' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'title',\n      title: { label: '分组标题', tip: '分组标题' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: { parentWhitelist: ['Menu', 'Menu.SubMenu'] },\n    },\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu.item-group/snippets.ts",
    "content": "export default [];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu.sub-menu/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\nimport { itemsExtraProps } from '../menu/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Menu.SubMenu',\n  title: '子菜单',\n  props: [\n    {\n      name: 'items',\n      title: '子菜单项',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid(),\n                  },\n                  {\n                    name: 'children',\n                    title: '子菜单名',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'category',\n                    title: {\n                      label: '类型',\n                      tip: '菜单项类型',\n                    },\n                    propType: {\n                      type: 'oneOf',\n                      value: ['Menu.Item', 'Menu.SubMenu', 'Menu.ItemGroup'],\n                    },\n                    setter: [\n                      {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'Item',\n                              value: 'Menu.Item',\n                            },\n                            {\n                              title: 'SubMenu',\n                              value: 'Menu.SubMenu',\n                            },\n                            {\n                              title: 'ItemGroup',\n                              value: 'Menu.ItemGroup',\n                            },\n                          ],\n                        },\n                      },\n                      'VariableSetter',\n                    ],\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: `item-${uuid()}`,\n                category: 'Menu.Item',\n                children: '子菜单名',\n              };\n            },\n          },\n        },\n      },\n      extraProps: itemsExtraProps,\n    },\n    {\n      name: 'danger',\n      title: { label: '错误状态', tip: '展示错误状态样式' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'icon',\n      title: { label: '菜单图标', tip: '菜单图标' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n      defaultValue: false,\n    },\n    {\n      name: 'key',\n      title: { label: '唯一标志', tip: 'item 的唯一标志' },\n      propType: 'string',\n    },\n    {\n      name: 'title',\n      title: {\n        label: '悬浮标题',\n        tip: '设置收缩时展示的悬浮标题',\n      },\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: { parentWhitelist: ['Menu'] },\n    },\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/menu.sub-menu/snippets.ts",
    "content": "export default [];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/modal/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Modal',\n  title: '对话框',\n  category: '反馈',\n  props: [\n    {\n      name: 'title',\n      title: { label: '标题', tip: '标题' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'cancelText',\n      title: { label: '取消按钮文字', tip: '取消按钮文字' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'okText',\n      title: { label: '确认按钮文字', tip: '确认按钮文字' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'open',\n      title: { label: '是否可见', tip: '对话框是否可见' },\n      propType: 'bool',\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'centered',\n      title: { label: '垂直居中', tip: '垂直居中展示 Modal' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'closable',\n      title: { label: '显示关闭按钮', tip: '是否显示右上角的关闭按钮' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'closeIcon',\n      title: { label: '关闭图标', tip: '自定义关闭图标' },\n      propType: 'node',\n    },\n    {\n      name: 'confirmLoading',\n      title: { label: '确定按钮loading', tip: '确定按钮loading' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'destroyOnClose',\n      title: { label: '销毁子元素', tip: '关闭时销毁 Modal 里的子元素' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'forceRender',\n      title: { label: '强制渲染Modal', tip: '强制渲染Modal' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'keyboard',\n      title: { label: 'esc关闭', tip: '是否支持键盘 esc 关闭' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'mask',\n      title: { label: '是否展示遮罩', tip: '是否展示遮罩' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'maskClosable',\n      title: { label: '点击蒙层关闭', tip: '点击蒙层是否允许关闭' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'zIndex',\n      title: { label: 'z-index', tip: '设置 Modal 的 `z-index`' },\n      propType: 'number',\n      setter: 'NumberSetter',\n      supportVariable: true\n    },\n    {\n      name: 'width',\n      title: { label: '宽度', tip: '宽度' },\n      propType: { type: 'oneOfType', value: ['string', 'number'] },\n    },\n    {\n      name: 'footer',\n      title: {\n        label: '底部内容',\n        tip: '底部内容，当不需要默认底部按钮时，可以设为 `footer={null}`',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'okType',\n      title: { label: '确认按钮类型', tip: '确认按钮类型' },\n      propType: { type: 'oneOf', value: ['default', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: 'primary',\n              value: 'primary',\n            },\n            {\n              title: 'ghost',\n              value: 'ghost',\n            },\n            {\n              title: 'dashed',\n              value: 'dashed',\n            },\n            {\n              title: 'link',\n              value: 'link',\n            },\n            {\n              title: 'text',\n              value: 'text',\n            },\n            {\n              title: 'default',\n              value: 'default',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'okButtonProps',\n      title: { label: '确认按钮props', tip: '确认按钮props' },\n      propType: 'object',\n      setter: {\n        componentName: 'ObjectSetter',\n        props: {\n          config: {\n            items: [\n              {\n                name: 'disabled',\n                title: { label: '是否可点击', tip: 'disabled' },\n                propType: 'bool',\n                setter: [\n                  {\n                    componentName: 'BoolSetter',\n\n                    initialValue: false,\n                  },\n                  'VariableSetter',\n                ],\n                isRequired: true,\n              },\n            ],\n          },\n        },\n      },\n    },\n    {\n      name: 'bodyStyle',\n      title: { label: 'body样式', tip: 'Modal body 样式' },\n      propType: 'object',\n    },\n    {\n      name: 'maskStyle',\n      title: { label: '遮罩样式', tip: '遮罩样式' },\n      propType: 'object',\n    },\n    {\n      name: 'style',\n      title: {\n        label: '浮层样式',\n        tip: '可用于设置浮层的样式，调整浮层位置等',\n      },\n      propType: 'object',\n    },\n    {\n      name: 'wrapClassName',\n      title: { label: '外层容器类名', tip: '对话框外层容器的类名' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'getContainer',\n      title: {\n        label: '指定挂载节点',\n        tip: '指定 Modal 挂载的 HTML 节点, false 为挂载在当前 dom',\n      },\n      propType: { type: 'oneOfType', value: ['node', 'func'] },\n    },\n    {\n      name: 'onCancel',\n      title: {\n        label: '取消按钮回调',\n        tip: '点击遮罩层或右上角叉或取消按钮的回调',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onOk',\n      title: { label: '点击确定回调', tip: '点击确定回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      rootSelector: '.ant-modal-content',\n      nestingRule: {\n        parentWhitelist: ['Page', 'Component'],\n      },\n    },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'afterClose',\n          templete: \"onCancel(${extParams}){\\n// 完全关闭后的回调\\nconsole.log('afterClose');}\",\n        },\n        {\n          name: 'onCancel',\n          template:\n            \"onCancel(${extParams}){\\n// 点击遮罩层或右上角叉或取消按钮的回调\\nconsole.log('onCancel');}\",\n        },\n        {\n          name: 'onOk',\n          template: \"onOk(${extParams}){\\n// 点击确定回调\\nconsole.log('onOk');}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/modal/snippets.ts",
    "content": "export default [\n  {\n    title: '普通型',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/modal-1.png',\n    schema: {\n      componentName: 'Modal',\n      props: {\n        title: 'Basic Modal',\n        okText: '确认',\n        cancelText: '取消',\n        open: true,\n        destroyOnClose: true,\n      },\n      children: [],\n    },\n  },\n  {\n    title: '隐藏底部',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/modal-2.png',\n    schema: {\n      componentName: 'Modal',\n      props: {\n        title: 'Basic Modal',\n        okText: '确认',\n        cancelText: '取消',\n        open: true,\n        footer: null,\n        destroyOnClose: true,\n      },\n      children: [],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/page-header/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'PageHeader',\n  title: '页头',\n  category: '导航',\n  props: [\n    {\n      name: 'title',\n      title: { label: '标题', tip: '自定义标题文字' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'subTitle',\n      title: { label: '二级标题', tip: '自定义的二级标题文字' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'ghost',\n      title: { label: 'ghost风格', tip: 'ghost风格' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    // {\n    //   name: 'backIcon',\n    //   title: {\n    //     label: '返回按钮',\n    //     tip: '自定义 back icon ，如果为 false 不渲染 back icon',\n    //   },\n    //   propType: { type: 'oneOfType', value: ['node', 'bool'] },\n    // },\n    {\n      name: 'tags',\n      title: { label: 'tag 列表', tip: 'title 旁的 tag 列表' },\n      propType: 'node',\n    },\n    {\n      name: 'extra',\n      title: { label: '操作区', tip: '操作区，位于 title 行的行尾' },\n      propType: 'node',\n    },\n    {\n      name: 'footer',\n      title: { label: '页脚', tip: 'PageHeader 的页脚，一般用于渲染 TabBar' },\n      propType: 'node',\n    },\n    {\n      name: 'avatar',\n      title: { label: '头像', tip: '标题栏旁的头像' },\n      propType: 'object',\n      supportVariable: false,\n      setter: [\n        {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 'src',\n                  title: { label: '地址', tip: '头像地址' },\n                  setter: {\n                    componentName: 'StringSetter',\n                  },\n                },\n              ],\n            },\n          },\n        },\n        'JsonSetter',\n      ],\n    },\n    {\n      name: 'breadcrumb',\n      title: { label: '面包屑的配置', tip: '面包屑的配置' },\n      propType: 'object',\n      supportVariable: false,\n      setter: [\n        {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 'routes',\n                  title: { label: '路由栈信息', tip: '路由栈信息' },\n                  setter: {\n                    componentName: 'ArraySetter',\n                    props: {\n                      itemSetter: {\n                        componentName: 'ObjectSetter',\n                        initialValue: {\n                          path: 'path',\n                          breadcrumbName: 'pathName',\n                        },\n                        isRequired: true,\n                        props: {\n                          config: {\n                            items: [\n                              {\n                                name: 'path',\n                                defaultValue: 'path',\n                                title: { label: '路径', tip: 'path | 路径' },\n                                setter: 'StringSetter',\n                              },\n                              {\n                                name: 'breadcrumbName',\n                                defaultValue: 'pathName',\n                                title: {\n                                  label: '名称',\n                                  tip: 'breadcrumbName | 名称',\n                                },\n                                setter: 'StringSetter',\n                              },\n                            ],\n                          },\n                        },\n                      },\n                    },\n                  },\n                },\n              ],\n            },\n          },\n        },\n        'JsonSetter',\n      ],\n    },\n    {\n      name: 'onBack',\n      title: { label: '返回按钮的点击事件', tip: '返回按钮的点击事件' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onBack',\n          template: \"onBack(${extParams}){\\n// 返回按钮的点击事件\\nconsole.log('onBack');}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/page-header/snippets.ts",
    "content": "export default [\n  {\n    title: '页头',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/page-header-1.jpg',\n    schema: {\n      componentName: 'PageHeader',\n      props: {\n        title: 'Title',\n        subTitle: 'This is a subtitle',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/pagination/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Pagination',\n  title: '分页',\n  category: '导航',\n  props: [\n    {\n      title: '数据',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'defaultPageSize',\n          title: {\n            label: '默认每页条数',\n            tip: 'defaultPageSize | 默认每页条数',\n          },\n          propType: 'number',\n          setter: 'NumberSetter',\n          defaultValue: 10,\n        },\n        {\n          name: 'pageSize',\n          title: { label: '每页条数', tip: 'pageSize | 每页条数' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          defaultValue: 10,\n        },\n        {\n          name: 'total',\n          title: { label: '数据总数', tip: 'total | 数据总数' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          defaultValue: 15,\n        },\n        {\n          name: 'defaultCurrent',\n          title: {\n            label: '默认当前页',\n            tip: 'defaultCurrent | 默认的当前页数',\n          },\n          propType: 'number',\n          setter: 'NumberSetter',\n          defaultValue: 1,\n        },\n        {\n          name: 'current',\n          title: { label: '当前页数', tip: 'current | 当前页数' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          defaultValue: 1,\n        },\n      ],\n    },\n    {\n      title: '功能',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'disabled',\n          title: {\n            label: '是否禁用',\n            tip: 'disabled | 是否禁用',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'showSizeChanger',\n          title: {\n            label: '页数切换',\n            tip: 'showSizeChanger | 是否展示 pageSize 切换器',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'showQuickJumper',\n          title: {\n            label: '快速跳转',\n            tip: 'showQuickJumper | 是否可以快速跳转至某页',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'hideOnSinglePage',\n          title: {\n            label: '单页隐藏',\n            tip: 'hideOnSinglePage | 只有一页时是否隐藏分页器',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'showLessItems',\n          title: {\n            label: '显示较少页面',\n            tip: 'showLessItems | 是否显示较少页面内容',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'pageSizeOptions',\n          title: {\n            label: '可选分页数',\n            tip: 'pageSizeOptions | 指定 pageSize切换器 可选择的每页条数',\n          },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n      ],\n    },\n    {\n      title: '外观',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'simple',\n          title: { label: '简单分页', tip: 'simple | 简单分页' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'size',\n          title: { label: '分页尺寸', tip: 'size | 分页尺寸' },\n          propType: {\n            type: 'oneOf',\n            value: ['default', 'small'],\n          },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '默认',\n                    value: 'default',\n                  },\n                  {\n                    title: '小',\n                    value: 'small',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n          defaultValue: 'default',\n        },\n        {\n          name: 'showTotal',\n          title: {\n            label: '显示总数',\n            tip: 'showTotal | 用于显示数据总量和当前数据顺序',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'showTotal(total,range,${extParams}){\\n// 用于格式化显示表格数据总量\\nreturn `共 ${total} 条`;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'showTitle',\n          title: {\n            label: '页码提示',\n            tip: 'showTitle | 是否显示原生 tooltip 页码提示',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'responsive',\n          title: {\n            label: '宽度自适应',\n            tip: 'responsive | 当 size 未指定时，根据屏幕宽度自动调整尺寸',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n      ],\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(page,pageSize,${extParams}){\\n// 页码或 pageSize 改变的回调\\nconsole.log('onChange',page,pageSize);}\",\n        },\n        {\n          name: 'onShowSizeChange',\n          template:\n            \"onShowSizeChange(current,size,${extParams}){\\n// pageSize 变化的回调\\nconsole.log('onShowSizeChange',current,size);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/pagination/snippets.ts",
    "content": "export default [\n  {\n    title: '分页',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/pagination-1.jpg',\n    schema: {\n      componentName: 'Pagination',\n      props: {\n        pageSize: 10,\n        total: 50,\n        current: 1,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/popconfirm/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Popconfirm',\n  title: '气泡确认框',\n  category: '反馈',\n  props: [\n    {\n      name: 'title',\n      title: { label: '确认框内容', tip: '确认框内容' },\n      propType: { type: 'oneOfType', value: ['string', 'node', 'func'] },\n    },\n    {\n      name: 'okText',\n      title: { label: '确认按钮文字', tip: '确认按钮文字' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'cancelText',\n      title: { label: '取消按钮文字', tip: '取消按钮文字' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'onConfirm',\n      title: { label: '点击确认回调', tip: '点击确认回调' },\n      propType: 'func',\n    },\n    // {\n    //   name: 'okType',\n    //   title: { label: '确认按钮类型', tip: '确认按钮类型' },\n    //   propType: {\n    //     type: 'oneOf',\n    //     value: ['primary', 'ghost', 'dashed', 'danger', 'link', 'text'],\n    //   },\n    //   setter: {\n    //     componentName: 'SelectSetter',\n    //     props: {\n    //       options: [\n    //         {\n    //           title: '主按钮',\n    //           value: 'primary',\n    //         },\n    //         {\n    //           title: '虚线框按钮',\n    //           value: 'dashed',\n    //         },\n    //         {\n    //           title: '危险按钮',\n    //           value: 'danger',\n    //         },\n    //         {\n    //           title: '链接按钮',\n    //           value: 'link',\n    //         },\n    //         {\n    //           title: '类文本按钮',\n    //           value: 'text',\n    //         },\n    //       ],\n    //     },\n    //   },\n    // },\n    // {\n    //   name: 'okButtonProps',\n    //   title: { label: 'ok按钮props', tip: 'ok按钮props' },\n    //   propType: 'object',\n    // },\n    // {\n    //   name: 'cancelButtonProps',\n    //   title: { label: 'cancel按钮props', tip: 'cancel按钮props' },\n    //   propType: 'object',\n    // },\n    // {\n    //   name: 'onCancel',\n    //   title: { label: '点击取消回调', tip: '点击取消回调' },\n    //   propType: 'func',\n    // },\n    // {\n    //   name: 'icon',\n    //   title: { label: '自定义Icon图标', tip: '自定义弹出气泡Icon图标' },\n    //   propType: 'node',\n    // },\n    // {\n    //   name: 'disabled',\n    //   title: {\n    //     label: '是否禁用',\n    //     tip: '是否为禁用状态',\n    //   },\n    //   propType: 'bool',\n    //   defaultValue: false,\n    // },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onConfirm',\n          template: \"onConfirm(${extParams}){\\n// 点击确认的回调\\nconsole.log('onConfirm');}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/popconfirm/snippets.ts",
    "content": "export default [\n  {\n    title: '气泡确认框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/popconfirm-1.jpg',\n    schema: {\n      componentName: 'Popconfirm',\n      props: {\n        title: '确定删除?',\n        okType: 'primary',\n        okText: '确定',\n        cancelText: '取消',\n      },\n      children: {\n        componentName: 'Button',\n        props: {\n          children: '删除',\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/popover/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Popover',\n  title: '气泡卡片',\n  category: '数据展示',\n  props: [\n    {\n      title: '内容',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'title',\n          title: {\n            label: '卡片标题',\n            tip: 'title | 卡片标题',\n          },\n          propType: {\n            type: 'oneOfType',\n            value: ['string', 'node', 'func'],\n          },\n          setter: ['StringSetter', 'SlotSetter', 'FunctionSetter', 'VariableSetter'],\n        },\n        {\n          name: 'content',\n          title: {\n            label: '卡片内容',\n            tip: 'content | 卡片内容',\n          },\n          propType: {\n            type: 'oneOfType',\n            value: ['string', 'node', 'func'],\n          },\n          setter: ['StringSetter', 'SlotSetter', 'FunctionSetter', 'VariableSetter'],\n        },\n      ],\n    },\n    {\n      title: '控制',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'defaultOpen',\n          title: {\n            label: '默认显隐',\n            tip: 'defaultOpen | 默认是否显隐',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'open',\n          title: {\n            label: '手动显隐',\n            tip: 'open | 手动控制浮层显隐',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n        },\n      ],\n    },\n    {\n      title: '外观',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'placement',\n          title: {\n            label: '气泡位置',\n            tip: 'placement | 气泡位置',\n          },\n          propType: {\n            type: 'oneOf',\n            value: [\n              'top',\n              'left',\n              'right',\n              'bottom',\n              'topLeft',\n              'topRight',\n              'bottomLeft',\n              'bottomRight',\n              'leftTop',\n              'leftBottom',\n              'rightTop',\n              'rightBottom',\n            ],\n          },\n          defaultValue: 'top',\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '上',\n                  value: 'top',\n                },\n                {\n                  title: '左',\n                  value: 'left',\n                },\n                {\n                  title: '右',\n                  value: 'right',\n                },\n                {\n                  title: '下',\n                  value: 'bottom',\n                },\n                {\n                  title: '上左',\n                  value: 'topLeft',\n                },\n                {\n                  title: '上右',\n                  value: 'topRight',\n                },\n                {\n                  title: '下左',\n                  value: 'bottomLeft',\n                },\n                {\n                  title: '下右',\n                  value: 'bottomRight',\n                },\n                {\n                  title: '左上',\n                  value: 'leftTop',\n                },\n                {\n                  title: '左下',\n                  value: 'leftBottom',\n                },\n                {\n                  title: '右上',\n                  value: 'rightTop',\n                },\n                {\n                  title: '右下',\n                  value: 'rightBottom',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'autoAdjustOverflow',\n          title: {\n            label: '自动调整',\n            tip: 'autoAdjustOverflow | 气泡被遮挡时自动调整位置',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: true,\n        },\n        {\n          name: 'arrowPointAtCenter',\n          title: {\n            label: '指向中心',\n            tip: 'arrowPointAtCenter | 箭头是否指向目标元素中心',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'color',\n          title: {\n            label: '背景颜色',\n            tip: 'color | 背景颜色',\n          },\n          propType: 'string',\n          setter: 'ColorSetter',\n        },\n        {\n          name: 'zIndex',\n          title: {\n            label: 'zIndex',\n            tip: 'zIndex | 设置 Tooltip 的 z-index值',\n          },\n          propType: 'number',\n          setter: 'NumberSetter',\n        },\n      ],\n    },\n    {\n      name: 'overlayStyle',\n      title: '卡片样式',\n      type: 'group',\n      extraProps: {\n        display: 'entry',\n      },\n      items: [\n        {\n          name: 'overlayStyle',\n          title: {\n            label: '样式设置',\n            tip: 'overlayStyle | 卡片样式',\n          },\n          setter: 'StyleSetter',\n          extraProps: {\n            display: 'block',\n          },\n        },\n      ],\n    },\n    {\n      name: 'overlayInnerStyle',\n      title: '卡片内容样式',\n      type: 'group',\n      extraProps: {\n        display: 'entry',\n      },\n      items: [\n        {\n          name: 'overlayInnerStyle',\n          title: {\n            label: '样式设置',\n            tip: 'overlayStyle | 卡片内容区域的样式',\n          },\n          setter: 'StyleSetter',\n          extraProps: {\n            display: 'block',\n          },\n        },\n      ],\n    },\n    {\n      title: '行为',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'trigger',\n          title: {\n            label: '触发行为',\n            tip: 'trigger | 触发行为',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['hover', 'focus', 'click', 'contextMenu'],\n          },\n          defaultValue: 'hover',\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '鼠标悬停',\n                  value: 'hover',\n                },\n                {\n                  title: '获得焦点',\n                  value: 'focus',\n                },\n                {\n                  title: '鼠标点击',\n                  value: 'click',\n                },\n                {\n                  title: '右键菜单',\n                  value: 'contextMenu',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'mouseEnterDelay',\n          title: {\n            label: '展示延时',\n            tip: 'mouseEnterDelay | 鼠标移入后延时多少才显示 Tooltip，单位：秒',\n          },\n          propType: 'number',\n          defaultValue: 0.1,\n          setter: {\n            componentName: 'NumberSetter',\n            props: {\n              step: 0.1,\n            },\n          },\n        },\n        {\n          name: 'mouseLeaveDelay',\n          title: {\n            label: '隐藏延时',\n            tip: 'mouseLeaveDelay | 鼠标移出后延时多少才隐藏 Tooltip，单位：秒',\n          },\n          propType: 'number',\n          defaultValue: 0.1,\n          setter: {\n            componentName: 'NumberSetter',\n            props: {\n              step: 0.1,\n            },\n          },\n        },\n      ],\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onOpenChange',\n          template:\n            \"onOpenChange(open,${extParams}){\\n// 显示隐藏的回调\\nconsole.log('onOpenChange',open);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/popover/snippets.ts",
    "content": "export default [\n  {\n    title: '气泡卡片',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/popover-1.jpg',\n    schema: {\n      componentName: 'Popover',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/progress/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Progress',\n  title: '进度条',\n  category: '反馈',\n  props: [\n    {\n      name: 'type',\n      title: { label: '类型', tip: '类型' },\n      propType: { type: 'oneOf', value: ['line', 'circle', 'dashboard'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            { title: '线型', value: 'line' },\n            { title: '圆型', value: 'circle' },\n            { title: '仪表盘', value: 'dashboard' },\n          ],\n        },\n      },\n      defaultValue: 'line',\n    },\n    {\n      name: 'format',\n      title: { label: '内容格式', tip: '内容格式' },\n      propType: 'func',\n    },\n    {\n      name: 'percent',\n      title: { label: '百分比', tip: '百分比' },\n      propType: 'number',\n    },\n    {\n      name: 'showInfo',\n      title: { label: '显示数值或图标', tip: '显示数值或图标' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'status',\n      title: { label: '状态', tip: '状态' },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'exception', 'normal', 'active'],\n      },\n    },\n    {\n      name: 'steps',\n      title: { label: '总步数', tip: '进度条总共步数' },\n      condition(target) {\n        // 仅线型有效\n        return target.getProps().getPropValue('type') === 'line';\n      },\n      propType: 'number',\n    },\n    {\n      name: 'strokeLinecap',\n      title: { label: '进度条的样式', tip: '进度条的样式' },\n      propType: {\n        type: 'oneOf',\n        value: ['round', 'square'],\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            { title: '圆角', value: 'round' },\n            { title: '方角', value: 'square' },\n          ],\n        },\n      },\n      defaultValue: 'round',\n    },\n    {\n      name: 'strokeWidth',\n      title: { label: '线宽度', tip: '线宽度' },\n      propType: 'number',\n    },\n    {\n      name: 'strokeColor',\n      title: { label: '进度条的颜色', tip: '进度条的颜色' },\n      propType: 'string',\n      condition(target) {\n        // 仪表盘样式无效\n        return target.getProps().getPropValue('type') !== 'dashboard';\n      },\n      setter: 'ColorSetter',\n    },\n    {\n      name: 'trailColor',\n      title: {\n        label: '未完成的分段的颜色',\n        tip: '未完成的分段的颜色',\n      },\n      propType: 'string',\n      setter: 'ColorSetter',\n    },\n    {\n      name: 'gapDegree',\n      title: {\n        label: '缺口角度',\n        tip: '仪表盘进度条缺口角度，可取值 0 ~ 295',\n      },\n      condition(target) {\n        // 仅仪表盘样式有效\n        return target.getProps().getPropValue('type') === 'dashboard';\n      },\n      propType: 'number',\n      defaultValue: 75,\n    },\n    {\n      name: 'gapPosition',\n      title: {\n        label: '缺口位置',\n        tip: '仪表盘进度条缺口位置',\n      },\n      condition(target) {\n        // 仅仪表盘样式有效\n        return target.getProps().getPropValue('type') === 'dashboard';\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'bottom', 'left', 'right'],\n      },\n      defaultValue: 'bottom',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/progress/snippets.ts",
    "content": "export default [\n  {\n    title: '进度条',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/progress-1.png',\n    schema: {\n      componentName: 'Progress',\n      props: {\n        percent: 20,\n        status: 'active',\n      },\n    },\n  },\n  {\n    title: '进度圈',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/progress-2.png',\n    schema: {\n      componentName: 'Progress',\n      props: {\n        percent: 20,\n        type: 'circle',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/radio/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Radio',\n  title: '单选框',\n  category: '表单',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'defaultChecked',\n      title: { label: '默认选中', tip: '初始是否选中' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'checked',\n      title: { label: '是否选中', tip: '指定当前是否选中' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    // {\n    //   name: 'value',\n    //   title: {\n    //     label: '根据值判断',\n    //     tip: '根据 value 进行比较，判断是否选中',\n    //   },\n    //   propType: 'string',\n    // },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/radio/snippets.ts",
    "content": "export default [\n  {\n    title: '单选框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/radio-1.png',\n    schema: {\n      componentName: 'Radio',\n      props: {\n        children: 'Radio',\n      },\n    },\n  },\n  {\n    title: '单选框组',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/radio-group-1.png',\n    schema: {\n      componentName: 'Radio.Group',\n      props: {\n        options: [\n          {\n            label: 'A',\n            value: 'A',\n          },\n          {\n            label: 'B',\n            value: 'B',\n          },\n          {\n            label: 'C',\n            value: 'C',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/radio.group/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nexport default {\n  componentName: 'Radio.Group',\n  title: '单选框组',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认选中值' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '指定选中的选项' },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'name',\n      title: {\n        label: 'name 属性',\n        tip: 'RadioGroup 下所有 input[type=\"radio\"] 的 name 属性',\n      },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'options',\n      title: { label: '指定可选项', tip: '指定可选项' },\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'shape',\n          value: [\n            {\n              name: 'label',\n              propType: 'string',\n              description: '选项名',\n              defaultValue: '选项名',\n            },\n            {\n              name: 'value',\n              propType: 'string',\n              description: '选项值',\n              defaultValue: '选项值',\n            },\n            {\n              name: 'disabled',\n              propType: 'bool',\n              description: '是否禁用',\n              defaultValue: false,\n            },\n          ],\n        },\n      },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'label',\n                    title: '选项名',\n                    setter: 'StringSetter',\n                    isRequired: true\n                  },\n                  {\n                    name: 'value',\n                    title: '选项值',\n                    setter: 'StringSetter',\n                    isRequired: true\n                  },\n                  {\n                    name: 'disabled',\n                    title: '是否禁用',\n                    setter: 'BoolSetter',\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                label: '选项名',\n                value: uuid(),\n                disabled: false,\n              };\n            },\n          },\n        },\n      },\n    },\n    {\n      name: 'optionType',\n      title: { label: '类型', tip: '类型' },\n      propType: { type: 'oneOf', value: ['default', 'button'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '默认类型',\n              value: 'default',\n            },\n            {\n              title: '按钮类型',\n              value: 'button',\n            },\n          ],\n        },\n      },\n      defaultValue: 'default',\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '大小，只对按钮样式生效' },\n      condition(target) {\n        return target.getProps().getPropValue('optionType') === 'button';\n      },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'buttonStyle',\n      title: {\n        label: '按钮风格',\n        tip: 'RadioButton 的风格样式，目前有描边和填色两种风格',\n      },\n      condition(target) {\n        return target.getProps().getPropValue('optionType') === 'button';\n      },\n      propType: { type: 'oneOf', value: ['outline', 'solid'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '描边',\n              value: 'outline',\n            },\n            {\n              title: '填色',\n              value: 'solid',\n            },\n          ],\n        },\n      },\n      defaultValue: 'outline',\n    },\n    {\n      name: 'onChange',\n      title: { label: '变化时回调函数', tip: '变化时回调函数' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(event,${extParams}){\\n// 选项变化时的回调函数\\nconsole.log('onChange',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/rate/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Rate',\n  title: '评分',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认值' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'allowHalf',\n      title: { label: '支持半选', tip: '支持半选' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'character',\n      title: { label: '符号', tip: '自定义字符' },\n      propType: 'node',\n    },\n    {\n      name: 'count',\n      title: { label: '总数', tip: 'star 总数' },\n      propType: 'number',\n      defaultValue: 5,\n      setter: 'NumberSetter'\n    },\n    // {\n    //   name: 'value',\n    //   title: { label: '当前值', tip: '当前数' },\n    //   propType: 'number',\n    // },\n\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'tooltips',\n      title: { label: '提示信息', tip: '自定义每项的提示信息' },\n      propType: { type: 'arrayOf', value: 'string' },\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点时的回调', tip: '失去焦点时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      title: { label: '选择时的回调', tip: '选择时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获取焦点时的回调', tip: '获取焦点时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onHoverChange',\n      title: { label: '鼠标经过时回调', tip: '鼠标经过时数值变化的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      title: { label: '按键回调', tip: '按键回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onBlur',\n          template: \"onBlur(${extParams}){\\n// 失去焦点时的回调\\nconsole.log('onBlur');}\",\n        },\n        {\n          name: 'onChange',\n          template:\n            \"onChange(value,${extParams}){\\n// 选择时的回调\\nconsole.log('onChange',value);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(${extParams}){\\n// 获取焦点时的回调\\nconsole.log('onFocus');}\",\n        },\n        {\n          name: 'onHoverChange',\n          template:\n            \"onHoverChange(value,${extParams}){\\n// 鼠标经过时数值变化的回调\\nconsole.log('onHoverChange',value);}\",\n        },\n        {\n          name: 'onKeyDown',\n          template: \"onKeyDown(event,${extParams}){\\n// 按键回调\\nconsole.log('onKeyDown',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/rate/snippets.ts",
    "content": "export default [\n  {\n    title: '评分',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/rate-1.png',\n    schema: {\n      componentName: 'Rate',\n      props: {\n        defaultValue: 3,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/result/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Result',\n  title: '结果',\n  category: '反馈',\n  props: [\n    {\n      name: 'title',\n      title: { label: '标题', tip: 'title 文字' },\n      propType: 'node',\n    },\n    {\n      name: 'subTitle',\n      title: { label: '副标题', tip: 'subTitle 文字' },\n      propType: 'node',\n    },\n    {\n      name: 'status',\n      title: {\n        label: '状态',\n        tip: '结果的状态，决定图标和颜色',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'error', 'info', 'warning', '404', '403', '500'],\n      },\n    },\n    {\n      name: 'icon',\n      title: { label: '自定义 icon', tip: '自定义 icon' },\n      propType: 'node',\n    },\n    {\n      name: 'extra',\n      title: { label: '操作区', tip: '操作区' },\n      propType: 'node',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/result/snippets.ts",
    "content": "export default [\n  {\n    title: '结果',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/result-1.png',\n    schema: {\n      componentName: 'Result',\n      props: {\n        status: 'success',\n        title: 'Success!',\n        subTitle: 'Order number: 123',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/segmented/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Segmented',\n  title: '分段控制器',\n  category: '数据展示',\n  group: '基础组件',\n  props: [\n    {\n      name: 'block',\n      title: { label: 'block ', tip: '将宽度调整为父元素宽度的选项 ' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认的选中项' },\n      setter: ['StringSetter', 'NumberSetter'],\n    },\n    {\n      name: 'disabled',\n      title: { label: '禁用', tip: '是否禁用' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'options',\n      title: { label: '配置内容', tip: '数据化配置选项内容' },\n      setter: ['JsonSetter', 'VariableSetter'],\n    },\n    {\n      name: 'size',\n      title: { label: '控件尺寸', tip: '控件尺寸' },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'SelectSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    // {\n    //   name: 'value',\n    //   title: { label: '选中项', tip: '当前选中项' },\n    //   propType: {\n    //     type: 'arrayOf',\n    //     value: { type: 'oneOfType', value: ['string', 'number'] },\n    //   },\n    // },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(value,selectedOptions,${extParams}){\\n// 选择完成后的回调\\nconsole.log('onChange', value, selectedOptions);}\",\n        }\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/segmented/snippets.ts",
    "content": "export default [\n  {\n    title: '分段控制器',\n    screenshot: require('./__screenshots__/segmented.png'),\n    schema: {\n      componentName: 'Segmented',\n      props: {\n        options: ['Daily', 'Weekly', 'Monthly'],\n        // value: 'Daily',\n        defaultValue: 'Daily',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/select/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Select',\n  title: '选择器',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认选中值' },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          { type: 'arrayOf', value: 'string' },\n          'number',\n          { type: 'arrayOf', value: 'number' },\n        ],\n      },\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前值' },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          { type: 'arrayOf', value: 'string' },\n          'number',\n          { type: 'arrayOf', value: 'number' },\n        ],\n      },\n    },\n    {\n      name: 'options',\n      title: { label: '可选项', tip: '可选项' },\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'shape',\n          value: [\n            {\n              name: 'label',\n              propType: 'string',\n              description: '选项名',\n              defaultValue: '选项名',\n            },\n            {\n              name: 'value',\n              propType: ['string', 'number'],\n              description: '选项值',\n              defaultValue: '选项值',\n            },\n            {\n              name: 'disabled',\n              propType: 'bool',\n              description: '是否禁用',\n              defaultValue: false,\n            },\n          ],\n        },\n      },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'label',\n                    title: '选项名',\n                    setter: ['StringSetter', 'VariableSetter'],\n                    isRequired: true\n                  },\n                  {\n                    name: 'value',\n                    title: '选项值',\n                    setter: ['StringSetter', 'NumberSetter', 'VariableSetter'],\n                    isRequired: true\n                  },\n                  {\n                    name: 'disabled',\n                    title: '是否禁用',\n                    setter: ['BoolSetter', 'VariableSetter'],\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                label: '选项名',\n                value: uuid(),\n                disabled: false,\n              };\n            },\n          },\n        },\n      },\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '默认获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'defaultActiveFirstOption',\n      title: { label: '高亮首个选项', tip: '是否默认高亮第一个选项' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'labelInValue',\n      title: {\n        label: '值包含label',\n        tip: '把每个选项的 label 包装到 value 中',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'mode',\n      title: { label: '多选/单选', tip: '多选/单选' },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '单选',\n              value: 'single',\n            },\n            {\n              title: '多选',\n              value: 'multiple',\n            },\n            {\n              title: '任意内容',\n              value: 'tags',\n            },\n          ],\n        },\n      },\n      propType: { type: 'oneOf', value: ['single', 'multiple', 'tags'] },\n    },\n    {\n      name: 'maxTagCount',\n      title: { label: '最大tag数', tip: '最多显示多少个tag' },\n      condition(target) {\n        return target.getProps().getPropValue('mode') === 'tags';\n      },\n      propType: 'number',\n    },\n    {\n      name: 'maxTagTextLength',\n      title: { label: 'tag文本长度', tip: '最大显示的tag文本长度' },\n      condition(target) {\n        return target.getProps().getPropValue('mode') === 'tags';\n      },\n      propType: 'number',\n    },\n    {\n      name: 'notFoundContent',\n      title: { label: '搜索为空提示文案', tip: '搜索为空提示文案' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'placeholder',\n      title: { label: '选择框默认文字', tip: '选择框默认文字' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'showArrow',\n      title: { label: '是否显示下拉箭头', tip: '是否显示下拉小箭头' },\n      propType: 'bool',\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'showSearch',\n      title: { label: '是否可搜索', tip: '是否可搜索' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '选择框大小' },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'loading',\n      title: { label: '加载中', tip: '加载中状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'filterOption',\n      title: { label: '筛选可选项', tip: '是否根据输入进行筛选' },\n      propType: {\n        type: 'oneOfType',\n        value: ['bool', 'func'],\n      },\n      defaultValue: true,\n    },\n    {\n      name: 'optionFilterProp',\n      title: { label: '用于筛选的字段', tip: '用于过滤的字段' },\n      propType: {\n        type: 'oneOf',\n        value: ['value', 'label'],\n      },\n      defaultValue: 'value',\n    },\n    // {\n    //   name: 'suffixIcon',\n    //   title: { label: '自后缀图标', tip: '自定义的选择框后缀图标' },\n    //   propType: 'node',\n    // },\n    // {\n    //   name: 'removeIcon',\n    //   title: { label: '清除图标', tip: '自定义的多选框清除图标' },\n    //   propType: 'node',\n    // },\n    // {\n    //   name: 'clearIcon',\n    //   title: { label: '自定义的多选框清空图标', tip: '自定义的多选框清空图标' },\n    //   propType: 'node',\n    // },\n    // {\n    //   name: 'menuItemSelectedIcon',\n    //   title: {\n    //     label: '自定义多选时当前选中的条目图标',\n    //     tip: '自定义多选时当前选中的条目图标',\n    //   },\n    //   propType: 'node',\n    // },\n    {\n      name: 'tokenSeparators',\n      title: { label: '自动分词的分隔符', tip: '自动分词的分隔符' },\n      propType: { type: 'arrayOf', value: 'string' },\n    },\n    {\n      name: 'onBlur',\n      title: { label: '失去焦点时回调', tip: '失去焦点时回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      title: {\n        label: '选中回调函数',\n        tip: '选中 option，或 input 的 value 变化时，调用此函数',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onDeselect',\n      title: {\n        label: '取消选中时回调',\n        tip: '取消选中时调用，参数为选中项的 value (或 key) 值，仅在 multiple 或 tags 模式下生效',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      title: { label: '获得焦点时回调', tip: '获得焦点时回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onInputKeyDown',\n      title: { label: '按键按下时回调', tip: '按键按下时回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onMouseEnter',\n      title: { label: '鼠标移入时回调', tip: '鼠标移入时回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onMouseLeave',\n      title: { label: '鼠标移出时回调', tip: '鼠标移出时回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onPopupScroll',\n      title: { label: '下拉列表滚动时的回调', tip: '下拉列表滚动时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onSearch',\n      title: { label: '文本框值变化时回调', tip: '文本框值变化时回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onSelect',\n      title: {\n        label: '被选中时回调',\n        tip: '被选中时调用，参数为选中项的 value (或 key) 值',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onDropdownVisibleChange',\n      title: { label: '展开下拉菜单的回调', tip: '展开下拉菜单的回调' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onBlur',\n          template: \"onBlur(${extParams}){\\n// 失去焦点时回调\\nconsole.log('onBlur');}\",\n        },\n        {\n          name: 'onChange',\n          template:\n            \"onChange(value,option,${extParams}){\\n// 选中 option，或 input 的 value 变化时，调用此函数\\nconsole.log('onChange',value,option);}\",\n        },\n        {\n          name: 'onDeselect',\n          template:\n            \"onDeselect(value,${extParams}){\\n// 取消选中时调用\\nconsole.log('onDeselect',value);}\",\n        },\n        {\n          name: 'onFocus',\n          template: \"onFocus(${extParams}){\\n// 获得焦点时回调\\nconsole.log('onFocus');}\",\n        },\n        {\n          name: 'onInputKeyDown',\n          template:\n            \"onInputKeyDown(${extParams}){\\n// 按键按下时回调\\nconsole.log('onInputKeyDown');}\",\n        },\n        {\n          name: 'onMouseEnter',\n          template: \"onMouseEnter(${extParams}){\\n// 鼠标移入时回调\\nconsole.log('onMouseEnter');}\",\n        },\n        {\n          name: 'onMouseLeave',\n          template: \"onMouseLeave(${extParams}){\\n// 鼠标移出时回调\\nconsole.log('onMouseLeave');}\",\n        },\n        {\n          name: 'onPopupScroll',\n          template:\n            \"onPopupScroll(${extParams}){\\n// 下拉列表滚动时的回调\\nconsole.log('onPopupScroll');}\",\n        },\n        {\n          name: 'onSearch',\n          template:\n            \"onSearch(value,${extParams}){\\n// 文本框值变化时回调\\nconsole.log('onSearch',value);}\",\n        },\n        {\n          name: 'onSelect',\n          template:\n            \"onSelect(value,option,${extParams}){\\n// 被选中时调用\\nconsole.log('onSelect',value,option);}\",\n        },\n        {\n          name: 'onDropdownVisibleChange',\n          template:\n            \"onDropdownVisibleChange(open,${extParams}){\\n// 展开下拉菜单的回调\\nconsole.log('onDropdownVisibleChange',open);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/select/snippets.ts",
    "content": "export default [\n  {\n    title: '选择器',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/select-1.png',\n    schema: {\n      componentName: 'Select',\n      props: {\n        style: {\n          width: 200,\n        },\n        options: [\n          {\n            label: 'A',\n            value: 'A',\n          },\n          {\n            label: 'B',\n            value: 'B',\n          },\n          {\n            label: 'C',\n            value: 'C',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/skeleton/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Skeleton',\n  title: '骨架屏',\n  category: '反馈',\n  props: [\n    {\n      name: 'active',\n      title: { label: '动画效果', tip: '是否展示动画效果' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'avatar',\n      title: { label: '头像占位图', tip: '是否显示头像占位图' },\n      propType: { type: 'oneOfType', value: ['bool', 'object'] },\n    },\n    {\n      name: 'loading',\n      title: {\n        label: '加载中',\n        tip: '为 true 时，显示占位图。反之则直接展示子组件',\n      },\n      propType: 'bool',\n    },\n    {\n      name: 'paragraph',\n      title: { label: '段落占位图', tip: '是否显示段落占位图' },\n      propType: { type: 'oneOfType', value: ['bool', 'object'] },\n    },\n    {\n      name: 'title',\n      title: { label: '标题占位图', tip: '是否显示标题占位图' },\n      propType: { type: 'oneOfType', value: ['bool', 'object'] },\n    },\n    {\n      name: 'round',\n      title: {\n        label: '圆角',\n        tip: '为 true 时，段落和标题显示圆角',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n  ],\n  configure: { \n    component: { isContainer: true },\n    supports: { style: true } \n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/skeleton/snippets.ts",
    "content": "export default [\n  {\n    title: '骨架屏',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/skeleton-1.png',\n    schema: {\n      componentName: 'Skeleton',\n      props: {\n        active: true,\n        loading: true \n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/slider/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Slider',\n  title: '滑动输入条',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: {\n        label: '默认值',\n        tip: '设置初始取值。当 `range` 为 false 时，使用 number，否则用 \\\\[number, number]',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['number', { type: 'arrayOf', value: 'number' }],\n      },\n    },\n    {\n      name: 'range',\n      title: { label: '双滑块模式', tip: '双滑块模式' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      setValue(target, range) {\n        let defaultValue = target.node.getPropValue('defaultValue');\n        if (range) {\n          defaultValue = Array.isArray(defaultValue) ? defaultValue : [0, defaultValue];\n        } else {\n          defaultValue = Array.isArray(defaultValue)\n            ? defaultValue[1] || defaultValue[0]\n            : defaultValue;\n        }\n        target.node.setPropValue('defaultValue', defaultValue);\n      },\n    },\n    // {\n    //   name: 'value',\n    //   title: {\n    //     label: '当前值',\n    //     tip:\n    //       '设置当前取值。当 `range` 为 false 时，使用 number，否则用 \\\\[number, number]',\n    //   },\n    //   propType: {\n    //     type: 'oneOfType',\n    //     value: ['number', { type: 'arrayOf', value: 'number' }],\n    //   },\n    // },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      condition(target) {\n        return target.getProps().getPropValue('range') === true;\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabled',\n      title: {\n        label: '是否禁用',\n        tip: '是否为禁用状态',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'dots',\n      title: { label: '对齐刻度', tip: '是否只能拖拽到刻度上' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    // {\n    //   name: 'included',\n    //   title: {\n    //     label:\n    //       '`marks` 不为空对象时有效，值为 true 时表示值为包含关系，false 表示并列',\n    //     tip:\n    //       '`marks` 不为空对象时有效，值为 true 时表示值为包含关系，false 表示并列',\n    //   },\n    //   propType: 'bool',\n    //   defaultValue: true,\n    // },\n    // {\n    //   name: 'marks',\n    //   title: {\n    //     label:\n    //       '刻度标记，key 的类型必须为 `number` 且取值在闭区间 \\\\[min, max] 内，每个标签可以单独设置样式',\n    //     tip:\n    //       '刻度标记，key 的类型必须为 `number` 且取值在闭区间 \\\\[min, max] 内，每个标签可以单独设置样式',\n    //   },\n    //   propType: 'object',\n    // },\n    {\n      name: 'max',\n      title: { label: '最大值', tip: '最大值' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'min',\n      title: { label: '最小值', tip: '最小值' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'reverse',\n      title: { label: '反向坐标轴', tip: '反向坐标轴' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'step',\n      title: {\n        label: '步长',\n        tip:\n          '步长，取值必须大于 0，并且可被 (max - min) 整除。当 `marks` 不为空对象时，可以设置 `step` 为 null，此时 Slider 的可选值仅有 marks 标出来的部分',\n      },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    // {\n    //   name: 'tipFormatter',\n    //   title: {\n    //     label:\n    //       'Slider 会把当前值传给 `tipFormatter`，并在 Tooltip 中显示 `tipFormatter` 的返回值，若为 null，则隐藏 Tooltip',\n    //     tip:\n    //       'Slider 会把当前值传给 `tipFormatter`，并在 Tooltip 中显示 `tipFormatter` 的返回值，若为 null，则隐藏 Tooltip',\n    //   },\n    //   propType: 'func',\n    // },\n    {\n      name: 'vertical',\n      title: {\n        label: '垂直方向',\n        tip: '值为 true 时，Slider 为垂直方向',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'onAfterChange',\n      title: {\n        label: '与 `onmouseup` 触发时机一致，把当前值作为参数传入',\n        tip: '与 `onmouseup` 触发时机一致，把当前值作为参数传入',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      title: {\n        label: '当 Slider 的值发生改变时，会触发 onChange 事件，并把改变后的值作为参数传入',\n        tip: '当 Slider 的值发生改变时，会触发 onChange 事件，并把改变后的值作为参数传入',\n      },\n      propType: 'func',\n    },\n    // {\n    //   name: 'tooltipPlacement',\n    //   title: {\n    //     label: '设置 Tooltip 展示位置。参考 [Tooltip](/components/tooltip/)',\n    //     tip: '设置 Tooltip 展示位置。参考 [Tooltip](/components/tooltip/)',\n    //   },\n    //   propType: 'string',\n    // },\n    // {\n    //   name: 'tooltipVisible',\n    //   title: {\n    //     label:\n    //       '值为 true 时，Tooltip 将会始终显示；否则始终不显示，哪怕在拖拽及移入时',\n    //     tip:\n    //       '值为 true 时，Tooltip 将会始终显示；否则始终不显示，哪怕在拖拽及移入时',\n    //   },\n    //   propType: 'bool',\n    // },\n    // {\n    //   name: 'getTooltipPopupContainer',\n    //   title: {\n    //     label: 'Tooltip 渲染父节点，默认渲染到 body 上',\n    //     tip: 'Tooltip 渲染父节点，默认渲染到 body 上',\n    //   },\n    //   propType: 'func',\n    // },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onAfterChange',\n          template:\n            \"onAfterChange(value,${extParams}){\\n// 与 onmouseup 触发时机一致\\nconsole.log('onAfterChange',value);}\",\n        },\n        {\n          name: 'onChange',\n          template:\n            \"onChange(value,${extParams}){\\n// 当 Slider 的值发生改变时触发回调\\nconsole.log('onChange',value);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/slider/snippets.ts",
    "content": "export default [\n  {\n    title: '滑动输入条',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/slider-1.png',\n    schema: {\n      componentName: 'Slider',\n      props: {\n        defaultValue: 30,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/slot/meta.ts",
    "content": "module.exports = {\n  componentName: 'Slot',\n  npm: {\n    package: '@alilc/antd-lowcode-materials',\n    version: 'latest',\n    exportName: 'Slot',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      {\n        name: '___title',\n        title: {\n          type: 'i18n',\n          'en-US': 'Slot Title',\n          'zh-CN': '插槽标题',\n        },\n        setter: 'StringSetter',\n        defaultValue: '插槽容器',\n      },\n      {\n        name: '___params',\n        title: {\n          type: 'i18n',\n          'en-US': 'Slot Params',\n          'zh-CN': '插槽入参',\n        },\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'StringSetter',\n              props: {\n                placeholder: {\n                  type: 'i18n',\n                  'zh-CN': '参数名称',\n                  'en-US': 'Argument Name',\n                },\n              },\n            },\n          },\n        },\n      },\n    ],\n    component: {\n      isContainer: true,\n      disableBehaviors: '*',\n    },\n    // events/className/style/general/directives\n    supports: false,\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/slot/view.tsx",
    "content": "import { Component } from 'react';\n\nclass Slot extends Component {\n  static displayName = 'Slot';\n\n  static componentMetadata = {\n    componentName: 'Slot',\n    configure: {\n      props: [\n        {\n          name: '___title',\n          title: {\n            type: 'i18n',\n            'en-US': 'Slot Title',\n            'zh-CN': '插槽标题',\n          },\n          setter: 'StringSetter',\n          defaultValue: '插槽容器',\n        },\n        {\n          name: '___params',\n          title: {\n            type: 'i18n',\n            'en-US': 'Slot Params',\n            'zh-CN': '插槽入参',\n          },\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'StringSetter',\n                props: {\n                  placeholder: {\n                    type: 'i18n',\n                    'zh-CN': '参数名称',\n                    'en-US': 'Argument Name',\n                  },\n                },\n              },\n            },\n          },\n        },\n      ],\n      component: {\n        isContainer: true,\n      },\n      // events/className/style/general/directives\n      supports: false,\n    },\n  };\n\n  render() {\n    const { children } = this.props;\n    return <>{children}</>;\n  }\n}\n\nexport default Slot;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/space/meta.ts",
    "content": "import { ComponentMetadata } from \"@alilc/lowcode-types\";\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Space',\n  title: '间距',\n  category: '布局',\n  props: [\n    {\n      name: 'align',\n      title: { label: '对齐方式', tip: '对齐方式' },\n      propType: {\n        type: 'oneOf',\n        value: ['start', 'end', 'center', 'baseline'],\n      },\n    },\n    {\n      name: 'direction',\n      title: { label: '间距方向', tip: '间距方向' },\n      propType: { type: 'oneOf', value: ['vertical', 'horizontal'] },\n    },\n    {\n      name: 'size',\n      title: { label: '间距大小', tip: '间距大小' },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'oneOf',\n            value: ['small', 'middle', 'large'],\n          },\n          'number',\n        ],\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'wrap',\n      title: { label: '是否自动换行', tip: '是否自动换行' },\n      propType: \"bool\",\n      condition: {\n        type: 'JSFunction',\n        value: 'target => target.getProps().getPropValue(\"direction\")===\"horizontal\"',\n      },\n    },\n    {\n      name: 'split',\n      title: { label: '间隔组件', tip: '间隔组件,可拖组件进来， 常用的有竖向分隔线' },\n      propType: \"node\",\n    },\n  ],\n  configure: { component: { isContainer: true }, supports: { style: true } },\n} as ComponentMetadata | any;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/space/snippets.ts",
    "content": "export default [\n  {\n    title: '间距',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/space-1.png',\n    schema: {\n      componentName: 'Space',\n      props: {},\n      children: [\n        {\n          componentName: 'Button',\n          props: {\n            children: 'Button-1',\n          },\n        },\n        {\n          componentName: 'Button',\n          props: {\n            children: 'Button-2',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/spin/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Spin',\n  title: '加载中',\n  category: '反馈',\n  props: [\n    {\n      name: 'delay',\n      title: { label: '延迟显示', tip: '延迟显示加载效果的时间（防止闪烁）' },\n      propType: 'number',\n    },\n    {\n      name: 'indicator',\n      title: { label: '加载指示符', tip: '加载指示符' },\n      propType: 'node',\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: '组件大小',\n      },\n      propType: { type: 'oneOf', value: ['small', 'default', 'large'] },\n      defaultValue: 'default',\n    },\n    {\n      name: 'spinning',\n      title: { label: '加载状态', tip: '是否为加载中状态' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'tip',\n      title: { label: '描述文案', tip: '当作为包裹元素时，可以自定义描述文案' },\n      propType: 'string',\n    },\n    {\n      name: 'wrapperClassName',\n      title: { label: '包装器的类属性', tip: '包装器的类属性' },\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/spin/snippets.ts",
    "content": "export default [\n  {\n    title: '加载中',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/spin-1.png',\n    schema: {\n      componentName: 'Spin',\n      props: {\n        size: 'large',\n        tip: 'loading...',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/statistic/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Statistic',\n  title: '统计数值',\n  category: '数据展示',\n  props: [\n    {\n      name: 'decimalSeparator',\n      title: { label: '设置小数点', tip: '设置小数点' },\n      propType: 'string',\n    },\n    {\n      name: 'formatter',\n      title: { label: '自定义数值展示', tip: '自定义数值展示' },\n      propType: 'func',\n    },\n    {\n      name: 'groupSeparator',\n      title: { label: '设置千分位标识符', tip: '设置千分位标识符' },\n      propType: 'string',\n    },\n    {\n      name: 'precision',\n      title: { label: '数值精度', tip: '数值精度' },\n      propType: 'number',\n    },\n    {\n      name: 'prefix',\n      title: { label: '设置数值的前缀', tip: '设置数值的前缀' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'suffix',\n      title: { label: '设置数值的后缀', tip: '设置数值的后缀' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'title',\n      title: { label: '数值的标题', tip: '数值的标题' },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'value',\n      title: { label: '数值内容', tip: '数值内容' },\n      propType: { type: 'oneOfType', value: ['string', 'number'] },\n    },\n    {\n      name: 'valueStyle',\n      title: { label: '设置数值的样式', tip: '设置数值的样式' },\n      propType: 'object',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/statistic/snippets.ts",
    "content": "export default [\n  {\n    title: '统计数值',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/statistic-1.png',\n    schema: {\n      componentName: 'Statistic',\n      props: {\n        title: 'Active Users',\n        value: 16589,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/steps/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Steps',\n  title: '步骤条',\n  category: '导航',\n  props: [\n    {\n      name: 'steps',\n      title: '步骤配置',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid(),\n                  },\n                  {\n                    name: 'title',\n                    title: '标题',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'subTitle',\n                    title: '子标题',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'description',\n                    title: '详细描述',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'disabled',\n                    title: '禁用',\n                    setter: 'BoolSetter',\n                    initialValue: false,\n                  },\n                  {\n                    name: 'status',\n                    title: { label: '状态', tip: '选择框大小' },\n                    setter: {\n                      componentName: 'RadioGroupSetter',\n                      props: {\n                        options: [\n                          {\n                            title: 'wait',\n                            value: 'wait',\n                          },\n                          {\n                            title: 'process',\n                            value: 'process',\n                          },\n                          {\n                            title: 'finish',\n                            value: 'finish',\n                          },\n                          {\n                            title: 'error',\n                            value: 'error',\n                          },\n                        ],\n                      },\n                    },\n                    propType: {\n                      type: 'oneOf',\n                      value: ['wait', 'process', 'finish', 'error'],\n                    },\n                    defaultValue: 'wait',\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: `Steps${uuid()}`,\n                title: '步骤',\n                disabled: false,\n              };\n            },\n          },\n        },\n      },\n      extraProps: {\n        getValue(target, fieldValue) {\n          const map = target.node.children.map((child) => {\n            const key = child.getPropValue('key') ? String(child.getPropValue('key')) : child.id;\n            return {\n              key,\n              title: child.getPropValue('title'),\n              subTitle: child.getPropValue('subTitle'),\n              description: child.getPropValue('description'),\n              disabled: child.getPropValue('disabled'),\n              status: child.getPropValue('status'),\n            };\n          });\n          return map;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          const map = {};\n\n          if (!Array.isArray(value)) {\n            value = [];\n          }\n          value.forEach((item) => {\n            const tabItem = Object.assign({}, item);\n            map[item.key] = tabItem;\n          });\n\n          node.children.mergeChildren(\n            (child) => {\n              const key = String(child.getPropValue('key'));\n              if (Object.hasOwnProperty.call(map, key)) {\n                child.setPropValue('title', map[key].title);\n                child.setPropValue('subTitle', map[key].subTitle);\n                child.setPropValue('description', map[key].description);\n                child.setPropValue('disabled', map[key].disabled);\n                child.setPropValue('status', map[key].status);\n\n                delete map[key];\n                return false;\n              }\n              return true;\n            },\n            () => {\n              const items = [];\n              for (const key in map) {\n                if (Object.hasOwnProperty.call(map, key)) {\n                  items.push({\n                    componentName: 'Steps.Step',\n                    props: map[key],\n                  });\n                }\n              }\n              return items;\n            },\n\n            (child1, child2) => {\n              const a = value.findIndex(\n                (item) => String(item.key) === String(child1.getPropValue('key')),\n              );\n              const b = value.findIndex(\n                (item) => String(item.key) === String(child2.getPropValue('key')),\n              );\n              return a - b;\n            },\n          );\n        },\n      },\n    },\n    {\n      name: 'className',\n      title: { label: '步骤条类名', tip: '步骤条类名' },\n      propType: 'string',\n    },\n    {\n      name: 'type',\n      title: {\n        label: '类型',\n        tip: '步骤条类型，有 `default` 和 `navigation` 两种',\n      },\n      propType: { type: 'oneOf', value: ['default', 'navigation'] },\n      defaultValue: 'default',\n    },\n    {\n      name: 'current',\n      title: {\n        label: '当前步骤',\n        tip: '指定当前步骤，从 0 开始记数。在子 Step 元素中，可以通过 `status` 属性覆盖状态',\n      },\n      propType: 'number',\n    },\n    {\n      name: 'direction',\n      title: {\n        label: '步骤条方向',\n        tip: '指定步骤条方向。目前支持水平（`horizontal`）和竖直（`vertical`）两种方向',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['horizontal', 'vertical'],\n      },\n    },\n    {\n      name: 'labelPlacement',\n      title: {\n        label: '标签放置位置',\n        tip: '指定标签放置位置，默认水平放图标右侧，可选 `vertical` 放图标下方',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['horizontal', 'vertical'],\n      },\n      defaultValue: 'horizontal',\n    },\n    {\n      name: 'progressDot',\n      title: {\n        label: '点状步骤条',\n        tip: '点状步骤条，可以设置为一个 func',\n      },\n      propType: { type: 'oneOfType', value: ['bool', 'func'] },\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: '指定大小',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['default', 'small'],\n      },\n      defaultValue: 'default',\n    },\n    {\n      name: 'status',\n      title: {\n        label: '当前步骤状态',\n        tip: '指定当前步骤的状态，可选 `wait` `process` `finish` `error`',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['wait', 'process', 'finish', 'error'],\n      },\n      defaultValue: 'process',\n    },\n    {\n      name: 'initial',\n      title: {\n        label: '起始序号',\n        tip: '起始序号，从 0 开始记数',\n      },\n      propType: 'number',\n      defaultValue: 0,\n    },\n    {\n      name: 'onChange',\n      title: { label: '点击切换步骤时触发', tip: '点击切换步骤时触发' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: { childWhitelist: ['Steps.Step'] },\n    },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(current,${extParams}){\\n// 点击切换步骤时触发\\nconsole.log('onChange',current);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/steps/snippets.ts",
    "content": "export default [\n  {\n    title: '步骤条',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/steps-1.png',\n    schema: {\n      componentName: 'Steps',\n      props: {\n        current: 1,\n      },\n      children: [\n        {\n          componentName: 'Steps.Step',\n          props: {\n            title: 'Finished',\n            description: 'This is a description.',\n          },\n        },\n        {\n          componentName: 'Steps.Step',\n          props: {\n            title: 'In Progress',\n            subTitle: 'Left 00:00:08',\n            description: 'This is a description.',\n          },\n        },\n        {\n          componentName: 'Steps.Step',\n          props: {\n            title: 'Waiting',\n            description: 'This is a description.',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/steps.step/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Steps.Step',\n  title: '步骤项',\n  props: [\n    {\n      name: 'title',\n      title: { label: '标题', tip: '标题' },\n      propType: 'string',\n    },\n    {\n      name: 'subTitle',\n      title: { label: '子标题', tip: '子标题' },\n      propType: 'string',\n    },\n    {\n      name: 'description',\n      title: { label: '步骤描述', tip: '步骤描述' },\n      propType: 'string',\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n    },\n    {\n      name: 'icon',\n      title: { label: '图标', tip: '图标' },\n      propType: 'node',\n    },\n    {\n      name: 'status',\n      title: { label: '状态', tip: '状态' },\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: { nestingRule: { parentWhitelist: ['Steps'] } },\n    supports: { style: true },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/steps.step/snippets.ts",
    "content": "export default [];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/switch/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Switch',\n  title: '开关',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultChecked',\n      title: { label: '默认选中', tip: '默认是否选中' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'checked',\n      title: { label: '是否选中', tip: '当前是否选中' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true,\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '组件自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'checkedChildren',\n      title: { label: '选中时内容', tip: '选中时的内容' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'unCheckedChildren',\n      title: { label: '非选中时内容', tip: '非选中时的内容' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'loading',\n      title: { label: '加载中', tip: '加载中' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '开关大小' },\n      propType: { type: 'oneOf', value: ['default', 'small'] },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '默认',\n              value: 'default',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'default',\n    },\n    {\n      name: 'onChange',\n      title: { label: '变化时回调函数', tip: '变化时回调函数' },\n      propType: 'func',\n    },\n    {\n      name: 'onClick',\n      title: { label: '点击时回调函数', tip: '点击时回调函数' },\n      propType: 'func',\n    },\n    // {\n    //   name: 'className',\n    //   title: { label: '类名', tip: '类名' },\n    //   propType: 'string',\n    // },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(checked,event,${extParams}){\\n// 变化时回调函数\\nconsole.log('onChange',checked,event);}\",\n        },\n        {\n          name: 'onClick',\n          template:\n            \"onClick(checked,event,${extParams}){\\n// 点击时回调函数\\nconsole.log('onClick',checked,event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/switch/snippets.ts",
    "content": "export default [\n  {\n    title: '开关',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/switch-1.png',\n    schema: {\n      componentName: 'Switch',\n      props: {\n        defaultChecked: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/table/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Table',\n  title: '表格',\n  category: '数据展示',\n  props: [\n    {\n      title: '数据源',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'dataSource',\n          title: { label: '表格数据', tip: 'dataSource | 表格数据' },\n          propType: 'object',\n          setter: 'JsonSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'loading',\n          title: { label: '加载中', tip: 'loading | 是否加载中' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n          supportVariable: true,\n        },\n        {\n          name: 'rowKey',\n          title: {\n            label: '行Key',\n            tip: 'rowKey | 表格行 key 的取值，可以是字符串或一个函数',\n          },\n          propType: { type: 'oneOfType', value: ['string', 'func'] },\n          setter: [\n            'StringSetter',\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'getRowKey(record,index,${extParams}){\\n// 通过函数获取表格行 key\\nreturn record.id;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n          defaultValue: 'id',\n        },\n      ],\n    },\n    {\n      name: 'columns',\n      title: { label: '表格列', tip: '表格列的配置描述，具体项见下表' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'title',\n                    title: { label: '列标题', tip: 'title | 列标题' },\n                    propType: { type: 'oneOfType', value: ['string', 'func'] },\n                    setter: [\n                      'StringSetter',\n                      {\n                        componentName: 'SlotSetter',\n                        title: '列标题插槽',\n                        initialValue: {\n                          type: 'JSSlot',\n                          params: ['options'],\n                          value: [],\n                        },\n                      },\n                    ],\n                  },\n                  {\n                    name: 'dataIndex',\n                    title: { label: '数据字段', tip: 'dataIndex | 数据字段' },\n                    propType: 'string',\n                    setter: 'StringSetter',\n                    isRequired: true,\n                  },\n                  {\n                    name: 'key',\n                    title: { label: 'React key', tip: 'key | React需要的key' },\n                    propType: 'string',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'align',\n                    title: { label: '对齐方式', tip: 'align | 对齐方式' },\n                    propType: {\n                      type: 'oneOf',\n                      value: ['left', 'right', 'center'],\n                    },\n                    defaultValue: 'left',\n                    setter: [\n                      {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'left',\n                              value: 'left',\n                            },\n                            {\n                              title: 'right',\n                              value: 'right',\n                            },\n                            {\n                              title: 'center',\n                              value: 'center',\n                            },\n                          ],\n                        },\n                      },\n                      'VariableSetter',\n                    ],\n                  },\n                  {\n                    name: 'fixed',\n                    title: { label: '列是否固定', tip: 'fixed | 列是否固定' },\n                    description: '（IE 下无效）列是否固定，可选 true (等效于 left) left right',\n                    defaultValue: '',\n                    propType: {\n                      type: 'oneOf',\n                      value: ['', 'left', 'right'],\n                    },\n                    setter: [\n                      {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: '不固定',\n                              value: '',\n                            },\n                            {\n                              title: '固定在左侧',\n                              value: 'left',\n                            },\n                            {\n                              title: '固定在右侧',\n                              value: 'right',\n                            },\n                          ],\n                        },\n                      },\n                      'VariableSetter',\n                    ],\n                  },\n                  {\n                    name: 'className',\n                    title: {\n                      label: '列样式类名',\n                      tip: 'className | 列样式类名',\n                    },\n                    propType: 'string',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'width',\n                    title: { label: '宽度', tip: 'width | 宽度' },\n                    propType: {\n                      type: 'oneOfType',\n                      value: ['number', 'string'],\n                    },\n                    setter: ['NumberSetter', 'StringSetter', 'VariableSetter'],\n                  },\n                  {\n                    name: 'sorter',\n                    title: {\n                      label: '排序规则',\n                      tip: 'sorter | 排序函数，本地排序使用一个函数，需要服务端排序可设为 true',\n                    },\n                    propType: { type: 'oneOfType', value: ['bool', 'func'] },\n                    setter: ['BoolSetter', 'FunctionSetter', 'VariableSetter'],\n                  },\n                  {\n                    name: 'hidden',\n                    title: {\n                      label: '是否隐藏',\n                      tip: 'hidden | 是否隐藏当前列',\n                    },\n                    propType: 'bool',\n                    setter: 'BoolSetter',\n                  },\n                  {\n                    name: 'filters',\n                    title: {\n                      label: '筛选菜单项',\n                      tip: 'filters | 表头的筛选菜单项',\n                    },\n                    propType: 'object',\n                    setter: 'JsonSetter',\n                  },\n                  {\n                    name: 'render',\n                    title: {\n                      label: '自定义渲染',\n                      tip:\n                        'render | 插槽内的物料表达式可通过this.record获取当前行数据，this.index获取索引',\n                    },\n                    propType: 'func',\n                    setter: [\n                      {\n                        componentName: 'SlotSetter',\n                        title: '单元格插槽',\n                        initialValue: {\n                          type: 'JSSlot',\n                          params: ['text', 'record', 'index'],\n                          value: [],\n                        },\n                      },\n                      'VariableSetter',\n                    ],\n                  },\n                ],\n              },\n            },\n            initialValue: { title: '标题' },\n          },\n        },\n      },\n    },\n    {\n      title: '外观',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'showHeader',\n          title: { label: '显示表头', tip: 'showHeader | 是否显示表头' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: true,\n        },\n        {\n          name: 'bordered',\n          title: {\n            label: '显示边框',\n            tip: 'bordered | 是否展示外边框和列边框',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'size',\n          title: { label: '表格大小', tip: 'size | 表格大小' },\n          propType: {\n            type: 'oneOf',\n            value: ['default', 'middle', 'small'],\n          },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '默认',\n                    value: 'default',\n                  },\n                  {\n                    title: '中',\n                    value: 'middle',\n                  },\n                  {\n                    title: '小',\n                    value: 'small',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n          defaultValue: 'default',\n        },\n        {\n          name: 'tableLayout',\n          title: { label: '表格布局', tip: 'tableLayout | 表格布局' },\n          defaultValue: '',\n          propType: {\n            type: 'oneOf',\n            value: ['', 'auto', 'fixed'],\n          },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '默认',\n                    value: '',\n                  },\n                  {\n                    title: '自动',\n                    value: 'auto',\n                  },\n                  {\n                    title: '固定',\n                    value: 'fixed',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    {\n      title: '分页',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'pagination',\n          title: { label: '显示分页', tip: 'pagination | 显示分页' },\n          propType: 'object',\n          setter: 'BoolSetter',\n          extraProps: {\n            setValue: (target, value) => {\n              if (value) {\n                target.parent.setPropValue('pagination', {\n                  pageSize: 10,\n                  size: 'default'\n                });\n              }\n            },\n          },\n        },\n        {\n          name: 'pagination.pageSize',\n          title: { label: '每页条数', tip: 'pagination.pageSize | 每页条数' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.total',\n          title: { label: '数据总数', tip: 'pagination.total | 数据总数' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.defaultCurrent',\n          title: {\n            label: '默认当前页',\n            tip: 'pagination.defaultCurrent | 默认的当前页数',\n          },\n          propType: 'number',\n          setter: 'NumberSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.current',\n          title: { label: '当前页数', tip: 'pagination.current | 当前页数' },\n          propType: 'number',\n          setter: 'NumberSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.showTotal',\n          title: {\n            label: '显示总数',\n            tip: 'pagination.showTotal | 用于显示数据总量和当前数据顺序',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'showTotal(total,range,${extParams}){\\n// 用于格式化显示表格数据总量\\nreturn `共 ${total} 条`;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.showSizeChanger',\n          title: {\n            label: '页数切换',\n            tip: 'pagination.showSizeChanger | 是否展示 pageSize 切换器',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.showQuickJumper',\n          title: {\n            label: '快速跳转',\n            tip: 'pagination.showQuickJumper | 是否可以快速跳转至某页',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.simple',\n          title: { label: '简单分页', tip: 'pagination.simple | 简单分页' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.size',\n          title: { label: '分页尺寸', tip: 'pagination.size | 分页尺寸' },\n          propType: {\n            type: 'oneOf',\n            value: ['default', 'small'],\n          },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '默认',\n                    value: 'default',\n                  },\n                  {\n                    title: '小',\n                    value: 'small',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n        {\n          name: 'pagination.position',\n          title: { label: '分页位置', tip: 'pagination.position | 分页位置' },\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'SelectSetter',\n                props: {\n                  options: [\n                    {\n                      title: '上左',\n                      value: 'topLeft',\n                    },\n                    {\n                      title: '上中',\n                      value: 'topCenter',\n                    },\n                    {\n                      title: '上右',\n                      value: 'topRight',\n                    },\n                    {\n                      title: '下左',\n                      value: 'bottomLeft',\n                    },\n                    {\n                      title: '下中',\n                      value: 'bottomCenter',\n                    },\n                    {\n                      title: '下右',\n                      value: 'bottomRight',\n                    },\n                  ],\n                },\n                initialValue: 'bottomRight',\n              },\n            },\n          },\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"pagination\")',\n          },\n        },\n      ],\n    },\n    {\n      title: '滚动',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'scroll.scrollToFirstRowOnChange',\n          title: {\n            label: '自动滚动',\n            tip: 'scroll.scrollToFirstRowOnChange | 是否自动滚动到表格顶部',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: true,\n        },\n        {\n          name: 'scroll.x',\n          title: {\n            label: '横向滚动',\n            tip:\n              'scroll.x | \t设置横向滚动，也可用于指定滚动区域的宽，可以设置为像素值，百分比，true 和 max-content',\n          },\n          propType: { type: 'oneOfType', value: ['number', 'bool'] },\n          setter: ['NumberSetter', 'BoolSetter', 'VariableSetter'],\n        },\n        {\n          name: 'scroll.y',\n          title: {\n            label: '纵向滚动',\n            tip: 'scroll.y | \t设置纵向滚动，也可用于指定滚动区域的高，可以设置为像素值',\n          },\n          propType: 'number',\n          setter: ['NumberSetter', 'VariableSetter'],\n        },\n      ],\n    },\n    {\n      title: '行选择器',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'rowSelection',\n          title: { label: '行选择', tip: 'rowSelection | 行选择' },\n          propType: 'object',\n          setter: 'BoolSetter',\n          extraProps: {\n            setValue: (target, value) => {\n              if (value) {\n                target.parent.setPropValue('rowSelection', {\n                  type: 'radio',\n                });\n              }\n            },\n          },\n        },\n        {\n          name: 'rowSelection.type',\n          title: { label: '行选择类型', tip: 'rowSelection.type | 多选/单选' },\n          propType: {\n            type: 'oneOf',\n            value: ['checkbox', 'radio'],\n          },\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '多选',\n                    value: 'checkbox',\n                  },\n                  {\n                    title: '单选',\n                    value: 'radio',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"rowSelection\")',\n          },\n        },\n        {\n          name: 'rowSelection.fixed',\n          title: {\n            label: '固定左边',\n            tip: 'rowSelection.fixed | 把选择框列固定在左边',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"rowSelection\")',\n          },\n        },\n        {\n          name: 'rowSelection.selectedRowKeys',\n          title: {\n            label: '选中行Key',\n            tip: 'rowSelection.selectedRowKeys | 指定选中项的 key 数组',\n          },\n          propType: 'object',\n          setter: 'JsonSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"rowSelection\")',\n          },\n        },\n        {\n          name: 'rowSelection.preserveSelectedRowKeys',\n          title: { label: '保留选项', tip: 'rowSelection.preserveSelectedRowKeys | 当数据被删除时仍然保留选项' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"rowSelection\")',\n          },\n        },\n        {\n          name: 'rowSelection.getCheckboxProps',\n          title: {\n            label: '默认属性',\n            tip: 'rowSelection.getCheckboxProps | 选择框的默认属性配置',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'getCheckboxProps(record,${extParams}){\\n// 选择框的默认属性配置\\nreturn { disabled: false };\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n          condition: {\n            type: 'JSFunction',\n            value: 'target => !!target.getProps().getPropValue(\"rowSelection\")',\n          },\n        },\n      ],\n    },\n    {\n      title: '行展开',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'expandable.expandedRowRender',\n          title: {\n            label: '展开行渲染',\n            tip: 'expandable.expandedRowRender | 额外的展开行',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'SlotSetter',\n              title: '展开行插槽',\n              initialValue: {\n                type: 'JSSlot',\n                params: ['record', 'index', 'indent', 'expanded'],\n                value: [],\n              },\n            },\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'expandedRowRender(record,index,indent,expanded,${extParams}){\\n// 展开行渲染\\nreturn `${record.id}`}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'expandable.rowExpandable',\n          title: {\n            label: '是否可展开',\n            tip: 'expandable.rowExpandable | 行是否可展开',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template: 'rowExpandable(record,${extParams}){\\n// 行是否可展开\\nreturn true;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    {\n      title: '扩展',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'title',\n          title: { label: '表格标题', tip: 'title | 表格标题' },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'SlotSetter',\n              title: '表格标题插槽',\n              initialValue: {\n                type: 'JSSlot',\n                params: ['currentPageData'],\n                value: [],\n              },\n            },\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'renderTitle(currentPageData,${extParams}){\\n// 自定义渲染表格顶部\\nreturn \"表格顶部\";\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'footer',\n          title: { label: '表格尾部', tip: 'footer | 表格尾部' },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'SlotSetter',\n              title: '表格尾部插槽',\n              initialValue: {\n                type: 'JSSlot',\n                params: ['currentPageData'],\n                value: [],\n              },\n            },\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'renderFooter(currentPageData,${extParams}){\\n// 自定义渲染表格尾部\\nreturn \"表格尾部\";\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'onHeaderRow',\n          title: { label: '头部行属性', tip: 'onHeaderRow | 设置头部行属性' },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'onHeaderRow(columns,index,${extParams}){\\n// 设置头部行属性\\nreturn {onClick:()=>{}};\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'onRow',\n          title: { label: '行属性', tip: 'onRow | 设置行属性' },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'onRow(record,index,${extParams}){\\n// 设置行属性\\nreturn {onClick:event=>{}};\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'rowClassName',\n          title: { label: '行类名', tip: 'rowClassName | 表格行的类名' },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'rowClassName(record,index,${extParams}){\\n// 表格行的类名\\nreturn `className-${record.type}`;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(pagination,filters,sorter,extra,${extParams}){\\n// 表格翻页事件\\nconsole.log('onChange', pagination);}\",\n        },\n        {\n          name: 'rowSelection.onChange',\n          template:\n            \"onRowSelectionChange(selectedRowKeys,selectedRows,${extParams}){\\n// 选中项发生变化时的回调\\nconsole.log('onRowSelectionChange', selectedRowKeys, selectedRows);}\",\n        },\n        {\n          name: 'expandable.onExpand',\n          template:\n            \"onExpandableExpand(expanded,record){\\n// 点击展开图标时触发\\nconsole.log('onRowSelectionChange', expanded, record);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/table/snippets.ts",
    "content": "export default [\n  {\n    title: '表格',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/table-1.png',\n    schema: {\n      componentName: 'Table',\n      props: {\n        dataSource: [\n          {\n            id: '1',\n            name: '胡彦斌',\n            age: 32,\n            address: '西湖区湖底公园1号',\n          },\n          {\n            id: '2',\n            name: '王一博',\n            age: 28,\n            address: '滨江区网商路699号',\n          },\n        ],\n        columns: [\n          {\n            title: '姓名',\n            dataIndex: 'name',\n            key: 'name',\n          },\n          {\n            title: '年龄',\n            dataIndex: 'age',\n            key: 'age',\n          },\n        ],\n        rowKey: 'id',\n        pagination: {\n          pageSize: 10,\n          total: 15,\n          current: 1,\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tabs/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Tabs',\n  title: '标签页',\n  category: '数据展示',\n  props: [\n    {\n      name: 'items',\n      title: '标签项',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid(),\n                    supportVariable: true\n                  },\n                  {\n                    name: 'label',\n                    title: '标题',\n                    setter: 'StringSetter',\n                    initialValue: '标签项',\n                    supportVariable: true\n                  },\n                  // {\n                  //   name: 'closeable',\n                  //   title: '是否可删除',\n                  //   condition(target) {\n                  //     return target.getProps().getPropValue('type') === 'editable-card';\n                  //   },\n                  //   setter: 'BoolSetter',\n                  //   initialValue: true,\n                  // },\n                  {\n                    name: 'disabled',\n                    title: '禁用',\n                    setter: 'BoolSetter',\n                    initialValue: false,\n                    supportVariable: true\n                  },\n                  {\n                    name: 'forceRender',\n                    title: '隐藏时保留',\n                    propType: 'bool',\n                    setter: 'BoolSetter',\n                    initialValue: false,\n                    supportVariable: true\n                  },\n                  {\n                    name: 'children',\n                    title: '内容',\n                    setter: {\n                      componentName: 'SlotSetter',\n                      initialValue: {\n                        type: 'JSSlot',\n                        value: [],\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: uuid(),\n                label: '标签项',\n                disabled: false,\n                forceRender: false,\n                children: {\n                  type: 'JSSlot',\n                  value: [],\n                },\n              };\n            },\n          },\n        },\n      }\n    },\n    // {\n    //   name: 'tabs',\n    //   title: '标签项',\n    //   setter: {\n    //     componentName: 'ArraySetter',\n    //     props: {\n    //       itemSetter: {\n    //         componentName: 'ObjectSetter',\n    //         props: {\n    //           config: {\n    //             items: [\n    //               {\n    //                 name: 'key',\n    //                 title: 'key',\n    //                 setter: 'StringSetter',\n    //                 initialValue: (val) => val || uuid(),\n    //                 supportVariable: true\n    //               },\n    //               {\n    //                 name: 'tab',\n    //                 title: '标题',\n    //                 setter: 'StringSetter',\n    //                 initialValue: '标签项',\n    //                 supportVariable: true\n    //               },\n    //               // {\n    //               //   name: 'closeable',\n    //               //   title: '是否可删除',\n    //               //   condition(target) {\n    //               //     return target.getProps().getPropValue('type') === 'editable-card';\n    //               //   },\n    //               //   setter: 'BoolSetter',\n    //               //   initialValue: true,\n    //               // },\n    //               {\n    //                 name: 'disabled',\n    //                 title: '禁用',\n    //                 setter: 'BoolSetter',\n    //                 initialValue: false,\n    //                 supportVariable: true\n    //               },\n    //               {\n    //                 name: 'forceRender',\n    //                 title: '隐藏时保留',\n    //                 propType: 'bool',\n    //                 setter: 'BoolSetter',\n    //                 initialValue: false,\n    //                 supportVariable: true\n    //               },\n    //             ],\n    //           },\n    //         },\n    //         initialValue: () => {\n    //           return {\n    //             key: uuid(),\n    //             tab: '标签项',\n    //             closeable: true,\n    //             disabled: false,\n    //             forceRender: false,\n    //           };\n    //         },\n    //       },\n    //     },\n    //   },\n    //   extraProps: {\n    //     getValue(target, fieldValue) {\n    //       const map = target.node.children.map((child) => {\n    //         const key = child.getPropValue('key') ? String(child.getPropValue('key')) : child.id;\n    //         return {\n    //           key,\n    //           tab: child.getPropValue('tab'),\n    //           closeable: child.getPropValue('closeable'),\n    //           disabled: child.getPropValue('disabled'),\n    //           forceRender: child.getPropValue('forceRender'),\n    //         };\n    //       });\n    //       return map;\n    //     },\n    //     setValue(target, value) {\n    //       const { node } = target;\n    //       const map = {};\n\n    //       if (!Array.isArray(value)) {\n    //         value = [];\n    //       }\n    //       value.forEach((item) => {\n    //         const tabItem = Object.assign({}, item);\n    //         map[item.key] = tabItem;\n    //       });\n\n    //       node.children.mergeChildren(\n    //         (child) => {\n    //           const key = String(child.getPropValue('key'));\n    //           if (Object.hasOwnProperty.call(map, key)) {\n    //             child.setPropValue('tab', map[key].tab);\n    //             child.setPropValue('closeable', map[key].closeable);\n    //             child.setPropValue('disabled', map[key].disabled);\n    //             child.setPropValue('forceRender', map[key].forceRender);\n    //             delete map[key];\n    //             return false;\n    //           }\n    //           return true;\n    //         },\n    //         () => {\n    //           const items = [];\n    //           for (const key in map) {\n    //             if (Object.hasOwnProperty.call(map, key)) {\n    //               items.push({\n    //                 componentName: 'Tabs.TabPane',\n    //                 props: map[key],\n    //               });\n    //             }\n    //           }\n    //           return items;\n    //         },\n    //         (child1, child2) => {\n    //           const a = value.findIndex(\n    //             (item) => String(item.key) === String(child1.getPropValue('key')),\n    //           );\n    //           const b = value.findIndex(\n    //             (item) => String(item.key) === String(child2.getPropValue('key')),\n    //           );\n    //           return a - b;\n    //         },\n    //       );\n    //     },\n    //   },\n    // },\n    // {\n\n    //   name: 'addIcon',\n    //   title: { label: '自定义添加按钮', tip: '自定义添加按钮' },\n    //   propType: 'node',\n    // },\n    {\n      name: 'animated',\n      title: {\n        label: '切换动画',\n        tip: '是否使用动画切换Tabs',\n      },\n      propType: 'bool',\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    // {\n    //   name: 'renderTabBar',\n    //   title: { label: '替换TabBar', tip: '替换TabBar，用于二次封装标签头' },\n    //   propType: 'func',\n    // },\n    {\n      name: 'defaultActiveKey',\n      title: {\n        label: '初始选中',\n        tip: '初始化选中面板的key，如果没有设置activeKey',\n      },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    // {\n    //   name: 'activeKey',\n    //   title: { label: '当前激活tab面板', tip: '当前激活tab面板，注意配置了这个属性就需要自己处理点击切换' },\n    //   propType: 'string',\n    // },\n    {\n      name: 'hideAdd',\n      title: {\n        label: '隐藏加号',\n        tip: '是否隐藏加号图标，在`type=\"editable-card\"`时有效',\n      },\n      condition(target) {\n        return target.getProps().getPropValue('type') === 'editable-card';\n      },\n      propType: 'bool',\n      setter: 'BoolSetter',\n      defaultValue: false,\n      supportVariable: true\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: '大小，提供 `large` `default` 和 `small` 三种大小',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'default', 'small'],\n      },\n      defaultValue: 'default',\n    },\n    {\n      name: 'centered',\n      title: { label: '标签居中', tip: '标签居中展示' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'tabBarExtraContent',\n      title: { label: '额外元素', tip: 'tab bar上额外的元素' },\n      propType: 'node',\n    },\n    {\n      name: 'tabBarGutter',\n      title: { label: '标签间隙', tip: 'tabs之间的间隙' },\n      propType: 'number',\n      setter: 'NumberSetter',\n      supportVariable: true\n    },\n    // {\n    //   name: 'tabBarStyle',\n    //   title: { label: 'tab bar的样式对象', tip: 'tab bar的样式对象' },\n    //   propType: 'object',\n    // },\n    {\n      name: 'tabPosition',\n      title: {\n        label: '页签位置',\n        tip: '页签位置',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'right', 'bottom', 'left'],\n      },\n      defaultValue: 'top',\n    },\n    {\n      name: 'type',\n      title: {\n        label: '页签样式',\n        tip: '页签的基本样式，可选`line`、`card`、`editable-card`类型',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['line', 'card', 'editable-card'],\n      },\n      defaultValue: 'line',\n    },\n    {\n      name: 'onChange',\n      title: { label: '切换面板的回调', tip: '切换面板的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onEdit',\n      title: {\n        label: '新增删除回调',\n        tip: '新增和删除页签的回调，在`type=\"editable-card\"`时有效',\n      },\n      condition(target) {\n        return target.getProps().getPropValue('type') === 'editable-card';\n      },\n      propType: 'func',\n    },\n    {\n      name: 'onTabClick',\n      title: { label: 'tab点击回调', tip: 'tab被点击的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onTabScroll',\n      title: { label: 'tab滚动触发', tip: 'tab滚动时触发' },\n      propType: 'func',\n    },\n    {\n      name: 'keyboard',\n      title: { label: '键盘切换', tip: '开启键盘切换功能' },\n      propType: 'bool',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(activeKey,${extParams}){\\n// 切换面板的回调\\nconsole.log('onChange',activeKey);}\",\n        },\n        {\n          name: 'onEdit',\n          template:\n            \"onEdit(targetKey,action,${extParams}){\\n// 新增和删除页签的回调\\nconsole.log('onEdit',targetKey,action);}\",\n        },\n        {\n          name: 'onTabClick',\n          template:\n            \"onTabClick(key,event,${extParams}){\\n// tab 被点击的回调\\nconsole.log('onTabClick',key,event);}\",\n        },\n        {\n          name: 'onTabScroll',\n          template:\n            \"onTabScroll({direction},${extParams}){\\n// tab 滚动时触\\nconsole.log('onTabScroll',direction);}\",\n        },\n      ],\n    },\n    advanced: {\n      // initialChildren: [\n      //   {\n      //     componentName: 'Tabs.TabPane',\n      //     props: { key: 'item1', tab: 'Item 1' },\n      //   },\n      //   {\n      //     componentName: 'Tabs.TabPane',\n      //     props: { key: 'item2', tab: 'Item 2' },\n      //   },\n      // ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tabs/snippets.ts",
    "content": "export default [\n  {\n    title: '普通型',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/tabs-1.jpg',\n    schema: {\n      componentName: 'Tabs',\n      props: {\n        type: 'line',\n        items: [\n          {\n            label: '标签项1',\n            key: 'tab-item-1',\n            children: {\n              type: 'JSSlot',\n              value: [],\n            },\n          },\n          {\n            label: '标签项2',\n            key: 'tab-item-2',\n            children: {\n              type: 'JSSlot',\n              value: [],\n            },\n          }\n        ]\n      }\n    },\n  },\n  {\n    title: '卡片型',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/tabs-2.jpg',\n    schema: {\n      componentName: 'Tabs',\n      props: {\n        type: 'card',\n        items: [\n          {\n            label: '标签项1',\n            key: 'tab-item-1',\n            children: {\n              type: 'JSSlot',\n              value: [],\n            },\n          },\n          {\n            label: '标签项2',\n            key: 'tab-item-2',\n            children: {\n              type: 'JSSlot',\n              value: [],\n            },\n          }\n        ]\n      }\n    },\n  },\n  {\n    title: '可编辑卡片',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/tabs-3.jpg',\n    schema: {\n      componentName: 'Tabs',\n      props: {\n        type: 'editable-card',\n        items: [\n          {\n            label: '标签项1',\n            key: 'tab-item-1',\n            children: {\n              type: 'JSSlot',\n              value: [],\n            },\n          },\n          {\n            label: '标签项2',\n            key: 'tab-item-2',\n            children: {\n              type: 'JSSlot',\n              value: [],\n            },\n          }\n        ]\n      }\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tabs.tab-pane/meta.ts",
    "content": "// FIXME: 选中tabPane点复制，会出问题，因为复制的组件key一样\n\nexport default {\n  componentName: 'Tabs.TabPane',\n  title: '标签页项',\n  category: '',\n  props: [\n    {\n      name: 'key',\n      title: {\n        label: 'key',\n        tip: 'key',\n      },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    {\n      name: 'tab',\n      title: {\n        label: '标题',\n        tip: '标题',\n      },\n      propType: 'string',\n      setter: 'StringSetter',\n      supportVariable: true\n    },\n    // {\n    //   name: 'closeable',\n    //   title: {\n    //     label: '可删除',\n    //     tip: '是否可删除',\n    //   },\n    //   propType: 'bool',\n    //   defaultValue: true,\n    // },\n    {\n      name: 'disabled',\n      title: {\n        label: '是否禁用',\n        tip: '是否为禁用状态',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n    {\n      name: 'forceRender',\n      title: {\n        label: '隐藏时保留',\n        tip: '被隐藏时是否渲染 DOM 结构',\n      },\n      propType: 'bool',\n      setter: 'BoolSetter',\n      supportVariable: true\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Tab'],\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tag/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Tag',\n  title: '标签',\n  category: '数据展示',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n    },\n    {\n      name: 'closable',\n      title: { label: '可关闭', tip: '标签是否可以关闭' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'color',\n      title: { label: '标签色', tip: '标签色' },\n      propType: 'string',\n    },\n    // {\n    //   name: 'closeIcon',\n    //   title: { label: '自定义关闭按钮', tip: '自定义关闭按钮' },\n    //   propType: 'node',\n    // },\n    {\n      name: 'onClose',\n      title: { label: '关闭时的回调', tip: '关闭时的回调' },\n      propType: 'func',\n    },\n    // {\n    //   name: 'visible',\n    //   title: { label: '是否显示标签', tip: '是否显示标签' },\n    //   propType: 'bool',\n    //   defaultValue: true,\n    // },\n    {\n      name: 'icon',\n      title: { label: '设置图标', tip: '设置图标' },\n      propType: 'node',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onClose',\n          template: \"onClose(event,${extParams}){\\n// 关闭时的回调\\nconsole.log('onClose',event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tag/snippets.ts",
    "content": "export default [\n  {\n    title: '标签',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/tag-1.png',\n    schema: {\n      componentName: 'Tag',\n      props: {\n        color: 'magenta',\n        children: 'tag',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/time-picker/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'TimePicker',\n  title: '时间选择框',\n  category: '表单',\n  props: [\n    {\n      name: 'defaultValue',\n      title: { label: '默认时间', tip: '默认时间' },\n      propType: 'date',\n      setter: 'DateSetter',\n    },\n    {\n      name: 'value',\n      title: { label: '当前时间', tip: '当前时间' },\n      propType: 'date',\n      setter: 'DateSetter',\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'autoFocus',\n      title: { label: '自动聚焦', tip: '自动获取焦点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否有边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'className',\n      title: { label: '选择器类名', tip: '选择器类名' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'clearText',\n      title: { label: '清除按钮的提示文案', tip: '清除按钮的提示文案' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabledHours',\n      title: { label: '禁止选择部分小时选项', tip: '禁止选择部分小时选项' },\n      propType: 'func',\n    },\n    {\n      name: 'disabledMinutes',\n      title: { label: '禁止选择部分分钟选项', tip: '禁止选择部分分钟选项' },\n      propType: 'func',\n    },\n    {\n      name: 'disabledSeconds',\n      title: { label: '禁止选择部分秒选项', tip: '禁止选择部分秒选项' },\n      propType: 'func',\n    },\n    {\n      name: 'format',\n      title: { label: '展示的时间格式', tip: '展示的时间格式' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'getPopupContainer',\n      title: {\n        label: '定义浮层的容器',\n        tip: '定义浮层的容器，默认为 body 上新建 div',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'hideDisabledOptions',\n      title: { label: '隐藏禁止选择的选项', tip: '隐藏禁止选择的选项' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'hourStep',\n      title: { label: '小时选项间隔', tip: '小时选项间隔' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'inputReadOnly',\n      title: {\n        label: '只读',\n        tip: '设置输入框为只读（避免在移动设备上打开虚拟键盘）',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'minuteStep',\n      title: { label: '分钟选项间隔', tip: '分钟选项间隔' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    // {\n    //   name: 'open',\n    //   title: { label: '面板是否打开', tip: '面板是否打开' },\n    //   propType: 'bool',\n    //   // defaultValue: false,\n    //   setter: 'BoolSetter'\n    // },\n    {\n      name: 'placeholder',\n      title: { label: '空值提示', tip: '没有值的时候显示的内容' },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', { type: 'arrayOf', value: 'string' }],\n      },\n    },\n    {\n      name: 'popupClassName',\n      title: { label: '弹出层类名', tip: '弹出层类名' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    // {\n    //   name: 'popupStyle',\n    //   title: { label: '弹出层样式对象', tip: '弹出层样式对象' },\n    //   propType: 'object',\n    // },\n    {\n      name: 'secondStep',\n      title: { label: '秒选项间隔', tip: '秒选项间隔' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    // {\n    //   name: 'suffixIcon',\n    //   title: { label: '自定义的选择框后缀图标', tip: '自定义的选择框后缀图标' },\n    //   propType: 'node',\n    // },\n    // {\n    //   name: 'clearIcon',\n    //   title: { label: '自定义的清除图标', tip: '自定义的清除图标' },\n    //   propType: 'node',\n    // },\n    // {\n    //   name: 'renderExtraFooter',\n    //   title: {\n    //     label: '选择框底部显示自定义的内容',\n    //     tip: '选择框底部显示自定义的内容',\n    //   },\n    //   propType: 'func',\n    // },\n    {\n      name: 'use12Hours',\n      title: {\n        label: '12小时制',\n        tip: '使用 12 小时制，为 true 时 `format` 默认为 `h:mm:ss a`',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'onChange',\n      title: { label: '时间发生变化的回调', tip: '时间发生变化的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onOpenChange',\n      title: { label: '面板打开/关闭时的回调', tip: '面板打开/关闭时的回调' },\n      propType: 'func',\n    },\n    {\n      name: 'showNow',\n      title: { label: '“此刻”按钮', tip: '面板是否显示“此刻”按钮' },\n      propType: 'bool',\n      setter: 'BoolSetter'\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(time,timeString,${extParams}){\\n// 时间发生变化的回调\\nconsole.log('onChange',time,timeString);}\",\n        },\n        {\n          name: 'onOpenChange',\n          template:\n            \"onOpenChange(open,${extParams}){\\n// 面板打开/关闭时的回调\\nconsole.log('onOpenChange',open);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/time-picker/snippets.ts",
    "content": "export default [\n  {\n    title: '时间选择框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/time-picker-1.png',\n    schema: {\n      componentName: 'TimePicker',\n      props: {},\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/timeline/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Timeline',\n  title: '时间轴',\n  category: '数据展示',\n  props: [\n    {\n      name: 'steps',\n      title: '步骤配置',\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val) => val || uuid(),\n                  },\n                  {\n                    name: 'color',\n                    title: '圆圈颜色',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'dot',\n                    title: '自定义时间轴点',\n                    setter: 'node',\n                  },\n                  {\n                    name: 'label',\n                    title: '设置标签',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'position',\n                    title: {\n                      label: '自定义节点位置',\n                      tip: '自定义节点位置',\n                    },\n                    propType: {\n                      type: 'oneOf',\n                      value: ['left', 'right'],\n                    },\n                    setter: [\n                      {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'left',\n                              value: 'left',\n                            },\n                            {\n                              title: 'right',\n                              value: 'right',\n                            },\n                          ],\n                        },\n                      },\n                      'VariableSetter',\n                    ],\n                  },\n                ],\n              },\n            },\n            initialValue: () => {\n              return {\n                key: `timeLine${uuid()}`,\n                label: '时间轴',\n              };\n            },\n          },\n        },\n      },\n      extraProps: {\n        getValue(target, fieldValue, a, b, c) {\n          const map = target.node.children.map((child) => {\n            const key = child.getPropValue('key') ? String(child.getPropValue('key')) : child.id;\n            const result = { key };\n            ['color', 'dot', 'label', 'position'].forEach((propKey) => {\n              result[propKey] = child.getPropValue(propKey);\n            });\n            return result;\n          });\n          return map.length === 0 ? fieldValue : map;\n        },\n        setValue(target, value) {\n          const { node } = target;\n          const map = {};\n\n          if (!Array.isArray(value)) {\n            value = [];\n          }\n          value.forEach((item) => {\n            const tabItem = Object.assign({}, item);\n            map[item.key] = tabItem;\n          });\n\n          node.children.mergeChildren(\n            (child) => {\n              const key = String(child.getPropValue('key'));\n              if (Object.hasOwnProperty.call(map, key)) {\n                ['color', 'dot', 'label', 'position'].forEach((propKey) => {\n                  child.setPropValue(propKey, map[key][propKey]);\n                });\n                delete map[key];\n                return false;\n              }\n              return true;\n            },\n            () => {\n              const items = [];\n              for (const key in map) {\n                if (Object.hasOwnProperty.call(map, key)) {\n                  items.push({\n                    componentName: 'Timeline.Item',\n                    props: map[key],\n                  });\n                }\n              }\n              return items;\n            },\n\n            (child1, child2) => {\n              const a = value.findIndex(\n                (item) => String(item.key) === String(child1.getPropValue('key')),\n              );\n              const b = value.findIndex(\n                (item) => String(item.key) === String(child2.getPropValue('key')),\n              );\n              return a - b;\n            },\n          );\n        },\n      },\n    },\n    {\n      name: 'mode',\n      title: {\n        label: '模式',\n        tip: '通过设置 `mode` 可以改变时间轴和内容的相对位置',\n      },\n      propType: { type: 'oneOf', value: ['left', 'alternate', 'right'] },\n    },\n    {\n      name: 'pending',\n      title: {\n        label: '存在最后节点',\n        tip: '指定最后一个幽灵节点是否存在',\n      },\n      propType: 'bool',\n    },\n    {\n      name: 'pendingDot',\n      title: {\n        label: '当最后一个幽灵节点存在時，指定其时间图点',\n        tip: '当最后一个幽灵节点存在時，指定其时间图点',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node'] },\n    },\n    {\n      name: 'reverse',\n      title: { label: '节点排序', tip: '节点排序' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/timeline/snippets.ts",
    "content": "export default [\n  {\n    title: '时间轴',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/timeline-1.jpg',\n    schema: {\n      componentName: 'Timeline',\n      props: {\n        steps: [\n          {\n            key: 'timeLinei5wd',\n            label: '时间轴',\n          },\n          {\n            key: 'timeLinei5wx',\n            label: '时间轴',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/timeline.item/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Timeline.Item',\n  title: '时间轴项',\n  category: '',\n  props: [\n    {\n      name: 'color',\n      title: { label: '颜色', tip: '颜色' },\n      propType: 'string',\n      defaultValue: '#00f',\n      setter: 'ColorSetter',\n    },\n    {\n      name: 'dot',\n      title: {\n        label: '时间轴点',\n        tip: '时间轴点',\n      },\n      propType: 'node',\n    },\n    {\n      name: 'label',\n      title: {\n        label: '标签',\n        tip: '标签',\n      },\n      propType: { type: 'oneOfType', value: ['string', 'node', 'func'] },\n    },\n    {\n      name: 'position',\n      title: {\n        label: '位置',\n        tip: '位置',\n      },\n      propType: { type: 'oneOf', value: ['left', 'right'] },\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/timeline.item/snippets.ts",
    "content": "export default [\n  // {\n  //   title: '时间轴',\n  //   screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/timeline-1.jpg',\n  //   schema: {\n  //     componentName: 'Timeline',\n  //     props: {},\n  //   },\n  // },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tooltip/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Tooltip',\n  title: '文字提示',\n  category: '数据展示',\n  props: [\n    {\n      title: '内容',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'title',\n          title: {\n            label: '提示文字',\n            tip: 'title | 提示文字',\n          },\n          propType: { type: 'oneOfType', value: ['string', 'node'] },\n          setter: ['StringSetter', 'SlotSetter', 'VariableSetter'],\n        },\n      ],\n    },\n    {\n      title: '控制',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'defaultOpen',\n          title: {\n            label: '默认显隐',\n            tip: 'defaultOpen | 默认是否显隐',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'open',\n          title: {\n            label: '当前显隐',\n            tip: 'open | 当前是否显隐',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n        },\n      ],\n    },\n    {\n      title: '外观',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'placement',\n          title: { label: '气泡位置', tip: 'placement | 气泡位置' },\n          propType: {\n            type: 'oneOf',\n            value: [\n              'top',\n              'left',\n              'right',\n              'bottom',\n              'topLeft',\n              'topRight',\n              'bottomLeft',\n              'bottomRight',\n              'leftTop',\n              'leftBottom',\n              'rightTop',\n              'rightBottom',\n            ],\n          },\n          defaultValue: 'top',\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '上',\n                  value: 'top',\n                },\n                {\n                  title: '左',\n                  value: 'left',\n                },\n                {\n                  title: '右',\n                  value: 'right',\n                },\n                {\n                  title: '下',\n                  value: 'bottom',\n                },\n                {\n                  title: '上左',\n                  value: 'topLeft',\n                },\n                {\n                  title: '上右',\n                  value: 'topRight',\n                },\n                {\n                  title: '下左',\n                  value: 'bottomLeft',\n                },\n                {\n                  title: '下右',\n                  value: 'bottomRight',\n                },\n                {\n                  title: '左上',\n                  value: 'leftTop',\n                },\n                {\n                  title: '左下',\n                  value: 'leftBottom',\n                },\n                {\n                  title: '右上',\n                  value: 'rightTop',\n                },\n                {\n                  title: '右下',\n                  value: 'rightBottom',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'autoAdjustOverflow',\n          title: {\n            label: '自动调整',\n            tip: 'autoAdjustOverflow | 气泡被遮挡时自动调整位置',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: true,\n        },\n        {\n          name: 'arrowPointAtCenter',\n          title: {\n            label: '指向中心',\n            tip: 'arrowPointAtCenter | 箭头是否指向目标元素中心',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'color',\n          title: {\n            label: '背景颜色',\n            tip: 'color | 背景颜色',\n          },\n          propType: 'string',\n          setter: 'ColorSetter',\n        },\n        {\n          name: 'zIndex',\n          title: {\n            label: 'zIndex',\n            tip: 'zIndex | 设置 Tooltip 的 z-index值',\n          },\n          propType: 'number',\n          setter: 'NumberSetter',\n        },\n      ],\n    },\n    {\n      name: 'overlayStyle',\n      title: '卡片样式',\n      type: 'group',\n      extraProps: {\n        display: 'entry',\n      },\n      items: [\n        {\n          name: 'overlayStyle',\n          title: { label: '样式设置', tip: 'overlayStyle | 卡片样式' },\n          setter: 'StyleSetter',\n          extraProps: {\n            display: 'block',\n          },\n        },\n      ],\n    },\n    {\n      name: 'overlayInnerStyle',\n      title: '卡片内容样式',\n      type: 'group',\n      extraProps: {\n        display: 'entry',\n      },\n      items: [\n        {\n          name: 'overlayInnerStyle',\n          title: {\n            label: '样式设置',\n            tip: 'overlayStyle | 卡片内容区域的样式',\n          },\n          setter: 'StyleSetter',\n          extraProps: {\n            display: 'block',\n          },\n        },\n      ],\n    },\n    {\n      title: '行为',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'trigger',\n          title: { label: '触发行为', tip: 'trigger | 触发行为' },\n          propType: {\n            type: 'oneOf',\n            value: ['hover', 'focus', 'click', 'contextMenu'],\n          },\n          defaultValue: 'hover',\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '鼠标悬停',\n                  value: 'hover',\n                },\n                {\n                  title: '获得焦点',\n                  value: 'focus',\n                },\n                {\n                  title: '鼠标点击',\n                  value: 'click',\n                },\n                {\n                  title: '右键菜单',\n                  value: 'contextMenu',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'mouseEnterDelay',\n          title: {\n            label: '展示延时',\n            tip: 'mouseEnterDelay | 鼠标移入后延时多少才显示 Tooltip，单位：秒',\n          },\n          propType: 'number',\n          defaultValue: 0.1,\n          setter: {\n            componentName: 'NumberSetter',\n            props: {\n              step: 0.1,\n            },\n          },\n        },\n        {\n          name: 'mouseLeaveDelay',\n          title: {\n            label: '隐藏延时',\n            tip: 'mouseLeaveDelay | 鼠标移出后延时多少才隐藏 Tooltip，单位：秒',\n          },\n          propType: 'number',\n          defaultValue: 0.1,\n          setter: {\n            componentName: 'NumberSetter',\n            props: {\n              step: 0.1,\n            },\n          },\n        },\n      ],\n    },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onOpenChange',\n          template:\n            \"onOpenChange(open,${extParams}){\\n// 显示隐藏的回调\\nconsole.log('onOpenChange',open);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tooltip/snippets.ts",
    "content": "export default [\n  {\n    title: '文字提示',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/tooltip-1.jpg',\n    schema: {\n      componentName: 'Tooltip',\n      props: {\n        title: '提示内容',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/transfer/meta.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nimport snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Transfer',\n  title: '穿梭框',\n  category: '表单',\n  props: [\n    {\n      name: 'dataSource',\n      title: {\n        label: '数据源',\n        tip: '数据源，其中的数据将会被渲染到左边一栏中，`targetKeys` 中指定的除外',\n      },\n      propType: { type: 'arrayOf', value: 'object' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'ObjectSetter',\n            initialValue: () => {\n              return {\n                key: uuid(),\n              };\n            },\n            props: {\n              config: {\n                items: [\n                  {\n                    name: 'key',\n                    title: 'key',\n                    setter: 'StringSetter',\n                    initialValue: (val: any) => val || uuid(),\n                  },\n                  {\n                    name: 'title',\n                    title: 'title',\n                    setter: 'StringSetter',\n                    isRequired: true,\n                  },\n                  {\n                    name: 'description',\n                    title: '描述',\n                    setter: 'StringSetter',\n                  },\n                  {\n                    name: 'disabled',\n                    title: '禁止穿梭',\n                    setter: ['BoolSetter', 'FunctionSetter'],\n                  },\n                ],\n              },\n            },\n          },\n        },\n      },\n    },\n\n    {\n      name: 'selectedKeys',\n      title: { label: '选中项', tip: '设置哪些项应该被选中' },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: 'StringSetter'\n        }\n      },\n      supportVariable: true,\n    },\n    {\n      name: 'targetKeys',\n      title: {\n        label: '右侧框数据',\n        tip: '显示在右侧框数据的 key 集合',\n      },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: 'StringSetter'\n        }\n      },\n      supportVariable: true,\n    },\n\n    {\n      title: '常用设置',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'oneWay',\n          title: { label: '展示为单向样式', tip: '展示为单向样式' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'disabled',\n          title: { label: '是否禁用', tip: '是否为禁用状态' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n\n        {\n          name: 'showSearch',\n          title: { label: '是否显示搜索框', tip: '是否显示搜索框' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: false,\n        },\n        {\n          name: 'showSelectAll',\n          title: { label: '是否展示全选勾选框', tip: '是否展示全选勾选框' },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          defaultValue: true,\n        },\n        {\n          name: 'pagination',\n          title: {\n            label: '分页设置',\n            tip: '使用分页样式，自定义渲染列表下无效',\n          },\n          setter: [\n            'BoolSetter',\n            {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'pageSize',\n                      title: '单页条数',\n                      setter: 'NumberSetter',\n                    },\n                    {\n                      name: 'simple',\n                      title: '简单模式',\n                      setter: 'BoolSetter',\n                    },\n                    {\n                      name: 'showSizeChanger',\n                      title: '展示条数切换器',\n                      setter: 'BoolSetter',\n                    },\n                  ],\n                },\n              },\n            }\n          ],\n          propType: {\n            type: 'oneOfType',\n            value: ['bool', 'object']\n          },\n          defaultValue: false,\n        },\n        {\n          name: 'render',\n          title: {\n            label: '每行数据渲染函数',\n            tip:\n              '每行数据渲染函数，该函数的入参为 `dataSource` 中的项，返回值为 ReactElement。或者返回一个普通对象，其中 `label` 字段为 ReactElement，`value` 字段为 title',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'renderItem(record,${extParams}){\\n// 每行数据渲染函数\\nreturn record.title;\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'filterOption',\n          title: {\n            label: '过滤选项',\n            tip:\n              '接收 `inputValue` `option` 两个参数，当 `option` 符合筛选条件时，应返回 true，反之则返回 false',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template:\n                  'filterOption(inputValue,option,${extParams}){\\n// 接收 inputValue option 两个参数，当 option 符合筛选条件时，应返回 true，反之则返回 false\\n\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'footer',\n          title: {\n            label: '底部',\n            tip: 'footer | 底部',\n          },\n          propType: 'func',\n          setter: [\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template: 'renderItem(item,${extParams}){\\n// 自定义渲染列表项\\nreturn `item`;\\n}',\n              },\n            },\n            {\n              componentName: 'SlotSetter',\n              title: '渲染函数插槽',\n              initialValue: {\n                type: 'JSSlot',\n                value: [],\n                params: ['props', 'info']\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n\n    // {\n    //   name: 'listStyle',\n    //   title: { label: '两个穿梭框的自定义样式', tip: '两个穿梭框的自定义样式' },\n    //   propType: { type: 'oneOfType', value: ['object', 'func'] },\n    // },\n    // {\n    //   name: 'locale',\n    //   title: { label: '各种语言', tip: '各种语言' },\n    //   propType: 'object',\n    // },\n\n    {\n      name: 'operations',\n      title: {\n        label: '操作文案',\n        tip: '操作文案集合，顺序从上至下',\n      },\n      propType: { type: 'arrayOf', value: 'string' },\n    },\n\n    {\n      name: 'titles',\n      title: { label: '标题集合', tip: '标题集合，顺序从左至右' },\n      propType: { type: 'arrayOf', value: 'node' },\n    },\n    {\n      name: 'selectAllLabels',\n      title: {\n        label: '多选框标题集合',\n        tip: '自定义顶部多选框标题的集合',\n      },\n      propType: {\n        type: 'arrayOf',\n        value: { type: 'oneOfType', value: ['node', 'func'] },\n      },\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(targetKeys,direction,moveKeys,${extParams}){\\n// 选项在两栏之间转移时的回调函数\\nconsole.log('onChange',targetKeys,direction,moveKeys);}\",\n        },\n        {\n          name: 'onScroll',\n          template:\n            \"onScroll(direction,event,${extParams}){\\n// 选项列表滚动时的回调函数\\nconsole.log('onScroll',direction,event);}\",\n        },\n        {\n          name: 'onSearch',\n          template:\n            \"onSearch(direction,value,${extParams}){\\n// 搜索框内容时改变时的回调函数\\nconsole.log('onSearch',direction,value);}\",\n        },\n        {\n          name: 'onSelectChange',\n          template:\n            \"onSelectChange(sourceSelectedKeys,targetSelectedKeys,${extParams}){\\n// 选中项发生改变时的回调函数\\nconsole.log('onSelectChange',sourceSelectedKeys,targetSelectedKeys);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/transfer/snippets.ts",
    "content": "import { uuid } from '../_utils/utils';\n\nexport default [\n  {\n    title: '穿梭框',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/transfer-1.png',\n    schema: {\n      componentName: 'Transfer',\n      props: {\n        dataSource: [\n          {\n            key: uuid(),\n            title: 'content1',\n          },\n          {\n            key: uuid(),\n            title: 'content2',\n          },\n          {\n            key: uuid(),\n            title: 'content3',\n          },\n          {\n            key: uuid(),\n            title: 'content4',\n          },\n          {\n            key: uuid(),\n            title: 'content5',\n          },\n        ],\n\n        render: {\n          type: 'JSFunction',\n          value: `function renderItem(record, extParams) {\n            return record.title;\n          }`,\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tree/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Tree',\n  title: '树形控件',\n  category: '数据展示',\n  props: [\n    {\n      name: 'treeData',\n      title: {\n        label: '数据',\n        tip: 'treeNodes 数据，如果设置则不需要手动构造 TreeNode 节点（key 在整个树范围内唯一）',\n      },\n      propType: { type: 'arrayOf', value: 'object' },\n      setter: 'JsonSetter',\n    },\n    {\n      name: 'autoExpandParent',\n      title: { label: '是否自动展开父节点', tip: '是否自动展开父节点' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'blockNode',\n      title: { label: '是否节点占据一行', tip: '是否节点占据一行' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'checkable',\n      title: {\n        label: '节点前添加 Checkbox 复选框',\n        tip: '节点前添加 Checkbox 复选框',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'checkedKeys',\n      title: {\n        label: '复选框节点',\n        tip:\n          '（受控）选中复选框的树节点（注意：父子节点有关联，如果传入父节点 key，则子节点自动选中；相应当子节点 key 都传入，父节点也自动选中。当设置`checkable`和`checkStrictly`，它是一个有`checked`和`halfChecked`属性的对象，并且父子节点的选中与否不再关联',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: [{ value: 'arrayOf', type: 'string' }, 'object'],\n      },\n    },\n    {\n      name: 'checkStrictly',\n      title: {\n        label: '完全受控',\n        tip: 'checkable 状态下节点选择完全受控（父子节点选中状态不再关联）',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'defaultCheckedKeys',\n      title: { label: '默认选中值', tip: '默认选中值' },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n    },\n    {\n      name: 'defaultExpandAll',\n      title: { label: '默认展开所有树节点', tip: '默认展开所有树节点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'defaultExpandedKeys',\n      title: { label: '默认展开指定的树节点', tip: '默认展开指定的树节点' },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n    },\n    {\n      name: 'defaultExpandParent',\n      title: { label: '默认展开父节点', tip: '默认展开父节点' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'defaultSelectedKeys',\n      title: { label: '默认选中值', tip: '默认选中值' },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'draggable',\n      title: { label: '节点可拖拽', tip: '设置节点可拖拽（IE>8）' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'expandedKeys',\n      title: {\n        label: '展开指定节点',\n        tip: '（受控）展开指定的树节点',\n      },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n    },\n    {\n      name: 'filterTreeNode',\n      title: {\n        label: '筛选树节点',\n        tip: '按需筛选树节点（高亮），返回 true',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'loadData',\n      title: { label: '异步加载数据', tip: '异步加载数据' },\n      propType: 'func',\n    },\n    {\n      name: 'loadedKeys',\n      title: {\n        label: '已经加载节点',\n        tip: '（受控）已经加载的节点，需要配合 `loadData` 使用',\n      },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n    },\n    {\n      name: 'multiple',\n      title: {\n        label: '支持多选',\n        tip: '支持点选多个节点（节点本身）',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'selectable',\n      title: { label: '是否可选中', tip: '是否可选中' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'selectedKeys',\n      title: {\n        label: '选中的树节点',\n        tip: '（受控）设置选中的树节点',\n      },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      },\n    },\n    {\n      name: 'showIcon',\n      title: {\n        label: '展示图标',\n        tip:\n          '是否展示 TreeNode title 前的图标，没有默认样式，如设置为 true，需要自行定义图标相关样式',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    // {\n    //   name: 'switcherIcon',\n    //   title: {\n    //     label: '自定义树节点的展开/折叠图标',\n    //     tip: '自定义树节点的展开/折叠图标',\n    //   },\n    //   propType: 'node',\n    // },\n    {\n      name: 'showLine',\n      title: { label: '是否展示连接线', tip: '是否展示连接线' },\n      propType: { type: 'oneOfType', value: ['bool', 'object'] },\n    },\n    {\n      name: 'virtual',\n      title: {\n        label: '虚拟滚动',\n        tip: '设置 false 时关闭虚拟滚动',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'onCheck',\n      title: { label: '点击复选框触发', tip: '点击复选框触发' },\n      propType: 'func',\n    },\n    {\n      name: 'onDragEnd',\n      title: { label: 'dragend 触发时调用', tip: 'dragend 触发时调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onDragEnter',\n      title: { label: 'dragenter 触发时调用', tip: 'dragenter 触发时调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onDragLeave',\n      title: { label: 'dragleave 触发时调用', tip: 'dragleave 触发时调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onDragOver',\n      title: { label: 'dragover 触发时调用', tip: 'dragover 触发时调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onDragStart',\n      title: { label: '开始拖拽时调用', tip: '开始拖拽时调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onDrop',\n      title: { label: 'drop 触发时调用', tip: 'drop 触发时调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onExpand',\n      title: { label: '展开/收起节点时触发', tip: '展开/收起节点时触发' },\n      propType: 'func',\n    },\n    {\n      name: 'onLoad',\n      title: { label: '节点加载完毕时触发', tip: '节点加载完毕时触发' },\n      propType: 'func',\n    },\n    {\n      name: 'onRightClick',\n      title: { label: '响应右键点击', tip: '响应右键点击' },\n      propType: 'func',\n    },\n    {\n      name: 'onSelect',\n      title: { label: '点击树节点触发', tip: '点击树节点触发' },\n      propType: 'func',\n    },\n    {\n      name: 'icon',\n      title: { label: '自定义树节点图标', tip: '自定义树节点图标' },\n      propType: { type: 'oneOfType', value: ['node', 'func'] },\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onCheck',\n          template:\n            \"onCheck(checkedKeys,event,${extParams}){\\n// 点击复选框触发\\nconsole.log('onCheck',checkedKeys,event);}\",\n        },\n        {\n          name: 'onDragEnd',\n          template:\n            \"onDragEnd({event,node},${extParams}){\\n// dragend 触发时调用\\nconsole.log('onDragEnd',event,node);}\",\n        },\n        {\n          name: 'onDragEnter',\n          template:\n            \"onDragEnter({event,node,expandedKeys},${extParams}){\\n// dragenter 触发时调用\\nconsole.log('onDragEnter',event,node,expandedKeys);}\",\n        },\n        {\n          name: 'onDragLeave',\n          template:\n            \"onDragLeave({event,node},${extParams}){\\n// dragleave 触发时调用\\nconsole.log('onDragLeave',event,node);}\",\n        },\n        {\n          name: 'onDragOver',\n          template:\n            \"onDragOver({event,node},${extParams}){\\n// dragover 触发时调用\\nconsole.log('onDragOver',event,node);}\",\n        },\n        {\n          name: 'onDragStart',\n          template:\n            \"onDragStart({event,node},${extParams}){\\n// 开始拖拽时调用\\nconsole.log('onDragStart',event,node);}\",\n        },\n        {\n          name: 'onDrop',\n          template:\n            \"onDrop({event,node,dragNode,dragNodesKeys},${extParams}){\\n// drop 触发时调用\\nconsole.log('onDrop',event,node,dragNode,dragNodesKeys);}\",\n        },\n        {\n          name: 'onExpand',\n          template:\n            \"onExpand(expandedKeys,{expanded,node},${extParams}){\\n// 展开/收起节点时触发\\nconsole.log('onExpand',expandedKeys,expanded,node);}\",\n        },\n        {\n          name: 'onLoad',\n          template:\n            \"onLoad(loadedKeys,{event,node},${extParams}){\\n// 节点加载完毕时触发\\nconsole.log('onLoad',loadedKeys,event,node);}\",\n        },\n        {\n          name: 'onRightClick',\n          template:\n            \"onRightClick({event,node},${extParams}){\\n// 响应右键点击\\nconsole.log('onRightClick',event,node);}\",\n        },\n        {\n          name: 'onSelect',\n          template:\n            \"onSelect(selectedKeys,event,${extParams}){\\n// 点击树节点触发\\nconsole.log('onSelect',selectedKeys,event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tree/snippets.ts",
    "content": "export default [\n  {\n    title: '树形控件',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/tree-1.jpg',\n    schema: {\n      componentName: 'Tree',\n      props: {\n        treeData: [\n          {\n            title: 'parent 0',\n            key: '0-0',\n            children: [\n              { title: 'leaf 0-0', key: '0-0-0', isLeaf: true },\n              { title: 'leaf 0-1', key: '0-0-1', isLeaf: true },\n            ],\n          },\n          {\n            title: 'parent 1',\n            key: '0-1',\n            children: [\n              { title: 'leaf 1-0', key: '0-1-0', isLeaf: true },\n              { title: 'leaf 1-1', key: '0-1-1', isLeaf: true },\n            ],\n          },\n        ],\n        defaultExpandAll: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tree-select/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'TreeSelect',\n  title: '树选择',\n  category: '表单',\n  props: [\n    {\n      name: 'treeData',\n      title: { label: '数据源', tip: '数据源' },\n      setter: 'JsonSetter',\n    },\n    {\n      name: 'defaultValue',\n      title: { label: '默认值', tip: '默认选中值' },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', { type: 'arrayOf', value: 'string' }],\n      },\n    },\n    {\n      name: 'value',\n      title: { label: '当前值', tip: '当前值' },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', { type: 'arrayOf', value: 'string' }],\n      },\n    },\n    {\n      name: 'allowClear',\n      title: { label: '支持清除', tip: '是否允许清除' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'autoClearSearchValue',\n      title: {\n        label: '自动清空搜索',\n        tip: '当多选模式下值被选择，自动清空搜索框',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'bordered',\n      title: { label: '显示边框', tip: '是否显示边框' },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    // {\n    //   name: 'dropdownClassName',\n    //   title: {\n    //     label: '下拉菜单的 className 属性',\n    //     tip: '下拉菜单的 className 属性',\n    //   },\n    //   propType: 'string',\n    // },\n    {\n      name: 'dropdownMatchSelectWidth',\n      title: {\n        label: '下拉列表同款',\n        tip: '下拉菜单和选择器同宽',\n      },\n      propType: 'bool',\n      setter: 'BoolSetter'\n    },\n    // {\n    //   name: 'dropdownStyle',\n    //   title: { label: '下拉菜单的样式', tip: '下拉菜单的样式' },\n    //   setter: 'JsonSetter',\n    // },\n    {\n      name: 'filterTreeNode',\n      title: {\n        label: '筛选节点',\n        tip: '是否根据输入项进行筛选，默认用 treeNodeFilterProp 的值作为要筛选的 TreeNode 的属性值',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['bool', 'func']\n      },\n    },\n    {\n      name: 'labelInValue',\n      title: {\n        label: '值包含标签',\n        tip:\n          '是否把每个选项的 label 包装到 value 中，会把 value 类型从 `string` 变为 {value: string, label: ReactNode, halfChecked(treeCheckStrictly 时有效): string[] } 的格式',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'listHeight',\n      title: { label: '设置弹窗滚动高度', tip: '设置弹窗滚动高度' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'loadData',\n      title: { label: '异步加载数据', tip: '异步加载数据' },\n      propType: 'func',\n    },\n    {\n      name: 'maxTagCount',\n      title: { label: '最多显示多少个 tag', tip: '最多显示多少个 tag' },\n      propType: 'number',\n      setter: 'NumberSetter'\n    },\n    {\n      name: 'maxTagPlaceholder',\n      title: { label: '隐藏 tag 时显示的内容', tip: '隐藏 tag 时显示的内容' },\n      propType: { type: 'oneOfType', value: ['node', 'func'] },\n    },\n    {\n      name: 'multiple',\n      title: {\n        label: '支持多选',\n        tip: '支持多选（当设置 treeCheckable 时自动变为 true）',\n      },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'placeholder',\n      title: { label: '选择框默认文字', tip: '选择框默认文字' },\n      propType: 'string',\n      setter: 'StringSetter'\n    },\n    {\n      name: 'showCheckedStrategy',\n      title: {\n        label: '定义选中项回填的方式',\n        tip:\n          '定义选中项回填的方式。`SHOW_ALL`: 显示所有选中节点(包括父节点)。`SHOW_PARENT`: 只显示父节点(当父节点下所有子节点都选中时)。 默认只显示子节点',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['SHOW_ALL', 'SHOW_PARENT', 'SHOW_CHILD'],\n      },\n    },\n    {\n      name: 'showSearch',\n      title: { label: '是否支持搜索框', tip: '是否支持搜索框' },\n      propType: 'bool',\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'size',\n      title: { label: '尺寸', tip: '选择框大小' },\n      propType: { type: 'oneOf', value: ['large', 'middle', 'small'] },\n      setter: {\n        componentName: 'SelectSetter',\n        props: {\n          options: [\n            {\n              title: '大',\n              value: 'large',\n            },\n            {\n              title: '中',\n              value: 'middle',\n            },\n            {\n              title: '小',\n              value: 'small',\n            },\n          ],\n        },\n      },\n      defaultValue: 'middle',\n    },\n    {\n      name: 'showArrow',\n      title: {\n        label: '下拉图标',\n        tip: '是否显示下拉图标，单选模式下默认 `true`',\n      },\n      propType: 'bool',\n      setter: 'BoolSetter'\n    },\n    // {\n    //   name: 'suffixIcon',\n    //   title: {\n    //     label:\n    //       '暂废--自定义的选择框后缀图标, 多选模式下必须同时设置 `showArrow` 为 true',\n    //     tip:\n    //       '暂废--自定义的选择框后缀图标, 多选模式下必须同时设置 `showArrow` 为 true',\n    //   },\n    //   propType: 'node',\n    // },\n    {\n      name: 'treeCheckable',\n      title: { label: '显示勾选框', tip: '显示勾选框' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'treeDefaultExpandAll',\n      title: { label: '默认展开所有树节点', tip: '默认展开所有树节点' },\n      propType: 'bool',\n      defaultValue: false,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'treeDefaultExpandedKeys',\n      title: { label: '默认展开的树节点', tip: '默认展开的树节点' },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      }\n    },\n    {\n      name: 'treeExpandedKeys',\n      title: { label: '设置展开的树节点', tip: '设置展开的树节点' },\n      propType: { type: 'arrayOf', value: 'string' },\n      setter: {\n        componentName: 'ArraySetter',\n        props: {\n          itemSetter: {\n            componentName: 'StringSetter',\n          }\n        }\n      }\n    },\n    {\n      name: 'virtual',\n      title: {\n        label: '设置 false 时关闭虚拟滚动',\n        tip: '设置 false 时关闭虚拟滚动',\n      },\n      propType: 'bool',\n      defaultValue: true,\n      setter: 'BoolSetter'\n    },\n    {\n      name: 'onChange',\n      title: { label: '选中树节点时调用此函数', tip: '选中树节点时调用此函数' },\n      propType: 'func',\n    },\n    {\n      name: 'onSearch',\n      title: { label: '文本框值变化时回调', tip: '文本框值变化时回调' },\n      propType: 'func',\n    },\n    {\n      name: 'onSelect',\n      title: { label: '被选中时调用', tip: '被选中时调用' },\n      propType: 'func',\n    },\n    {\n      name: 'onTreeExpand',\n      title: { label: '展示节点时调用', tip: '展示节点时调用' },\n      propType: 'func',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange(value,label,extra,${extParams}){\\n// 选中树节点时调用此函数\\nconsole.log('onChange',value,label,extra);}\",\n        },\n        {\n          name: 'onSearch',\n          template:\n            \"onSearch(value,${extParams}){\\n// 文本框值变化时回调\\nconsole.log('onSearch',value);}\",\n        },\n        {\n          name: 'onSelect',\n          template:\n            \"onSelect(value,node,extra,${extParams}){\\n// 被选中时调用\\nconsole.log('onSelect',value,node,extra);}\",\n        },\n        {\n          name: 'onTreeExpand',\n          template:\n            \"onTreeExpand(expandedKeys,${extParams}){\\n// 展示节点时调用\\nconsole.log('onTreeExpand',expandedKeys);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/tree-select/snippets.ts",
    "content": "export default [\n  {\n    title: '树选择',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/tree-select-1.png',\n    schema: {\n      componentName: 'TreeSelect',\n      props: {\n        treeData: [\n          {\n            title: 'parent 0',\n            value: '0-0',\n            children: [\n              { title: 'leaf 0-0', value: '0-0-0', isLeaf: true },\n              { title: 'leaf 0-1', value: '0-0-1', isLeaf: true },\n            ],\n          },\n          {\n            title: 'parent 1',\n            value: '0-1',\n            children: [\n              { title: 'leaf 1-0', value: '0-1-0', isLeaf: true },\n              { title: 'leaf 1-1', value: '0-1-1', isLeaf: true },\n            ],\n          },\n        ],\n        treeDefaultExpandAll: true,\n        placeholder: '请选择',\n        style: {\n          width: '300px',\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.link/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Typography.Link',\n  title: '链接',\n  category: '基础',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n      defaultValue: '',\n      supportVariable: true,\n    },\n    {\n      name: 'href',\n      title: { label: '跳转链接', tip: '跳转链接' },\n      propType: 'string',\n      defaultValue: '',\n    },\n    {\n      name: 'target',\n      title: { label: '跳转位置', tip: '在何处显示链接的资源' },\n      propType: {\n        type: 'oneOf',\n        value: ['_self', '_blank', '_parent', '_top'],\n      },\n      defaultValue: '_self',\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.link/snippets.ts",
    "content": "export default [\n  {\n    title: '链接',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-link-1.png',\n    schema: {\n      componentName: 'Typography.Link',\n      props: {\n        href: 'https://alibaba.com',\n        target: '_blank',\n        children: '链接',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.paragraph/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Typography.Paragraph',\n  title: '段落',\n  category: '基础',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n      defaultValue: '',\n      supportVariable: true,\n    },\n    {\n      name: 'code',\n      title: { label: '添加代码样式', tip: '添加代码样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'copyable',\n      title: {\n        label: '是否可拷贝',\n        tip: '是否可拷贝，为对象时可进行各种自定义',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'delete',\n      title: { label: '添加删除线样式', tip: '添加删除线样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'editable',\n      title: { label: '是否可编辑', tip: '是否可编辑' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'ellipsis',\n      title: { label: '自动溢出省略', tip: '自动溢出省略' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'mark',\n      title: { label: '添加标记样式', tip: '添加标记样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'underline',\n      title: { label: '添加下划线样式', tip: '添加下划线样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      title: {\n        label: '当用户提交编辑内容时触发',\n        tip: '当用户提交编辑内容时触发',\n      },\n      propType: 'func',\n    },\n    {\n      name: 'strong',\n      title: { label: '是否加粗', tip: '是否加粗' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'type',\n      title: { label: '文本类型', tip: '文本类型' },\n      propType: {\n        type: 'oneOf',\n        value: ['default', 'secondary', 'success', 'warning', 'danger'],\n      },\n      setter: {\n        componentName: 'SelectSetter',\n        props: {\n          options: [\n            {\n              title: '默认',\n              value: 'default',\n            },\n            {\n              title: '弱提示',\n              value: 'secondary',\n            },\n            {\n              title: '成功',\n              value: 'success',\n            },\n            {\n              title: '警告',\n              value: 'warning',\n            },\n            {\n              title: '错误',\n              value: 'danger',\n            },\n          ],\n        },\n      },\n    },\n  ],\n  configure: { supports: { style: true, events: ['onChange'] } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.paragraph/snippets.ts",
    "content": "export default [\n  {\n    title: '段落',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-paragraph-1.png',\n    schema: {\n      componentName: 'Typography.Paragraph',\n      props: {\n        ellipsis: true,\n        children:\n          '蚂蚁的企业级产品是一个庞大且复杂的体系。这类产品不仅量级巨大且功能复杂，而且变动和并发频繁，常常需要设计与开发能够快速的做出响应。同时这类产品中有存在很多类似的页面以及组件，可以通过抽象得到一些稳定且高复用性的内容。',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.text/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Typography.Text',\n  title: '文本',\n  category: '基础',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n      defaultValue: '',\n      supportVariable: true,\n    },\n    {\n      name: 'code',\n      title: { label: '添加代码样式', tip: '添加代码样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'delete',\n      title: { label: '添加删除线样式', tip: '添加删除线样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n\n    {\n      name: 'mark',\n      title: { label: '添加标记样式', tip: '添加标记样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'keyboard',\n      title: { label: '添加键盘样式', tip: '添加键盘样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'underline',\n      title: { label: '添加下划线样式', tip: '添加下划线样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'strong',\n      title: { label: '是否加粗', tip: '是否加粗' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'type',\n      title: { label: '文本类型', tip: '文本类型' },\n      propType: { type: 'oneOf', value: ['secondary', 'warning', 'danger'] },\n      setter: {\n        componentName: 'SelectSetter',\n        props: {\n          options: [\n            {\n              title: '默认',\n              value: 'default',\n            },\n            {\n              title: '弱提示',\n              value: 'secondary',\n            },\n            {\n              title: '成功',\n              value: 'success',\n            },\n            {\n              title: '警告',\n              value: 'warning',\n            },\n            {\n              title: '错误',\n              value: 'danger',\n            },\n          ],\n        },\n      },\n    },\n    {\n      title: '高级',\n      type: 'group',\n      display: 'accordion',\n      items: [\n        {\n          name: 'copyable',\n          title: { label: '是否可拷贝', tip: '是否可拷贝' },\n          propType: { type: 'oneOfType', value: ['bool', 'object'] },\n          setter: [\n            {\n              componentName: 'BoolSetter',\n              isRequired: false,\n              initialValue: false,\n            },\n            {\n              componentName: 'JsonSetter',\n              isRequired: false,\n            },\n          ],\n        },\n        {\n          name: 'editable',\n          title: { label: '是否可编辑', tip: '是否可编辑' },\n          propType: { type: 'oneOfType', value: ['bool', 'object'] },\n          setter: [\n            {\n              componentName: 'BoolSetter',\n              isRequired: false,\n              initialValue: false,\n            },\n            {\n              componentName: 'JsonSetter',\n              isRequired: false,\n            },\n          ],\n        },\n        {\n          name: 'ellipsis',\n          title: {\n            label: '自动溢出省略',\n            tip: '设置自动溢出省略，需要设置元素宽度',\n          },\n          propType: { type: 'oneOfType', value: ['bool', 'object'] },\n          setter: [\n            {\n              componentName: 'BoolSetter',\n              isRequired: false,\n              initialValue: false,\n            },\n            {\n              componentName: 'JsonSetter',\n              isRequired: false,\n            },\n          ],\n        },\n      ],\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'copyable.onCopy',\n          template: \"onCopy(${extParams}){\\n// 拷贝成功的回调函数\\nconsole.log('onCopy');}\",\n        },\n        {\n          name: 'editable.onStart',\n          template: \"onStart(${extParams}){\\n// 进入编辑中状态时触发\\nconsole.log('onStart');}\",\n        },\n        {\n          name: 'editable.onChange',\n          template:\n            \"onChange(event,${extParams}){\\n// 文本域编辑时触发\\nconsole.log('onChange', event);}\",\n        },\n        {\n          name: 'editable.onEnd',\n          template: \"onEnd(${extParams}){\\n// 按 ENTER 结束编辑状态时触发\\nconsole.log('onEnd');}\",\n        },\n        {\n          name: 'editable.onCancel',\n          template:\n            \"onCancel(${extParams}){\\n// 按 ESC 退出编辑状态时触发\\nconsole.log('onCancel');}\",\n        },\n        {\n          name: 'ellipsis.onEllipsis',\n          template:\n            \"onEllipsis(ellipsis,${extParams}){\\n// 触发省略时的回调\\nconsole.log('onEllipsis', ellipsis);}\",\n        },\n        {\n          name: 'ellipsis.onExpand',\n          template:\n            \"onExpand(event,${extParams}){\\n// 点击展开时的回调\\nconsole.log('onExpand', event);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.text/snippets.ts",
    "content": "export default [\n  {\n    title: '文本',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-text-1.png',\n    schema: {\n      componentName: 'Typography.Text',\n      props: {\n        children: 'text',\n      },\n    },\n  },\n  {\n    title: '可复制文本',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-text-2.png',\n    schema: {\n      componentName: 'Typography.Text',\n      props: {\n        copyable: true,\n        children: 'text',\n      },\n    },\n  },\n  {\n    title: '可编辑文本',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-text-3.png',\n    schema: {\n      componentName: 'Typography.Text',\n      props: {\n        editable: true,\n        children: 'text',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.title/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Typography.Title',\n  title: '标题',\n  category: '基础',\n  props: [\n    {\n      name: 'children',\n      title: { label: '内容', tip: '内容' },\n      propType: 'string',\n      defaultValue: '',\n      supportVariable: true,\n    },\n    {\n      name: 'level',\n      title: { label: '重要程度', tip: '重要程度(1-5)' },\n      propType: 'number',\n      defaultValue: 1,\n    },\n    {\n      name: 'code',\n      title: { label: '添加代码样式', tip: '添加代码样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'copyable',\n      title: { label: '是否可拷贝', tip: '是否可拷贝' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'delete',\n      title: { label: '添加删除线样式', tip: '添加删除线样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: { label: '是否禁用', tip: '是否为禁用状态' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'editable',\n      title: { label: '是否可编辑', tip: '是否可编辑' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'ellipsis',\n      title: {\n        label: '自动溢出省略',\n        tip: '设置自动溢出省略，需要设置元素宽度',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'mark',\n      title: { label: '添加标记样式', tip: '添加标记样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'keyboard',\n      title: { label: '添加键盘样式', tip: '添加键盘样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'underline',\n      title: { label: '添加下划线样式', tip: '添加下划线样式' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'strong',\n      title: { label: '是否加粗', tip: '是否加粗' },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'type',\n      title: { label: '文本类型', tip: '文本类型' },\n      propType: { type: 'oneOf', value: ['secondary', 'warning', 'danger'] },\n      setter: {\n        componentName: 'SelectSetter',\n        props: {\n          options: [\n            {\n              title: '默认',\n              value: 'default',\n            },\n            {\n              title: '弱提示',\n              value: 'secondary',\n            },\n            {\n              title: '成功',\n              value: 'success',\n            },\n            {\n              title: '警告',\n              value: 'warning',\n            },\n            {\n              title: '错误',\n              value: 'danger',\n            },\n          ],\n        },\n      },\n    },\n  ],\n  configure: { supports: { style: true } },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/typography.title/snippets.ts",
    "content": "export default [\n  {\n    title: '一级标题',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-title-1.png',\n    schema: {\n      componentName: 'Typography.Title',\n      props: {\n        level: 1,\n        children: '一级标题',\n      },\n    },\n  },\n  {\n    title: '二级标题',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-title-2.png',\n    schema: {\n      componentName: 'Typography.Title',\n      props: {\n        level: 2,\n        children: '二级标题',\n      },\n    },\n  },\n  {\n    title: '三级标题',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-title-3.png',\n    schema: {\n      componentName: 'Typography.Title',\n      props: {\n        level: 3,\n        children: '三级标题',\n      },\n    },\n  },\n  {\n    title: '四级标题',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/typography-title-4.png',\n    schema: {\n      componentName: 'Typography.Title',\n      props: {\n        level: 4,\n        children: '四级标题',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/upload/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  snippets,\n  componentName: 'Upload',\n  title: '上传',\n  category: '表单',\n  props: [\n    {\n      title: '基本',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'defaultFileList',\n          title: {\n            label: '默认上传文件',\n            tip: 'defaultFileList | 默认已经上传的文件列表',\n          },\n          propType: { type: 'arrayOf', value: 'object' },\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'ObjectSetter',\n                props: {\n                  config: {\n                    items: [\n                      {\n                        name: 'name',\n                        title: '文件名',\n                        setter: 'StringSetter',\n                      },\n                      {\n                        name: 'status',\n                        title: '状态',\n                        setter: {\n                          componentName: 'SelectSetter',\n                          props: {\n                            options: [\n                              'error',\n                              'success',\n                              'done',\n                              'uploading',\n                              'removed',\n                            ].map((v) => ({ label: v, value: v })),\n                          },\n                        },\n                      },\n                      {\n                        name: 'url',\n                        title: '下载地址',\n                        setter: 'StringSetter',\n                      },\n                      {\n                        name: 'url',\n                        title: '下载地址',\n                        setter: 'StringSetter',\n                      },\n                      {\n                        name: 'response',\n                        title: '错误信息',\n                        setter: 'StringSetter',\n                      },\n                    ],\n                  },\n                },\n              },\n            },\n          },\n        },\n        {\n          name: 'fileList',\n          title: {\n            label: '当前上传文件',\n            tip: 'fileList | 当前上传的文件列表（受控）',\n          },\n          propType: { type: 'arrayOf', value: 'object' },\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'ObjectSetter',\n                props: {\n                  config: {\n                    items: [\n                      {\n                        name: 'name',\n                        title: '文件名',\n                        setter: 'StringSetter',\n                      },\n                      {\n                        name: 'status',\n                        title: '状态',\n                        setter: {\n                          componentName: 'SelectSetter',\n                          props: {\n                            options: [\n                              'error',\n                              'success',\n                              'done',\n                              'uploading',\n                              'removed',\n                            ].map((v) => ({ label: v, value: v })),\n                          },\n                        },\n                      },\n                      {\n                        name: 'url',\n                        title: '下载地址',\n                        setter: 'StringSetter',\n                      },\n                      {\n                        name: 'url',\n                        title: '下载地址',\n                        setter: 'StringSetter',\n                      },\n                      {\n                        name: 'response',\n                        title: '错误信息',\n                        setter: 'StringSetter',\n                      },\n                    ],\n                  },\n                },\n              },\n            },\n          },\n        },\n        {\n          name: 'multiple',\n          title: {\n            label: '支持多选文件',\n            tip: 'multiple | 是否支持多选文件，`ie10+` 支持。开启后按住 ctrl 可选择多个文件',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'maxCount',\n          title: {\n            label: '上传数量限制',\n            tip: 'maxCount | 限制上传数量。当为 1 时，始终用最新上传的文件代替当前文件',\n          },\n          propType: 'number',\n          setter: 'NumberSetter',\n        },\n        {\n          name: 'accept',\n          title: {\n            label: '上传文件类型',\n            tip: 'accept | 接受上传的文件类型, 例如 .doc,.docx,application/msword',\n          },\n          propType: 'string',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'directory',\n          title: {\n            label: '文件夹上传',\n            tip: 'directory | 支持上传文件夹',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'disabled',\n          title: { label: '是否禁用', tip: 'disabled | 是否为禁用状态' },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n      ],\n    },\n    {\n      title: '高级',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'openFileDialogOnClick',\n          title: {\n            label: '打开文件对话框',\n            tip: 'openFileDialogOnClick | 点击打开文件对话框',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'showUploadList',\n          title: {\n            label: '显示上传列表',\n            tip: 'showUploadList | 是否显示上传的文件列表,',\n          },\n          propType: 'bool',\n          defaultValue: true,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'listType',\n          title: {\n            label: '上传列表样式',\n            tip:\n              'listType | 上传列表的内建样式，支持三种基本样式 `text`, `picture` 和 `picture-card`',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['text', 'picture', 'picture-card'],\n          },\n          defaultValue: 'text',\n          setter: [\n            {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '文本',\n                    value: 'text',\n                  },\n                  {\n                    title: '图片',\n                    value: 'picture',\n                  },\n                  {\n                    title: '图片卡片',\n                    value: 'picture-card',\n                  },\n                ],\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n        {\n          name: 'iconRender',\n          title: { label: '自定义图标', tip: 'iconRender | 自定义显示 icon' },\n          propType: 'func',\n          setter: {\n            componentName: 'SlotSetter',\n            title: '自定义图标插槽',\n            initialValue: {\n              type: 'JSSlot',\n              params: ['file', 'listType'],\n              value: [],\n            },\n          },\n        },\n        {\n          name: 'itemRender',\n          title: {\n            label: '自定义列表项',\n            tip: 'itemRender | 自定义上传列表项',\n          },\n          propType: 'func',\n          setter: {\n            componentName: 'SlotSetter',\n            title: '自定义列表项插槽',\n            initialValue: {\n              type: 'JSSlot',\n              params: ['originNode', 'file', 'fileList', 'actions'],\n              value: [],\n            },\n          },\n        },\n        {\n          name: 'progress',\n          title: { label: '自定义进度条', tip: 'progress | 自定义进度条样式' },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n      ],\n    },\n    {\n      title: '上传参数',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'action',\n          title: { label: '上传地址', tip: 'action | 上传的地址或方法' },\n          propType: { type: 'oneOfType', value: ['string', 'func'] },\n          setter: ['StringSetter', 'FunctionSetter', 'VariableSetter'],\n        },\n        {\n          name: 'name',\n          title: { label: '文件参数名', tip: 'name | 发到后台的文件参数名' },\n          propType: 'string',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'method',\n          title: {\n            label: '请求Method',\n            tip: 'method | 上传请求的 http method',\n          },\n          propType: {\n            type: 'oneOf',\n            value: ['get', 'post', 'put', 'head', 'options', 'patch', 'delete'],\n          },\n          defaultValue: 'post',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'headers',\n          title: {\n            label: '上传请求头',\n            tip: 'headers | 设置上传的请求头部，IE10 以上有效',\n          },\n          propType: 'object',\n          setter: 'JsonSetter',\n        },\n        {\n          name: 'withCredentials',\n          title: {\n            label: '携带Cookie',\n            tip: 'withCredentials | 上传请求时是否携带 cookie',\n          },\n          propType: 'bool',\n          defaultValue: false,\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'data',\n          title: {\n            label: '额外参数',\n            tip: 'data | 上传所需额外参数或返回上传额外参数的方法',\n          },\n          propType: { type: 'oneOfType', value: ['object', 'func'] },\n          setter: [\n            'JsonSetter',\n            {\n              componentName: 'FunctionSetter',\n              props: {\n                template: 'onData(file,${extParams}){\\n// 上传所需额外参数\\nreturn {};\\n}',\n              },\n            },\n            'VariableSetter',\n          ],\n        },\n      ],\n    },\n    {\n      title: '回调函数',\n      display: 'block',\n      type: 'group',\n      items: [\n        {\n          name: 'beforeUpload',\n          title: {\n            label: '上传前回调',\n            tip: 'beforeUpload | 上传文件之前的回调函数',\n          },\n          propType: 'func',\n          setter: {\n            componentName: 'FunctionSetter',\n            props: {\n              template:\n                'beforeUpload(file,fileList,${extParams}){\\n// 上传文件之前的钩子\\nreturn false;\\n}',\n            },\n          },\n        },\n        {\n          name: 'customRequest',\n          title: {\n            label: '自定义上传',\n            tip: 'customRequest | 通过覆盖默认的上传行为，可以自定义自己的上传实现',\n          },\n          propType: 'func',\n          setter: 'FunctionSetter',\n        },\n        {\n          name: 'isImageUrl',\n          title: {\n            label: '是否为图片',\n            tip: 'isImageUrl | 自定义缩略图是否使用 <img /> 标签进行显示',\n          },\n          propType: 'func',\n          setter: {\n            componentName: 'FunctionSetter',\n            props: {\n              template: 'isImageUrl(file,${extParams}){\\n// 判断是否为图片\\nreturn true;\\n}',\n            },\n          },\n        },\n        {\n          name: 'previewFile',\n          title: {\n            label: '自定义文件预览',\n            tip: 'previewFile | 自定义文件预览逻辑',\n          },\n          propType: 'func',\n          setter: 'FunctionSetter',\n        },\n      ],\n    },\n  ],\n  configure: {\n    component: { isContainer: true },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          template:\n            \"onChange({file,fileList,event},${extParams}){\\n// 上传文件改变时的回调\\nconsole.log('onChange',file,fileList,event);}\",\n        },\n        {\n          name: 'onPreview',\n          template:\n            \"onPreview(file,${extParams}){\\n// 点击文件链接或预览图标时的回调\\nconsole.log('onPreview',file);}\",\n        },\n        {\n          name: 'onRemove',\n          template:\n            \"onRemove(file,${extParams}){\\n// 点击移除文件时的回调\\nconsole.log('onRemove',file);}\",\n        },\n        {\n          name: 'onDownload',\n          template:\n            \"onDownload(file,${extParams}){\\n// 点击下载文件时的回调\\nconsole.log('onDownload',file);}\",\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/antd-lowcode-materials/lowcode/upload/snippets.ts",
    "content": "export default [\n  {\n    title: '上传',\n    screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/upload-1.png',\n    schema: {\n      componentName: 'Upload',\n      props: {},\n      children: {\n        componentName: 'Button',\n        props: {\n          children: 'Upload',\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/antd-lowcode-materials/package.json",
    "content": "{\n  \"name\": \"@alilc/antd-lowcode-materials\",\n  \"version\": \"1.2.2\",\n  \"description\": \"Antd for LowCode\",\n  \"main\": \"lib/index.js\",\n  \"scripts\": {\n    \"build\": \"build-scripts build\",\n    \"lowcode:dev\": \"build-scripts start --config ./build.lowcode.js\",\n    \"lowcode:build\": \"build-scripts build --config ./build.lowcode.js\",\n    \"prepublishOnly\": \"npm run build && npm run lowcode:build\"\n  },\n  \"files\": [\n    \"es/\",\n    \"lib/\",\n    \"dist/\",\n    \"build/\",\n    \"lowcode/\",\n    \"lowcode_lib/\",\n    \"lowcode_es/\"\n  ],\n  \"devDependencies\": {\n    \"@alib/build-scripts\": \"^0.1.23\",\n    \"@alifd/build-plugin-lowcode\": \"^0.4.0\",\n    \"@ant-design/icons\": \"^4.7.0\",\n    \"@types/lodash\": \"^4.14.181\",\n    \"@types/react\": \"^18.0.1\",\n    \"@types/react-dom\": \"^18.0.0\",\n    \"build-plugin-component\": \"^1.10.0\",\n    \"build-plugin-moment-locales\": \"^0.1.0\",\n    \"lodash\": \"^4.17.21\",\n    \"react\": \"^17.0.1\",\n    \"react-dom\": \"^17.0.1\",\n    \"style-loader\": \"^2.0.0\",\n    \"tsconfig-paths-webpack-plugin\": \"^3.3.0\",\n    \"typescript\": \"^3.9.3\",\n    \"yorkie\": \"^2.0.0\"\n  },\n  \"authors\": [\n    {\n      \"name\": \"莫夭\"\n    },\n    {\n      \"name\": \"金禅\"\n    }\n  ],\n  \"dependencies\": {\n    \"@ant-design/icons\": \"^4.6.2\",\n    \"antd\": \"^4.24.7\",\n    \"moment\": \"^2.29.1\",\n    \"@babel/runtime\": \"^7.0.0\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"^16.0.0\",\n    \"react-dom\": \"^16.0.0\"\n  },\n  \"componentConfig\": {\n    \"materialSchema\": \"https://alifd.alicdn.com/npm/@alilc/antd-lowcode-materials@1.2.2/build/lowcode/assets-prod.json\"\n  },\n  \"license\": \"MIT\",\n  \"homepage\": \"https://unpkg.com/@alilc/antd-lowcode-materials@1.2.2/build/index.html\",\n  \"repository\": \"https://github.com/alibaba/lowcode-materials.git\",\n  \"exports\": {\n    \"./prototype\": {\n      \"require\": \"./lowcode_lib/meta.js\",\n      \"import\": \"./lowcode_es/meta.js\"\n    },\n    \"./prototypeView\": {\n      \"require\": \"./lowcode_lib/view.js\",\n      \"import\": \"./lowcode_es/view.js\"\n    },\n    \"./*\": \"./*\",\n    \".\": {\n      \"import\": \"./es/index.js\",\n      \"require\": \"./lib/index.js\"\n    }\n  },\n  \"lcMeta\": {\n    \"type\": \"component\"\n  }\n}"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/auto-complete/index.tsx",
    "content": "import { AutoComplete as OriginalAutoComplete } from 'antd';\nimport { withWrap } from '../../utils/hoc';\n\nconst AutoComplete = withWrap(OriginalAutoComplete);\n\nexport default AutoComplete;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/button/index.tsx",
    "content": "import React, { forwardRef, Ref } from 'react';\nimport { Button as OriginalButton } from 'antd';\n\nconst Button: any = (props: any, ref: Ref<any>) => {\n  const innerProps: any = {};\n  if (!props.href?.trim() || props.__designMode === 'design') {\n    // 解决低代码编辑器中按钮设置href属性造成按钮点击重定向问题\n    innerProps.href = undefined;\n  }\n  return <OriginalButton {...props} {...innerProps} ref={ref} />;\n};\nexport default forwardRef(Button);\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/calendar/index.tsx",
    "content": "import { Calendar as OriginalCalendar } from 'antd';\nimport { withMomentProps } from '../../utils/hoc';\n\nconst Calendar = withMomentProps(OriginalCalendar, [\n  'defaultValue',\n  'validRange',\n  'value.defaultValue',\n]);\n\nexport default Calendar;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/cascader/index.tsx",
    "content": "import { Cascader as OriginalCascader } from 'antd';\nimport { withWrap } from '../../utils/hoc';\n\nconst Cascader = withWrap(OriginalCascader);\n\nexport default Cascader;"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/checkbox/index.tsx",
    "content": "import { Checkbox as OriginalCheckbok } from 'antd';\nimport { withWrap } from '../../utils/hoc';\n\nconst Checkbox = withWrap(OriginalCheckbok);\n(Checkbox as any).Group = OriginalCheckbok.Group;\n\nexport default Checkbox;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/config-provider/index.tsx",
    "content": "import React from 'react';\nimport { ConfigProvider as OriginalConfigProvider } from 'antd';\nimport moment from 'moment';\nimport 'moment/locale/zh-cn';\nimport zhCN from 'antd/es/locale/zh_CN';\n\nconst ConfigProvider = (props: any) => {\n  const { locale, ...rest } = props;\n\n  let localeData = locale;\n  if (typeof locale === 'string') {\n    if (locale.toLowerCase() === 'zh-cn') {\n      moment.locale('zh-cn');\n      localeData = zhCN;\n    } else if (locale.toLowerCase() === 'en-us') {\n      moment.locale('en');\n      // 默认为英文\n      localeData = undefined;\n    }\n  }\n\n  return <OriginalConfigProvider locale={localeData} {...rest} />;\n};\n\nexport default ConfigProvider;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/date-picker/index.tsx",
    "content": "import { DatePicker as OriginalDatePicker } from 'antd';\nimport { withMomentProps } from '../../utils/hoc';\n\nconst OriginalRangePicker = OriginalDatePicker.RangePicker;\n\nconst DatePicker = withMomentProps(OriginalDatePicker, [\n  'defaultPickerValue',\n  'defaultValue',\n  'showTime.defaultValue',\n  'value',\n]);\n\nconst RangePicker = withMomentProps(OriginalRangePicker, [\n  'defaultPickerValue',\n  'defaultValue',\n  'showTime.defaultValue',\n  'value',\n]);\n\n(DatePicker as any).RangePicker = RangePicker;\n\nexport default DatePicker;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/drawer/index.tsx",
    "content": "import React from 'react';\nimport { Drawer as OriginalDrawer } from 'antd';\n\nconst Drawer: any = (props: any) => {\n  const innerProps: any = {};\n  if (props.__designMode === 'design') {\n    // 低代码编辑态中强制显示，将控制权交给引擎侧\n    innerProps.open = true;\n  }\n  return <OriginalDrawer {...props} {...innerProps} />;\n};\nexport default Drawer;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/dropdown/index.tsx",
    "content": "import React from 'react';\nimport { Dropdown as OriginalDropdown } from 'antd';\nimport { withSingleChild } from '../../utils/hoc';\n\nconst Dropdown: any = (props: any) => {\n  const innerProps: any = {};\n  if (props.__designMode === 'design') {\n    // 低代码编辑态中强制显示，将控制权交给引擎侧\n    innerProps.open = true;\n  }\n  return <OriginalDropdown {...props} {...innerProps} />;\n};\nexport default withSingleChild(Dropdown, ['children', 'overlay']);\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/form/index.tsx",
    "content": "import React, { Component, createRef } from 'react';\nimport { Form as OriginalForm } from 'antd';\n\nimport { withSingleFunctionChild } from '../../utils/hoc';\n\nclass Form extends Component<any, any> {\n  formRef = createRef<any>();\n\n  componentDidUpdate(prevProps: any) {\n    const { values: prevValues } = prevProps;\n    const { values: currentValues } = this.props;\n\n    if (prevValues !== currentValues) {\n      if (currentValues && Object.keys(currentValues).length > 0) {\n        this.formRef.current!.setFieldsValue(currentValues);\n      } else {\n        this.formRef.current!.resetFields();\n      }\n    }\n  }\n\n  componentDidMount() {\n    const { values } = this.props;\n\n    Object.defineProperties(\n      this,\n      Object.keys(this.formRef.current).reduce((out, key) => {\n        const property = this.formRef.current[key];\n        let getter = () => property;\n        if (typeof property === 'function') {\n          getter = () => property.bind(this.formRef.current);\n        }\n        out[key] = { get: getter };\n        return out;\n      }, {} as Record<string, any>),\n    );\n\n    // 绑定表达式的时候，初次不生效，需要第一次调用一下 setFieldsValue\n    if (values) {\n      this.formRef.current!.setFieldsValue(values);\n    }\n  }\n\n  render() {\n    const { values, ...rest } = this.props;\n\n    return <OriginalForm ref={this.formRef} {...rest} />;\n  }\n}\n\n(Form as any).Item = (props: any) => {\n  const { name, requiredobj, typeobj, patternobj, lenobj, validator } = props;\n\n  const rules = [];\n  if (requiredobj && requiredobj.required) {\n    rules.push(requiredobj);\n  }\n  if (typeobj && typeobj.type) {\n    rules.push(typeobj);\n  }\n  if (patternobj && patternobj.pattern) {\n    rules.push(patternobj);\n  }\n  if (lenobj && (lenobj.max || lenobj.min)) {\n    rules.push(lenobj);\n  }\n  if (validator && typeof validator === 'function') {\n    rules.push({\n      validator: (_: any, value: any) => validator(value),\n    });\n  }\n\n  const namePath =\n    typeof name === 'string' && name.indexOf('.') > 0 ? name.split('.') : name;\n\n  // https://ant.design/components/form-cn/#components-form-demo-complex-form-control\n  // <Form.Item name=\"field\" /> 只会对它的直接子元素绑定表单功能\n  const { children, ...other } = props\n  let node = children\n  if (Array.isArray(children) && children.length === 1) { // 如果 children.length > 1， 说明 Form.Item 只充当布局的作用\n    node = children[0]\n  }\n\n  return (\n    <OriginalForm.Item\n      {...other}\n      name={namePath}\n      rules={rules}\n    >\n      { node }\n    </OriginalForm.Item>\n  );\n};\n\n(Form as any).List = withSingleFunctionChild(OriginalForm.List);\n\nexport default Form;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/icon/index.tsx",
    "content": "import React, { forwardRef, Ref } from 'react';\nimport * as icons from '@ant-design/icons';\n\nconst createFromIconfontCN = icons.createFromIconfontCN;\ninterface IconProps {\n  type: string;\n  className?: string;\n  size?: number;\n  color?: string;\n  rotate?: number;\n  spin?: boolean;\n  style?: React.CSSProperties;\n}\n\nconst Icon = (props: IconProps, ref: Ref<any>) => {\n  const { type = '', size, color, ...rest } = props;\n\n  const IconComp = ((icons || {}) as any)[type];\n\n  const style = {\n    ...rest.style,\n    fontSize: size,\n    color,\n  };\n\n  if (!IconComp) {\n    const IconFont = createFromIconfontCN();\n    return <IconFont type={type} {...rest} style={style} ref={ref} />;\n  }\n\n  return <IconComp {...rest} style={style} twoToneColor={color} ref={ref} />;\n};\n\nexport default forwardRef(Icon);\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/input/index.tsx",
    "content": "import { Input as OriginalInput } from 'antd';\nimport { withWrap } from '../../utils/hoc';\n\nconst {\n  Group: OriginalGroup,\n  TextArea: OriginalTextArea,\n  Password: OriginalPassword,\n  Search: OriginalSearch,\n} = OriginalInput;\n\nconst Input = withWrap(OriginalInput);\n\n(Input as any).Group = OriginalGroup;\n(Input as any).TextArea = withWrap(OriginalTextArea);\n(Input as any).Password = withWrap(OriginalPassword);\n(Input as any).Search = withWrap(OriginalSearch);\n\nexport default Input;"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/modal/index.tsx",
    "content": "import React from 'react';\nimport { Modal as OriginalModal } from 'antd';\n\nconst Modal: any = (props: any) => {\n  const innerProps: any = {};\n  if (props.__designMode === 'design') {\n    // 低代码编辑态中强制显示，将控制权交给引擎侧\n    innerProps.open = true;\n  }\n  return <OriginalModal {...props} {...innerProps} />;\n};\nModal.info = OriginalModal.info;\nModal.success = OriginalModal.success;\nModal.error = OriginalModal.error;\nModal.warning = OriginalModal.warning;\nModal.warn = OriginalModal.warn;\nModal.confirm = OriginalModal.confirm;\nexport default Modal;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/popover/index.tsx",
    "content": "import React from 'react';\nimport { Popover as OriginalPopover } from 'antd';\n\ninterface PopoverProps {\n  open?: boolean;\n}\n\nconst Popover = (props: PopoverProps) => {\n\n  return <OriginalPopover \n            {...props} \n            open = {!props.open ? undefined : props.open}\n        />;\n};\n\nexport default Popover;"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/radio/index.tsx",
    "content": "import { Radio as OriginalRadio } from 'antd';\nimport { withWrap } from '../../utils/hoc';\n\nconst Radio = withWrap(OriginalRadio);\n(Radio as any).Group = OriginalRadio.Group;\n\nexport default Radio;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/select/index.tsx",
    "content": "import { Select as OriginalSelect } from 'antd';\nimport { withWrap } from '../../utils/hoc';\n\nconst Select = withWrap(OriginalSelect);\n\nexport default Select;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/skeleton/index.tsx",
    "content": "import { Skeleton as OriginalSleleton } from 'antd';\nimport { withSingleChild } from '../../utils/hoc';\n\nconst Skeleton = withSingleChild(OriginalSleleton, ['children']);\nexport default Skeleton;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/slider/index.tsx",
    "content": "import React from 'react';\nimport { Slider } from 'antd';\nconst SliderOuter = (props: any) => {\n  const { range } = props;\n  let { defaultValue } = props;\n  if (range) {\n    defaultValue = Array.isArray(defaultValue)\n      ? defaultValue\n      : [0, defaultValue];\n  } else {\n    defaultValue = Array.isArray(defaultValue)\n      ? defaultValue[1] || defaultValue[0]\n      : defaultValue;\n  }\n  return <Slider {...props} defaultValue={defaultValue}></Slider>;\n};\n\nexport default SliderOuter;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/table/index.tsx",
    "content": "import React from 'react';\nimport { Table as OriginalTable } from 'antd';\n\nconst Table = (props: any) => {\n  const columns = (props.columns || []).filter((item: any) => !item?.hidden);\n\n  return <OriginalTable {...props} columns={columns} />;\n};\n\nexport default Table;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/tabs/index.tsx",
    "content": "import React, { Component } from 'react';\nimport { TabPaneProps, Tabs as OriginalTabs } from 'antd';\nimport { warning } from '../../utils/warning'\nimport type { Tab } from 'rc-tabs/lib/interface';\n\nclass Tabs extends Component<any> {\n  state = {\n    activeKey: this.props.activeKey ?? this.props.defaultActiveKey,\n  };\n\n  private _handleChange = (key: string) => {\n    this.setActiveKey(key);\n  };\n\n  // 编辑器里可以通过 this.$(refId).setActiveKey(key) 调用\n  setActiveKey = (key: string) => {\n    const { onChange = () => {} } = this.props;\n    this.setState({ activeKey: key });\n    onChange(key);\n  };\n\n  // 编辑器里可以通过 this.$(refId).getActiveKey() 调用\n  getActiveKey = () => {\n    return this.state.activeKey;\n  };\n\n  render() {\n    const { props } = this;\n    const { activeKey } = this.state;\n\n    const { children } = props\n\n    let items = props.items\n\n    // props.items 存在，只认 props.items\n    // 兼容代码：props.childrens 反推 props.items\n    if (!props.items && Array.isArray(children) && children.length > 0) {\n      warning('Tabs.TabPane is deprecated. Please use `items` directly.')\n      items = children.map((node: React.ReactElement<TabPaneProps>) => {\n        if (React.isValidElement(node)) {\n          const { key, props } = node;\n          const { tab, ...restProps } = props || {};\n          const item: Tab = {\n            key: String(key),\n            ...restProps,\n            label: tab,\n          };\n          return item;\n        }\n        return null\n      }).filter(Boolean)\n    }\n\n    return (\n      <OriginalTabs\n        {...props}\n        items={items}\n        activeKey={activeKey}\n        onChange={this._handleChange}\n      />\n    );\n  }\n}\n\n(Tabs as any).TabPane = OriginalTabs.TabPane;\n\nexport default Tabs;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/time-picker/index.tsx",
    "content": "import { TimePicker as OriginalTimePicker } from 'antd';\nimport { withMomentProps } from '../../utils/hoc';\n\nconst TimePicker = withMomentProps(OriginalTimePicker, [\n  'defaultValue',\n  'value',\n]);\n\nexport default TimePicker;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/tree-select/index.tsx",
    "content": "import React from 'react';\nimport { TreeSelect as OriginTreeSelect } from 'antd';\n\nconst TreeSelect: any = (props: any) => {\n  return <OriginTreeSelect {...props} />;\n};\n\nexport default TreeSelect;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/components/upload/index.tsx",
    "content": "import { Upload as OriginalUpload } from 'antd';\nimport { withSingleChild } from '../../utils/hoc';\n\nconst Upload = withSingleChild(OriginalUpload, ['children']);\nexport default Upload;\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/index.scss",
    "content": ""
  },
  {
    "path": "packages/antd-lowcode-materials/src/index.tsx",
    "content": "export { Affix } from 'antd';\n\nexport { Anchor } from 'antd';\n\n// export { AutoComplete } from 'antd';\n\nexport { Alert } from 'antd';\n\nexport { Avatar } from 'antd';\n\nexport { BackTop } from 'antd';\n\nexport { Badge } from 'antd';\n\nexport { Breadcrumb } from 'antd';\n\nexport { Card } from 'antd';\n\nexport { Collapse } from 'antd';\n\nexport { Carousel } from 'antd';\n\n// export { Cascader } from 'antd';\n\n// export { Checkbox } from 'antd';\n\nexport { Col } from 'antd';\n\nexport { Comment } from 'antd';\n\nexport { Descriptions } from 'antd';\n\nexport { Divider } from 'antd';\n\n// export { Drawer } from 'antd';\n\nexport { Empty } from 'antd';\n\nexport { Grid } from 'antd';\n\n// export { Input } from 'antd';\n\nexport { Image } from 'antd';\n\nexport { InputNumber } from 'antd';\n\nexport { List } from 'antd';\n\nexport { message } from 'antd';\n\nexport { Menu } from 'antd';\n\nexport { Mentions } from 'antd';\n\n// export { Modal } from 'antd';\n\nexport { Statistic } from 'antd';\n\nexport { notification } from 'antd';\n\nexport { PageHeader } from 'antd';\n\nexport { Pagination } from 'antd';\n\nexport { Popconfirm } from 'antd';\n\nexport { default as Popover } from './components/popover';\n\nexport { Progress } from 'antd';\n\n// export { Radio } from 'antd';\n\nexport { Rate } from 'antd';\n\nexport { Result } from 'antd';\n\nexport { Row } from 'antd';\n\nexport { Segmented } from 'antd';\n\n// export { Skeleton } from 'antd';\n\nexport { Space } from 'antd';\n\nexport { Spin } from 'antd';\n\nexport { Steps } from 'antd';\n\nexport { Switch } from 'antd';\n\nexport { Transfer } from 'antd';\n\nexport { Tree } from 'antd';\n\n// export { TreeSelect } from 'antd';\n\n// export { Tabs } from 'antd';\n\nexport { Tag } from 'antd';\n\nexport { Timeline } from 'antd';\n\nexport { Tooltip } from 'antd';\n\nexport { Typography } from 'antd';\n\nexport { version } from 'antd';\n\nexport { default as Skeleton } from './components/skeleton';\n\nexport { default as Checkbox } from './components/checkbox';\n\nexport { default as Button } from './components/button';\n\nexport { default as Radio } from './components/radio';\n\nexport { default as Upload } from './components/upload';\n\nexport { default as Icon } from './components/icon';\n\nexport { default as Form } from './components/form';\n\nexport { default as Dropdown } from './components/dropdown';\n\nexport { default as Calendar } from './components/calendar';\n\nexport { default as ConfigProvider } from './components/config-provider';\n\nexport { default as DatePicker } from './components/date-picker';\n\nexport { default as Tabs } from './components/tabs';\n\nexport { default as TimePicker } from './components/time-picker';\n\nexport { default as Slider } from './components/slider';\n\nexport { default as Table } from './components/table';\n\nexport { default as Modal } from './components/modal';\n\nexport { default as Drawer } from './components/drawer';\n\nexport { default as TreeSelect } from './components/tree-select';\n\nexport { default as Input } from './components/input';\n\nexport { default as Select } from './components/select'\n\nexport { default as Cascader } from './components/cascader';\n\nexport { default as AutoComplete } from './components/auto-complete';\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/utils/hoc.tsx",
    "content": "import React, { ComponentType, forwardRef, Ref } from 'react';\nimport moment from 'moment';\nimport { get, set, has } from 'lodash';\n\nfunction convertProps(\n  props: Record<string, any>,\n  list: string[],\n  mapper: (v: any, key: string) => any,\n) {\n  const out: Record<string, any> = {};\n  list.forEach(key => {\n    if (has(props, key)) {\n      set(out, key, mapper(get(props, key), key));\n    }\n  });\n  return out;\n}\n\n/**\n * 简单包装，不做任何处理\n * 部分组件ref比较特殊，包一层会解决这个问题\n */\nexport function withWrap(Comp: ComponentType<any>) {\n  return forwardRef((props: any, ref: Ref<any>) => {\n    return <Comp {...props} ref={ref} />;\n  });\n}\n\n/**\n * 某些组件会用React.Children.only检查子节点\n * 需要做处理避免报错\n */\nexport function withSingleChild(\n  Comp: ComponentType<any>,\n  needsConvert = ['children'],\n) {\n  return (props: any) => {\n    const convertedProps = convertProps(props, needsConvert, prop => {\n      let node = React.Children.toArray(prop)[0];\n      if (node === null || typeof node !== 'object') {\n        node = <div>{node}</div>;\n      }\n      return node;\n    });\n\n    return <Comp {...(props as any)} {...(convertedProps as any)} />;\n  };\n}\n\nexport function withSingleFunctionChild(Comp: ComponentType<any>) {\n  return (props: any) => {\n    const { children } = props;\n\n    let node;\n    if (typeof children === 'function') {\n      node = children;\n    }\n    if (\n      Array.isArray(children) &&\n      children.length === 1 &&\n      typeof children[0] === 'function'\n    ) {\n      node = children[0];\n    }\n\n    if (node) {\n      return <Comp {...(props as any)}>{node}</Comp>;\n    }\n    return <div>{children}</div>;\n  };\n}\n\n/**\n * moment对象在序列化后会被转为字符串\n * 需要让日期类组件支持接受字符串值\n */\nexport function withMomentProps(\n  Comp: ComponentType<any>,\n  needsConvert = ['value', 'defaultValue'],\n) {\n  return (props: any) => {\n    const convertedProps = convertProps(props, needsConvert, prop => {\n      if (prop) {\n        if (Array.isArray(prop)) {\n          return prop.map(v => (moment.isMoment(v) ? v : moment(v)));\n        }\n        return moment.isMoment(prop) ? prop : moment(prop);\n      }\n    });\n\n    return <Comp {...(props as any)} {...(convertedProps as any)} />;\n  };\n}\n"
  },
  {
    "path": "packages/antd-lowcode-materials/src/utils/warning.ts",
    "content": "export const warning = (...args: any[]) => {\n  console.warn(args)\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/HISTORY.md",
    "content": "## 1.2.1\n\n* `feat` 修改 NextTable Snippets 一些不合理的默认值"
  },
  {
    "path": "packages/fusion-lowcode-materials/README.md",
    "content": "<h2><img width=\"50\" src=\"https://img.alicdn.com/tfs/TB1YsoiHVzqK1RjSZFCXXbbxVXa-159-99.svg\"> Fusion Design For Lowcode</h2>\n\n[![NPM version][npm-image-fusion]][npm-url-fusion]\n\n### [在线示例 / DEMO](https://alifd.alicdn.com/npm/@alilc/antd-lowcode-materials@1.2.2/build/lowcode/index.html)\n\n### 使用 / Usage\n#### NPM\n```js\nconst { material } from '@alilc/lowcode-engine';\nconst assets = require('@alilc/lowcode-materials/dist/assets.json');\n\n// in GeneralWorkbench init\nmaterial.setAssets(assets);\n```\n\n#### CDN\n```js\n// in GeneralWorkbench init\nconst assets = await (await fetch(`https://alifd.alicdn.com/npm/@alilc/lowcode-materials@1.2.1/dist/assets.json`)).json();\nmaterial.setAssets(assets);\n```\n\n[npm-image-fusion]: https://img.shields.io/npm/v/@alilc/lowcode-materials.svg?style=flat-square\n[npm-url-fusion]: http://npmjs.org/package/@alilc/lowcode-materials\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/build.json",
    "content": "{\n  \"library\": \"AlilcLowcodeMaterials\",\n  \"libraryTarget\": \"umd\",\n  \"sourceMap\": false,\n  \"alias\": {\n    \"@\": \"./src\",\n    \"@components\": \"./src/components\"\n  },\n  \"plugins\": [\n    [\n      \"build-plugin-component\",\n      {\n        \"themePackage\": \"@alifd/theme-2\"\n      }\n    ],\n    [\n      \"build-plugin-fusion\",\n      {\n        \"uniteBaseComponent\": \"@alifd/next\",\n        \"importOptions\": {\n          \"libraryDirectory\": \"lib\"\n        }\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/build.lowcode.js",
    "content": "const { name, version } = require('./package.json');\n\nmodule.exports = {\n  sourceMap: false,\n  alias: {\n    '@': './src',\n    lowcode: './lowcode',\n  },\n  plugins: [\n    [\n      '@alifd/build-plugin-lowcode',\n      {\n        noParse: true,\n        builtinAssets: [\n          {\n            packages: [\n              {\n                package: 'moment',\n                version: '2.24.0',\n                urls: ['https://g.alicdn.com/mylib/moment/2.24.0/min/moment.min.js'],\n                library: 'moment',\n              },\n              {\n                package: 'lodash',\n                library: '_',\n                urls: ['https://g.alicdn.com/platform/c/lodash/4.6.1/lodash.min.js'],\n              },\n              {\n                title: 'fusion组件库',\n                package: '@alifd/next',\n                version: '1.25.23',\n                urls: [\n                  'https://g.alicdn.com/code/lib/alifd__next/1.25.23/next.min.css',\n                  'https://g.alicdn.com/code/lib/alifd__next/1.25.23/next-with-locales.min.js',\n                ],\n                library: 'Next',\n              },\n            ],\n            components: [],\n          },\n        ],\n        baseUrl: {\n          prod: `https://alifd.alicdn.com/npm/${name}@${version}`,\n          daily: `https://alifd.alicdn.com/npm/${name}@${version}`,\n        },\n        categories: ['通用', '导航', '信息输入', '信息展示', '信息反馈', '常用'],\n        engineScope: '@alilc',\n      },\n    ],\n    [\n      'build-plugin-fusion',\n      {\n        uniteBaseComponent: '@alifd/next',\n        importOptions: {\n          libraryDirectory: 'lib',\n        },\n      },\n    ],\n    './plugins/compatible.build.js',\n  ],\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/demo/Image.md",
    "content": "---\ntitle: Image\norder: 2\n---\n\n图片组件。\n\n```jsx\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Image } from '@alilc/lowcode-materials';\n\nclass App extends Component {\n  render() {\n    return (\n      <div className=\"mock-body\">\n        <Image />\n      </div>\n    );\n  }\n}\n\nReactDOM.render(<App />, mountNode);\n```\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/demo/Link.md",
    "content": "---\ntitle: Link\norder: 1\n---\n\n超链接组件。\n\n```jsx\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Link } from '@alilc/lowcode-materials';\n\nclass App extends Component {\n  render() {\n    return (\n      <div className=\"mock-body\">\n        <Link>这是一个超链接</Link>\n      </div>\n    );\n  }\n}\n\nReactDOM.render(<App />, mountNode);\n```\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/demo/NoteWrapper.md",
    "content": "---\ntitle: NoteWrapper\norder: 4\n---\n\n备注容器组件\n\n```jsx\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { NoteWrapper } from '@alilc/lowcode-materials';\n\nclass App extends Component {\n  render() {\n    return (\n      <div>\n        <NoteWrapper note=\"这是一个备注\">hello world</NoteWrapper>\n      </div>\n    );\n  }\n}\n\nReactDOM.render(<App />, mountNode);\n```\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/demo/RichText.md",
    "content": "---\ntitle: RichText\norder: 3\n---\n\n需求占位组件\n\n```jsx\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { RichText } from '@alilc/lowcode-materials';\n\nclass App extends Component {\n  render() {\n    return (\n      <div>\n        <RichText\n          maxHeight=\"300px\"\n          content='<div><span style=\"font-size: 18pt; color: #333;\"><strong>需求占位</strong></span></div><div><span>- 你可以在这里描述需求</span><br /><span>- 或者粘贴需求截图</span></div>'\n        />\n      </div>\n    );\n  }\n}\n\nReactDOM.render(<App />, mountNode);\n```\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/demo/Video.md",
    "content": "---\ntitle: Video\norder: 3\n---\n\n视频组件。\n\n```jsx\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Video } from '@alilc/lowcode-materials';\n\nclass App extends Component {\n  render() {\n    return (\n      <div>\n        <Video loop width=\"600\" muted />\n      </div>\n    );\n  }\n}\n\nReactDOM.render(<App />, mountNode);\n```\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/alert/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Message',\n  title: '提示',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Message',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'title',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标题',\n          en_US: 'Title',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: title | 说明: 标题',\n          en_US: 'prop: title | description: Title',\n        },\n      },\n      propType: 'string',\n      description: '标题',\n      defaultValue: '标题',\n    },\n    {\n      name: 'type',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'Type',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: type | 说明: 反馈类型',\n          en_US: 'prop: type | description: message type',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'warning', 'error', 'notice', 'help', 'loading'],\n      },\n      description: '反馈类型',\n      defaultValue: 'success',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '形状',\n          en_US: 'Shape',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: shape | 说明: 外观',\n          en_US: 'prop: shape | description: message shape',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['inline', 'addon', 'toast'],\n      },\n      description: '外观',\n      defaultValue: 'inline',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '尺寸',\n          en_US: 'Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 尺寸',\n          en_US: 'prop: size | description: message size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 文本内容',\n          en_US: 'prop: children | description: message content',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '内容',\n    },\n    {\n      name: 'visible',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否显示',\n          en_US: 'Visible',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: visible | 说明: 当前是否显示',\n          en_US: 'prop: visible | description: visible',\n        },\n      },\n      propType: 'bool',\n      description: '当前是否显示',\n    },\n    {\n      name: 'iconType',\n      propType: 'string',\n      description: '显示的图标类型，会覆盖内部设置的IconType',\n    },\n    {\n      name: 'closeable',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '显示 Close',\n          en_US: 'Show Close',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: closeable | 说明: 显示关闭按钮',\n          en_US: 'prop: closeable | description: show close button',\n        },\n      },\n      propType: 'bool',\n      description: '显示关闭按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '关闭按钮的回调',\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n      description: '关闭之后调用的函数',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '开启动效',\n          en_US: 'Animation',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: animation | 说明: 是否开启动效',\n          en_US: 'prop: animation | description: enable animation',\n        },\n      },\n      propType: 'bool',\n      description: '收起动画',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形状',\n            en_US: 'Shape',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: shape | 说明: 外观',\n            en_US: 'prop: shape | description: message shape',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: 'Inline',\n                value: 'inline',\n              },\n              {\n                label: 'Addon',\n                value: 'addon',\n              },\n              {\n                label: 'Toast',\n                value: 'toast',\n              },\n            ],\n          },\n        },\n        description: '外观',\n        defaultValue: 'inline',\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '类型',\n            en_US: 'Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 反馈类型',\n            en_US: 'prop: type | description: message type',\n          },\n        },\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                label: '成功',\n                value: 'success',\n              },\n              {\n                label: '警告',\n                value: 'warning',\n              },\n              {\n                label: '失败',\n                value: 'error',\n              },\n              {\n                label: '提示',\n                value: 'notice',\n              },\n              {\n                label: '帮助',\n                value: 'help',\n              },\n              {\n                label: '加载',\n                value: 'loading',\n              },\n            ],\n          },\n        },\n        description: '反馈类型',\n        defaultValue: 'success',\n      },\n      {\n        name: 'title',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标题',\n            en_US: 'Title',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: title | 说明: 标题',\n            en_US: 'prop: title | description: Title',\n          },\n        },\n        setter: 'StringSetter',\n        description: '标题',\n        defaultValue: '标题',\n      },\n      {\n        name: 'iconType',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标',\n            en_US: 'Icon',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: iconType | 说明: 显示的图标类型',\n            en_US: 'prop: iconType | description: icon type',\n          },\n        },\n        setter: {\n          componentName: 'IconSetter',\n        },\n      },\n      {\n        name: 'children',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '文本',\n            en_US: 'Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: children | 说明: 文本内容',\n            en_US: 'prop: children | description: message content',\n          },\n        },\n        setter: 'TextAreaSetter',\n        description: '内容',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸',\n            en_US: 'prop: size | description: message size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        description: '尺寸',\n        defaultValue: 'medium',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'visible',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否显示',\n            en_US: 'Visible',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: visible | 说明: 当前是否显示',\n            en_US: 'prop: visible | description: visible',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '当前是否显示',\n      },\n      {\n        name: 'closeable',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '关闭按钮',\n            en_US: 'Show Close',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: closeable | 说明: 显示关闭按钮',\n            en_US: 'prop: closeable | description: show close button',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '显示关闭按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'animation',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '开启动效',\n            en_US: 'Animation',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: animation | 说明: 是否开启动效',\n            en_US: 'prop: animation | description: enable animation',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '收起动画',\n        defaultValue: true,\n      },\n    ],\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/alert/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Message',\n  title: '提示',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Message',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'title',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标题',\n          en_US: 'Title',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: title | 说明: 标题',\n          en_US: 'prop: title | description: Title',\n        },\n      },\n      propType: 'string',\n      description: '标题',\n      defaultValue: '标题',\n    },\n    {\n      name: 'type',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'Type',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: type | 说明: 反馈类型',\n          en_US: 'prop: type | description: message type',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'warning', 'error', 'notice', 'help', 'loading'],\n      },\n      description: '反馈类型',\n      defaultValue: 'success',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '形状',\n          en_US: 'Shape',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: shape | 说明: 外观',\n          en_US: 'prop: shape | description: message shape',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['inline', 'addon', 'toast'],\n      },\n      description: '外观',\n      defaultValue: 'inline',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '尺寸',\n          en_US: 'Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 尺寸',\n          en_US: 'prop: size | description: message size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 文本内容',\n          en_US: 'prop: children | description: message content',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '内容',\n    },\n    {\n      name: 'visible',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否显示',\n          en_US: 'Visible',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: visible | 说明: 当前是否显示',\n          en_US: 'prop: visible | description: visible',\n        },\n      },\n      propType: 'bool',\n      description: '当前是否显示',\n    },\n    {\n      name: 'iconType',\n      propType: 'string',\n      description: '显示的图标类型，会覆盖内部设置的IconType',\n    },\n    {\n      name: 'closeable',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '显示 Close',\n          en_US: 'Show Close',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: closeable | 说明: 显示关闭按钮',\n          en_US: 'prop: closeable | description: show close button',\n        },\n      },\n      propType: 'bool',\n      description: '显示关闭按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '关闭按钮的回调',\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n      description: '关闭之后调用的函数',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '开启动效',\n          en_US: 'Animation',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: animation | 说明: 是否开启动效',\n          en_US: 'prop: animation | description: enable animation',\n        },\n      },\n      propType: 'bool',\n      description: '收起动画',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'iconType',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '图标',\n              en_US: 'Icon',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: iconType | 说明: 显示的图标类型',\n              en_US: 'prop: iconType | description: icon type',\n            },\n          },\n          setter: {\n            componentName: 'IconSetter',\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/alert/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '提示',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_message.png',\n    schema: {\n      componentName: 'Message',\n      props: {\n        title: 'Alert',\n        type: 'warning',\n        shape: 'inline',\n        size: 'medium',\n        visible: true,\n        animation: true,\n        children: 'This item already has the label \"travel\", you can add a new label.',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/avatar/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Avatar',\n  title: '头像',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Avatar',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '文本内容',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 文本内容',\n          en_US: 'prop: children | description: avatar content',\n        },\n      },\n      propType: 'string',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '头像尺寸',\n          en_US: 'Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 头像的大小',\n          en_US: 'prop: size | description: avatar size',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'oneOf',\n            value: ['small', 'medium', 'large'],\n          },\n          'number',\n        ],\n      },\n      description: '头像的大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '头像形状',\n          en_US: 'Shape',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: shape | 说明: 头像的形状',\n          en_US: 'prop: shape | description: avatar shape',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['circle', 'square'],\n      },\n      description: '头像的形状',\n      defaultValue: 'circle',\n    },\n    {\n      name: 'icon',\n      title: 'icon',\n      propType: 'string',\n      description: 'icon 类头像的图标类型，可设为 Icon 的 `type` 或 `ReactNode`',\n    },\n    {\n      name: 'src',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '头像地址',\n          en_US: 'Src',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: src | 说明: 图片类头像的资源地址',\n          en_US: 'prop: src | description: resource address',\n        },\n      },\n      propType: 'string',\n      description: '图片类头像的资源地址',\n    },\n    {\n      name: 'onError',\n      propType: 'func',\n      description: '图片加载失败的事件，返回 false 会关闭组件默认的 fallback 行为',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'shape',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '类型',\n            en_US: 'Shape',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: shape | 说明: 头像的形状',\n            en_US: 'prop: shape | description: avatar shape',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['circle', 'square'] },\n        },\n        description: '头像的形状',\n        defaultValue: 'circle',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'icon',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标',\n            en_US: 'Icon',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: icon | 说明: 图标类型',\n            en_US: 'prop: icon | description: icon type',\n          },\n        },\n        setter: {\n          componentName: 'IconSetter',\n        },\n      },\n      {\n        name: 'src',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '头像地址',\n            en_US: 'Src',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: src | 说明: 图片类头像的资源地址',\n            en_US: 'prop: src | description: resource address',\n          },\n        },\n        setter: 'StringSetter',\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/avatar/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Avatar',\n  title: '头像',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Avatar',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '文本内容',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 文本内容',\n          en_US: 'prop: children | description: avatar content',\n        },\n      },\n      propType: 'string',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '头像尺寸',\n          en_US: 'Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 头像的大小',\n          en_US: 'prop: size | description: avatar size',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'oneOf',\n            value: ['small', 'medium', 'large'],\n          },\n          'number',\n        ],\n      },\n      description: '头像的大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '头像形状',\n          en_US: 'Shape',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: shape | 说明: 头像的形状',\n          en_US: 'prop: shape | description: avatar shape',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['circle', 'square'],\n      },\n      description: '头像的形状',\n      defaultValue: 'circle',\n    },\n    {\n      name: 'icon',\n      title: 'icon',\n      propType: 'string',\n      description: 'icon 类头像的图标类型，可设为 Icon 的 `type` 或 `ReactNode`',\n    },\n    {\n      name: 'src',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '头像地址',\n          en_US: 'Src',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: src | 说明: 图片类头像的资源地址',\n          en_US: 'prop: src | description: resource address',\n        },\n      },\n      propType: 'string',\n      description: '图片类头像的资源地址',\n    },\n    {\n      name: 'onError',\n      propType: 'func',\n      description: '图片加载失败的事件，返回 false 会关闭组件默认的 fallback 行为',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'icon',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '图标',\n              en_US: 'Icon',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: icon | 说明: 图标类型',\n              en_US: 'prop: icon | description: icon type',\n            },\n          },\n          setter: {\n            componentName: 'IconSetter',\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/avatar/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '头像',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_avatar.png',\n    schema: {\n      componentName: 'Avatar',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n        shape: 'circle',\n        icon: 'smile',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/badge/meta.design.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Badge',\n  title: '徽标数',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Badge',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'count',\n      title: 'count',\n      propType: 'string',\n      description: '展示的数字，大于 overflowCount 时显示为 ${overflowCount}+，为 0 时默认隐藏',\n      defaultValue: 0,\n    },\n    {\n      name: 'content',\n      title: '内容',\n      propType: 'node',\n      description: '自定义节点内容',\n    },\n    {\n      name: 'overflowCount',\n      title: '封顶数字',\n      propType: {\n        type: 'oneOfType',\n        value: ['number', 'string'],\n      },\n      description: '展示的封顶的数字',\n      defaultValue: 99,\n    },\n    {\n      name: 'showZero',\n      title: {\n        label: '展示零',\n        tip: 'showZero|当count为 0 时，是否显示 count',\n      },\n      propType: 'bool',\n      description: '当count为 0 时，是否显示 count',\n      defaultValue: true,\n    },\n    {\n      name: 'dot',\n      title: {\n        label: '红点',\n        tip: 'dot|不展示数字，只展示一个小红点',\n      },\n      propType: 'bool',\n      description: '不展示数字，只展示一个小红点',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'dot',\n        title: {\n          label: '类型',\n          tip: 'dot|不展示数字，只展示一个小红点',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '点',\n                value: true,\n              },\n              {\n                label: '数字',\n                value: false,\n              },\n            ],\n          },\n        },\n        description: '不展示数字，只展示一个小红点',\n        defaultValue: false,\n      },\n      {\n        name: 'count',\n        title: {\n          label: '展示数字',\n          tip: 'count|大于 overflowCount 时显示为 ${overflowCount}+，为 0 时默认隐藏',\n          docUrl: 'https://fusion.alibaba-inc.com/pc/component/basic/badge',\n        },\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'overflowCount',\n        title: '封顶数字',\n        setter: 'NumberSetter',\n        defaultValue: 99,\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/badge/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Badge',\n  title: '徽标数',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Badge',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'count',\n      title: 'count',\n      propType: 'string',\n      description: '展示的数字，大于 overflowCount 时显示为 ${overflowCount}+，为 0 时默认隐藏',\n      defaultValue: 0,\n    },\n    {\n      name: 'content',\n      title: '内容',\n      propType: 'node',\n      description: '自定义节点内容',\n    },\n    {\n      name: 'overflowCount',\n      title: '封顶数字',\n      propType: {\n        type: 'oneOfType',\n        value: ['number', 'string'],\n      },\n      description: '展示的封顶的数字',\n      defaultValue: 99,\n    },\n    {\n      name: 'showZero',\n      title: {\n        label: '展示零',\n        tip: 'showZero|当count为 0 时，是否显示 count',\n      },\n      propType: 'bool',\n      description: '当count为 0 时，是否显示 count',\n      defaultValue: true,\n    },\n    {\n      name: 'dot',\n      title: {\n        label: '红点',\n        tip: 'dot|不展示数字，只展示一个小红点',\n      },\n      propType: 'bool',\n      description: '不展示数字，只展示一个小红点',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'count',\n          title: {\n            label: '展示的数字',\n            tip: 'count|大于 overflowCount 时显示为 ${overflowCount}+，为 0 时默认隐藏',\n            docUrl: 'https://fusion.alibaba-inc.com/pc/component/basic/badge',\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['StringSetter', 'ExpressionSetter'],\n            },\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/badge/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '徽标数',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_badge.png',\n    schema: {\n      componentName: 'Badge',\n      props: {\n        prefix: 'next-',\n        showZero: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/balloon/meta.design.ts",
    "content": "import snippets from './snippets.design';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Balloon',\n  title: '气泡框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Balloon',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary'],\n      },\n      description: '样式类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'triggerType',\n      title: '触发行为',\n      propType: {\n        type: 'oneOf',\n        value: ['hover', 'click'],\n      },\n      description:\n        \"触发行为\\n鼠标悬浮, 鼠标点击('hover','click')或者它们组成的数组，如 ['hover', 'click'], 强烈不建议使用'focus'，若弹窗内容有复杂交互请使用click\",\n      defaultValue: 'hover',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层当前显示的状态',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层在显示和隐藏触发的事件\\n@param {Boolean} visible 弹层是否隐藏和显示\\n@param {String} type 触发弹层显示或隐藏的来源， closeClick 表示由自带的关闭按钮触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'align',\n      title: '弹出位置',\n      propType: {\n        type: 'oneOf',\n        value: ['t', 'r', 'b', 'l', 'tl', 'tr', 'bl', 'br', 'lt', 'lb', 'rt', 'rb'],\n      },\n      description:\n        '弹出层位置\\n@enumdesc 上, 右, 下, 左, 上左, 上右, 下左, 下右, 左上, 左下, 右上, 右下 及其 两两组合',\n      defaultValue: 'b',\n    },\n    {\n      name: 'offset',\n      propType: {\n        type: 'arrayOf',\n        value: 'number',\n      },\n      description:\n        '弹层相对于trigger的定位的微调, 接收数组[hoz, ver], 表示弹层在 left / top 上的增量\\ne.g. [100, 100] 表示往右(RTL 模式下是往左) 、下分布偏移100px',\n      defaultValue: [0, 0],\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'delay',\n      title: '延迟显示',\n      propType: 'number',\n      description: '弹层在触发以后的延时显示, 单位毫秒 ms',\n    },\n    {\n      name: 'trigger',\n      propType: 'node',\n      description: '触发元素',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '任何visible为false时会触发的事件',\n    },\n    {\n      name: 'onHover',\n      propType: 'func',\n    },\n    {\n      name: 'defaultVisible',\n      title: '默认显示',\n      propType: 'bool',\n      description: '弹层默认显示的状态',\n      defaultValue: false,\n    },\n    {\n      name: 'alignEdge',\n      title: '边缘对齐',\n      propType: 'bool',\n      description: '弹出层对齐方式, 是否为边缘对齐',\n      defaultValue: false,\n    },\n    {\n      name: 'closable',\n      title: '关闭按钮',\n      propType: 'bool',\n      description: '是否显示关闭按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'needAdjust',\n      title: '自动调整',\n      propType: 'bool',\n      description: '是否进行自动位置调整',\n      defaultValue: false,\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n      description: '浮层关闭后触发的事件, 如果有动画，则在动画结束后触发',\n    },\n    {\n      name: 'shouldUpdatePosition',\n      propType: 'bool',\n      description: '强制更新定位信息',\n    },\n    {\n      name: 'autoFocus',\n      title: '自动聚焦',\n      propType: 'bool',\n      description: '弹层出现后是否自动focus到内部第一个元素',\n      defaultValue: true,\n    },\n    {\n      name: 'followTrigger',\n      title: '跟随滚动',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'mode',\n        title: '模式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '气泡',\n                value: 'Balloon',\n              },\n              {\n                label: '提示',\n                value: 'Tooltip',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'type',\n        title: '样式类型',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: 'normal',\n              },\n              {\n                label: '主要',\n                value: 'primary',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'triggerType',\n        title: '触发行为',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '悬停',\n                value: 'hover',\n              },\n              {\n                label: '点击',\n                value: 'click',\n              },\n            ],\n          },\n        },\n        description:\n          \"触发行为\\n鼠标悬浮, 鼠标点击('hover','click')或者它们组成的数组，如 ['hover', 'click'], 强烈不建议使用'focus'，若弹窗内容有复杂交互请使用click\",\n        defaultValue: 'hover',\n      },\n      {\n        name: 'align',\n        title: '弹出位置',\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                label: '顶部',\n                value: 't',\n              },\n              {\n                label: '右侧',\n                value: 'r',\n              },\n              {\n                label: '底部',\n                value: 'b',\n              },\n              {\n                label: '左侧',\n                value: 'l',\n              },\n              {\n                label: '顶部左侧',\n                value: 'tl',\n              },\n              {\n                label: '顶部右侧',\n                value: 'tr',\n              },\n              {\n                label: '底部左侧',\n                value: 'bl',\n              },\n              {\n                label: '底部右侧',\n                value: 'br',\n              },\n              {\n                label: '左侧顶部',\n                value: 'lt',\n              },\n              {\n                label: '左侧底部',\n                value: 'lb',\n              },\n              {\n                label: '右侧顶部',\n                value: 'rt',\n              },\n              {\n                label: '右侧底部',\n                value: 'rb',\n              },\n            ],\n          },\n        },\n        description:\n          '弹出层位置\\n@enumdesc 上, 右, 下, 左, 上左, 上右, 下左, 下右, 左上, 左下, 右上, 右下 及其 两两组合',\n        defaultValue: 'b',\n      },\n      {\n        name: 'closable',\n        title: '关闭按钮',\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'followTrigger',\n        title: '跟随滚动',\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'defaultVisible',\n        title: '展示弹层',\n        setter: 'BoolSetter',\n        description: '弹层当前显示的状态',\n      },\n      {\n        name: 'children',\n        title: '弹层内容',\n        setter: 'TextAreaSetter',\n      },\n    ],\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/balloon/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Balloon',\n  title: '气泡框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Balloon',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary'],\n      },\n      description: '样式类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'triggerType',\n      title: '触发行为',\n      propType: {\n        type: 'oneOf',\n        value: ['hover', 'click'],\n      },\n      description:\n        \"触发行为\\n鼠标悬浮, 鼠标点击('hover','click')或者它们组成的数组，如 ['hover', 'click'], 强烈不建议使用'focus'，若弹窗内容有复杂交互请使用click\",\n      defaultValue: 'hover',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层当前显示的状态',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层在显示和隐藏触发的事件\\n@param {Boolean} visible 弹层是否隐藏和显示\\n@param {String} type 触发弹层显示或隐藏的来源， closeClick 表示由自带的关闭按钮触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'align',\n      title: '弹出位置',\n      propType: {\n        type: 'oneOf',\n        value: ['t', 'r', 'b', 'l', 'tl', 'tr', 'bl', 'br', 'lt', 'lb', 'rt', 'rb'],\n      },\n      description:\n        '弹出层位置\\n@enumdesc 上, 右, 下, 左, 上左, 上右, 下左, 下右, 左上, 左下, 右上, 右下 及其 两两组合',\n      defaultValue: 'b',\n    },\n    {\n      name: 'offset',\n      propType: {\n        type: 'arrayOf',\n        value: 'number',\n      },\n      description:\n        '弹层相对于trigger的定位的微调, 接收数组[hoz, ver], 表示弹层在 left / top 上的增量\\ne.g. [100, 100] 表示往右(RTL 模式下是往左) 、下分布偏移100px',\n      defaultValue: [0, 0],\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'delay',\n      title: '延迟显示',\n      propType: 'number',\n      description: '弹层在触发以后的延时显示, 单位毫秒 ms',\n    },\n    {\n      name: 'trigger',\n      propType: 'node',\n      description: '触发元素',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '任何visible为false时会触发的事件',\n    },\n    {\n      name: 'onHover',\n      propType: 'func',\n    },\n    {\n      name: 'defaultVisible',\n      title: '默认显示',\n      propType: 'bool',\n      description: '弹层默认显示的状态',\n      defaultValue: false,\n    },\n    {\n      name: 'alignEdge',\n      title: '边缘对齐',\n      propType: 'bool',\n      description: '弹出层对齐方式, 是否为边缘对齐',\n      defaultValue: false,\n    },\n    {\n      name: 'closable',\n      title: '关闭按钮',\n      propType: 'bool',\n      description: '是否显示关闭按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'needAdjust',\n      title: '自动调整',\n      propType: 'bool',\n      description: '是否进行自动位置调整',\n      defaultValue: false,\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n      description: '浮层关闭后触发的事件, 如果有动画，则在动画结束后触发',\n    },\n    {\n      name: 'shouldUpdatePosition',\n      propType: 'bool',\n      description: '强制更新定位信息',\n    },\n    {\n      name: 'autoFocus',\n      title: '自动聚焦',\n      propType: 'bool',\n      description: '弹层出现后是否自动focus到内部第一个元素',\n      defaultValue: true,\n    },\n    {\n      name: 'followTrigger',\n      title: '跟随滚动',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'prefix',\n          condition: () => false,\n        },\n        {\n          name: 'rtl',\n          condition: () => false,\n        },\n        {\n          name: 'pure',\n          condition: () => false,\n        },\n        {\n          name: 'visible',\n          condition: () => false,\n        },\n        {\n          name: 'offset',\n          condition: () => false,\n        },\n        {\n          name: 'shouldUpdatePosition',\n          condition: () => false,\n        },\n        {\n          name: 'popupContainer',\n          title: {\n            docUrl: 'https://fusion.alibaba-inc.com/pc/component/basic/balloon#demo-api',\n            label: '弹层容器',\n            tip: '指定浮层渲染的父节点, 可以为节点id的字符串，也可以返回节点的函数()。',\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['StringSetter', 'FunctionSetter'],\n            },\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/balloon/snippets.design.ts",
    "content": "export default [\n  {\n    title: '气泡框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_balloon.png',\n    schema: {\n      componentName: 'Balloon',\n      props: {\n        defaultVisible: true,\n        prefix: 'next-',\n        size: 'medium',\n        type: 'normal',\n        closable: true,\n        align: 'b',\n        offset: [0, 0],\n        triggerType: 'hover',\n        autoFocus: true,\n        children: 'Balloon content replace holder.',\n        mode: 'Balloon',\n        trigger: {\n          type: 'JSSlot',\n          props: {\n            title: '触发元素',\n          },\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/balloon/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '气泡框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_balloon.png',\n    schema: {\n      componentName: 'Balloon',\n      props: {\n        defaultVisible: true,\n        prefix: 'next-',\n        size: 'medium',\n        type: 'normal',\n        closable: true,\n        align: 'b',\n        offset: [0, 0],\n        triggerType: 'hover',\n        autoFocus: true,\n        trigger: {\n          type: 'JSSlot',\n          props: {\n            title: '触发元素',\n          },\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/balloon-inner/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'BalloonInner',\n  title: 'BalloonInner',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Balloon',\n    main: '',\n    destructuring: true,\n    subName: 'Inner',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'closable',\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'children',\n      propType: 'any',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'alignEdge',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'any',\n    },\n    {\n      name: 'align',\n      propType: 'string',\n      defaultValue: 'b',\n    },\n    {\n      name: 'type',\n      propType: 'string',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'isTooltip',\n      propType: 'bool',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/box/meta.design.tsx",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Box',\n  title: '容器',\n  category: '布局容器类',\n  hidden: true,\n  icon: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_table.png',\n\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Box',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'direction',\n      title: '对齐方向',\n      defaultValue: 'column',\n      initialValue: 'column',\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'column',\n        defaultValue: 'column',\n        props: {\n          defaultValue: 'column',\n          options: [\n            {\n              // \"title\": \"| 垂直\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 9 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M0 6h9v5H0zm5 9v-3H4v3H2l2.5 3L7 15H5z\" />\n                    <path opacity=\".4\" d=\"M1 1h7v3H1z\" />\n                    <path d=\"M1 1v3h7V1H1zM0 0h9v5H0V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'column',\n            },\n            {\n              // \"title\": \"- 水平\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 19 9\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M16 4h-4v1h4v2l3-2.5L16 2v2zM6 0h5v9H6z\" />\n                    <path opacity=\".4\" d=\"M1 1h3v7H1z\" />\n                    <path d=\"M1 1v7h3V1H1zM0 0h5v9H0V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'row',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'justify',\n      title: '主轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.getProps().getPropValue('direction') === 'row';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        defaultValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": \"| 左\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0z\" />\n                    <path d=\"M8 4h5v9H8z\" />\n                    <path opacity=\".4\" d=\"M3 5h3v7H3z\" />\n                    <path d=\"M3 5v7h3V5H3zM2 4h5v9H2V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 13 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M6 0h1v17H6z\" />\n                    <path d=\"M8 4h5v9H8z\" />\n                    <path opacity=\".4\" d=\"M1 5h3v7H1z\" />\n                    <path d=\"M1 5v7h3V5H1zM0 4h5v9H0V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"右 |\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M23 0h1v17h-1z\" />\n                    <path d=\"M17 4h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M12 5h3v7h-3z\" />\n                    <path d=\"M12 5v7h3V5h-3zm-1-1h5v9h-5V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"两端\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0zm23 0h1v17h-1z\" />\n                    <path d=\"M17 4h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M3 5h3v7H3z\" />\n                    <path d=\"M3 5v7h3V5H3zM2 4h5v9H2V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-between',\n            },\n            {\n              // \"title\": \"等分\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 16 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path\n                      d=\"M2 0h1v17H2V0zm0 3.5h1v10H2v-10zM13 0h1v17h-1V0zm0 3.5h1v10h-1v-10z\"\n                      opacity=\".5\"\n                    />\n                    <path d=\"M11 4h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M1 5h3v7H1z\" />\n                    <path d=\"M1 5v7h3V5H1zM0 4h5v9H0V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-around',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'justify',\n      title: '主轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.getProps().getPropValue('direction') === 'column';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        defaultValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": \"上\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h21v1H0z\" />\n                    <path d=\"M6 8h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 3h7v3H7z\" />\n                    <path d=\"M7 3v3h7V3H7zM6 2h9v5H6V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 13\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 6h21v1H0z\" />\n                    <path d=\"M6 8h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 1h7v3H7z\" />\n                    <path d=\"M7 1v3h7V1H7zM6 0h9v5H6V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"下\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M6 11h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 6h7v3H7z\" />\n                    <path d=\"M7 6v3h7V6H7zM6 5h9v5H6V5z\" />\n                    <path opacity=\".5\" d=\"M0 17h21v1H0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"两端\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h21v1H0zm0 17h21v1H0z\" />\n                    <path d=\"M6 11h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 3h7v3H7z\" />\n                    <path d=\"M7 3v3h7V3H7zM6 2h9v5H6V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-between',\n            },\n            {\n              // \"title\": \"等分\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 13\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path\n                      d=\"M0 2h21v1H0V2zm5.5 0h10v1h-10V2zM0 10h21v1H0v-1zm5.5 0h10v1h-10v-1z\"\n                      opacity=\".5\"\n                    />\n                    <path d=\"M6 8h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 1h7v3H7z\" />\n                    <path d=\"M7 1v3h7V1H7zM6 0h9v5H6V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-around',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'align',\n      title: '交叉轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.getProps().getPropValue('direction') === 'row';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": \"上\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h21v1H0z\" />\n                    <path d=\"M11 2h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M6 3h3v7H6z\" />\n                    <path d=\"M6 3v7h3V3H6zM5 2h5v9H5V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 9\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M0 4h21v1H0V4zm4.5 0h6v1h-6V4zm6 0h6v1h-6V4z\" opacity=\".5\" />\n                    <path d=\"M11 0h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M6 1h3v7H6z\" />\n                    <path d=\"M6 1v7h3V1H6zM5 0h5v9H5V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"下\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 17h21v1H0z\" />\n                    <path d=\"M11 7h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M6 8h3v7H6z\" />\n                    <path d=\"M6 8v7h3V8H6zM5 7h5v9H5V7z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"等高\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 17h21v1H0zM0 0h21v1H0z\" />\n                    <path d=\"M11 2h5v14h-5z\" />\n                    <path opacity=\".4\" d=\"M6 3h3v12H6z\" />\n                    <path d=\"M6 3v12h3V3H6zM5 2h5v14H5V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'stretch',\n            },\n            {\n              // \"title\": \"基线\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 11\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M0 5h21v1H0V5zm4.5 0h6v1h-6V5zm6 0h6v1h-6V5z\" opacity=\".5\" />\n                    <path d=\"M11 1h5v9h-5V1zm1 1h3v3h-3V2z\" />\n                    <path opacity=\".4\" d=\"M6 5h3v5H6z\" />\n                    <path d=\"M6 3v7h3V3H6zM5 2h5v9H5V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'baseline',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'align',\n      title: '交叉轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.getProps().getPropValue('direction') === 'column';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": '| 左',\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0z\" />\n                    <path d=\"M2 9h9v5H2z\" />\n                    <path opacity=\".4\" d=\"M3 4h7v3H3z\" />\n                    <path d=\"M3 4v3h7V4H3zM2 3h9v5H2V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 9 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M4 0h1v17H4V0zm0 8.5h1v6H4v-6zm0-6h1v6H4v-6z\" opacity=\".5\" />\n                    <path d=\"M0 9h9v5H0z\" />\n                    <path opacity=\".4\" d=\"M1 4h7v3H1z\" />\n                    <path d=\"M1 4v3h7V4H1zM0 3h9v5H0V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"右 |\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M23 0h1v17h-1z\" />\n                    <path d=\"M13 9h9v5h-9z\" />\n                    <path opacity=\".4\" d=\"M14 4h7v3h-7z\" />\n                    <path d=\"M14 4v3h7V4h-7zm-1-1h9v5h-9V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"等宽\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M23 0h1v17h-1zM0 0h1v17H0z\" />\n                    <path d=\"M2 9h20v5H2z\" />\n                    <path opacity=\".4\" d=\"M3 4h18v3H3z\" />\n                    <path d=\"M3 4v3h18V4H3zM2 3h20v5H2V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'stretch',\n            },\n            {\n              // \"title\": \"基线\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0z\" />\n                    <path d=\"M2 9h9v5H2V9zm1 1h2v3H3v-3z\" />\n                    <path opacity=\".4\" d=\"M5 4h5v3H5z\" />\n                    <path d=\"M3 4v3h7V4H3zM2 3h9v5H2V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'baseline',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'style.width',\n      title: '宽度',\n      defaultValue: '',\n      initialValue: '',\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: '',\n        props: {\n          defaultValue: '',\n          options: [\n            {\n              title: '默认',\n              value: '',\n            },\n            {\n              title: '铺满',\n              value: '100%',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'spacing',\n      title: '内容间距',\n      defaultValue: 0,\n      initialValue: 0,\n      setter: {\n        componentName: 'NumberSetter',\n        props: {\n          step: 4,\n        },\n      },\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    supports: {\n      style: true,\n      loop: false,\n    },\n  },\n  snippets: [\n    {\n      title: 'Box',\n      screenshot:\n        'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_table.png',\n      schema: {\n        componentName: 'Box',\n        props: {},\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/box/meta.tsx",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Box',\n  title: '容器',\n  category: '布局容器类',\n  icon: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_table.png',\n\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Box',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'direction',\n      title: '对齐方向',\n      defaultValue: 'column',\n      initialValue: 'column',\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'column',\n        defaultValue: 'column',\n        props: {\n          defaultValue: 'column',\n          options: [\n            {\n              // \"title\": \"| 垂直\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 9 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M0 6h9v5H0zm5 9v-3H4v3H2l2.5 3L7 15H5z\" />\n                    <path opacity=\".4\" d=\"M1 1h7v3H1z\" />\n                    <path d=\"M1 1v3h7V1H1zM0 0h9v5H0V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'column',\n            },\n            {\n              // \"title\": \"- 水平\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 19 9\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M16 4h-4v1h4v2l3-2.5L16 2v2zM6 0h5v9H6z\" />\n                    <path opacity=\".4\" d=\"M1 1h3v7H1z\" />\n                    <path d=\"M1 1v7h3V1H1zM0 0h5v9H0V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'row',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'justify',\n      title: '主轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.parent.getPropValue('direction') === 'row';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        defaultValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": \"| 左\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0z\" />\n                    <path d=\"M8 4h5v9H8z\" />\n                    <path opacity=\".4\" d=\"M3 5h3v7H3z\" />\n                    <path d=\"M3 5v7h3V5H3zM2 4h5v9H2V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 13 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M6 0h1v17H6z\" />\n                    <path d=\"M8 4h5v9H8z\" />\n                    <path opacity=\".4\" d=\"M1 5h3v7H1z\" />\n                    <path d=\"M1 5v7h3V5H1zM0 4h5v9H0V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"右 |\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M23 0h1v17h-1z\" />\n                    <path d=\"M17 4h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M12 5h3v7h-3z\" />\n                    <path d=\"M12 5v7h3V5h-3zm-1-1h5v9h-5V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"两端\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0zm23 0h1v17h-1z\" />\n                    <path d=\"M17 4h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M3 5h3v7H3z\" />\n                    <path d=\"M3 5v7h3V5H3zM2 4h5v9H2V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-between',\n            },\n            {\n              // \"title\": \"等分\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 16 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path\n                      d=\"M2 0h1v17H2V0zm0 3.5h1v10H2v-10zM13 0h1v17h-1V0zm0 3.5h1v10h-1v-10z\"\n                      opacity=\".5\"\n                    />\n                    <path d=\"M11 4h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M1 5h3v7H1z\" />\n                    <path d=\"M1 5v7h3V5H1zM0 4h5v9H0V4z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-around',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'justify',\n      title: '主轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.parent.getPropValue('direction') === 'column';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        defaultValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": \"上\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h21v1H0z\" />\n                    <path d=\"M6 8h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 3h7v3H7z\" />\n                    <path d=\"M7 3v3h7V3H7zM6 2h9v5H6V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 13\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 6h21v1H0z\" />\n                    <path d=\"M6 8h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 1h7v3H7z\" />\n                    <path d=\"M7 1v3h7V1H7zM6 0h9v5H6V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"下\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M6 11h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 6h7v3H7z\" />\n                    <path d=\"M7 6v3h7V6H7zM6 5h9v5H6V5z\" />\n                    <path opacity=\".5\" d=\"M0 17h21v1H0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"两端\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h21v1H0zm0 17h21v1H0z\" />\n                    <path d=\"M6 11h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 3h7v3H7z\" />\n                    <path d=\"M7 3v3h7V3H7zM6 2h9v5H6V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-between',\n            },\n            {\n              // \"title\": \"等分\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 13\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path\n                      d=\"M0 2h21v1H0V2zm5.5 0h10v1h-10V2zM0 10h21v1H0v-1zm5.5 0h10v1h-10v-1z\"\n                      opacity=\".5\"\n                    />\n                    <path d=\"M6 8h9v5H6z\" />\n                    <path opacity=\".4\" d=\"M7 1h7v3H7z\" />\n                    <path d=\"M7 1v3h7V1H7zM6 0h9v5H6V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'space-around',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'align',\n      title: '交叉轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.parent.getPropValue('direction') === 'row';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": \"上\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h21v1H0z\" />\n                    <path d=\"M11 2h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M6 3h3v7H6z\" />\n                    <path d=\"M6 3v7h3V3H6zM5 2h5v9H5V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 9\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M0 4h21v1H0V4zm4.5 0h6v1h-6V4zm6 0h6v1h-6V4z\" opacity=\".5\" />\n                    <path d=\"M11 0h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M6 1h3v7H6z\" />\n                    <path d=\"M6 1v7h3V1H6zM5 0h5v9H5V0z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"下\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 17h21v1H0z\" />\n                    <path d=\"M11 7h5v9h-5z\" />\n                    <path opacity=\".4\" d=\"M6 8h3v7H6z\" />\n                    <path d=\"M6 8v7h3V8H6zM5 7h5v9H5V7z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"等高\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 18\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 17h21v1H0zM0 0h21v1H0z\" />\n                    <path d=\"M11 2h5v14h-5z\" />\n                    <path opacity=\".4\" d=\"M6 3h3v12H6z\" />\n                    <path d=\"M6 3v12h3V3H6zM5 2h5v14H5V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'stretch',\n            },\n            {\n              // \"title\": \"基线\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 21 11\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M0 5h21v1H0V5zm4.5 0h6v1h-6V5zm6 0h6v1h-6V5z\" opacity=\".5\" />\n                    <path d=\"M11 1h5v9h-5V1zm1 1h3v3h-3V2z\" />\n                    <path opacity=\".4\" d=\"M6 5h3v5H6z\" />\n                    <path d=\"M6 3v7h3V3H6zM5 2h5v9H5V2z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'baseline',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'align',\n      title: '交叉轴对齐',\n      defaultValue: 'center',\n      initialValue: 'center',\n      condition: (target) => {\n        return target.parent.getPropValue('direction') === 'column';\n      },\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: 'center',\n        props: {\n          defaultValue: 'center',\n          options: [\n            {\n              // \"title\": '| 左',\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0z\" />\n                    <path d=\"M2 9h9v5H2z\" />\n                    <path opacity=\".4\" d=\"M3 4h7v3H3z\" />\n                    <path d=\"M3 4v3h7V4H3zM2 3h9v5H2V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-start',\n            },\n            {\n              // \"title\": \"中\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 9 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path d=\"M4 0h1v17H4V0zm0 8.5h1v6H4v-6zm0-6h1v6H4v-6z\" opacity=\".5\" />\n                    <path d=\"M0 9h9v5H0z\" />\n                    <path opacity=\".4\" d=\"M1 4h7v3H1z\" />\n                    <path d=\"M1 4v3h7V4H1zM0 3h9v5H0V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'center',\n            },\n            {\n              // \"title\": \"右 |\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M23 0h1v17h-1z\" />\n                    <path d=\"M13 9h9v5h-9z\" />\n                    <path opacity=\".4\" d=\"M14 4h7v3h-7z\" />\n                    <path d=\"M14 4v3h7V4h-7zm-1-1h9v5h-9V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'flex-end',\n            },\n            {\n              // \"title\": \"等宽\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M23 0h1v17h-1zM0 0h1v17H0z\" />\n                    <path d=\"M2 9h20v5H2z\" />\n                    <path opacity=\".4\" d=\"M3 4h18v3H3z\" />\n                    <path d=\"M3 4v3h18V4H3zM2 3h20v5H2V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'stretch',\n            },\n            {\n              // \"title\": \"基线\",\n              title: (\n                <svg\n                  fill=\"currentColor\"\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 24 17\"\n                >\n                  <g fillRule=\"evenodd\">\n                    <path opacity=\".5\" d=\"M0 0h1v17H0z\" />\n                    <path d=\"M2 9h9v5H2V9zm1 1h2v3H3v-3z\" />\n                    <path opacity=\".4\" d=\"M5 4h5v3H5z\" />\n                    <path d=\"M3 4v3h7V4H3zM2 3h9v5H2V3z\" />\n                  </g>\n                </svg>\n              ),\n              value: 'baseline',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'style.width',\n      title: '宽度',\n      defaultValue: '',\n      initialValue: '',\n      setter: {\n        componentName: 'RadioGroupSetter',\n        initialValue: '',\n        props: {\n          defaultValue: '',\n          options: [\n            {\n              title: '默认',\n              value: '',\n            },\n            {\n              title: '铺满',\n              value: '100%',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'spacing',\n      title: '内容间距',\n      defaultValue: 0,\n      initialValue: 0,\n      setter: {\n        componentName: 'NumberSetter',\n        props: {\n          step: 4,\n        },\n      },\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    supports: {\n      style: true,\n      loop: false,\n    },\n  },\n  snippets: [\n    {\n      title: 'Box',\n      screenshot:\n        'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_table.png',\n      schema: {\n        componentName: 'Box',\n        props: {},\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/breadcrumb/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Breadcrumb',\n  title: '面包屑',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Breadcrumb',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      description: '样式类名的品牌前缀',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '面包屑子节点，需传入 Breadcrumb.Item',\n    },\n    {\n      name: 'maxNode',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'number',\n          {\n            type: 'oneOf',\n            value: ['auto'],\n          },\n        ],\n      },\n      description: '面包屑最多显示个数，超出部分会被隐藏, 设置为 auto 会自动根据父元素的宽度适配。',\n      defaultValue: 100,\n    },\n    {\n      name: 'separator',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '分隔符，可以是文本或 Icon',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'func'],\n      },\n      description: '设置标签类型',\n      defaultValue: 'nav',\n    },\n    {\n      name: 'className',\n      propType: 'any',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        childWhitelist: ['Breadcrumb.Item'],\n      },\n    },\n    props: [\n      {\n        name: 'maxNode',\n        title: {\n          label: '最大节点数',\n          tip: '默认 100',\n        },\n        setter: 'NumberSetter',\n      },\n      {\n        name: '!items',\n        title: '内容',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'primaryKey',\n                      title: '面包屑项编号',\n                      condition: () => false,\n                      initialValue: (val) => {\n                        if (val) return val;\n                        return String(Math.floor(Math.random() * 10000));\n                      },\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'children',\n                      title: '标题',\n                      important: true,\n                      initialValue: {\n                        zh_CN: '',\n                        en_US: '',\n                        type: 'i18n',\n                      },\n                      setter: 'StringSetter',\n                    },\n                    {\n                      name: 'link',\n                      title: '链接',\n                      initialValue: {\n                        zh_CN: '',\n                        en_US: '',\n                        type: 'i18n',\n                      },\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'target',\n                      title: '打开方式',\n                      initialValue: {\n                        zh_CN: '',\n                        en_US: '',\n                        type: 'i18n',\n                      },\n                      setter: {\n                        componentName: 'RadioGroupSetter',\n                        initialValue: '_self',\n                        props: {\n                          options: [\n                            {\n                              title: '新开页面',\n                              value: '_blank',\n                            },\n                            {\n                              title: '当前页面',\n                              value: '_self',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  primaryKey: String(Math.floor(Math.random() * 10000)),\n                  children: 'Title',\n                  target: '_self',\n                };\n              },\n            },\n          },\n        },\n        extraProps: {\n          virtual: () => true,\n          getValue: (target, value) => {\n            console.log('getValue: ', target, value);\n            return target.node.children.map((child) => {\n              return {\n                primaryKey: String(child.getPropValue('primaryKey')),\n                children: child.getPropValue('children'),\n                link: child.getPropValue('link'),\n                target: child.getPropValue('target'),\n              };\n            });\n          },\n          setValue: (target, value) => {\n            console.log('setValue: ', target, value);\n            const { node } = target;\n            const map = {};\n            if (!Array.isArray(value)) {\n              value = [];\n            }\n            value.forEach((item) => {\n              const BreadcrumbItem = Object.assign({}, item);\n              map[item.primaryKey] = BreadcrumbItem;\n            });\n            node.children.mergeChildren(\n              (child) => {\n                const primaryKey = String(child.getPropValue('primaryKey'));\n                console.log(`${child.id}----${primaryKey}`);\n                if (Object.hasOwnProperty.call(map, primaryKey)) {\n                  child.setPropValue('children', map[primaryKey].children);\n                  child.setPropValue('link', map[primaryKey].link);\n                  child.setPropValue('target', map[primaryKey].target);\n                  delete map[primaryKey];\n                  return false;\n                }\n                return true;\n              },\n              () => {\n                const items = [];\n                for (const primaryKey in map) {\n                  if (Object.hasOwnProperty.call(map, primaryKey)) {\n                    items.push({\n                      componentName: 'Breadcrumb.Item',\n                      props: map[primaryKey],\n                    });\n                  }\n                }\n                console.log('adder: ', items);\n                return items;\n              },\n              (child1, child2) => {\n                const a = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n                );\n                const b = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n                );\n                console.log('a: ', a);\n                console.log('b: ', b);\n                return a - b;\n              },\n            );\n          },\n          onChange: () => {\n            console.log('onChange: ', arguments);\n          },\n        },\n      },\n    ],\n    supports: {\n      style: true,\n    },\n  },\n  icon: '',\n  category: '导航',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/breadcrumb/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Breadcrumb',\n  title: '面包屑',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Breadcrumb',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      description: '样式类名的品牌前缀',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '面包屑子节点，需传入 Breadcrumb.Item',\n    },\n    {\n      name: 'maxNode',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'number',\n          {\n            type: 'oneOf',\n            value: ['auto'],\n          },\n        ],\n      },\n      description: '面包屑最多显示个数，超出部分会被隐藏, 设置为 auto 会自动根据父元素的宽度适配。',\n      defaultValue: 100,\n    },\n    {\n      name: 'separator',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '分隔符，可以是文本或 Icon',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'func'],\n      },\n      description: '设置标签类型',\n      defaultValue: 'nav',\n    },\n    {\n      name: 'className',\n      propType: 'any',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        childWhitelist: ['Breadcrumb.Item'],\n      },\n    },\n    props: [\n      {\n        name: 'maxNode',\n        title: {\n          label: '最大节点数',\n          tip: '默认 100',\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'separator',\n        title: '分隔符',\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'Breadcrumb.Item',\n        title: '面包屑项',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'primaryKey',\n                      title: '面包屑项编号',\n                      condition: () => false,\n                      initialValue: (val) => {\n                        if (val) return val;\n                        return String(Math.floor(Math.random() * 10000));\n                      },\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'children',\n                      title: '标题',\n                      initialValue: {\n                        zh_CN: '',\n                        en_US: '',\n                        type: 'i18n',\n                      },\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'link',\n                      title: '链接',\n                      initialValue: {\n                        zh_CN: '',\n                        en_US: '',\n                        type: 'i18n',\n                      },\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'target',\n                      title: '打开方式',\n                      initialValue: {\n                        zh_CN: '',\n                        en_US: '',\n                        type: 'i18n',\n                      },\n                      setter: {\n                        componentName: 'RadioGroupSetter',\n                        initialValue: '_self',\n                        props: {\n                          options: [\n                            {\n                              title: '新开页面',\n                              value: '_blank',\n                            },\n                            {\n                              title: '当前页面',\n                              value: '_self',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  primaryKey: String(Math.floor(Math.random() * 10000)),\n                  children: 'Title',\n                  target: '_self',\n                };\n              },\n            },\n          },\n        },\n        extraProps: {\n          virtual: () => true,\n          getValue: (target, value) => {\n            console.log('getValue: ', target, value);\n            return target.node.children.map((child) => {\n              return {\n                primaryKey: String(child.getPropValue('primaryKey')),\n                children: child.getPropValue('children'),\n                link: child.getPropValue('link'),\n                target: child.getPropValue('target'),\n              };\n            });\n          },\n          setValue: (target, value) => {\n            console.log('setValue: ', target, value);\n            const { node } = target;\n            const map = {};\n            if (!Array.isArray(value)) {\n              value = [];\n            }\n            value.forEach((item) => {\n              const BreadcrumbItem = Object.assign({}, item);\n              map[item.primaryKey] = BreadcrumbItem;\n            });\n            node.children.mergeChildren(\n              (child) => {\n                const primaryKey = String(child.getPropValue('primaryKey'));\n                console.log(`${child.id}----${primaryKey}`);\n                if (Object.hasOwnProperty.call(map, primaryKey)) {\n                  child.setPropValue('children', map[primaryKey].children);\n                  child.setPropValue('link', map[primaryKey].link);\n                  child.setPropValue('target', map[primaryKey].target);\n                  delete map[primaryKey];\n                  return false;\n                }\n                return true;\n              },\n              () => {\n                const items = [];\n                for (const primaryKey in map) {\n                  if (Object.hasOwnProperty.call(map, primaryKey)) {\n                    items.push({\n                      componentName: 'Breadcrumb.Item',\n                      props: map[primaryKey],\n                    });\n                  }\n                }\n                console.log('adder: ', items);\n                return items;\n              },\n              (child1, child2) => {\n                const a = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n                );\n                const b = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n                );\n                console.log('a: ', a);\n                console.log('b: ', b);\n                return a - b;\n              },\n            );\n          },\n          onChange: () => {\n            console.log('onChange: ', arguments);\n          },\n        },\n      },\n    ],\n    supports: {\n      style: true,\n    },\n  },\n  icon: '',\n  category: '引导',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/breadcrumb/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '面包屑',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_breadcrumb.png',\n    schema: {\n      componentName: 'Breadcrumb',\n      props: {\n        maxNode: 100,\n        component: 'nav',\n      },\n      children: [\n        {\n          componentName: 'Breadcrumb.Item',\n          props: {\n            children: '一级',\n            primaryKey: 'breadcrumb-item-1',\n            target: '_self',\n          },\n        },\n        {\n          componentName: 'Breadcrumb.Item',\n          props: {\n            children: '二级',\n            primaryKey: 'breadcrumb-item-2',\n            target: '_self',\n          },\n        },\n        {\n          componentName: 'Breadcrumb.Item',\n          props: {\n            children: '三级',\n            primaryKey: 'breadcrumb-item-3',\n            target: '_self',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/breadcrumb-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Breadcrumb.Item',\n  title: '面包屑 Item',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Breadcrumb',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'children',\n      description: '内容',\n      propType: 'string',\n    },\n    {\n      name: 'link',\n      propType: 'string',\n      description: '面包屑节点链接，如果设置这个属性，则该节点为`<a />` ，否则是`<span />`',\n    },\n    {\n      name: 'activated',\n      propType: 'bool',\n    },\n    {\n      name: 'separator',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'className',\n      propType: 'any',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'children',\n        title: '文本内容',\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n    ],\n  },\n  icon: '',\n  category: '引导',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/button/meta.design.ts",
    "content": "import snippets from './snippets.design';\n\nexport default [\n  {\n    group: '原子组件',\n    componentName: 'Button',\n    title: '按钮',\n    icon: 'https://img.alicdn.com/tfs/TB1rT0gPQL0gK0jSZFAXXcA9pXa-200-200.svg',\n    docUrl: '',\n    screenshot: '',\n    npm: {\n      package: '@alilc/lowcode-materials',\n      version: '{{version}}',\n      exportName: 'Button',\n      main: '',\n      destructuring: true,\n      subName: '',\n    },\n    props: [\n      {\n        name: 'children',\n        title: '内容',\n        propType: 'string',\n      },\n      {\n        name: 'icon',\n        propType: 'string',\n        description: '自定义内联样式',\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '按钮类型',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        propType: {\n          type: 'oneOf',\n          value: ['primary', 'secondary', 'normal'],\n        },\n        description: '按钮的类型',\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '按钮尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        propType: {\n          type: 'oneOf',\n          value: ['small', 'medium', 'large'],\n        },\n        description: '按钮的尺寸',\n        defaultValue: 'medium',\n      },\n      {\n        name: 'iconSize',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标尺寸',\n            en_US: 'Icon Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: iconSize | 说明: 图标尺寸',\n            en_US: 'prop: iconSize | description: icon size',\n          },\n        },\n        propType: {\n          type: 'oneOf',\n          value: ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl'],\n        },\n        defaultValue: 'small',\n        description: '按钮中 Icon 的尺寸，用于替代 Icon 的默认大小',\n      },\n      {\n        name: 'ghost',\n        title: {\n          type: 'i18n',\n          zh_CN: '幽灵按钮',\n          en_US: 'ghost',\n        },\n        propType: {\n          type: 'oneOf',\n          value: [true, false, 'light', 'dark'],\n        },\n        description: '是否为幽灵按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'loading',\n        title: 'loading',\n        propType: 'bool',\n        description: '设置按钮的载入状态',\n        defaultValue: false,\n      },\n      {\n        name: 'text',\n        title: {\n          type: 'i18n',\n          zh_CN: '文本按钮',\n          en_US: 'text',\n        },\n        propType: 'bool',\n        description: '是否为文本按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'warning',\n        title: 'warning',\n        propType: 'bool',\n        description: '是否为警告按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'disabled',\n        title: {\n          type: 'i18n',\n          zh_CN: '禁用',\n          en_US: 'disabled',\n        },\n        propType: 'bool',\n        description: '是否禁用',\n        defaultValue: false,\n      },\n      {\n        name: 'onClick',\n        title: 'onClick',\n        propType: 'func',\n        description: '点击按钮的回调\\n@param {Object} e Event Object',\n      },\n      {\n        name: 'className',\n        propType: 'string',\n      },\n      {\n        name: 'onMouseUp',\n        propType: 'func',\n      },\n      {\n        name: 'style',\n        propType: 'object',\n        description: '自定义内联样式',\n      },\n    ],\n    configure: {\n      props: [\n        {\n          name: 'children',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '内容',\n              en_US: 'Content',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: children | 说明: 按钮文本',\n              en_US: 'prop: children | description: button content',\n            },\n          },\n          setter: 'StringSetter',\n        },\n        {\n          name: 'icon',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '图标',\n              en_US: 'Icon',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: icon | 说明: 图标类型',\n              en_US: 'prop: icon | description: icon type',\n            },\n          },\n          setter: 'IconSetter',\n          supportVariable: false,\n          setValue: (target, value) => {\n            target.node.children.importSchema(\n              value && {\n                componentName: 'Icon',\n                props: { type: value, style: { marginRight: 5 } },\n              },\n              true,\n            );\n          },\n        },\n        {\n          name: '!type',\n          title: {\n            type: 'i18n',\n            zh_CN: '类型',\n            en_US: 'type',\n          },\n          getValue: (target) => {\n            const parentTarget = target.parent;\n            const isTextButton = parentTarget.getPropValue('text');\n            const isWarningButton = parentTarget.getPropValue('warning');\n            const ghostConfig = parentTarget.getPropValue('ghost');\n            if (isTextButton) {\n              return 'text';\n            } else if (isWarningButton) {\n              return 'warning';\n            } else if (typeof ghostConfig !== 'undefined' && ghostConfig !== false) {\n              return 'ghost';\n            } else {\n              return 'normal';\n            }\n          },\n          setValue: (target, value) => {\n            const parentTarget = target.parent;\n            parentTarget.setPropValue('text', false);\n            parentTarget.setPropValue('warning', false);\n            parentTarget.setPropValue('ghost', false);\n            switch (value) {\n              case 'normal':\n                break;\n              case 'text':\n                parentTarget.setPropValue('text', true);\n                break;\n              case 'warning':\n                parentTarget.setPropValue('warning', true);\n                break;\n              case 'ghost':\n                parentTarget.setPropValue('ghost', true);\n                break;\n              default:\n                break;\n            }\n          },\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '普通按钮',\n                  value: 'normal',\n                },\n                {\n                  title: '文本按钮',\n                  value: 'text',\n                },\n                {\n                  title: '提示按钮',\n                  value: 'warning',\n                },\n                {\n                  title: '幽灵按钮',\n                  value: 'ghost',\n                },\n                // {\n                //   title: \"按钮组\",\n                //   value: \"group\"\n                // },\n              ],\n            },\n          },\n          defaultValue: 'normal',\n        },\n        {\n          name: 'type',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '形式',\n              en_US: 'Button Type',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: type | 说明: 按钮类型',\n              en_US: 'prop: type | description: button type',\n            },\n          },\n          condition: (target) => target?.parent?.getPropValue('!type') !== 'ghost',\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: (target) => {\n              const _type = target?.parent?.getPropValue('!type');\n              let options = [\n                {\n                  label: '主要',\n                  value: 'primary',\n                },\n                {\n                  label: '次要',\n                  value: 'secondary',\n                },\n                {\n                  label: '普通',\n                  value: 'normal',\n                },\n              ];\n              if (_type === 'warning') {\n                options = [\n                  {\n                    label: '主要',\n                    value: 'primary',\n                  },\n                  {\n                    label: '普通',\n                    value: 'normal',\n                  },\n                ];\n              }\n              return { options };\n            },\n          },\n          defaultValue: 'normal',\n        },\n        {\n          name: 'ghost',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '形式',\n              en_US: 'Button Type',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: type | 说明: 按钮类型',\n              en_US: 'prop: type | description: button type',\n            },\n          },\n          condition: (target) => target?.parent?.getPropValue('!type') === 'ghost',\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  label: 'Light',\n                  value: 'light',\n                },\n                {\n                  label: 'Dark',\n                  value: 'dark',\n                },\n              ],\n            },\n          },\n        },\n        {\n          name: 'size',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '尺寸',\n              en_US: 'Button Size',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: size | 说明: 按钮尺寸',\n              en_US: 'prop: size | description: button size',\n            },\n          },\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  label: '小',\n                  value: 'small',\n                },\n                {\n                  label: '中',\n                  value: 'medium',\n                },\n                {\n                  label: '大',\n                  value: 'large',\n                },\n              ],\n            },\n          },\n          defaultValue: 'medium',\n        },\n        {\n          name: '!status',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '状态',\n              en_US: 'Button Status',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: 虚拟属性 | 说明: 按钮状态',\n              en_US: 'prop: virtual | description: button status',\n            },\n          },\n          setter: {\n            componentName: 'SelectSetter',\n            props: {\n              options: [\n                {\n                  title: '普通',\n                  value: 'normal',\n                },\n                // {\n                //   title: \"悬停\",\n                //   value: 'hover'\n                // },\n                // {\n                //   title: \"激活\",\n                //   value: \"active\"\n                // },\n                {\n                  title: '禁用',\n                  value: 'disabled',\n                },\n                {\n                  title: '加载',\n                  value: 'loading',\n                },\n              ],\n            },\n          },\n          getValue: (target) => {\n            const parentTarget = target.parent;\n            const loading = parentTarget.getPropValue('loading');\n            const disabled = parentTarget.getPropValue('disabled');\n            if (loading) {\n              return 'loading';\n            } else if (disabled) {\n              return 'disabled';\n            } else {\n              return 'normal';\n            }\n          },\n          setValue: (target, value) => {\n            const parentTarget = target.parent;\n            parentTarget.setPropValue('loading', false);\n            parentTarget.setPropValue('disabled', false);\n            switch (value) {\n              case 'normal':\n                break;\n              case 'loading':\n                parentTarget.setPropValue('loading', true);\n                break;\n              case 'disabled':\n                parentTarget.setPropValue('disabled', true);\n                break;\n              default:\n                break;\n            }\n          },\n          defaultValue: 'normal',\n        },\n      ],\n    },\n    category: '通用',\n    snippets,\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/button/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Button',\n  title: '按钮',\n  icon: 'https://img.alicdn.com/tfs/TB1rT0gPQL0gK0jSZFAXXcA9pXa-200-200.svg',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Button',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'children',\n      title: '内容',\n      propType: 'string',\n    },\n    {\n      name: 'icon',\n      propType: 'string',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'type',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '按钮类型',\n          en_US: 'Button Type',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: type | 说明: 按钮类型',\n          en_US: 'prop: type | description: button type',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['primary', 'secondary', 'normal'],\n      },\n      description: '按钮的类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '按钮尺寸',\n          en_US: 'Button Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 按钮尺寸',\n          en_US: 'prop: size | description: button size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '按钮的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'iconSize',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '图标尺寸',\n          en_US: 'Icon Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: iconSize | 说明: 图标尺寸',\n          en_US: 'prop: iconSize | description: icon size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl'],\n      },\n      defaultValue: 'small',\n      description: '按钮中 Icon 的尺寸，用于替代 Icon 的默认大小',\n    },\n    {\n      name: 'ghost',\n      title: {\n        type: 'i18n',\n        zh_CN: '幽灵按钮',\n        en_US: 'ghost',\n      },\n      propType: {\n        type: 'oneOf',\n        value: [true, false, 'light', 'dark'],\n      },\n      description: '是否为幽灵按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'loading',\n      title: 'loading',\n      propType: 'bool',\n      description: '设置按钮的载入状态',\n      defaultValue: false,\n    },\n    {\n      name: 'text',\n      title: {\n        type: 'i18n',\n        zh_CN: '文本按钮',\n        en_US: 'text',\n      },\n      propType: 'bool',\n      description: '是否为文本按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'warning',\n      title: 'warning',\n      propType: 'bool',\n      description: '是否为警告按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: {\n        type: 'i18n',\n        zh_CN: '禁用',\n        en_US: 'disabled',\n      },\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'onClick',\n      title: 'onClick',\n      propType: 'func',\n      description: '点击按钮的回调\\n@param {Object} e Event Object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'onMouseUp',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'icon',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '图标',\n              en_US: 'Icon',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: icon | 说明: 图标类型',\n              en_US: 'prop: icon | description: icon type',\n            },\n          },\n          setter: 'IconSetter',\n          supportVariable: true,\n          setValue: (target, value) => {\n            target.node.children.importSchema(\n              value && {\n                componentName: 'Icon',\n                props: { type: value, style: { marginRight: 5 } },\n              },\n              true,\n            );\n          },\n        },\n        {\n          name: 'ghost',\n          title: {\n            type: 'i18n',\n            zh_CN: '幽灵按钮',\n            en_US: 'ghost',\n          },\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  title: 'True',\n                  value: true,\n                },\n                {\n                  title: 'False',\n                  value: false,\n                },\n                {\n                  title: 'Light',\n                  value: 'light',\n                },\n                {\n                  title: 'Dark',\n                  value: 'dark',\n                },\n              ],\n            },\n          },\n          description: '是否为幽灵按钮',\n          defaultValue: false,\n        },\n        {\n          name: 'children',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '按钮内容',\n              en_US: 'Content',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: children | 说明: 按钮文本',\n              en_US: 'prop: children | description: button content',\n            },\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['StringSetter', 'ExpressionSetter'],\n            },\n          },\n        },\n      ],\n    },\n  },\n  category: '通用',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/button/snippets.design.ts",
    "content": "import { getDataFromPlainText } from '../split-button/adaptor';\n\nconst plainData = 'Edit Document\\n\\tUndo\\n\\tRedo\\n\\tCut\\n\\tCopy\\n\\tPaste';\nconst { label, children, selectedKeys } = getDataFromPlainText(plainData);\n\nconst splitButtonProps = {\n  prefix: 'next-',\n  type: 'normal',\n  size: 'medium',\n  label: label,\n  defaultSelectedKeys: [],\n  autoWidth: true,\n  popupTriggerType: 'click',\n  plainData,\n};\n\nif (selectedKeys && selectedKeys.length) {\n  splitButtonProps.selectedKeys = selectedKeys;\n}\nconst menuButtonProps = splitButtonProps;\n\nconst snippets = [\n  {\n    title: '按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_button.png',\n    schema: {\n      componentName: 'Button',\n      props: {\n        prefix: 'next-',\n        type: 'normal',\n        size: 'medium',\n        htmlType: 'button',\n        component: 'button',\n        children: '取消',\n      },\n    },\n  },\n  {\n    title: '分隔按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_split-button.png',\n    schema: {\n      componentName: 'SplitButton',\n      props: splitButtonProps,\n      children,\n    },\n  },\n  {\n    title: '菜单按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_menu-button.png',\n    schema: {\n      componentName: 'MenuButton',\n      props: menuButtonProps,\n      children,\n    },\n  },\n];\n\nexport default snippets;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/button/snippets.ts",
    "content": "import { getDataFromPlainText } from '../split-button/adaptor';\n\nconst plainData = 'Edit Document\\n\\tUndo\\n\\tRedo\\n\\tCut\\n\\tCopy\\n\\tPaste';\nconst { label, children, selectedKeys } = getDataFromPlainText(plainData);\n\nconst splitButtonProps = {\n  prefix: 'next-',\n  type: 'normal',\n  size: 'medium',\n  label: label,\n  defaultSelectedKeys: [],\n  autoWidth: true,\n  popupTriggerType: 'click',\n  plainData,\n};\n\nif (selectedKeys && selectedKeys.length) {\n  splitButtonProps.selectedKeys = selectedKeys;\n}\nconst menuButtonProps = splitButtonProps;\n\nconst snippets = [\n  {\n    title: '按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_button.png',\n    schema: {\n      componentName: 'Button',\n      props: {\n        prefix: 'next-',\n        type: 'primary',\n        size: 'medium',\n        htmlType: 'button',\n        component: 'button',\n        children: '取消',\n      },\n    },\n  },\n  {\n    title: '分隔按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_split-button.png',\n    schema: {\n      componentName: 'SplitButton',\n      props: splitButtonProps,\n      children,\n    },\n  },\n  {\n    title: '菜单按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_split-button.png',\n    schema: {\n      componentName: 'MenuButton',\n      props: menuButtonProps,\n      children,\n    },\n  },\n  {\n    title: '按钮组',\n    screenshot: 'https://img.alicdn.com/tfs/TB1t6dhvV67gK0jSZPfXXahhFXa-310-122.png',\n    schema: {\n      componentName: 'Button.Group',\n      props: {},\n      children: [\n        {\n          componentName: 'Button',\n          props: {\n            type: 'primary',\n            style: {\n              margin: '0 5px 0 5px',\n            },\n            htmlType: 'submit',\n            children: '提交',\n          },\n          children: [\n            {\n              componentName: 'Icon',\n              props: {\n                type: 'success',\n              },\n            },\n          ],\n        },\n        {\n          componentName: 'Button',\n          props: {\n            type: 'normal',\n            style: {\n              margin: '0 5px 0 5px',\n            },\n            htmlType: 'reset',\n            children: '重置',\n          },\n        },\n      ],\n    },\n  },\n];\n\nexport default snippets;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/button-group/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Button.Group',\n  title: '按钮组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Button',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'size',\n      propType: 'string',\n      description: '统一设置 Button 组件的按钮大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        childWhitelist: ['Button'],\n      },\n    },\n    props: [\n      {\n        name: 'size',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '统一设置子按钮的尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 统一设置子按钮的尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['small', 'medium', 'large'] },\n        },\n        defaultValue: 'medium',\n      },\n    ],\n  },\n  icon: '',\n  category: '常用',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/calendar/meta.design.ts",
    "content": "import * as moment from 'moment';\n\nmoment?.locale?.('zh-cn');\n\nexport default {\n  group: '原子组件',\n  componentName: 'Calendar',\n  title: '日历',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i3/O1CN01IAguy71sM0UGdpChd_!!6000000005751-55-tps-56-56.svg',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Calendar',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '默认选中的日期（moment 对象）',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '选中的日期值 (moment 对象)',\n    },\n    {\n      name: 'modes',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n    },\n    {\n      name: 'disableChangeMode',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'showOtherMonth',\n      propType: 'bool',\n      description: '是否展示非本月的日期',\n      defaultValue: true,\n    },\n    {\n      name: 'defaultVisibleMonth',\n      propType: 'func',\n      description: '默认展示的月份',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['card', 'fullscreen', 'panel'],\n      },\n      description: '展现形态',\n      defaultValue: 'fullscreen',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择日期单元格时的回调\\n@param {Object} value 对应的日期值 (moment 对象)',\n    },\n    {\n      name: 'onModeChange',\n      propType: 'func',\n      description: '面板模式变化时的回调\\n@param {String} mode 对应面板模式 date month year',\n    },\n    {\n      name: 'onVisibleMonthChange',\n      propType: 'func',\n      description:\n        '展现的月份变化时的回调\\n@param {Object} value 显示的月份 (moment 对象)\\n@param {String} reason 触发月份改变原因',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义样式类',\n    },\n    {\n      name: 'dateCellRender',\n      propType: 'func',\n      description:\n        '自定义日期渲染函数\\n@param {Object} value 日期值（moment对象）\\n@returns {ReactNode}',\n    },\n    {\n      name: 'monthCellRender',\n      propType: 'func',\n      description:\n        '自定义月份渲染函数\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@returns {ReactNode}',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '不可选择的日期\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@returns {Boolean}',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n      description: '国际化配置',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: '展现形态',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '卡片',\n                value: 'card',\n              },\n              {\n                label: '全屏',\n                value: 'fullscreen',\n              },\n              {\n                label: '面板',\n                value: 'panel',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'mode',\n        title: '类型',\n        defaultValue: 'date',\n        setter: (target) => {\n          const options = [\n            {\n              label: '月',\n              value: 'month',\n            },\n            {\n              label: '日',\n              value: 'date',\n            },\n          ];\n          const shape = target?.parent?.getPropValue?.('shape');\n          if (shape !== 'fullscreen') {\n            options.unshift({\n              label: '年',\n              value: 'year',\n            });\n          }\n          return {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options,\n            },\n          };\n        },\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'showOtherMonth',\n        title: '非本月日期',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        name: 'defaultValue',\n        title: '当前日期',\n        setter: 'DateSetter',\n      },\n    ],\n  },\n  icon:\n    'https://img.alicdn.com/imgextra/i3/O1CN01IAguy71sM0UGdpChd_!!6000000005751-55-tps-56-56.svg',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/calendar/meta.ts",
    "content": "import * as moment from 'moment';\n\nmoment?.locale?.('zh-cn');\n\nexport default {\n  group: '原子组件',\n  componentName: 'Calendar',\n  title: '日历',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i3/O1CN01IAguy71sM0UGdpChd_!!6000000005751-55-tps-56-56.svg',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Calendar',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '默认选中的日期（moment 对象）',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '选中的日期值 (moment 对象)',\n    },\n    {\n      name: 'modes',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n    },\n    {\n      name: 'disableChangeMode',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'showOtherMonth',\n      propType: 'bool',\n      description: '是否展示非本月的日期',\n      defaultValue: true,\n    },\n    {\n      name: 'defaultVisibleMonth',\n      propType: 'func',\n      description: '默认展示的月份',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['card', 'fullscreen', 'panel'],\n      },\n      description: '展现形态',\n      defaultValue: 'fullscreen',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择日期单元格时的回调\\n@param {Object} value 对应的日期值 (moment 对象)',\n    },\n    {\n      name: 'onModeChange',\n      propType: 'func',\n      description: '面板模式变化时的回调\\n@param {String} mode 对应面板模式 date month year',\n    },\n    {\n      name: 'onVisibleMonthChange',\n      propType: 'func',\n      description:\n        '展现的月份变化时的回调\\n@param {Object} value 显示的月份 (moment 对象)\\n@param {String} reason 触发月份改变原因',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义样式类',\n    },\n    {\n      name: 'dateCellRender',\n      propType: 'func',\n      description:\n        '自定义日期渲染函数\\n@param {Object} value 日期值（moment对象）\\n@returns {ReactNode}',\n    },\n    {\n      name: 'monthCellRender',\n      propType: 'func',\n      description:\n        '自定义月份渲染函数\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@returns {ReactNode}',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '不可选择的日期\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@returns {Boolean}',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n      description: '国际化配置',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: '展现形态',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['card', 'fullscreen', 'panel'] },\n        },\n      },\n      {\n        name: 'showOtherMonth',\n        display: 'block',\n        title: '展示非本月日期',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n    ],\n  },\n  icon: 'https://img.alicdn.com/imgextra/i3/O1CN01IAguy71sM0UGdpChd_!!6000000005751-55-tps-56-56.svg',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/calendar/snippets.ts",
    "content": "module.exports = [\n  {\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01IAguy71sM0UGdpChd_!!6000000005751-55-tps-56-56.svg',\n    title: '卡片型',\n    schema: {\n      componentName: 'Calendar',\n      props: {\n        shape: 'card',\n      },\n    },\n  },\n  {\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01IAguy71sM0UGdpChd_!!6000000005751-55-tps-56-56.svg',\n    title: '面板型',\n    schema: {\n      componentName: 'Calendar',\n      props: {\n        shape: 'panel',\n      },\n    },\n  },\n  {\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01IAguy71sM0UGdpChd_!!6000000005751-55-tps-56-56.svg',\n    title: '全屏型',\n    schema: {\n      componentName: 'Calendar',\n      props: {\n        shape: 'fullscreen',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Card',\n  title: '卡片',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'showTitleBullet',\n      title: '标题符号',\n      propType: 'bool',\n      description: '标题的项目符号',\n      defaultValue: true,\n    },\n    {\n      name: 'showHeadDivider',\n      title: '分割线',\n      propType: 'bool',\n      description: '头部分隔线',\n      defaultValue: true,\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['node', 'string'],\n      },\n      description: '标题',\n    },\n    {\n      name: 'subTitle',\n      propType: {\n        type: 'oneOfType',\n        value: ['node', 'string'],\n      },\n      description: '副标题',\n    },\n    {\n      name: 'extra',\n      title: {\n        label: '自定义内容',\n        tip: '标题栏用户自定义内容',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['node', 'string'],\n      },\n      description: '标题栏用户自定义内容',\n    },\n    {\n      name: 'contentHeight',\n      title: '内容高度',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number'],\n      },\n      description: '内容区域的固定高度',\n      defaultValue: 120,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      description: '文本方向是从右向左',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'id',\n          condition: () => false,\n        },\n        {\n          name: 'rtl',\n          condition: () => false,\n        },\n      ],\n    },\n  },\n  icon: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_card.png',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card/snippets.ts",
    "content": "module.exports = [\n  {\n    screenshot: 'https://img.alicdn.com/tfs/TB1CHN3u4z1gK0jSZSgXXavwpXa-112-64.png',\n    title: '普通型',\n    schema: {\n      componentName: 'Card',\n      props: {\n        title: '普通型卡片',\n      },\n      children: [],\n    },\n  },\n  {\n    screenshot: 'https://img.alicdn.com/tfs/TB1.Ut6u4D1gK0jSZFKXXcJrVXa-112-64.png',\n    title: '自定义',\n    schema: {\n      componentName: 'Card',\n      props: {\n        title: '自定义卡片',\n        extra: {\n          type: 'JSSlot',\n        },\n      },\n      children: [],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card-actions/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CardActions',\n  title: 'CardActions',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: 'Actions',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'div',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card-bullet-header/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CardBulletHeader',\n  title: 'CardBulletHeader',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: 'BulletHeader',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '卡片的标题',\n    },\n    {\n      name: 'subTitle',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '卡片的副标题',\n    },\n    {\n      name: 'showTitleBullet',\n      propType: 'bool',\n      description: '是否显示标题的项目符号',\n      defaultValue: true,\n    },\n    {\n      name: 'extra',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标题区域的用户自定义内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card-collaspe-content/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CardCollaspeContent',\n  title: 'CardCollaspeContent',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: 'CollaspeContent',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'contentHeight',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number'],\n      },\n      description: '内容区域的固定高度',\n      defaultValue: 120,\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card-content/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CardContent',\n  title: 'CardContent',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: 'Content',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'div',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card-divider/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CardDivider',\n  title: 'CardDivider',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: 'Divider',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'hr',\n    },\n    {\n      name: 'inset',\n      propType: 'bool',\n      description: '分割线是否向内缩进',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card-header/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CardHeader',\n  title: 'CardHeader',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: 'Header',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '卡片的标题',\n    },\n    {\n      name: 'subTitle',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '卡片的副标题',\n    },\n    {\n      name: 'extra',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标题区域的用户自定义内容',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'div',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/card-media/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CardMedia',\n  title: 'CardMedia',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Card',\n    main: '',\n    destructuring: true,\n    subName: 'Media',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'div',\n    },\n    {\n      name: 'image',\n      propType: 'string',\n      description: '背景图片地址',\n    },\n    {\n      name: 'src',\n      propType: 'string',\n      description: '媒体源文件地址',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/cascader/meta.design.ts",
    "content": "import parseData from '../utils/parse-data';\nimport { createDataSource } from '../cascader-select/adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Cascader',\n  title: '级联',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Cascader',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'label',\n      title: {\n        label: 'label',\n        tip: '自定义内联 label',\n      },\n      propType: 'string',\n      description: '自定义内联 label',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '占位符',\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'arrayOf',\n        value: 'object',\n      },\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'hasArrow',\n      propType: 'bool',\n      description: '下拉箭头',\n      defaultValue: true,\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '边框',\n      defaultValue: true,\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '清除按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'notFoundContent',\n      title: {\n        label: '无数据时显示内容',\n        tip: 'notFoundContent',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['node', 'string'],\n      },\n      description: '无数据时显示内容',\n      defaultValue: 'Not Found',\n    },\n    {\n      name: 'loadData',\n      propType: 'func',\n      description: '异步加载数据函数\\n@param {Object} data 当前点击异步加载的数据',\n    },\n    {\n      name: 'header',\n      propType: 'node',\n      description: '自定义下拉框头部',\n    },\n    {\n      name: 'footer',\n      propType: 'node',\n      description: '自定义下拉框底部',\n    },\n    {\n      name: 'defaultVisible',\n      title: {\n        label: '初始下拉框是否显示',\n        tip: 'defaultVisible',\n      },\n      propType: 'bool',\n      description: '初始下拉框是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'visible',\n      title: {\n        label: '当前下拉框是否显示',\n        tip: 'visible',\n      },\n      propType: 'bool',\n      description: '当前下拉框是否显示',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时触发的回调函数\\n@param {String|Array} value 选中的值，单选时返回单个值，多选时返回数组\\n@param {Object|Array} data 选中的数据，包括 value 和 label，单选时返回单个值，多选时返回数组，父子节点选中关联时，同时选中，只返回父节点\\n@param {Object} extra 额外参数\\n@param {Array} extra.selectedPath 单选时选中的数据的路径\\n@param {Boolean} extra.checked 多选时当前的操作是选中还是取消选中\\n@param {Object} extra.currentData 多选时当前操作的数据\\n@param {Array} extra.checkedData 多选时所有被选中的数据\\n@param {Array} extra.indeterminateData 多选时半选的数据',\n    },\n    {\n      name: 'expandTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '展开触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n      description: '虚拟滚动',\n      defaultValue: false,\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否多选',\n      defaultValue: false,\n    },\n    {\n      name: 'changeOnSelect',\n      title: {\n        label: '选中即改变',\n        tip: 'changeOnSelect|是否选中即发生改变, 该属性仅在单选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否选中即发生改变, 该属性仅在单选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'canOnlyCheckLeaf',\n      title: {\n        label: 'canOnlyCheckLeaf',\n        tip: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'checkStrictly',\n      title: {\n        label: 'checkStrictly',\n        tip: '父子节点是否选中不关联',\n      },\n      propType: 'bool',\n      description: '父子节点是否选中不关联',\n      defaultValue: false,\n    },\n    {\n      name: 'listStyle',\n      propType: 'object',\n      description: '每列列表样式对象',\n    },\n    {\n      name: 'resultAutoWidth',\n      title: {\n        label: 'resultAutoWidth',\n        tip: '搜索结果列表是否和选择框等宽',\n      },\n      propType: 'bool',\n      description: '搜索结果列表是否和选择框等宽',\n      defaultValue: true,\n    },\n    {\n      name: 'showSearch',\n      propType: 'bool',\n      description: '搜索框',\n      defaultValue: false,\n    },\n    {\n      name: 'filter',\n      propType: 'func',\n      description:\n        '自定义搜索函数\\n@param {String} searchValue 搜索的关键字\\n@param {Array} path 节点路径\\n@return {Boolean} 是否匹配\\n@default 根据路径所有节点的文本值模糊匹配',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '下拉框显示或关闭时触发事件的回调函数\\n@param {Boolean} visible 是否显示\\n@param {String} type 触发显示关闭的操作类型, fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '下拉框自定义样式对象',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传到 Popup 的属性对象',\n    },\n    {\n      name: 'followTrigger',\n      title: {\n        label: '是否跟随滚动',\n        tip: 'followTrigger',\n      },\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'isPreview',\n      title: {\n        label: '是否为预览态',\n        tip: 'isPreview',\n      },\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onChange', 'onExpand', 'onVisibleChange'],\n    },\n    props: [\n      {\n        name: 'expandTriggerType',\n        title: {\n          label: '触发方式',\n          tip: 'expandTriggerType | 展开触发的方式',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '点击',\n                value: 'click',\n              },\n              {\n                label: '悬浮',\n                value: 'hover',\n              },\n            ],\n          },\n        },\n        description: '展开触发的方式',\n        defaultValue: 'click',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'useVirtual',\n        title: {\n          label: '虚拟滚动',\n          tip: 'useVirtual | 是否开启虚拟滚动',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'multiple',\n        title: '是否多选',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '内容',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const list = parseData(value).filter(({ type }) => 'node' === type);\n          const keys = { selected: [], expanded: [] };\n          const dataSource = createDataSource(list, keys);\n          target.parent.setPropValue('dataSource', dataSource);\n          target.parent.setPropValue('value', keys.selected);\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n            disableIcon: true,\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/cascader/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Cascader',\n  title: '级联',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Cascader',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时触发的回调函数\\n@param {String|Array} value 选中的值，单选时返回单个值，多选时返回数组\\n@param {Object|Array} data 选中的数据，包括 value 和 label，单选时返回单个值，多选时返回数组，父子节点选中关联时，同时选中，只返回父节点\\n@param {Object} extra 额外参数\\n@param {Array} extra.selectedPath 单选时选中的数据的路径\\n@param {Boolean} extra.checked 多选时当前的操作是选中还是取消选中\\n@param {Object} extra.currentData 多选时当前操作的数据\\n@param {Array} extra.checkedData 多选时所有被选中的数据\\n@param {Array} extra.indeterminateData 多选时半选的数据',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n    },\n    {\n      name: 'dataSource',\n      propType: 'array',\n    },\n    {\n      name: 'expandTriggerType',\n      title: {\n        label: '触发方式',\n        tip: 'expandTriggerType | 展开触发的方式',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '展开触发的方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n      description: '展开时触发的回调函数\\n@param {Array} expandedValue 各列展开值的数组',\n    },\n    {\n      name: 'useVirtual',\n      title: {\n        label: '虚拟滚动',\n        tip: 'useVirtual | 是否开启虚拟滚动',\n      },\n      propType: 'bool',\n      description: '是否开启虚拟滚动',\n      defaultValue: false,\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否多选',\n      defaultValue: false,\n    },\n    {\n      name: 'canOnlySelectLeaf',\n      title: {\n        label: '单选时是否只能选中叶子节点',\n        tip: 'canOnlySelectLeaf',\n      },\n      propType: 'bool',\n      description: '单选时是否只能选中叶子节点',\n      defaultValue: false,\n    },\n    {\n      name: 'canOnlyCheckLeaf',\n      title: {\n        label: '多选时是否只能选中叶子节点',\n        tip: 'canOnlyCheckLeaf',\n      },\n      propType: 'bool',\n      description: '多选时是否只能选中叶子节点',\n      defaultValue: false,\n    },\n    {\n      name: 'checkStrictly',\n      title: {\n        tip: 'checkStrictly',\n        label: '父子节点是否选中不关联',\n      },\n      propType: 'bool',\n      description: '父子节点是否选中不关联',\n      defaultValue: false,\n    },\n    {\n      name: 'listStyle',\n      propType: 'object',\n      description: '每列列表样式对象',\n    },\n    {\n      name: 'loadData',\n      title: {\n        label: 'loadData',\n        tip: '异步加载数据函数\\n@param {Object} data 当前点击异步加载的数据\\n@param {Object} source 当前点击数据，source是原始对象',\n      },\n      propType: 'func',\n      description:\n        '异步加载数据函数\\n@param {Object} data 当前点击异步加载的数据\\n@param {Object} source 当前点击数据，source是原始对象',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'rtl',\n          condition: () => false,\n        },\n        {\n          name: 'prefix',\n          condition: () => false,\n        },\n        {\n          name: 'loadData',\n          condition: () => false,\n        },\n        {\n          name: 'listStyle',\n          setter: 'ObjectSetter',\n          condition: () => false,\n        },\n        {\n          name: 'dataSource',\n          title: '级联数据',\n          setter: 'JsonSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'canOnlySelectLeaf',\n          display: 'block',\n          title: {\n            label: '单选时是否只能选中叶子节点',\n            tip: 'canOnlySelectLeaf',\n          },\n          setter: 'BoolSetter',\n          supportVariable: true,\n          defaultValue: false,\n        },\n        {\n          name: 'canOnlyCheckLeaf',\n          display: 'block',\n          title: {\n            label: '多选时是否只能选中叶子节点',\n            tip: 'canOnlyCheckLeaf',\n          },\n          setter: 'BoolSetter',\n          supportVariable: true,\n          defaultValue: false,\n        },\n        {\n          name: 'checkStrictly',\n          display: 'block',\n          title: {\n            tip: 'checkStrictly',\n            label: '父子节点是否选中不关联',\n          },\n          setter: 'BoolSetter',\n          supportVariable: true,\n          defaultValue: false,\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/cascader-select/adaptor.ts",
    "content": "let index = 1000;\nexport const createDataSource = (list, map = {}) => {\n  if (!list) return [];\n  return list\n    .filter((item) => item.type === 'node')\n    .map(({ value, children, state }) => {\n      const key = String(index++);\n      if (state === 'active') {\n        if (!children || children.length === 0) {\n          map.selected.push(key);\n        } else {\n          map.expanded.push(key);\n        }\n      }\n\n      return {\n        value: key,\n        label: value,\n        disabled: state === 'disabled',\n        children: createDataSource(children, map),\n      };\n    });\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/cascader-select/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport parseData from '../utils/parse-data';\nimport { createDataSource } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'CascaderSelect',\n  title: '级联选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'CascaderSelect',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'label',\n      title: {\n        label: 'label',\n        tip: '自定义内联 label',\n      },\n      propType: 'string',\n      description: '自定义内联 label',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '占位符',\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'arrayOf',\n        value: 'object',\n      },\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'hasArrow',\n      propType: 'bool',\n      description: '下拉箭头',\n      defaultValue: true,\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '边框',\n      defaultValue: true,\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '清除按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'notFoundContent',\n      title: {\n        label: '无数据时显示内容',\n        tip: 'notFoundContent',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['node', 'string'],\n      },\n      description: '无数据时显示内容',\n      defaultValue: 'Not Found',\n    },\n    {\n      name: 'loadData',\n      propType: 'func',\n      description: '异步加载数据函数\\n@param {Object} data 当前点击异步加载的数据',\n    },\n    {\n      name: 'header',\n      propType: 'node',\n      description: '自定义下拉框头部',\n    },\n    {\n      name: 'footer',\n      propType: 'node',\n      description: '自定义下拉框底部',\n    },\n    {\n      name: 'defaultVisible',\n      title: {\n        label: '初始下拉框是否显示',\n        tip: 'defaultVisible',\n      },\n      propType: 'bool',\n      description: '初始下拉框是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'visible',\n      title: {\n        label: '当前下拉框是否显示',\n        tip: 'visible',\n      },\n      propType: 'bool',\n      description: '当前下拉框是否显示',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时触发的回调函数\\n@param {String|Array} value 选中的值，单选时返回单个值，多选时返回数组\\n@param {Object|Array} data 选中的数据，包括 value 和 label，单选时返回单个值，多选时返回数组，父子节点选中关联时，同时选中，只返回父节点\\n@param {Object} extra 额外参数\\n@param {Array} extra.selectedPath 单选时选中的数据的路径\\n@param {Boolean} extra.checked 多选时当前的操作是选中还是取消选中\\n@param {Object} extra.currentData 多选时当前操作的数据\\n@param {Array} extra.checkedData 多选时所有被选中的数据\\n@param {Array} extra.indeterminateData 多选时半选的数据',\n    },\n    {\n      name: 'expandTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '展开触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n      description: '虚拟滚动',\n      defaultValue: false,\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否多选',\n      defaultValue: false,\n    },\n    {\n      name: 'changeOnSelect',\n      title: {\n        label: '选中即改变',\n        tip: 'changeOnSelect|是否选中即发生改变, 该属性仅在单选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否选中即发生改变, 该属性仅在单选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'canOnlyCheckLeaf',\n      title: {\n        label: 'canOnlyCheckLeaf',\n        tip: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'checkStrictly',\n      title: {\n        label: 'checkStrictly',\n        tip: '父子节点是否选中不关联',\n      },\n      propType: 'bool',\n      description: '父子节点是否选中不关联',\n      defaultValue: false,\n    },\n    {\n      name: 'listStyle',\n      propType: 'object',\n      description: '每列列表样式对象',\n    },\n    {\n      name: 'resultAutoWidth',\n      title: {\n        label: 'resultAutoWidth',\n        tip: '搜索结果列表是否和选择框等宽',\n      },\n      propType: 'bool',\n      description: '搜索结果列表是否和选择框等宽',\n      defaultValue: true,\n    },\n    {\n      name: 'showSearch',\n      propType: 'bool',\n      description: '搜索框',\n      defaultValue: false,\n    },\n    {\n      name: 'filter',\n      propType: 'func',\n      description:\n        '自定义搜索函数\\n@param {String} searchValue 搜索的关键字\\n@param {Array} path 节点路径\\n@return {Boolean} 是否匹配\\n@default 根据路径所有节点的文本值模糊匹配',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '下拉框显示或关闭时触发事件的回调函数\\n@param {Boolean} visible 是否显示\\n@param {String} type 触发显示关闭的操作类型, fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '下拉框自定义样式对象',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传到 Popup 的属性对象',\n    },\n    {\n      name: 'followTrigger',\n      title: {\n        label: '是否跟随滚动',\n        tip: 'followTrigger',\n      },\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'isPreview',\n      title: {\n        label: '是否为预览态',\n        tip: 'isPreview',\n      },\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onChange', 'onExpand', 'onVisibleChange'],\n    },\n    props: [\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: 'label|输入框内置标签',\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: '属性: placeholder',\n        },\n        defaultValue: '请选择', // 不生效\n        setter: 'StringSetter',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'visible',\n        title: {\n          label: '状态',\n          tip: '属性: visible',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            defaultValue: 'single',\n            options: [\n              { value: false, title: '普通' },\n              { value: true, title: '展开' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'hasBorder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示边框',\n            en_US: 'ShowBorder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasBorder | 说明: 是否有边框',\n            en_US: 'prop: hasBorder | description: HasBorder',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '无',\n                value: false,\n              },\n              {\n                label: '有',\n                value: true,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'multiple',\n        title: '复选框',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '无',\n                value: false,\n              },\n              {\n                label: '有',\n                value: true,\n              },\n            ],\n          },\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'showSearch',\n        title: {\n          label: '可搜索',\n          tip: '属性: showSearch',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '内容',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const list = parseData(value).filter(({ type }) => 'node' === type);\n          const keys = { selected: [], expanded: [] };\n          const dataSource = createDataSource(list, keys);\n          target.parent.setPropValue('dataSource', dataSource);\n          target.parent.setPropValue('value', keys.selected);\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n            disableIcon: true,\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/cascader-select/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CascaderSelect',\n  title: '级联选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'CascaderSelect',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'label',\n      title: {\n        label: 'label',\n        tip: '自定义内联 label',\n      },\n      propType: 'string',\n      description: '自定义内联 label',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '占位符',\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'arrayOf',\n        value: 'object',\n      },\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'hasArrow',\n      propType: 'bool',\n      description: '下拉箭头',\n      defaultValue: true,\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '边框',\n      defaultValue: true,\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '清除按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'notFoundContent',\n      title: {\n        label: '无数据时显示内容',\n        tip: 'notFoundContent',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['node', 'string'],\n      },\n      description: '无数据时显示内容',\n      defaultValue: 'Not Found',\n    },\n    {\n      name: 'loadData',\n      propType: 'func',\n      description: '异步加载数据函数\\n@param {Object} data 当前点击异步加载的数据',\n    },\n    {\n      name: 'header',\n      propType: 'node',\n      description: '自定义下拉框头部',\n    },\n    {\n      name: 'footer',\n      propType: 'node',\n      description: '自定义下拉框底部',\n    },\n    {\n      name: 'defaultVisible',\n      title: {\n        label: '初始下拉框是否显示',\n        tip: 'defaultVisible',\n      },\n      propType: 'bool',\n      description: '初始下拉框是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'visible',\n      title: {\n        label: '当前下拉框是否显示',\n        tip: 'visible',\n      },\n      propType: 'bool',\n      description: '当前下拉框是否显示',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时触发的回调函数\\n@param {String|Array} value 选中的值，单选时返回单个值，多选时返回数组\\n@param {Object|Array} data 选中的数据，包括 value 和 label，单选时返回单个值，多选时返回数组，父子节点选中关联时，同时选中，只返回父节点\\n@param {Object} extra 额外参数\\n@param {Array} extra.selectedPath 单选时选中的数据的路径\\n@param {Boolean} extra.checked 多选时当前的操作是选中还是取消选中\\n@param {Object} extra.currentData 多选时当前操作的数据\\n@param {Array} extra.checkedData 多选时所有被选中的数据\\n@param {Array} extra.indeterminateData 多选时半选的数据',\n    },\n    {\n      name: 'expandTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '展开触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n      description: '虚拟滚动',\n      defaultValue: false,\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否多选',\n      defaultValue: false,\n    },\n    {\n      name: 'changeOnSelect',\n      title: {\n        label: '选中即改变',\n        tip: 'changeOnSelect|是否选中即发生改变, 该属性仅在单选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否选中即发生改变, 该属性仅在单选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'canOnlyCheckLeaf',\n      title: {\n        label: 'canOnlyCheckLeaf',\n        tip: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'checkStrictly',\n      title: {\n        label: 'checkStrictly',\n        tip: '父子节点是否选中不关联',\n      },\n      propType: 'bool',\n      description: '父子节点是否选中不关联',\n      defaultValue: false,\n    },\n    {\n      name: 'listStyle',\n      propType: 'object',\n      description: '每列列表样式对象',\n    },\n    {\n      name: 'resultAutoWidth',\n      title: {\n        label: 'resultAutoWidth',\n        tip: '搜索结果列表是否和选择框等宽',\n      },\n      propType: 'bool',\n      description: '搜索结果列表是否和选择框等宽',\n      defaultValue: true,\n    },\n    {\n      name: 'showSearch',\n      propType: 'bool',\n      description: '搜索框',\n      defaultValue: false,\n    },\n    {\n      name: 'filter',\n      propType: 'func',\n      description:\n        '自定义搜索函数\\n@param {String} searchValue 搜索的关键字\\n@param {Array} path 节点路径\\n@return {Boolean} 是否匹配\\n@default 根据路径所有节点的文本值模糊匹配',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '下拉框显示或关闭时触发事件的回调函数\\n@param {Boolean} visible 是否显示\\n@param {String} type 触发显示关闭的操作类型, fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '下拉框自定义样式对象',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传到 Popup 的属性对象',\n    },\n    {\n      name: 'followTrigger',\n      title: {\n        label: '是否跟随滚动',\n        tip: 'followTrigger',\n      },\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'isPreview',\n      title: {\n        label: '是否为预览态',\n        tip: 'isPreview',\n      },\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onChange', 'onExpand', 'onVisibleChange'],\n    },\n    props: [\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: '自定义内联 label',\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['small', 'medium', 'large'] },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'placeholder',\n        title: '占位提示',\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'dataSource',\n        title: '级联数据',\n        setter: 'JsonSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'disabled',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '是否禁用',\n        defaultValue: false,\n      },\n      {\n        name: 'hasArrow',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '下拉箭头',\n        defaultValue: true,\n      },\n      {\n        name: 'hasBorder',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '边框',\n        defaultValue: true,\n      },\n      {\n        name: 'hasClear',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '清除按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'readOnly',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '是否只读',\n      },\n      {\n        name: 'multiple',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '是否多选',\n        defaultValue: false,\n      },\n      {\n        name: 'showSearch',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '搜索框',\n        defaultValue: false,\n      },\n      {\n        name: 'followTrigger',\n        title: {\n          label: '跟随滚动',\n          tip: 'followTrigger',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否跟随滚动',\n      },\n      {\n        name: 'isPreview',\n        title: {\n          label: '预览态',\n          tip: 'isPreview',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否为预览态',\n      },\n      {\n        name: 'expandTriggerType',\n        display: 'block',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['click', 'hover'] },\n        },\n        title: '展开触发方式',\n        defaultValue: 'click',\n      },\n      {\n        name: 'notFoundContent',\n        display: 'block',\n        title: {\n          label: '无数据时显示内容',\n          tip: 'notFoundContent',\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'SlotSetter'],\n          },\n        },\n        defaultValue: 'Not Found',\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/cascader-select/snippets.design.ts",
    "content": "import parseData from '../utils/parse-data';\nimport { createDataSource } from './adaptor';\n\nconst plainData =\n  '*1\\n\\t*1-1\\n\\t\\t1-1-1\\n\\t\\t1-1-2\\n\\t\\t1-1-3\\n\\t\\t1-1-4\\n\\t\\t*1-1-5\\n\\t1-2\\n\\t1-3\\n\\t1-4\\n\\t1-5\\n2\\n\\t2-1\\n\\t2-2\\n\\t2-3\\n\\t2-4\\n\\t2-5\\n3\\n\\t3-1\\n\\t3-2\\n\\t3-3\\n\\t3-4\\n\\t3-5\\n4\\n\\t4-1\\n\\t4-2\\n\\t4-3\\n\\t4-4\\n\\t4-5\\n5\\n\\t5-1\\n\\t5-2\\n\\t5-3\\n\\t5-4\\n\\t5-5';\nconst list = parseData(plainData).filter(({ type }) => 'node' === type);\nconst keys = { selected: [], expanded: [] };\nconst dataSource = createDataSource(list, keys);\n\nexport default [\n  {\n    title: '级联选择器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader-select.png',\n    schema: {\n      componentName: 'CascaderSelect',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n        hasArrow: true,\n        hasBorder: true,\n        expandTriggerType: 'click',\n        resultAutoWidth: true,\n        notFoundContent: 'Not Found',\n        plainData,\n        dataSource,\n        value: keys.selected,\n      },\n    },\n  },\n  {\n    title: '级联',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader.png',\n    schema: {\n      componentName: 'Cascader',\n      props: {\n        prefix: 'next-',\n        expandTriggerType: 'click',\n        plainData,\n        dataSource,\n        value: keys.selected,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/cascader-select/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '级联选择器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader-select.png',\n    schema: {\n      componentName: 'CascaderSelect',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n        hasArrow: true,\n        hasBorder: true,\n        expandTriggerType: 'click',\n        resultAutoWidth: true,\n        notFoundContent: 'Not Found',\n        dataSource: [\n          {\n            value: '2974',\n            label: '西安',\n            children: [\n              {\n                value: '2975',\n                label: '西安市',\n              },\n              {\n                value: '2976',\n                label: '高陵县',\n              },\n              {\n                value: '2977',\n                label: '蓝田县',\n              },\n            ],\n          },\n        ],\n      },\n    },\n  },\n  {\n    title: '级联',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader.png',\n    schema: {\n      componentName: 'Cascader',\n      props: {\n        prefix: 'next-',\n        expandTriggerType: 'click',\n        dataSource: [\n          {\n            value: '2974',\n            label: '西安',\n            children: [\n              {\n                value: '2975',\n                label: '西安市',\n              },\n              {\n                value: '2976',\n                label: '高陵县',\n              },\n              {\n                value: '2977',\n                label: '蓝田县',\n              },\n            ],\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/checkbox/meta.design.ts",
    "content": "import snippets from './snippets.design';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Checkbox',\n  title: '复选按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Checkbox',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n      description: 'ID',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '选中状态',\n    },\n    {\n      name: 'defaultChecked',\n      propType: 'bool',\n      description: '默认选中状态',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '禁用',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: 'label',\n    },\n    {\n      name: 'indeterminate',\n      propType: 'bool',\n      description: '中间状态',\n    },\n    {\n      name: 'defaultIndeterminate',\n      propType: 'bool',\n      description: '默认中间态',\n      defaultValue: false,\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['string'],\n      },\n      description: 'value',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'label',\n        title: '标题',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'value',\n        title: 'Value',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'indeterminate',\n        title: '半选状态',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'controlChecked',\n        display: 'block',\n        title: {\n          label: '外部控制选中',\n          tip: '外部控制选中后，选中状态需要开发者自己根据 onChange 回传的值重新设置给组件才能生效',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'checked',\n        title: '选中状态',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n        condition(target) {\n          return target.getProps().getPropValue('controlChecked') || false;\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange', 'onMouseEnter', 'onMouseLeave'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/checkbox/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Checkbox',\n  title: '复选按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Checkbox',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n      description: 'ID',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '选中状态',\n    },\n    {\n      name: 'defaultChecked',\n      propType: 'bool',\n      description: '默认选中状态',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '禁用',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: 'label',\n    },\n    {\n      name: 'indeterminate',\n      propType: 'bool',\n      description: '中间状态',\n    },\n    {\n      name: 'defaultIndeterminate',\n      propType: 'bool',\n      description: '默认中间态',\n      defaultValue: false,\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['string'],\n      },\n      description: 'value',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'label',\n        title: '标题',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'value',\n        title: 'Value',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'indeterminate',\n        title: '半选状态',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'controlChecked',\n        display: 'block',\n        title: {\n          label: '外部控制选中',\n          tip: '外部控制选中后，选中状态需要开发者自己根据 onChange 回传的值重新设置给组件才能生效',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'checked',\n        title: '选中状态',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n        condition(target) {\n          return target.parent.getPropValue('controlChecked') || false;\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange', 'onMouseEnter', 'onMouseLeave'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/checkbox/snippets.design.ts",
    "content": "export default [\n  {\n    title: '复选按钮组',\n    screenshot: 'https://img.alicdn.com/tfs/TB1EJN7uYY1gK0jSZTEXXXDQVXa-112-64.png',\n    schema: {\n      componentName: 'CheckboxGroup',\n      props: {\n        prefix: 'next-',\n        dataSource: [\n          {\n            label: '选项一',\n            value: '1',\n          },\n          {\n            label: '选项二',\n            value: '2',\n          },\n          {\n            label: '选项三',\n            value: '3',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/checkbox/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '复选按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_menu.png',\n    schema: {\n      componentName: 'Checkbox',\n      props: {\n        label: 'Check Option',\n      },\n    },\n  },\n  {\n    title: '复选按钮组',\n    screenshot: 'https://img.alicdn.com/tfs/TB1EJN7uYY1gK0jSZTEXXXDQVXa-112-64.png',\n    schema: {\n      componentName: 'CheckboxGroup',\n      props: {\n        prefix: 'next-',\n        dataSource: [\n          {\n            label: '选项一',\n            value: '1',\n          },\n          {\n            label: '选项二',\n            value: '2',\n          },\n          {\n            label: '选项三',\n            value: '3',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/checkbox-group/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'CheckboxGroup',\n  title: '复选按钮组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Checkbox',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '整体禁用',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n          'string',\n          'number',\n        ],\n      },\n      description: '被选中的值列表',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n          'string',\n          'number',\n        ],\n      },\n      description: '默认被选中的值列表',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时的事件\\n@param {Array} value 选中项列表\\n@param {Event} e Dom 事件对象',\n    },\n    {\n      name: 'itemDirection',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '子项目的排列方式\\n- hoz: 水平排列 (default)\\n- ver: 垂直排列',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'itemDirection',\n        title: '排列方式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '水平排列', value: 'hoz' },\n              { title: '垂直排列', value: 'ver' },\n            ],\n          },\n        },\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: '选项',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          {\n                            name: 'label',\n                            title: 'label',\n                            setter: 'StringSetter',\n                            important: true,\n                          },\n                          {\n                            name: 'value',\n                            title: 'value',\n                            setter: 'StringSetter',\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: {\n                      label: '选项一',\n                      value: '1',\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/checkbox-group/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CheckboxGroup',\n  title: '复选按钮组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Checkbox',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '整体禁用',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n          'string',\n          'number',\n        ],\n      },\n      description: '被选中的值列表',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n          'string',\n          'number',\n        ],\n      },\n      description: '默认被选中的值列表',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时的事件\\n@param {Array} value 选中项列表\\n@param {Event} e Dom 事件对象',\n    },\n    {\n      name: 'itemDirection',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '子项目的排列方式\\n- hoz: 水平排列 (default)\\n- ver: 垂直排列',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'itemDirection',\n        title: '排列方式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '水平排列', value: 'hoz' },\n              { title: '垂直排列', value: 'ver' },\n            ],\n          },\n        },\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'isPreview',\n        title: '预览态',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        defaultValue: '[]',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['JsonSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: '选项',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          {\n                            name: 'label',\n                            title: 'label',\n                            setter: 'StringSetter',\n                            supportVariable: true,\n                          },\n                          {\n                            name: 'value',\n                            title: 'value',\n                            setter: 'StringSetter',\n                            supportVariable: true,\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: {\n                      label: '选项一',\n                      value: '1',\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      // {\n      //   name: \"renderPreview\",\n      //   title: \"预览态模式下渲染的内容\",\n      //   display: \"block\",\n      //   setter: {\n      //     componentName: \"FunctionSetter\"\n      //   },\n      //   condition(target) {\n      //     return target.parent.getPropValue(\"isPreview\") || false;\n      //   }\n      // }\n    ],\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/checkbox-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'CheckboxItem',\n  title: '复选框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: 'CheckboxItem',\n  },\n  props: [\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '是否选中',\n      defaultValue: false,\n    },\n    {\n      name: 'indeterminate',\n      propType: 'bool',\n      description: '是否半选中',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中或取消选中触发的回调函数\\n@param {Boolean} checked 是否选中\\n@param {Object} event 选中事件对象',\n    },\n    {\n      name: 'helper',\n      propType: 'node',\n      description: '帮助文本',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Menu', 'SubMenu', 'Menu.Group', 'MenuButton'],\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/collapse/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport { parseData } from '../utils/parse-data';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Collapse',\n  title: '折叠面板',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Collapse',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'dataSource',\n      propType: 'array',\n      description: '使用数据模型构建',\n    },\n    {\n      name: 'defaultExpandedKeys',\n      propType: {\n        type: 'arrayOf',\n        value: 'string',\n      },\n      description: '默认展开keys',\n    },\n    {\n      name: 'expandedKeys',\n      propType: {\n        type: 'arrayOf',\n        value: 'string',\n      },\n      description: '受控展开keys',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n      description: '展开状态发升变化时候的回调',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '所有禁用',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '扩展class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '组件接受行内样式',\n    },\n    {\n      name: 'accordion',\n      propType: 'bool',\n      description: '手风琴模式，一次只能打开一个',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'disabled',\n        title: {\n          label: '状态',\n          tip: 'disabled | 是否禁用',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: false,\n              },\n              {\n                label: '禁用',\n                value: true,\n              },\n            ],\n          },\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '内容',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const list = parseData(value).filter((node) => node.type === 'node');\n          const defaultExpandedKeys: any[] = [];\n          const dataSource = list.map((item, index) => {\n            if (item.state === 'active') {\n              defaultExpandedKeys.push(`panel_${index}`);\n            }\n            return {\n              key: `panel_${index}`,\n              title: item.value,\n              content: item.children.map(({ type, value: v }) => (type === 'node' ? v : '')),\n              disabled: item.state === 'disabled',\n            };\n          });\n          target.parent.setPropValue('defaultExpandedKeys', defaultExpandedKeys);\n          target.parent.setPropValue('dataSource', dataSource);\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n            disableIcon: true,\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/collapse/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Collapse',\n  title: '折叠面板',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Collapse',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'dataSource',\n      propType: 'array',\n      description: '使用数据模型构建',\n    },\n    {\n      name: 'defaultExpandedKeys',\n      propType: {\n        type: 'arrayOf',\n        value: 'string',\n      },\n      description: '默认展开keys',\n    },\n    {\n      name: 'expandedKeys',\n      propType: {\n        type: 'arrayOf',\n        value: 'string',\n      },\n      description: '受控展开keys',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n      description: '展开状态发升变化时候的回调',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '所有禁用',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '扩展class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '组件接受行内样式',\n    },\n    {\n      name: 'accordion',\n      propType: 'bool',\n      description: '手风琴模式，一次只能打开一个',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'dataSource',\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['JsonSetter', 'ExpressionSetter'],\n            },\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/collapse/snippets.design.ts",
    "content": "import parseData from '../utils/parse-data';\n\nconst plainData =\n  '*Panel Header 1\\n\\tPeople always make mistakes, frustrated, nerve-racking, but cannot remain stagnant.\\nPanel Header 2\\n\\tPeople always make mistakes, frustrated, nerve-racking, but cannot remain stagnant.\\nPanel Header 3\\n\\tPeople always make mistakes, frustrated, nerve-racking, but cannot remain stagnant.\\n';\n\nconst list = parseData(plainData).filter((node) => 'node' === node.type);\nconst defaultExpandedKeys = [];\nconst dataSource = list.map((item, index) => {\n  if (item.state === 'active') {\n    defaultExpandedKeys.push(`panel_${index}`);\n  }\n  return {\n    key: `panel_${index}`,\n    title: item.value,\n    content: item.children.map(({ type, value }) => (type === 'node' ? value : '')),\n    disabled: item.state === 'disabled',\n  };\n});\n\nexport default [\n  {\n    title: '折叠面板',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_dialog.png',\n    schema: {\n      componentName: 'Collapse',\n      props: {\n        accordion: false,\n        plainData,\n        dataSource,\n        defaultExpandedKeys,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/collapse/view.tsx",
    "content": "import * as React from 'react';\nimport { Collapse } from '@alifd/next';\nimport { DynamicPropWrapper } from 'lowcode/utils/component-wrapper';\n\nexport default DynamicPropWrapper('expandedKeys', Collapse, 'Collapse');\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/collapse-panel/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Collapse.Panel',\n  title: '折叠面板Panel',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Collapse',\n    main: '',\n    destructuring: true,\n    subName: 'Panel',\n  },\n  props: [\n    {\n      name: 'children',\n      propType: 'any',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '子组件接受行内样式',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁止用户操作',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标题',\n    },\n  ],\n  configure: {\n    component: {\n      nestingRule: {\n        parentWhitelist: ['Collapse'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/date-picker/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'DatePicker',\n  title: '日期选择框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'name',\n      title: {\n        label: '名称',\n        tip: 'name|表单相关',\n      },\n      propType: 'string',\n      description: 'name|表单相关',\n    },\n    {\n      name: 'label',\n      title: {\n        label: '标签',\n        tip: 'label|输入框内置标签',\n      },\n      propType: 'string',\n      description: 'label|输入框内置标签',\n    },\n    {\n      name: 'state',\n      title: {\n        label: '状态',\n        tip: 'state|输入框状态',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: 'state|输入框状态',\n    },\n    {\n      name: 'placeholder',\n      title: {\n        label: '占位提示',\n        tip: 'placeholder|输入提示',\n      },\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'value',\n      title: {\n        label: 'value',\n        tip: 'value|日期值（受控）',\n      },\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      title: {\n        label: '默认值',\n        tip: 'defaultValue|初始日期值，moment 对象',\n      },\n      propType: 'date',\n      description: 'defaultValue|初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      title: {\n        label: '格式',\n        tip: 'format|日期值的格式（用于限定用户输入和展示）',\n      },\n      propType: 'string',\n      description: 'format|日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'onOk',\n      propType: 'func',\n      description: '点击确认按钮时的回调\\n@return {MomentObject|String} 日期值',\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: 'size|输入框尺寸',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: 'size|输入框尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      title: {\n        label: '是否禁用',\n        tip: 'disabled|是否禁用',\n      },\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      title: {\n        label: '清除按钮',\n        tip: 'hasClear|是否显示清空按钮',\n      },\n      propType: 'bool',\n      description: 'hasClear|是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '跟随滚动',\n    },\n    {\n      name: 'defaultVisible',\n      title: {\n        label: '弹层显示',\n        tip: 'defaultVisible|弹层默认是否显示',\n      },\n      propType: 'bool',\n      description: 'defaultVisible|弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'form',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'showTime',\n        title: '模式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '日期选择',\n                value: false,\n              },\n              {\n                label: '时间选择',\n                value: true,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'visible',\n        title: {\n          label: '状态',\n          tip: '属性: visible',\n        },\n        defaultValue: false,\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { value: false, label: '普通' },\n              { value: true, label: '展开' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: 'label|输入框内置标签',\n        },\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: 'placeholder|输入提示',\n        },\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: '是否禁用',\n          tip: 'disabled|是否禁用',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/date-picker/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'DatePicker',\n  title: '日期选择框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'name',\n      title: {\n        label: '名称',\n        tip: 'name|表单相关',\n      },\n      propType: 'string',\n      description: 'name|表单相关',\n    },\n    {\n      name: 'label',\n      title: {\n        label: '标签',\n        tip: 'label|输入框内置标签',\n      },\n      propType: 'string',\n      description: 'label|输入框内置标签',\n    },\n    {\n      name: 'state',\n      title: {\n        label: '状态',\n        tip: 'state|输入框状态',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: 'state|输入框状态',\n    },\n    {\n      name: 'placeholder',\n      title: {\n        label: '占位提示',\n        tip: 'placeholder|输入提示',\n      },\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'value',\n      title: {\n        label: 'value',\n        tip: 'value|日期值（受控）',\n      },\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      title: {\n        label: '默认值',\n        tip: 'defaultValue|初始日期值，moment 对象',\n      },\n      propType: 'date',\n      description: 'defaultValue|初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      title: {\n        label: '格式',\n        tip: 'format|日期值的格式（用于限定用户输入和展示）',\n      },\n      propType: 'string',\n      description: 'format|日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'onOk',\n      propType: 'func',\n      description: '点击确认按钮时的回调\\n@return {MomentObject|String} 日期值',\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: 'size|输入框尺寸',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: 'size|输入框尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      title: {\n        label: '是否禁用',\n        tip: 'disabled|是否禁用',\n      },\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      title: {\n        label: '清除按钮',\n        tip: 'hasClear|是否显示清空按钮',\n      },\n      propType: 'bool',\n      description: 'hasClear|是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '跟随滚动',\n    },\n    {\n      name: 'defaultVisible',\n      title: {\n        label: '弹层显示',\n        tip: 'defaultVisible|弹层默认是否显示',\n      },\n      propType: 'bool',\n      description: 'defaultVisible|弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'form',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'prefix',\n          condition: () => false,\n        },\n        {\n          name: 'rtl',\n          condition: () => false,\n        },\n        {\n          name: 'value',\n          condition: () => false,\n        },\n        {\n          name: 'name',\n          condition: () => false,\n        },\n        {\n          name: 'defaultValue',\n          title: {\n            label: '默认值',\n            tip: 'defaultValue|初始日期值，moment 对象',\n          },\n          setter: 'DateSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'form',\n          type: 'group',\n          title: '高级',\n          display: 'block',\n          items: [\n            {\n              name: 'id',\n              title: {\n                label: {\n                  type: 'i18n',\n                  zh_CN: '唯一标识',\n                  en_US: 'ID',\n                },\n                tip: {\n                  type: 'i18n',\n                  zh_CN: '属性: id | 说明: 唯一标识',\n                  en_US: 'prop: id | description: switch id',\n                },\n              },\n              setter: 'StringSetter',\n              supportVariable: true,\n            },\n            {\n              name: 'name',\n              title: {\n                label: {\n                  type: 'i18n',\n                  zh_CN: '表单标识',\n                  en_US: 'Name',\n                },\n                tip: {\n                  type: 'i18n',\n                  zh_CN: '属性: name | 说明: 表单标识',\n                  en_US: 'prop: name | description: switch name',\n                },\n              },\n              setter: 'StringSetter',\n              supportVariable: true,\n            },\n          ],\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/date-picker/snippets.ts",
    "content": "export default [\n  {\n    title: '日期选择框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_date-picker.png',\n    schema: {\n      componentName: 'DatePicker',\n      props: {\n        prefix: 'next-',\n        format: 'YYYY-MM-DD',\n        size: 'medium',\n        hasClear: false,\n        popupTriggerType: 'click',\n        popupAlign: 'tl tl',\n        followTrigger: true,\n      },\n    },\n  },\n  {\n    title: '日期区间',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_date-picker.png',\n    schema: {\n      componentName: 'RangePicker',\n      props: {\n        prefix: 'next-',\n        format: 'YYYY-MM-DD',\n        size: 'medium',\n        type: 'date',\n        hasClear: false,\n        popupTriggerType: 'click',\n        popupAlign: 'tl tl',\n        followTrigger: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/dialog/meta.design.ts",
    "content": "import snippets from './snippets.design';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Dialog',\n  title: '对话框',\n  docUrl: '',\n  screenshot: '',\n  keywords: ['弹窗', '模态'],\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Dialog',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'visible',\n      propType: {\n        type: 'oneOfType',\n        value: ['JSExpression', 'bool'],\n      },\n      description: '是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '标题',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'bool',\n          {\n            type: 'instanceOf',\n            value: 'node',\n          },\n        ],\n      },\n      description: '内容',\n    },\n    {\n      name: 'footer',\n      propType: {\n        type: 'oneOfType',\n        value: ['bool'],\n      },\n      description: '底部按钮',\n    },\n    {\n      name: 'footerAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'center', 'right'],\n      },\n      description: '操作对齐方式',\n      defaultValue: 'right',\n    },\n    {\n      name: 'closeable',\n      propType: {\n        type: 'oneOf',\n        value: ['close', 'mask', 'esc,close', 'close,esc,mask', 'esc'],\n      },\n      description: '关闭方式',\n      defaultValue: 'esc,close',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description:\n        '对话框关闭时触发的回调函数\\n@param {String} trigger 关闭触发行为的描述字符串\\n@param {Object} event 关闭时事件对象',\n    },\n    {\n      name: 'hasMask',\n      propType: 'bool',\n      description: '是否显示遮罩',\n      defaultValue: true,\n    },\n    {\n      name: 'animation',\n      propType: {\n        type: 'oneOfType',\n        value: ['object', 'bool'],\n      },\n      description:\n        '显示隐藏时动画的播放方式\\n@property {String} in 进场动画\\n@property {String} out 出场动画',\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '是否获得焦点',\n      defaultValue: false,\n    },\n    {\n      name: 'isFullScreen',\n      propType: 'bool',\n      description: '是否全屏',\n      defaultValue: false,\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      rootSelector: 'div.next-dialog',\n      nestingRule: {\n        parentWhitelist: ['Page'],\n      },\n    },\n    props: [\n      {\n        name: 'title',\n        title: '标题',\n        setter: 'StringSetter',\n        initialValue: '标题',\n      },\n      {\n        name: 'visible',\n        title: '是否显示',\n        setter: 'BoolSetter',\n        initialValue: false,\n      },\n      {\n        name: 'hasMask',\n        title: '显示遮罩',\n        setter: 'BoolSetter',\n        initialValue: true,\n      },\n      {\n        name: 'closeMode',\n        title: '关闭方式',\n        setter: {\n          componentName: 'SelectSetter',\n          mutiple: true,\n          props: {\n            options: [\n              {\n                title: '关闭按钮',\n                value: 'close',\n              },\n              {\n                title: '遮罩',\n                value: 'mask',\n              },\n              {\n                title: 'ESC',\n                value: 'esc',\n              },\n            ],\n          },\n        },\n        initialValue: ['esc', 'close'],\n      },\n      {\n        name: 'autoFocus',\n        title: '自动聚焦',\n        setter: 'BoolSetter',\n        initialValue: false,\n      },\n      {\n        name: 'buttons',\n        title: '底部按钮配置',\n        type: 'group',\n        extraProps: {\n          display: 'block',\n        },\n        items: [\n          {\n            name: 'footer',\n            title: '是否显示',\n            setter: 'BoolSetter',\n            initialValue: true,\n          },\n          {\n            name: 'footerAlign',\n            title: '对齐方式',\n            initialValue: 'right',\n            condition: (target) => {\n              return target.getProps().getPropValue('footer');\n            },\n            setter: {\n              componentName: 'RadioGroupSetter',\n              initialValue: 'right',\n              props: {\n                options: [\n                  {\n                    title: '左',\n                    value: 'left',\n                  },\n                  {\n                    title: '中',\n                    value: 'center',\n                  },\n                  {\n                    title: '右',\n                    value: 'right',\n                  },\n                ],\n              },\n            },\n          },\n          {\n            name: 'footerActions',\n            title: '排列方式',\n            initialValue: ['ok', 'cancel'],\n            condition: (target) => {\n              return target.getProps().getPropValue('footer');\n            },\n            setter: {\n              componentName: 'SelectSetter',\n              initialValue: ['ok', 'cancel'],\n              props: {\n                options: [\n                  {\n                    title: 'ok, cancel',\n                    value: ['ok', 'cancel'],\n                  },\n                  {\n                    title: 'cancel, ok',\n                    value: ['cancel', 'ok'],\n                  },\n                  {\n                    title: 'cancel',\n                    value: ['cancel'],\n                  },\n                  {\n                    title: 'ok',\n                    value: ['ok'],\n                  },\n                ],\n              },\n            },\n          },\n        ],\n      },\n    ],\n    supports: {\n      events: ['onOk', 'onCancel', 'onClose'],\n      style: true,\n    },\n    advanced: {\n      callbacks: {\n        // 与 next-page 的 onNodeAdd 一模一样\n        onNodeAdd: (dragment, currentNode) => {\n          // 拖入的组件为 P、Block、Slot（把NextPage拖入到面板里时，NextPage的Slot也会触发onNodeAdd事件） 时,不进行包裹\n          // 拖入的组件 isModal为true时（例如drawer dialog 这类有单独组件树结构的），不进行包裹\n          if (\n            !dragment ||\n            ['NextP', 'NextBlock', 'Slot'].includes(dragment.componentName) ||\n            (dragment.isModal && dragment.isModal())\n          ) {\n            console.log(\n              `[${dragment.componentName}] doesn\\'n need to wrap with NextBlock > NextBlockCell`,\n            );\n            return;\n          }\n\n          const NextPProps = {\n            wrap: false,\n            type: 'body2',\n            verAlign: 'middle',\n            textSpacing: true,\n            align: 'left',\n          };\n\n          if (\n            [\n              'Form',\n              'ResponsiveGrid',\n              'Box',\n              'Card',\n              'List',\n              'Message',\n              'Slider',\n              'NextTable',\n            ].includes(dragment.componentName) ||\n            dragment.getPropValue('isFillContainer')\n          ) {\n            NextPProps.full = true;\n          }\n          const layoutPSchema = {\n            componentName: 'NextP',\n            title: '段落',\n            props: NextPProps,\n            children: [dragment.exportSchema()],\n          };\n\n          // 为目标元素包裹一层 Block\n          const layoutBlockNode = (len) =>\n            currentNode.document.createNode({\n              componentName: 'NextBlock',\n              title: '区块',\n              props: {\n                childTotalColumns: len || 12,\n              },\n              children: [\n                {\n                  componentName: 'NextBlockCell',\n                  title: '子区块',\n                  props: {\n                    isAutoContainer: true,\n                    colSpan: 12,\n                    rowSpan: 1,\n                  },\n                  children: [layoutPSchema],\n                },\n              ],\n            });\n\n          const { dropLocation } = dragment.document.designer;\n\n          if (!dropLocation) {\n            // 没有 dropLocation 一般是 slot, slot 元素不用特殊处理 不做任何包裹\n            return;\n          }\n          const dropTarget = dropLocation.target;\n          const dropTargetName = dropLocation.target.componentName || '';\n\n          // 找到要拖入进去的节点 ID\n          const targetId = (dropLocation && dropLocation.target.id) || '';\n          // 找到要拖入进去的节点\n          const slotTarget =\n            currentNode.slots.length > 0 && currentNode.slots.find((item) => item.id === targetId);\n\n          const layoutPNode = currentNode.document.createNode(layoutPSchema);\n\n          // 是否为 aside slot\n          const isAsideSlot = slotTarget && ['aside'].indexOf(slotTarget._slotFor.key) > -1;\n          // 是否为需要被 P 包裹的 Slot\n          const isNeedPSlot =\n            slotTarget && ['header', 'footer', 'nav'].indexOf(slotTarget._slotFor.key) > -1;\n\n          const wrapWithBlock = (dragment, node, dropTargetName, blockLen) => {\n            setTimeout(() => {\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextBlock > NextBlockCell > NextP [from NextPage2]`,\n              );\n              const newNode = node.document.createNode(layoutBlockNode(blockLen).exportSchema());\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode\n                .getChildren()\n                .get(0)\n                .getChildren()\n                .get(0)\n                .getChildren()\n                .get(0)\n                .select();\n            }, 1);\n          };\n\n          const wrapWithP = (dragment, node, dropTargetName) => {\n            setTimeout(() => {\n              // const dragmentTarget = dropTarget;\n              // 要拖入的地方如果是 NextP 那就 不再自动包裹 P了\n              if (dropTargetName === 'NextP') {\n                console.log(\n                  `[${dragment.componentName}] to [${dropTargetName}] does't need to wrap with NextP. [from NextPage3]`,\n                );\n                return;\n              }\n\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextP [from NextPage3]`,\n              );\n              const newNode = node.document.createNode(Object.assign(layoutPNode.exportSchema()));\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode\n                .getChildren()\n                .get(0)\n                .select();\n            }, 1);\n          };\n\n          // 需要包裹 Block BlockCell P 的情况：\n          // 1. 组件拖入到 NextPage，的直接子元素下(不包括slot), 此时Block宽度为12\n          if (['NextPage'].includes(dropTargetName) && currentNode.getChildren().has(dragment)) {\n            wrapWithBlock(dragment, currentNode, dropTargetName, 12);\n\n            // 需要包裹 Block BlockCell P 的情况：\n            // 2. 组件拖入到 NextPage 的 aside slot, 的直接子元素下 （不包括slot下的进一步内容），此时Block宽度为1\n          } else if (isAsideSlot && slotTarget && slotTarget.getChildren().has(dragment)) {\n            wrapWithBlock(dragment, slotTarget, dropTargetName, 1);\n\n            // 需要包裹 P 的情况：\n            // 1. 如果是处于，开启了自然布局模式的容器组件中 (或者Tab里)\n            // 这里的Tab主要是给纪元epoch使用的，因为他们用到了 @ali/vc-deep 的TabLayout组件，没办法在这个组件上再增加属性 isAutoContainer\n          } else if (dropTarget.getPropValue('isAutoContainer') || dropTargetName === 'Tab.Item') {\n            wrapWithP(dragment, dropTarget, dropTargetName);\n\n            // 需要包裹 P 的情况：\n            // 2. 如果是处于，Page 的 nav header footer 中\n          } else if (isNeedPSlot && slotTarget) {\n            wrapWithP(dragment, slotTarget, dropTargetName);\n          }\n\n          // 其他维持原状，不进行其他设置\n        },\n      },\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/dialog/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Dialog',\n  title: '对话框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Dialog',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'visible',\n      propType: {\n        type: 'oneOfType',\n        value: ['JSExpression', 'bool'],\n      },\n      description: '是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '标题',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'bool',\n          {\n            type: 'instanceOf',\n            value: 'node',\n          },\n        ],\n      },\n      description: '内容',\n    },\n    {\n      name: 'footer',\n      propType: {\n        type: 'oneOfType',\n        value: ['bool'],\n      },\n      description: '底部按钮',\n    },\n    {\n      name: 'footerAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'center', 'right'],\n      },\n      description: '操作对齐方式',\n      defaultValue: 'right',\n    },\n    {\n      name: 'closeable',\n      propType: {\n        type: 'oneOf',\n        value: ['close', 'mask', 'esc,close', 'close,esc,mask', 'esc'],\n      },\n      description: '关闭方式',\n      defaultValue: 'esc,close',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description:\n        '对话框关闭时触发的回调函数\\n@param {String} trigger 关闭触发行为的描述字符串\\n@param {Object} event 关闭时事件对象',\n    },\n    {\n      name: 'hasMask',\n      propType: 'bool',\n      description: '是否显示遮罩',\n      defaultValue: true,\n    },\n    {\n      name: 'animation',\n      propType: {\n        type: 'oneOfType',\n        value: ['object', 'bool'],\n      },\n      description:\n        '显示隐藏时动画的播放方式\\n@property {String} in 进场动画\\n@property {String} out 出场动画',\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '是否获得焦点',\n      defaultValue: false,\n    },\n    {\n      name: 'isFullScreen',\n      propType: 'bool',\n      description: '是否全屏',\n      defaultValue: false,\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      rootSelector: 'div.next-dialog',\n      nestingRule: {\n        parentWhitelist: ['Page'],\n      },\n    },\n    props: [\n      {\n        name: 'title',\n        title: '标题',\n        setter: 'StringSetter',\n        supportVariable: true,\n        initialValue: '标题',\n      },\n      {\n        name: 'visible',\n        title: '是否显示',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        initialValue: false,\n      },\n      {\n        name: 'hasMask',\n        title: '显示遮罩',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        initialValue: true,\n      },\n      {\n        name: 'closeMode',\n        title: '关闭方式',\n        setter: {\n          componentName: 'SelectSetter',\n          mutiple: true,\n          props: {\n            options: [\n              {\n                title: 'close',\n                value: 'close',\n              },\n              {\n                title: 'mask',\n                value: 'mask',\n              },\n              {\n                title: 'esc',\n                value: 'esc',\n              },\n            ],\n          },\n        },\n        initialValue: ['esc', 'close'],\n      },\n      {\n        name: 'autoFocus',\n        title: '自动聚焦',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        initialValue: false,\n      },\n      {\n        name: 'buttons',\n        title: '底部按钮配置',\n        type: 'group',\n        extraProps: {\n          display: 'block',\n        },\n        items: [\n          {\n            name: 'footer',\n            title: '是否显示',\n            setter: 'BoolSetter',\n            supportVariable: true,\n            initialValue: true,\n          },\n          {\n            name: 'footerAlign',\n            title: '对齐方式',\n            initialValue: 'right',\n            condition: (target) => {\n              return target.parent.getPropValue('footer');\n            },\n            setter: {\n              componentName: 'RadioGroupSetter',\n              initialValue: 'right',\n              props: {\n                options: [\n                  {\n                    title: 'left',\n                    value: 'left',\n                  },\n                  {\n                    title: 'center',\n                    value: 'center',\n                  },\n                  {\n                    title: 'right',\n                    value: 'right',\n                  },\n                ],\n              },\n            },\n          },\n          {\n            name: 'footerActions',\n            title: '排列方式',\n            initialValue: ['ok', 'cancel'],\n            condition: (target) => {\n              return target.parent.getPropValue('footer');\n            },\n            setter: {\n              componentName: 'SelectSetter',\n              initialValue: ['ok', 'cancel'],\n              props: {\n                options: [\n                  {\n                    title: 'ok, cancel',\n                    value: ['ok', 'cancel'],\n                  },\n                  {\n                    title: 'cancel, ok',\n                    value: ['cancel', 'ok'],\n                  },\n                  {\n                    title: 'cancel',\n                    value: ['cancel'],\n                  },\n                  {\n                    title: 'ok',\n                    value: ['ok'],\n                  },\n                ],\n              },\n            },\n          },\n        ],\n      },\n    ],\n    supports: {\n      events: ['onOk', 'onCancel', 'onClose'],\n      style: true,\n    },\n    advanced: {\n      callbacks: {\n        // 与 next-page 的 onNodeAdd 一模一样\n        onNodeAdd: (dragment, currentNode) => {\n          // 拖入的组件为 P、Block、Slot（把NextPage拖入到面板里时，NextPage的Slot也会触发onNodeAdd事件） 时,不进行包裹\n          // 拖入的组件 isModal为true时（例如drawer dialog 这类有单独组件树结构的），不进行包裹\n          if (\n            !dragment ||\n            ['NextP', 'NextBlock', 'Slot'].includes(dragment.componentName) ||\n            (dragment.componentMeta.isModal && dragment.componentMeta.isModal())\n          ) {\n            console.log(\n              `[${dragment.componentName}] doesn\\'n need to wrap with NextBlock > NextBlockCell`,\n            );\n            return;\n          }\n\n          const NextPProps = {\n            wrap: false,\n            type: 'body2',\n            verAlign: 'middle',\n            textSpacing: true,\n            align: 'left',\n          };\n\n          if (\n            [\n              'Form',\n              'ResponsiveGrid',\n              'Box',\n              'Card',\n              'List',\n              'Message',\n              'Slider',\n              'NextTable',\n            ].includes(dragment.componentName) ||\n            dragment.getPropValue('isFillContainer')\n          ) {\n            NextPProps.full = true;\n          }\n          const layoutPSchema = {\n            componentName: 'NextP',\n            title: '段落',\n            props: NextPProps,\n            children: [dragment.exportSchema()],\n          };\n\n          // 为目标元素包裹一层 Block\n          const layoutBlockNode = (len) =>\n            currentNode.document.createNode({\n              componentName: 'NextBlock',\n              title: '区块',\n              props: {\n                childTotalColumns: len || 12,\n              },\n              children: [\n                {\n                  componentName: 'NextBlockCell',\n                  title: '子区块',\n                  props: {\n                    isAutoContainer: true,\n                    colSpan: 12,\n                    rowSpan: 1,\n                  },\n                  children: [layoutPSchema],\n                },\n              ],\n            });\n\n          const dropLocation = dragment.document.canvas.dropLocation;\n\n          if (!dropLocation) {\n            // 没有 dropLocation 一般是 slot, slot 元素不用特殊处理 不做任何包裹\n            return;\n          }\n          const dropTarget = dropLocation.target;\n          const dropTargetName = dropLocation.target.componentName || '';\n\n          // 找到要拖入进去的节点 ID\n          const targetId = (dropLocation && dropLocation.target.id) || '';\n          // 找到要拖入进去的节点\n          let slotTarget =\n            currentNode.slots.length > 0 && currentNode.slots.find((item) => item.id === targetId);\n\n          const layoutPNode = currentNode.document.createNode(layoutPSchema);\n\n          // 是否为 aside slot\n          const isAsideSlot = slotTarget && ['aside'].indexOf(slotTarget._slotFor.key) > -1;\n          // 是否为需要被 P 包裹的 Slot\n          const isNeedPSlot =\n            slotTarget && ['header', 'footer', 'nav'].indexOf(slotTarget._slotFor.key) > -1;\n\n          const wrapWithBlock = (dragment, node, dropTargetName, blockLen) => {\n            setTimeout(() => {\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextBlock > NextBlockCell > NextP [from NextPage2]`,\n              );\n              const newNode = node.document.createNode(layoutBlockNode(blockLen).exportSchema());\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode.children.get(0).children.get(0).children.get(0).select();\n            }, 1);\n          };\n\n          const wrapWithP = (dragment, node, dropTargetName) => {\n            setTimeout(() => {\n              // const dragmentTarget = dropTarget;\n              // 要拖入的地方如果是 NextP 那就 不再自动包裹 P了\n              if (dropTargetName === 'NextP') {\n                console.log(\n                  `[${dragment.componentName}] to [${dropTargetName}] does't need to wrap with NextP. [from NextPage3]`,\n                );\n                return;\n              }\n\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextP [from NextPage3]`,\n              );\n              const newNode = node.document.createNode(Object.assign(layoutPNode.exportSchema()));\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode.children.get(0).select();\n            }, 1);\n          };\n\n          // 需要包裹 Block BlockCell P 的情况：\n          // 1. 组件拖入到 NextPage，的直接子元素下(不包括slot), 此时Block宽度为12\n          if (['NextPage'].includes(dropTargetName) && currentNode.children.has(dragment)) {\n            wrapWithBlock(dragment, currentNode, dropTargetName, 12);\n\n            // 需要包裹 Block BlockCell P 的情况：\n            // 2. 组件拖入到 NextPage 的 aside slot, 的直接子元素下 （不包括slot下的进一步内容），此时Block宽度为1\n          } else if (isAsideSlot && slotTarget && slotTarget.children.has(dragment)) {\n            wrapWithBlock(dragment, slotTarget, dropTargetName, 1);\n\n            // 需要包裹 P 的情况：\n            // 1. 如果是处于，开启了自然布局模式的容器组件中 (或者Tab里)\n            // 这里的Tab主要是给纪元epoch使用的，因为他们用到了 @ali/vc-deep 的TabLayout组件，没办法在这个组件上再增加属性 isAutoContainer\n          } else if (dropTarget.getPropValue('isAutoContainer') || dropTargetName === 'Tab.Item') {\n            wrapWithP(dragment, dropTarget, dropTargetName);\n\n            // 需要包裹 P 的情况：\n            // 2. 如果是处于，Page 的 nav header footer 中\n          } else if (isNeedPSlot && slotTarget) {\n            wrapWithP(dragment, slotTarget, dropTargetName);\n          }\n\n          // 其他维持原状，不进行其他设置\n        },\n      },\n    },\n  },\n  icon: '',\n  category: '布局容器类',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/dialog/snippets.design.ts",
    "content": "export default [\n  {\n    title: '对话框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_dialog.png',\n    schema: {\n      componentName: 'Dialog',\n      props: {\n        prefix: 'next-',\n        footerAlign: 'right',\n        title: 'Title',\n        footer: true,\n        footerActions: ['ok', 'cancel'],\n        closeable: 'esc,close',\n        hasMask: true,\n        align: 'cc cc',\n        minMargin: 40,\n        isAutoContainer: true,\n        visible: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/dialog/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '对话框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_dialog.png',\n    schema: {\n      componentName: 'Dialog',\n      props: {\n        prefix: 'next-',\n        footerAlign: 'right',\n        title: 'Title',\n        footer: true,\n        footerActions: ['ok', 'cancel'],\n        closeable: 'esc,close',\n        hasMask: true,\n        align: 'cc cc',\n        minMargin: 40,\n        isAutoContainer: true,\n        visible: true,\n      },\n    },\n  },\n  {\n    title: '隐藏底部',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_dialog.png',\n    schema: {\n      componentName: 'Dialog',\n      props: {\n        prefix: 'next-',\n        footerAlign: 'right',\n        title: 'Title',\n        footer: false,\n        closeable: 'esc,close',\n        hasMask: true,\n        align: 'cc cc',\n        minMargin: 40,\n        isAutoContainer: true,\n        visible: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/div/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Div',\n  title: 'Div',\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/divider/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Divider',\n  title: '分隔符',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Divider',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'children',\n      propType: 'string',\n      description: '文案',\n      defaultValue: '分隔符',\n    },\n    {\n      name: 'dashed',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否虚线',\n          en_US: 'Dashed',\n        },\n      },\n      propType: {\n        type: 'bool',\n      },\n      description: '是否为虚线',\n      defaultValue: false,\n    },\n    {\n      name: 'direction',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '朝向',\n          en_US: 'Direction',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '线是水平还是垂直类型',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'orientation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标题位置',\n          en_US: 'Orientation',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'right', 'center'],\n      },\n      description: '分割线标题的位置',\n      defaultValue: 'center',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'direction',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '方向',\n            en_US: 'Direction',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '水平',\n                value: 'hoz',\n              },\n              {\n                label: '垂直',\n                value: 'ver',\n              },\n            ],\n          },\n        },\n        setValue: (target, value) => {\n          if (value === 'ver') {\n            target.parent.setPropValue('children', '');\n          }\n        },\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'children',\n        setter: 'StringSetter',\n        title: '文本内容',\n        defaultValue: '分隔符',\n        condition: (target) => target?.parent?.getPropValue?.('direction') !== 'ver',\n      },\n      {\n        name: 'orientation',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '对齐方式',\n            en_US: 'Orientation',\n          },\n        },\n        condition: (target) => target?.parent?.getPropValue?.('direction') !== 'ver',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '居中',\n                value: 'center',\n              },\n              {\n                label: '居左',\n                value: 'left',\n              },\n              {\n                label: '居右',\n                value: 'right',\n              },\n            ],\n          },\n        },\n        defaultValue: 'center',\n      },\n      {\n        name: 'dashed',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '样式',\n            en_US: 'Dashed',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '实线',\n                value: false,\n              },\n              {\n                label: '虚线',\n                value: true,\n              },\n            ],\n          },\n        },\n        defaultValue: true,\n      },\n    ],\n  },\n  icon: '',\n  category: '通用',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/divider/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Divider',\n  title: '分隔符',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Divider',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'children',\n      propType: 'string',\n      description: '文案',\n      defaultValue: '分隔符',\n    },\n    {\n      name: 'dashed',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否虚线',\n          en_US: 'Dashed',\n        },\n      },\n      propType: {\n        type: 'bool',\n      },\n      description: '是否为虚线',\n      defaultValue: false,\n    },\n    {\n      name: 'direction',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '朝向',\n          en_US: 'Direction',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '线是水平还是垂直类型',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'orientation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标题位置',\n          en_US: 'Orientation',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'right', 'center'],\n      },\n      description: '分割线标题的位置',\n      defaultValue: 'center',\n    },\n  ],\n  icon: '',\n  category: '通用',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/divider/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '分隔线',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_divider.png',\n    schema: {\n      componentName: 'Divider',\n      props: {\n        prefix: 'next-',\n        direction: 'hoz',\n        orientation: 'center',\n        children: '分隔符',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/drawer/meta.design.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Drawer',\n  title: '抽屉',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Drawer',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'prefix',\n      title: {\n        type: 'i18n',\n        zh_CN: '前缀',\n        en_US: 'prefix',\n      },\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'width',\n      title: {\n        type: 'i18n',\n        zh_CN: '宽度',\n        en_US: 'width',\n        tip: 'width|仅在 placement是 left right 的时候生效',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['number', 'string'],\n      },\n      description: '宽度，仅在 placement是 left right 的时候生效',\n    },\n    {\n      name: 'height',\n      title: {\n        type: 'i18n',\n        zh_CN: '高度',\n        en_US: 'height',\n        tip: 'height|仅在 placement是 top bottom 的时候生效',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['number', 'string'],\n      },\n      description: '高度，仅在 placement是 top bottom 的时候生效',\n    },\n    {\n      name: 'placement',\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'right', 'bottom', 'left'],\n      },\n      description: '位于页面的位置',\n      defaultValue: 'right',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '标题',\n    },\n    {\n      name: 'headerStyle',\n      propType: 'object',\n      description: 'header上的样式',\n    },\n    {\n      name: 'bodyStyle',\n      propType: 'object',\n      description: 'body上的样式',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '是否显示',\n    },\n    {\n      name: 'hasMask',\n      propType: 'bool',\n      description: '是否显示遮罩',\n      defaultValue: true,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: '动画',\n        tip: 'animation',\n      },\n      propType: 'bool',\n      description:\n        '显示隐藏时动画的播放方式\\n@property {String} in 进场动画\\n@property {String} out 出场动画',\n    },\n    {\n      name: 'closeable',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'bool'],\n      },\n      description:\n        \"控制对话框关闭的方式，值可以为字符串或者布尔值，其中字符串是由以下值组成：\\n**close** 表示点击关闭按钮可以关闭对话框\\n**mask** 表示点击遮罩区域可以关闭对话框\\n**esc** 表示按下 esc 键可以关闭对话框\\n如 'close' 或 'close,esc,mask'\\n如果设置为 true，则以上关闭方式全部生效\\n如果设置为 false，则以上关闭方式全部失效\",\n      defaultValue: true,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description:\n        '对话框关闭时触发的回调函数\\n@param {String} trigger 关闭触发行为的描述字符串\\n@param {Object} event 关闭时事件对象',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      rootSelector: '.next-drawer',\n      nestingRule: {\n        parentWhitelist: (testNode, currentNode) => {\n          return testNode.componentName === 'Page';\n        },\n      },\n    },\n    props: [\n      {\n        name: 'title',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标题',\n            en_US: 'Title',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: title | 说明: 标题',\n            en_US: 'prop: title | description: title',\n          },\n        },\n        setter: {\n          componentName: 'StringSetter',\n        },\n        description: '标题',\n      },\n      {\n        name: 'width',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '宽度',\n            en_US: 'width',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: width | 说明: 宽度',\n            en_US: 'prop: width | description: 仅在 placement是 left right 的时候生效',\n          },\n        },\n        setter: {\n          componentName: 'NumberSetter',\n        },\n        description: '宽度，仅在 placement是 left right 的时候生效',\n      },\n      {\n        name: 'height',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '高度',\n            en_US: 'height',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: height | 说明: 高度',\n            en_US: 'prop: height | description: 仅在 placement是 top bottom 的时候生效',\n          },\n        },\n        setter: {\n          componentName: 'NumberSetter',\n        },\n        description: '高度，仅在 placement是 top bottom 的时候生效',\n      },\n      {\n        name: 'placement',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '弹出位置',\n            en_US: 'height',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: placement | 说明: 位于页面的位置',\n            en_US: 'prop: placement | description: drawer placement',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['top', 'right', 'bottom', 'left'],\n          },\n        },\n        description: '位于页面的位置',\n        defaultValue: 'right',\n      },\n      {\n        name: 'visible',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否显示',\n            en_US: 'visible',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: visible | 说明: 是否显示',\n            en_US: 'prop: visible | description: drawer visible',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否显示',\n      },\n      {\n        name: 'hasMask',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示遮罩',\n            en_US: 'hasMask',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasMask | 说明: 是否显示遮罩',\n            en_US: 'prop: hasMask | description: drawer hasMask',\n          },\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description: '是否显示遮罩',\n        defaultValue: true,\n      },\n      {\n        name: 'closeable',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示遮罩',\n            en_US: 'closeable',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN:\n              \"属性: closeable | 说明: 控制对话框关闭的方式，值可以为字符串或者布尔值，其中字符串是由以下值组成：\\n**close** 表示点击关闭按钮可以关闭对话框\\n**mask** 表示点击遮罩区域可以关闭对话框\\n**esc** 表示按下 esc 键可以关闭对话框\\n如 'close' 或 'close,esc,mask'\\n如果设置为 true，则以上关闭方式全部生效\\n如果设置为 false，则以上关闭方式全部失效\",\n            en_US: 'prop: closeable | description: drawer closeable',\n          },\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description:\n          \"控制对话框关闭的方式，值可以为字符串或者布尔值，其中字符串是由以下值组成：\\n**close** 表示点击关闭按钮可以关闭对话框\\n**mask** 表示点击遮罩区域可以关闭对话框\\n**esc** 表示按下 esc 键可以关闭对话框\\n如 'close' 或 'close,esc,mask'\\n如果设置为 true，则以上关闭方式全部生效\\n如果设置为 false，则以上关闭方式全部失效\",\n        defaultValue: true,\n      },\n    ],\n    advanced: {\n      callbacks: {\n        // 与 next-page 的 onNodeAdd 一模一样\n        onNodeAdd: (dragment, currentNode) => {\n          // 拖入的组件为 P、Block、Slot（把NextPage拖入到面板里时，NextPage的Slot也会触发onNodeAdd事件） 时,不进行包裹\n          // 拖入的组件 isModal为true时（例如drawer dialog 这类有单独组件树结构的），不进行包裹\n          if (\n            !dragment ||\n            ['NextP', 'NextBlock', 'Slot'].includes(dragment.componentName) ||\n            (dragment.isModal && dragment.isModal())\n          ) {\n            console.log(\n              `[${dragment.componentName}] doesn\\'n need to wrap with NextBlock > NextBlockCell`,\n            );\n            return;\n          }\n\n          const NextPProps = {\n            wrap: false,\n            type: 'body2',\n            verAlign: 'middle',\n            textSpacing: true,\n            align: 'left',\n          };\n\n          if (\n            [\n              'Form',\n              'ResponsiveGrid',\n              'Box',\n              'Card',\n              'List',\n              'Message',\n              'Slider',\n              'NextTable',\n            ].includes(dragment.componentName) ||\n            dragment.getPropValue('isFillContainer')\n          ) {\n            NextPProps.full = true;\n          }\n          const layoutPSchema = {\n            componentName: 'NextP',\n            title: '段落',\n            props: NextPProps,\n            children: [dragment.exportSchema()],\n          };\n\n          // 为目标元素包裹一层 Block\n          const layoutBlockNode = (len) =>\n            currentNode.document.createNode({\n              componentName: 'NextBlock',\n              title: '区块',\n              props: {\n                childTotalColumns: len || 12,\n              },\n              children: [\n                {\n                  componentName: 'NextBlockCell',\n                  title: '子区块',\n                  props: {\n                    isAutoContainer: true,\n                    colSpan: 12,\n                    rowSpan: 1,\n                  },\n                  children: [layoutPSchema],\n                },\n              ],\n            });\n\n          const { dropLocation } = dragment.document.designer;\n\n          if (!dropLocation) {\n            // 没有 dropLocation 一般是 slot, slot 元素不用特殊处理 不做任何包裹\n            return;\n          }\n          const dropTarget = dropLocation.target;\n          const dropTargetName = dropLocation.target.componentName || '';\n\n          // 找到要拖入进去的节点 ID\n          const targetId = (dropLocation && dropLocation.target.id) || '';\n          // 找到要拖入进去的节点\n          const slotTarget =\n            currentNode.slots.length > 0 && currentNode.slots.find((item) => item.id === targetId);\n\n          const layoutPNode = currentNode.document.createNode(layoutPSchema);\n\n          // 是否为 aside slot\n          const isAsideSlot = slotTarget && ['aside'].indexOf(slotTarget._slotFor.key) > -1;\n          // 是否为需要被 P 包裹的 Slot\n          const isNeedPSlot =\n            slotTarget && ['header', 'footer', 'nav'].indexOf(slotTarget._slotFor.key) > -1;\n\n          const wrapWithBlock = (dragment, node, dropTargetName, blockLen) => {\n            setTimeout(() => {\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextBlock > NextBlockCell > NextP [from NextPage2]`,\n              );\n              const newNode = node.document.createNode(layoutBlockNode(blockLen).exportSchema());\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode\n                .getChildren()\n                .get(0)\n                .getChildren()\n                .get(0)\n                .getChildren()\n                .get(0)\n                .select();\n            }, 1);\n          };\n\n          const wrapWithP = (dragment, node, dropTargetName) => {\n            setTimeout(() => {\n              // const dragmentTarget = dropTarget;\n              // 要拖入的地方如果是 NextP 那就 不再自动包裹 P了\n              if (dropTargetName === 'NextP') {\n                console.log(\n                  `[${dragment.componentName}] to [${dropTargetName}] does't need to wrap with NextP. [from NextPage3]`,\n                );\n                return;\n              }\n\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextP [from NextPage3]`,\n              );\n              const newNode = node.document.createNode(Object.assign(layoutPNode.exportSchema()));\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode\n                .getChildren()\n                .get(0)\n                .select();\n            }, 1);\n          };\n\n          // 需要包裹 Block BlockCell P 的情况：\n          // 1. 组件拖入到 NextPage，的直接子元素下(不包括slot), 此时Block宽度为12\n          if (['NextPage'].includes(dropTargetName) && currentNode.getChildren().has(dragment)) {\n            wrapWithBlock(dragment, currentNode, dropTargetName, 12);\n\n            // 需要包裹 Block BlockCell P 的情况：\n            // 2. 组件拖入到 NextPage 的 aside slot, 的直接子元素下 （不包括slot下的进一步内容），此时Block宽度为1\n          } else if (isAsideSlot && slotTarget && slotTarget.getChildren().has(dragment)) {\n            wrapWithBlock(dragment, slotTarget, dropTargetName, 1);\n\n            // 需要包裹 P 的情况：\n            // 1. 如果是处于，开启了自然布局模式的容器组件中 (或者Tab里)\n            // 这里的Tab主要是给纪元epoch使用的，因为他们用到了 @ali/vc-deep 的TabLayout组件，没办法在这个组件上再增加属性 isAutoContainer\n          } else if (dropTarget.getPropValue('isAutoContainer') || dropTargetName === 'Tab.Item') {\n            wrapWithP(dragment, dropTarget, dropTargetName);\n\n            // 需要包裹 P 的情况：\n            // 2. 如果是处于，Page 的 nav header footer 中\n          } else if (isNeedPSlot && slotTarget) {\n            wrapWithP(dragment, slotTarget, dropTargetName);\n          }\n\n          // 其他维持原状，不进行其他设置\n        },\n      },\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets: require('./snippets.design'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/drawer/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Drawer',\n  title: '抽屉',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Drawer',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'prefix',\n      title: {\n        type: 'i18n',\n        zh_CN: '前缀',\n        en_US: 'prefix',\n      },\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'width',\n      title: {\n        type: 'i18n',\n        zh_CN: '宽度',\n        en_US: 'width',\n        tip: 'width|仅在 placement是 left right 的时候生效',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['number', 'string'],\n      },\n      description: '宽度，仅在 placement是 left right 的时候生效',\n    },\n    {\n      name: 'height',\n      title: {\n        type: 'i18n',\n        zh_CN: '高度',\n        en_US: 'height',\n        tip: 'height|仅在 placement是 top bottom 的时候生效',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['number', 'string'],\n      },\n      description: '高度，仅在 placement是 top bottom 的时候生效',\n    },\n    {\n      name: 'placement',\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'right', 'bottom', 'left'],\n      },\n      description: '位于页面的位置',\n      defaultValue: 'right',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '标题',\n    },\n    {\n      name: 'headerStyle',\n      propType: 'object',\n      description: 'header上的样式',\n    },\n    {\n      name: 'bodyStyle',\n      propType: 'object',\n      description: 'body上的样式',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '是否显示',\n    },\n    {\n      name: 'hasMask',\n      propType: 'bool',\n      description: '是否显示遮罩',\n      defaultValue: true,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: '动画',\n        tip: 'animation',\n      },\n      propType: 'bool',\n      description:\n        '显示隐藏时动画的播放方式\\n@property {String} in 进场动画\\n@property {String} out 出场动画',\n    },\n    {\n      name: 'closeable',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'bool'],\n      },\n      description:\n        \"控制对话框关闭的方式，值可以为字符串或者布尔值，其中字符串是由以下值组成：\\n**close** 表示点击关闭按钮可以关闭对话框\\n**mask** 表示点击遮罩区域可以关闭对话框\\n**esc** 表示按下 esc 键可以关闭对话框\\n如 'close' 或 'close,esc,mask'\\n如果设置为 true，则以上关闭方式全部生效\\n如果设置为 false，则以上关闭方式全部失效\",\n      defaultValue: true,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description:\n        '对话框关闭时触发的回调函数\\n@param {String} trigger 关闭触发行为的描述字符串\\n@param {Object} event 关闭时事件对象',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      rootSelector: '.next-drawer',\n      nestingRule: {\n        parentWhitelist: (testNode, currentNode) => {\n          return testNode.componentName === 'Page';\n        },\n      },\n    },\n    props: [\n      {\n        name: 'title',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标题',\n            en_US: 'Title',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: title | 说明: 标题',\n            en_US: 'prop: title | description: title',\n          },\n        },\n        setter: {\n          componentName: 'StringSetter',\n        },\n        description: '标题',\n      },\n      {\n        name: 'width',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '宽度',\n            en_US: 'width',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: width | 说明: 宽度',\n            en_US: 'prop: width | description: 仅在 placement是 left right 的时候生效',\n          },\n        },\n        setter: {\n          componentName: 'NumberSetter',\n        },\n        description: '宽度，仅在 placement是 left right 的时候生效',\n      },\n      {\n        name: 'height',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '高度',\n            en_US: 'height',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: height | 说明: 高度',\n            en_US: 'prop: height | description: 仅在 placement是 top bottom 的时候生效',\n          },\n        },\n        setter: {\n          componentName: 'NumberSetter',\n        },\n        description: '高度，仅在 placement是 top bottom 的时候生效',\n      },\n      {\n        name: 'placement',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '弹出位置',\n            en_US: 'height',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: placement | 说明: 位于页面的位置',\n            en_US: 'prop: placement | description: drawer placement',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['top', 'right', 'bottom', 'left'],\n          },\n        },\n        description: '位于页面的位置',\n        defaultValue: 'right',\n      },\n      {\n        name: 'visible',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否显示',\n            en_US: 'visible',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: visible | 说明: 是否显示',\n            en_US: 'prop: visible | description: drawer visible',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否显示',\n      },\n      {\n        name: 'hasMask',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示遮罩',\n            en_US: 'hasMask',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasMask | 说明: 是否显示遮罩',\n            en_US: 'prop: hasMask | description: drawer hasMask',\n          },\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description: '是否显示遮罩',\n        defaultValue: true,\n      },\n      {\n        name: 'closeable',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示遮罩',\n            en_US: 'closeable',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN:\n              \"属性: closeable | 说明: 控制对话框关闭的方式，值可以为字符串或者布尔值，其中字符串是由以下值组成：\\n**close** 表示点击关闭按钮可以关闭对话框\\n**mask** 表示点击遮罩区域可以关闭对话框\\n**esc** 表示按下 esc 键可以关闭对话框\\n如 'close' 或 'close,esc,mask'\\n如果设置为 true，则以上关闭方式全部生效\\n如果设置为 false，则以上关闭方式全部失效\",\n            en_US: 'prop: closeable | description: drawer closeable',\n          },\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description:\n          \"控制对话框关闭的方式，值可以为字符串或者布尔值，其中字符串是由以下值组成：\\n**close** 表示点击关闭按钮可以关闭对话框\\n**mask** 表示点击遮罩区域可以关闭对话框\\n**esc** 表示按下 esc 键可以关闭对话框\\n如 'close' 或 'close,esc,mask'\\n如果设置为 true，则以上关闭方式全部生效\\n如果设置为 false，则以上关闭方式全部失效\",\n        defaultValue: true,\n      },\n    ],\n    advanced: {\n      callbacks: {\n        // 与 next-page 的 onNodeAdd 一模一样\n        onNodeAdd: (dragment, currentNode) => {\n          // 拖入的组件为 P、Block、Slot（把NextPage拖入到面板里时，NextPage的Slot也会触发onNodeAdd事件） 时,不进行包裹\n          // 拖入的组件 isModal为true时（例如drawer dialog 这类有单独组件树结构的），不进行包裹\n          if (\n            !dragment ||\n            ['NextP', 'NextBlock', 'Slot'].includes(dragment.componentName) ||\n            (dragment.componentMeta.isModal && dragment.componentMeta.isModal())\n          ) {\n            console.log(\n              `[${dragment.componentName}] doesn\\'n need to wrap with NextBlock > NextBlockCell`,\n            );\n            return;\n          }\n\n          const NextPProps = {\n            wrap: false,\n            type: 'body2',\n            verAlign: 'middle',\n            textSpacing: true,\n            align: 'left',\n          };\n\n          if (\n            [\n              'Form',\n              'ResponsiveGrid',\n              'Box',\n              'Card',\n              'List',\n              'Message',\n              'Slider',\n              'NextTable',\n            ].includes(dragment.componentName) ||\n            dragment.getPropValue('isFillContainer')\n          ) {\n            NextPProps.full = true;\n          }\n          const layoutPSchema = {\n            componentName: 'NextP',\n            title: '段落',\n            props: NextPProps,\n            children: [dragment.exportSchema()],\n          };\n\n          // 为目标元素包裹一层 Block\n          const layoutBlockNode = (len) =>\n            currentNode.document.createNode({\n              componentName: 'NextBlock',\n              title: '区块',\n              props: {\n                childTotalColumns: len || 12,\n              },\n              children: [\n                {\n                  componentName: 'NextBlockCell',\n                  title: '子区块',\n                  props: {\n                    isAutoContainer: true,\n                    colSpan: 12,\n                    rowSpan: 1,\n                  },\n                  children: [layoutPSchema],\n                },\n              ],\n            });\n\n          const dropLocation = dragment.document.canvas.dropLocation;\n\n          if (!dropLocation) {\n            // 没有 dropLocation 一般是 slot, slot 元素不用特殊处理 不做任何包裹\n            return;\n          }\n          const dropTarget = dropLocation.target;\n          const dropTargetName = dropLocation.target.componentName || '';\n\n          // 找到要拖入进去的节点 ID\n          const targetId = (dropLocation && dropLocation.target.id) || '';\n          // 找到要拖入进去的节点\n          let slotTarget =\n            currentNode.slots.length > 0 && currentNode.slots.find((item) => item.id === targetId);\n\n          const layoutPNode = currentNode.document.createNode(layoutPSchema);\n\n          // 是否为 aside slot\n          const isAsideSlot = slotTarget && ['aside'].indexOf(slotTarget._slotFor.key) > -1;\n          // 是否为需要被 P 包裹的 Slot\n          const isNeedPSlot =\n            slotTarget && ['header', 'footer', 'nav'].indexOf(slotTarget._slotFor.key) > -1;\n\n          const wrapWithBlock = (dragment, node, dropTargetName, blockLen) => {\n            setTimeout(() => {\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextBlock > NextBlockCell > NextP [from NextPage2]`,\n              );\n              const newNode = node.document.createNode(layoutBlockNode(blockLen).exportSchema());\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode.children.get(0).children.get(0).children.get(0).select();\n            }, 1);\n          };\n\n          const wrapWithP = (dragment, node, dropTargetName) => {\n            setTimeout(() => {\n              // const dragmentTarget = dropTarget;\n              // 要拖入的地方如果是 NextP 那就 不再自动包裹 P了\n              if (dropTargetName === 'NextP') {\n                console.log(\n                  `[${dragment.componentName}] to [${dropTargetName}] does't need to wrap with NextP. [from NextPage3]`,\n                );\n                return;\n              }\n\n              console.log(\n                `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextP [from NextPage3]`,\n              );\n              const newNode = node.document.createNode(Object.assign(layoutPNode.exportSchema()));\n              node.insertBefore(newNode, dragment, false);\n              dragment.remove(false);\n              newNode.children.get(0).select();\n            }, 1);\n          };\n\n          // 需要包裹 Block BlockCell P 的情况：\n          // 1. 组件拖入到 NextPage，的直接子元素下(不包括slot), 此时Block宽度为12\n          if (['NextPage'].includes(dropTargetName) && currentNode.children.has(dragment)) {\n            wrapWithBlock(dragment, currentNode, dropTargetName, 12);\n\n            // 需要包裹 Block BlockCell P 的情况：\n            // 2. 组件拖入到 NextPage 的 aside slot, 的直接子元素下 （不包括slot下的进一步内容），此时Block宽度为1\n          } else if (isAsideSlot && slotTarget && slotTarget.children.has(dragment)) {\n            wrapWithBlock(dragment, slotTarget, dropTargetName, 1);\n\n            // 需要包裹 P 的情况：\n            // 1. 如果是处于，开启了自然布局模式的容器组件中 (或者Tab里)\n            // 这里的Tab主要是给纪元epoch使用的，因为他们用到了 @ali/vc-deep 的TabLayout组件，没办法在这个组件上再增加属性 isAutoContainer\n          } else if (dropTarget.getPropValue('isAutoContainer') || dropTargetName === 'Tab.Item') {\n            wrapWithP(dragment, dropTarget, dropTargetName);\n\n            // 需要包裹 P 的情况：\n            // 2. 如果是处于，Page 的 nav header footer 中\n          } else if (isNeedPSlot && slotTarget) {\n            wrapWithP(dragment, slotTarget, dropTargetName);\n          }\n\n          // 其他维持原状，不进行其他设置\n        },\n      },\n    },\n  },\n  icon: '',\n  category: '布局容器类',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/drawer/snippets.design.ts",
    "content": "module.exports = [\n  {\n    title: '侧抽屉',\n    screenshot: 'https://img.alicdn.com/tfs/TB1o0t4u9f2gK0jSZFPXXXsopXa-112-64.png',\n    schema: {\n      componentName: 'Drawer',\n      props: {\n        prefix: 'next-',\n        triggerType: 'click',\n        closeable: true,\n        placement: 'right',\n        hasMask: true,\n        isAutoContainer: true,\n        visible: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/drawer/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '侧抽屉',\n    screenshot: 'https://img.alicdn.com/tfs/TB1o0t4u9f2gK0jSZFPXXXsopXa-112-64.png',\n    schema: {\n      componentName: 'Drawer',\n      props: {\n        prefix: 'next-',\n        triggerType: 'click',\n        closeable: true,\n        placement: 'right',\n        hasMask: true,\n        isAutoContainer: true,\n        visible: true,\n      },\n    },\n  },\n  {\n    title: '底部抽屉',\n    screenshot: 'https://img.alicdn.com/tfs/TB1YOd2u2b2gK0jSZK9XXaEgFXa-112-64.png',\n    schema: {\n      componentName: 'Drawer',\n      props: {\n        prefix: 'next-',\n        triggerType: 'click',\n        closeable: true,\n        placement: 'bottom',\n        hasMask: true,\n        isAutoContainer: true,\n        visible: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/drawer-inner/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Drawer.Inner',\n  title: 'Drawer.Inner',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Drawer',\n    main: '',\n    destructuring: true,\n    subName: 'Inner',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'closeable',\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'role',\n      propType: 'string',\n      defaultValue: 'dialog',\n    },\n    {\n      name: 'title',\n      propType: 'string',\n    },\n    {\n      name: 'placement',\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'right', 'bottom', 'left'],\n      },\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'headerStyle',\n      propType: 'object',\n    },\n    {\n      name: 'bodyStyle',\n      propType: 'object',\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n    },\n    {\n      name: 'beforeOpen',\n      propType: 'func',\n    },\n    {\n      name: 'beforeClose',\n      propType: 'func',\n    },\n    {\n      name: 'cache',\n      propType: 'bool',\n    },\n    {\n      name: 'shouldUpdatePosition',\n      propType: 'bool',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/dropdown/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Dropdown',\n  title: '下拉菜单',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Dropdown',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层当前是否显示',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层显示或隐藏时触发的回调函数\\n@param {Boolean} visible 弹层是否显示\\n@param {String} type 触发弹层显示或隐藏的来源 fromContent 表示由Dropdown内容触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'triggerType',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n        ],\n      },\n      description:\n        \"触发弹层显示或隐藏的操作类型，可以是 'click'，'hover'，或者它们组成的数组，如 ['hover', 'click']\",\n      defaultValue: 'hover',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '设置此属性，弹层无法显示或隐藏',\n      defaultValue: false,\n    },\n    {\n      name: 'align',\n      propType: 'string',\n      description: '弹层相对于触发元素的定位, 详见 Overlay 的定位部分',\n      defaultValue: 'tl bl',\n    },\n    {\n      name: 'offset',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description:\n        '弹层相对于trigger的定位的微调, 接收数组[hoz, ver], 表示弹层在 left / top 上的增量\\ne.g. [100, 100] 表示往右(RTL 模式下是往左) 、下分布偏移100px',\n      defaultValue: [0, 0],\n    },\n    {\n      name: 'delay',\n      propType: 'number',\n      description: '弹层显示或隐藏的延时时间（以毫秒为单位），在 triggerType 被设置为 hover 时生效',\n      defaultValue: 200,\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '弹层打开时是否让其中的元素自动获取焦点',\n    },\n    {\n      name: 'hasMask',\n      propType: 'bool',\n      description: '是否显示遮罩',\n      defaultValue: false,\n    },\n    {\n      name: 'cache',\n      propType: 'bool',\n      description: '隐藏时是否保留子节点',\n      defaultValue: false,\n    },\n    {\n      name: 'animation',\n      propType: {\n        type: 'oneOfType',\n        value: ['object', 'bool'],\n      },\n      description:\n        \"配置动画的播放方式，支持 { in: 'enter-class', out: 'leave-class' } 的对象参数，如果设置为 false，则不播放动画\\n@default { in: 'expandInDown', out: 'expandOutUp' }\",\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'trigger',\n          title: {\n            label: '触发元素',\n            tip: '',\n          },\n          setter: {\n            componentName: 'SlotSetter',\n            initialValue: {\n              type: 'JSSlot',\n              value: [],\n            },\n          },\n          supportVariable: true,\n        },\n        {\n          name: 'animation',\n          title: {\n            label: 'animation',\n            tip:\n              \"配置动画的播放方式，支持 { in: 'enter-class', out: 'leave-class' } 的对象参数，如果设置为 false，则不播放动画\\n@default { in: 'expandInDown', out: 'expandOutUp' }\",\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: [\n                {\n                  componentName: 'ObjectSetter',\n                  props: {\n                    config: {\n                      items: [\n                        {\n                          name: 'in',\n                          description: '',\n                          setter: 'StringSetter',\n                          supportVariable: true,\n                          defaultValue: 'enter-class',\n                        },\n                        {\n                          name: 'out',\n                          description: '',\n                          setter: 'StringSetter',\n                          supportVariable: true,\n                          defaultValue: 'leave-class',\n                        },\n                      ],\n                    },\n                  },\n                  initialValue: {\n                    in: 'enter-class',\n                    out: 'leave-class',\n                  },\n                },\n                {\n                  componentName: 'BoolSetter',\n                  initialValue: true,\n                },\n              ],\n            },\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/error-boundary/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'ErrorBoundary',\n  title: 'ErrorBoundary',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'ConfigProvider',\n    main: '',\n    destructuring: true,\n    subName: 'ErrorBoundary',\n  },\n  props: [\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'element',\n      },\n    },\n    {\n      name: 'afterCatch',\n      propType: 'func',\n      description:\n        '捕获错误后的自定义处理, 比如埋点上传\\n@param {Object} error 错误\\n@param {Object} errorInfo 错误详细信息',\n    },\n    {\n      name: 'fallbackUI',\n      propType: 'func',\n      description:\n        '捕获错误后的展现 自定义组件\\n@param {Object} error 错误\\n@param {Object} errorInfo 错误详细信息\\n@returns {Element} 捕获错误后的处理',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/field/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Field',\n  title: 'Field',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Field',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'this',\n      propType: 'any',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/form/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Form',\n  title: '表单容器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Form',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'inline',\n      propType: 'bool',\n      description: '内联表单',\n    },\n    {\n      name: 'size',\n      title: {\n        label: 'Size',\n        tip: '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。\\n@enumdesc 大, 中, 小',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium', 'small'],\n      },\n      description:\n        '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。\\n@enumdesc 大, 中, 小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'fullWidth',\n      propType: 'bool',\n      description: '单个 Item 中表单类组件宽度是否是100%',\n    },\n    {\n      name: 'labelAlign',\n      title: {\n        label: '标签的位置',\n        tip: '上, 左, 内',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'left', 'inset'],\n      },\n      description: '标签的位置\\n@enumdesc 上, 左, 内',\n      defaultValue: 'left',\n    },\n    {\n      name: 'labelTextAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'right'],\n      },\n      description: '标签的左右对齐方式\\n@enumdesc 左, 右',\n    },\n    {\n      name: 'onSubmit',\n      propType: 'func',\n      description: 'form内有 `htmlType=\"submit\"` 的元素的时候会触发',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '扩展class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['Json', 'JSExpression'],\n      },\n      description: '表单数值',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '表单变化回调\\n@param {Object} values 表单数据\\n@param {Object} item 详细\\n@param {String} item.name 变化的组件名\\n@param {String} item.value 变化的数据\\n@param {Object} item.field field 实例',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'device',\n      propType: {\n        type: 'oneOf',\n        value: ['phone', 'tablet', 'desktop'],\n      },\n      description: '预设屏幕宽度',\n      defaultValue: 'desktop',\n    },\n    {\n      name: 'responsive',\n      propType: 'bool',\n      description: '是否开启内置的响应式布局 （使用ResponsiveGrid）',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否开启预览态',\n    },\n    {\n      name: 'field',\n      propType: 'any',\n      description: 'field 实例',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'inline',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '内联表单',\n            en_US: 'Inline',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: inline | 说明: 内联表单',\n            en_US: 'prop: inline | description: inline form',\n          },\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n        setValue: (target, value) => {\n          if (value === true) {\n            target.parent.setPropValue('labelCol', null);\n            target.parent.setPropValue('wrapperCol', null);\n          } else {\n            target.parent.setPropValue('labelCol', { span: 2 });\n            target.parent.setPropValue('wrapperCol', { span: 14 });\n          }\n          return target.parent.setPropValue('inline', value);\n        },\n      },\n      {\n        name: 'fullWidth',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '宽度占满',\n            en_US: 'FullWidth',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: fullWidth | 说明: 单个 Item 中表单类组件宽度是否是100%',\n            en_US: 'prop: fullWidth | description: full width',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'isPreview',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '预览态',\n            en_US: 'Preview Mode',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: isPreview | 说明: 是否开启预览态',\n            en_US: 'prop: isPreview | description: preview mode',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否开启预览态',\n      },\n      {\n        name: 'field',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: 'Field 实例',\n            en_US: 'Field',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: field | 说明: 传入 Field 实例',\n            en_US: 'prop: field | description: field instance',\n          },\n          docUrl:\n            'https://fusion.alibaba-inc.com/pc/component/basic/form#%E5%A4%8D%E6%9D%82%E5%8A%9F%E8%83%BD(Field)',\n        },\n        setter: {\n          componentName: 'ExpressionSetter',\n        },\n      },\n      {\n        name: 'value',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '表单值',\n            en_US: 'value',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: value | 说明: 表单值',\n            en_US: 'prop: value | description: value instance',\n          },\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['JsonSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN:\n              '属性: size | 说明: 单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。\\n@enumdesc 大, 中, 小',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['large', 'medium', 'small'],\n          },\n        },\n        description:\n          '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。\\n@enumdesc 大, 中, 小',\n        defaultValue: 'medium',\n      },\n      {\n        name: 'labelAlign',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签位置',\n            en_US: 'Label Align',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: labelAlign | 说明: 标签的位置\\n@enumdesc 上, 左, 内',\n            en_US: 'prop: labelAlign | description: label align',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['top', 'left', 'inset'],\n          },\n        },\n        defaultValue: 'left',\n      },\n      {\n        name: 'labelTextAlign',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签对齐',\n            en_US: 'Text Align',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: labelTextAlign | 说明: 标签的左右对齐方式\\n@enumdesc 左, 右',\n            en_US: 'prop: labelTextAlign | description: label text align',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['left', 'right'],\n          },\n        },\n        defaultValue: 'left',\n      },\n      {\n        name: 'device',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '设备',\n            en_US: 'Device',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: device | 说明: 预设屏幕宽度',\n            en_US: 'prop: device | description: device',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['phone', 'tablet', 'desktop'],\n          },\n        },\n        defaultValue: 'desktop',\n      },\n      {\n        type: 'group',\n        title: '布局',\n        display: 'accordion',\n        items: [\n          {\n            name: 'labelCol',\n            display: 'inline',\n            setter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'span',\n                      description: 'span',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'offset',\n                      description: 'offset',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                  ],\n                },\n              },\n            },\n            description:\n              'label 标签布局，通 `<Col>` 组件，设置 span offset 值，如 {span: 8, offset: 16}，该项仅在垂直表单有效',\n          },\n          {\n            name: 'wrapperCol',\n            display: 'inline',\n            setter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'span',\n                      description: 'span',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'offset',\n                      description: 'offset',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                  ],\n                },\n              },\n            },\n            description: '需要为输入控件设置布局样式时，使用该属性，用法同 labelCol',\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['saveField', 'onSubmit', 'onChange'],\n    },\n    advanced: {\n      callbacks: {\n        onNodeAdd: (dragment, currentNode) => {\n          // 拖入的内容为LayoutP时,不做包裹动作\n          if (!dragment || dragment.componentName === 'Form.Item') {\n            return;\n          }\n          // 为目标元素包裹一层P\n          const layoutPNode = currentNode.document.createNode({\n            componentName: 'Form.Item',\n            title: '表单项',\n            props: {\n              label: '表单项: ',\n            },\n            children: [dragment.exportSchema()],\n          });\n          // 当前dragment还未添加入node子节点,需要setTimeout处理\n          setTimeout(() => {\n            if (!currentNode.children.has(dragment)) {\n              return;\n            }\n            const newNode = currentNode.document.createNode(\n              Object.assign(layoutPNode.exportSchema()),\n            );\n            currentNode.insertBefore(newNode, dragment, false);\n            dragment.remove(false);\n            newNode.children.get(0).select();\n          }, 1);\n        },\n      },\n    },\n  },\n\n  icon: 'https://img.alicdn.com/tfs/TB1oH02u2b2gK0jSZK9XXaEgFXa-112-64.png',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/form/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '表单容器',\n    screenshot: 'https://img.alicdn.com/tfs/TB1oH02u2b2gK0jSZK9XXaEgFXa-112-64.png',\n    schema: {\n      componentName: 'Form',\n      props: {\n        labelCol: {\n          span: 2,\n        },\n        wrapperCol: {\n          span: 14,\n        },\n        labelAlign: 'left',\n      },\n      children: [\n        {\n          componentName: 'Form.Item',\n          props: {\n            label: 'Email: ',\n            required: true,\n          },\n          children: [\n            {\n              componentName: 'Input',\n              props: {\n                name: 'email',\n                size: 'medium',\n                placeholder: '用户名',\n              },\n            },\n          ],\n        },\n        {\n          componentName: 'Form.Item',\n          props: {\n            label: 'Password: ',\n            required: true,\n          },\n          children: [\n            {\n              componentName: 'Input.Password',\n              props: {\n                name: 'password',\n                placeholder: '请输入密码',\n                size: 'medium',\n              },\n            },\n          ],\n        },\n        {\n          componentName: 'Form.Item',\n          props: {\n            label: '\\b',\n          },\n          children: [\n            {\n              componentName: 'Form.Submit',\n              props: {\n                type: 'primary',\n                validate: true,\n                children: 'Submit',\n              },\n            },\n            {\n              componentName: 'Form.Reset',\n              props: {\n                style: {\n                  marginLeft: 10,\n                },\n                children: 'Reset',\n              },\n            },\n          ],\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/form-error/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Form.Error',\n  title: 'Form.Error',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Form',\n    main: '',\n    destructuring: true,\n    subName: 'Error',\n  },\n  props: [\n    {\n      name: 'name',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n        ],\n      },\n      description: '表单名',\n    },\n    {\n      name: 'field',\n      propType: 'object',\n      description: '自定义 field (在 Form 内不需要设置)',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'instanceOf',\n            value: 'node',\n          },\n          'func',\n        ],\n      },\n      description: '自定义错误渲染, 可以是 node 或者 function(errors, state)',\n    },\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/form-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Form.Item',\n  title: '表单项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Form',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '标签',\n    },\n    {\n      name: 'labelCol',\n      propType: {\n        type: 'shape',\n        value: [\n          {\n            name: 'span',\n            description: 'span',\n            propType: 'number',\n          },\n          {\n            name: 'offset',\n            description: 'offset',\n            propType: 'number',\n          },\n        ],\n      },\n      description:\n        'label 标签布局，通 `<Col>` 组件，设置 span offset 值，如 {span: 8, offset: 16}，该项仅在垂直表单有效',\n    },\n    {\n      name: 'wrapperCol',\n      propType: {\n        type: 'shape',\n        value: [\n          {\n            name: 'span',\n            description: 'span',\n            propType: 'number',\n          },\n          {\n            name: 'offset',\n            description: 'offset',\n            propType: 'number',\n          },\n        ],\n      },\n      description: '需要为输入控件设置布局样式时，使用该属性，用法同 labelCol',\n    },\n    {\n      name: 'help',\n      title: {\n        label: '自定义提示信息',\n        tip: '如不设置，则会根据校验规则自动生成.',\n      },\n      propType: 'string',\n      description: '自定义提示信息，如不设置，则会根据校验规则自动生成.',\n    },\n    {\n      name: 'extra',\n      title: {\n        label: '额外的提示信息',\n        tip: '和 help 类似，当需要错误信息和提示文案同时出现时，可以使用这个。 位于错误信息后面',\n      },\n      propType: 'string',\n      description:\n        '额外的提示信息，和 help 类似，当需要错误信息和提示文案同时出现时，可以使用这个。 位于错误信息后面',\n    },\n    {\n      name: 'validateState',\n      title: {\n        label: '校验状态',\n        tip: '如不设置，则会根据校验规则自动生成\\n@enumdesc 失败, 成功, 校验中, 警告',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'success', 'loading', 'warning'],\n      },\n      description:\n        '校验状态，如不设置，则会根据校验规则自动生成\\n@enumdesc 失败, 成功, 校验中, 警告',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'size',\n      title: {\n        label: 'Size',\n        tip: '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'small', 'medium'],\n      },\n      description:\n        '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。',\n    },\n    {\n      name: 'fullWidth',\n      title: {\n        label: 'fullWidth',\n        tip: '单个 Item 中表单类组件宽度是否是100%',\n      },\n      propType: 'bool',\n      description: '单个 Item 中表单类组件宽度是否是100%',\n    },\n    {\n      name: 'labelAlign',\n      title: {\n        label: '标签的位置',\n        tip: '上, 左, 内',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'left', 'inset'],\n      },\n      description: '标签的位置\\n@enumdesc 上, 左, 内',\n    },\n    {\n      name: 'labelTextAlign',\n      title: {\n        label: '标签的左右对齐方式',\n        tip: '左, 右',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'right'],\n      },\n      description: '标签的左右对齐方式\\n@enumdesc 左, 右',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '扩展class',\n    },\n    {\n      name: 'required',\n      title: {\n        label: '不能为空',\n        tip: '[表单校验] 不能为空',\n      },\n      propType: 'bool',\n      description: '[表单校验] 不能为空',\n    },\n    {\n      name: 'requiredMessage',\n      title: {\n        label: '自定义错误信息',\n        tip: '[表单校验]为空时自定义错误信息',\n      },\n      propType: 'string',\n      description: 'required 自定义错误信息',\n    },\n    {\n      name: 'min',\n      title: {\n        label: '最小值',\n        tip: '[表单校验] 最小值',\n      },\n      propType: 'number',\n      description: '[表单校验] 最小值',\n    },\n    {\n      name: 'max',\n      title: {\n        label: '最大值',\n        tip: '[表单校验] 最大值',\n      },\n      propType: 'number',\n      description: '[表单校验] 最大值',\n    },\n    {\n      name: 'minmaxMessage',\n      title: {\n        label: 'min/max message',\n        tip: '[表单校验] min/max 自定义错误信息',\n      },\n      propType: 'string',\n      description: 'min/max 自定义错误信息',\n    },\n    {\n      name: 'minLength',\n      title: {\n        label: '最小长度',\n        tip: '[表单校验] 字符串最小长度 / 数组最小个数',\n      },\n      propType: 'number',\n      description: '[表单校验] 字符串最小长度 / 数组最小个数',\n    },\n    {\n      name: 'maxLength',\n      title: {\n        label: '最大长度',\n        tip: '[表单校验] 字符串最大长度 / 数组最大个数',\n      },\n      propType: 'number',\n      description: '[表单校验] 字符串最大长度 / 数组最大个数',\n    },\n    {\n      name: 'minmaxLengthMessage',\n      title: {\n        label: 'max|min length error message',\n        tip: '[表单校验] minLength/maxLength 自定义错误信息',\n      },\n      propType: 'string',\n      description: 'minLength/maxLength 自定义错误信息',\n    },\n    {\n      name: 'length',\n      title: {\n        label: '长度',\n        tip: '[表单校验] 字符串精确长度 / 数组精确个数',\n      },\n      propType: 'number',\n      description: '[表单校验] 字符串精确长度 / 数组精确个数',\n    },\n    {\n      name: 'lengthMessage',\n      title: {\n        label: 'length error message',\n        tip: '[表单校验] minLength/maxLength 自定义错误信息',\n      },\n      propType: 'string',\n      description: 'length 自定义错误信息',\n    },\n    {\n      name: 'pattern',\n      title: {\n        label: '正则',\n        tip: '[表单校验] 正则校验',\n      },\n      propType: 'string',\n      description: '正则校验',\n    },\n    {\n      name: 'patternMessage',\n      title: {\n        label: 'pattern error message',\n        tip: '[表单校验] pattern 自定义错误信息',\n      },\n      propType: 'string',\n      description: 'pattern 自定义错误信息',\n    },\n    {\n      name: 'format',\n      title: {\n        label: 'format',\n        tip: '[表单校验] 四种常用的 pattern',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['number', 'email', 'url', 'tel'],\n      },\n      description: '[表单校验] 四种常用的 pattern',\n    },\n    {\n      name: 'formatMessage',\n      title: {\n        label: 'format error message',\n        tip: '[表单校验] format 自定义错误信息',\n      },\n      propType: 'string',\n      description: 'format 自定义错误信息',\n    },\n    {\n      name: 'validator',\n      propType: 'func',\n      description: '[表单校验] 自定义校验函数',\n    },\n    {\n      name: 'autoValidate',\n      propType: 'bool',\n      description: '是否修改数据时自动触发校验',\n    },\n    {\n      name: 'device',\n      propType: {\n        type: 'oneOf',\n        value: ['phone', 'tablet', 'desktop'],\n      },\n      description: '预设屏幕宽度',\n    },\n    {\n      name: 'responsive',\n      propType: 'bool',\n    },\n    {\n      name: 'colSpan',\n      propType: 'number',\n      description: '在响应式布局模式下，表单项占多少列',\n    },\n    {\n      name: 'labelWidth',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number'],\n      },\n      description: '在响应式布局下，且label在左边时，label的宽度是多少',\n      defaultValue: 100,\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否开启预览态',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Form'],\n      },\n    },\n    supports: {\n      style: true,\n    },\n    props: [\n      {\n        name: 'label',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签文本',\n            en_US: 'Label',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: label | 说明: 标签文本内容',\n            en_US: 'prop: label | description: label content',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: '标签',\n      },\n      {\n        name: 'help',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '错误提示',\n            en_US: 'Help Info',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: help | 说明: 自定义提示信息, 如不设置，则会根据校验规则自动生成.',\n            en_US: 'prop: help | description: help infomation',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: '自定义提示信息，如不设置，则会根据校验规则自动生成.',\n      },\n      {\n        name: 'extra',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '帮助提示',\n            en_US: 'Extra Info',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN:\n              '属性: extra | 说明: 额外的提示信息, 和 help 类似，当需要错误信息和提示文案同时出现时，可以使用这个。 位于错误信息后面',\n            en_US: 'prop: extra | description: extra infomation',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'validateState',\n        title: {\n          label: '校验状态',\n          tip: '如不设置，则会根据校验规则自动生成\\n@enumdesc 失败, 成功, 校验中, 警告',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['error', 'success', 'loading', 'warning'],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: '尺寸',\n          tip: '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'labelAlign',\n        title: {\n          label: '标签位置',\n          tip: '上, 左, 内',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['top', 'left', 'inset'],\n          },\n        },\n        defaultValue: 'left',\n      },\n      {\n        name: 'labelTextAlign',\n        title: {\n          label: '标签对齐',\n          tip: '左, 右',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['left', 'right'],\n          },\n        },\n        defaultValue: 'left',\n      },\n      {\n        name: 'device',\n        title: {\n          label: '设备',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['phone', 'tablet', 'desktop'],\n          },\n        },\n        defaultValue: 'desktop',\n      },\n      {\n        name: 'fullWidth',\n        title: {\n          label: '宽度占满',\n          tip: '单个 Item 中表单类组件宽度是否是100%',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '单个 Item 中表单类组件宽度是否是100%',\n      },\n      {\n        name: 'isPreview',\n        title: {\n          label: '预览态',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否开启预览态',\n      },\n      {\n        name: 'autoValidate',\n        title: {\n          label: '自动校验',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否修改数据时自动触发校验',\n      },\n      {\n        type: 'group',\n        display: 'accordion',\n        title: '校验',\n        items: [\n          {\n            type: 'group',\n            display: 'popup',\n            title: '非空校验',\n            items: [\n              {\n                name: 'required',\n                title: {\n                  label: '不能为空',\n                  tip: '[表单校验] 不能为空',\n                },\n                setter: 'BoolSetter',\n                supportVariable: true,\n                description: '[表单校验] 不能为空',\n              },\n              {\n                name: 'requiredMessage',\n                title: {\n                  label: '错误信息',\n                  tip: '[表单校验]为空时自定义错误信息',\n                },\n                setter: 'StringSetter',\n                supportVariable: true,\n                description: 'required 自定义错误信息',\n              },\n            ],\n          },\n          {\n            type: 'group',\n            display: 'popup',\n            title: '最大/最小值校验',\n            items: [\n              {\n                name: 'min',\n                title: {\n                  label: '最小值',\n                  tip: '[表单校验] 最小值',\n                },\n                setter: 'NumberSetter',\n                supportVariable: true,\n                description: '[表单校验] 最小值',\n              },\n              {\n                name: 'max',\n                title: {\n                  label: '最大值',\n                  tip: '[表单校验] 最大值',\n                },\n                setter: 'NumberSetter',\n                supportVariable: true,\n                description: '[表单校验] 最大值',\n              },\n              {\n                name: 'minmaxMessage',\n                title: {\n                  label: '错误信息',\n                  tip: '[表单校验] min/max 自定义错误信息',\n                },\n                setter: 'StringSetter',\n                supportVariable: true,\n              },\n            ],\n          },\n          {\n            type: 'group',\n            display: 'popup',\n            title: '最大/最小长度校验',\n            items: [\n              {\n                name: 'minLength',\n                title: {\n                  label: '最小长度',\n                  tip: '[表单校验] 字符串最小长度 / 数组最小个数',\n                },\n                setter: 'NumberSetter',\n                supportVariable: true,\n                description: '[表单校验] 字符串最小长度 / 数组最小个数',\n              },\n              {\n                name: 'maxLength',\n                title: {\n                  label: '最大长度',\n                  tip: '[表单校验] 字符串最大长度 / 数组最大个数',\n                },\n                setter: 'NumberSetter',\n                supportVariable: true,\n                description: '[表单校验] 字符串最大长度 / 数组最大个数',\n              },\n              {\n                name: 'minmaxLengthMessage',\n                title: {\n                  label: '错误信息',\n                  tip: '[表单校验] minLength/maxLength 自定义错误信息',\n                },\n                setter: 'StringSetter',\n                supportVariable: true,\n                description: 'minLength/maxLength 自定义错误信息',\n              },\n            ],\n          },\n          {\n            type: 'group',\n            display: 'popup',\n            title: '长度校验',\n            items: [\n              {\n                name: 'length',\n                title: {\n                  label: '长度',\n                  tip: '[表单校验] 字符串精确长度 / 数组精确个数',\n                },\n                setter: 'NumberSetter',\n                supportVariable: true,\n                description: '[表单校验] 字符串精确长度 / 数组精确个数',\n              },\n              {\n                name: 'lengthMessage',\n                title: {\n                  label: '错误信息',\n                  tip: '[表单校验] minLength/maxLength 自定义错误信息',\n                },\n                setter: 'StringSetter',\n                supportVariable: true,\n                description: 'length 自定义错误信息',\n              },\n            ],\n          },\n          {\n            type: 'group',\n            display: 'popup',\n            title: '正则校验',\n            items: [\n              {\n                name: 'pattern',\n                title: {\n                  label: '正则',\n                  tip: '[表单校验] 正则校验',\n                },\n                setter: 'StringSetter',\n                supportVariable: true,\n                description: '正则校验',\n              },\n              {\n                name: 'patternMessage',\n                title: {\n                  label: '错误信息',\n                  tip: '[表单校验] pattern 自定义错误信息',\n                },\n                setter: 'StringSetter',\n                supportVariable: true,\n                description: 'pattern 自定义错误信息',\n              },\n            ],\n          },\n          {\n            type: 'group',\n            display: 'popup',\n            title: '格式化校验',\n            items: [\n              {\n                name: 'format',\n                title: {\n                  label: 'format',\n                  tip: '[表单校验] 四种常用的 pattern',\n                },\n                setter: {\n                  componentName: 'RadioGroupSetter',\n                  props: {\n                    options: ['number', 'email', 'url', 'tel'],\n                  },\n                },\n                description: '[表单校验] 四种常用的 pattern',\n              },\n              {\n                name: 'formatMessage',\n                title: {\n                  label: '错误信息',\n                  tip: '[表单校验] format 自定义错误信息',\n                },\n                setter: 'StringSetter',\n                supportVariable: true,\n                description: 'format 自定义错误信息',\n              },\n            ],\n          },\n          {\n            name: 'validator',\n            display: 'popup',\n            title: {\n              label: '自定义校验函数',\n            },\n            setter: 'FunctionSetter',\n            supportVariable: true,\n            description: '[表单校验] 自定义校验函数',\n          },\n        ],\n      },\n      {\n        type: 'group',\n        title: '布局',\n        display: 'accordion',\n        items: [\n          {\n            name: 'labelCol',\n            display: 'inline',\n            setter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'span',\n                      description: 'span',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'offset',\n                      description: 'offset',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                  ],\n                },\n              },\n            },\n            description:\n              'label 标签布局，通 `<Col>` 组件，设置 span offset 值，如 {span: 8, offset: 16}，该项仅在垂直表单有效',\n          },\n          {\n            name: 'wrapperCol',\n            display: 'inline',\n            setter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'span',\n                      description: 'span',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'offset',\n                      description: 'offset',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                  ],\n                },\n              },\n            },\n            description: '需要为输入控件设置布局样式时，使用该属性，用法同 labelCol',\n          },\n        ],\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    advanced: {\n      callbacks: {\n        onNodeRemove: (removedNode, currentNode) => {\n          if (!removedNode || !currentNode) {\n            return;\n          }\n          const children = currentNode.children;\n          // 若无children,则说明当前P组件内已为空,需要删除P组件本身\n          if (children && children.length === 0) {\n            currentNode.remove();\n          }\n        },\n      },\n    },\n  },\n  icon: 'https://img.alicdn.com/tfs/TB1nYqOuW61gK0jSZFlXXXDKFXa-112-64.png',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/form-reset/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Form.Reset',\n  title: '重置按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Form',\n    main: '',\n    destructuring: true,\n    subName: 'Reset',\n  },\n  props: [\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '点击提交后触发',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'children',\n      title: '内容',\n      propType: 'string',\n    },\n    {\n      name: 'icon',\n      propType: 'string',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'type',\n      title: '类型',\n      propType: {\n        type: 'oneOf',\n        value: ['primary', 'secondary', 'normal'],\n      },\n      description: '按钮的类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: '尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '按钮的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'iconSize',\n      title: 'Icon 尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl'],\n      },\n      defaultValue: 'small',\n      description: '按钮中 Icon 的尺寸，用于替代 Icon 的默认大小',\n    },\n    {\n      name: 'ghost',\n      title: 'ghost',\n      propType: {\n        type: 'oneOf',\n        value: [true, false, 'light', 'dark'],\n      },\n      description: '是否为幽灵按钮',\n      defaultValue: false,\n      initialValue: false,\n    },\n    {\n      name: 'toDefault',\n      propType: 'bool',\n      description: '返回默认值',\n    },\n    {\n      name: 'loading',\n      title: 'loading',\n      propType: 'bool',\n      description: '设置按钮的载入状态',\n      defaultValue: false,\n    },\n    {\n      name: 'text',\n      title: 'text',\n      propType: 'bool',\n      description: '是否为文本按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'warning',\n      title: 'warning',\n      propType: 'bool',\n      description: '是否为警告按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'onMouseUp',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'icon',\n          setter: 'IconSetter',\n          supportVariable: true,\n          setValue: (target, value) => {\n            target.node.children.importSchema(\n              value && {\n                componentName: 'Icon',\n                props: { type: value, style: { marginRight: 5 } },\n              },\n              true,\n            );\n          },\n        },\n        {\n          name: 'children',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '文本内容',\n              en_US: 'content',\n            },\n            tip: '按钮文本内容',\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['StringSetter', 'ExpressionSetter'],\n            },\n          },\n        },\n      ],\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/form-submit/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Form.Submit',\n  title: '提交按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Form',\n    main: '',\n    destructuring: true,\n    subName: 'Submit',\n  },\n  props: [\n    {\n      name: 'onClick',\n      propType: 'func',\n      description:\n        '点击提交后触发\\n@param {Object} value 数据\\n@param {Object} errors 错误数据\\n@param {class} field 实例',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'children',\n      title: '内容',\n      propType: 'string',\n    },\n    {\n      name: 'icon',\n      propType: 'string',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'type',\n      title: '类型',\n      propType: {\n        type: 'oneOf',\n        value: ['primary', 'secondary', 'normal'],\n      },\n      description: '按钮的类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: '尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '按钮的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'iconSize',\n      title: 'Icon 尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl'],\n      },\n      defaultValue: 'small',\n      description: '按钮中 Icon 的尺寸，用于替代 Icon 的默认大小',\n    },\n    {\n      name: 'ghost',\n      title: 'ghost',\n      propType: {\n        type: 'oneOf',\n        value: [true, false, 'light', 'dark'],\n      },\n      description: '是否为幽灵按钮',\n      defaultValue: false,\n      initialValue: false,\n    },\n    {\n      name: 'validate',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否校验',\n          en_US: 'Validate',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: validate | 说明: 是否校验/需要校验的 name 数组',\n          en_US: 'prop: validate | description: validate or validate array',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'bool',\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n        ],\n      },\n      description: '是否校验/需要校验的 name 数组',\n    },\n    {\n      name: 'loading',\n      title: 'loading',\n      propType: 'bool',\n      description: '设置按钮的载入状态',\n      defaultValue: false,\n    },\n    {\n      name: 'text',\n      title: 'text',\n      propType: 'bool',\n      description: '是否为文本按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'warning',\n      title: 'warning',\n      propType: 'bool',\n      description: '是否为警告按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      title: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'htmlType',\n      propType: 'string',\n      defaultValue: 'submit',\n    },\n    {\n      name: 'onMouseUp',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'disabled',\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['ExpressionSetter', 'BoolSetter'],\n            },\n          },\n        },\n        {\n          name: 'icon',\n          setter: 'IconSetter',\n          supportVariable: true,\n          extraProps: {\n            defaultValue: '',\n            onChange: {\n              type: 'JSFunction',\n              value:\n                '(val, field, editor) => {\\n  field.node.children.importSchema(val && {\"componentName\": \"Icon\", \"props\": {\"type\": val, \"style\": {\"marginRight\": 5}}}, true); //field.top.setPropValue(\\'children\\', [{\"componentName\": \"Icon\", \"props\": {\"type\": val}}, (field.top.getPropValue(\\'children\\') || []).slice(-1)]);\\n}',\n            },\n          },\n        },\n        {\n          name: 'children',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '文本内容',\n              en_US: 'content',\n            },\n            tip: '按钮文本内容',\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['StringSetter', 'ExpressionSetter'],\n            },\n          },\n        },\n      ],\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/group/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Group',\n  title: 'Group',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Nav',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标签内容',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '导航项和子导航',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/icon/meta.design.ts",
    "content": "import { IPublicModelNode } from '@alilc/lowcode-types';\nimport snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Icon',\n  title: '图标',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i1/O1CN01yR8vcY1M504YbHxzo_!!6000000001382-55-tps-56-56.svg',\n  icon:\n    'https://img.alicdn.com/imgextra/i1/O1CN01yR8vcY1M504YbHxzo_!!6000000001382-55-tps-56-56.svg',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Icon',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'type',\n      propType: 'string',\n      description: '指定显示哪种图标',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '图标尺寸',\n          en_US: 'Icon Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 指定图标大小',\n          en_US: 'prop: size | description: icon size',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'oneOf',\n            value: ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl', 'inherit'],\n          },\n          'number',\n        ],\n      },\n      description: '指定图标大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标类型',\n            en_US: 'Icon',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 图标类型',\n            en_US: 'prop: type | description: icon type',\n          },\n        },\n        setter: {\n          componentName: 'IconSetter',\n          props: {\n            hasClear: false,\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标尺寸',\n            en_US: 'Icon Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 指定图标大小',\n            en_US: 'prop: size | description: icon size',\n          },\n        },\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                label: 'xxs',\n                value: 'xxs',\n              },\n              {\n                label: 'xs',\n                value: 'xs',\n              },\n              {\n                label: 'small',\n                value: 'small',\n              },\n              {\n                label: 'medium',\n                value: 'medium',\n              },\n              {\n                label: 'large',\n                value: 'large',\n              },\n              {\n                label: 'xl',\n                value: 'xl',\n              },\n              {\n                label: 'xxl',\n                value: 'xxl',\n              },\n              {\n                label: 'xxxl',\n                value: 'xxxl',\n              },\n              {\n                label: 'inherit',\n                value: 'inherit',\n              },\n            ],\n          },\n        },\n        description: '指定图标大小',\n        defaultValue: 'medium',\n      },\n    ],\n    advanced: {\n      callbacks: {\n        onHoverHook: (currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n        onMouseDownHook: (e: MouseEvent, currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n        onClickHook: (e: MouseEvent, currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n        onMoveHook: (currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n      },\n    },\n  },\n  category: '通用',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/icon/meta.ts",
    "content": "import { IPublicModelNode } from '@alilc/lowcode-types';\nimport snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Icon',\n  title: '图标',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i1/O1CN01yR8vcY1M504YbHxzo_!!6000000001382-55-tps-56-56.svg',\n  icon:\n    'https://img.alicdn.com/imgextra/i1/O1CN01yR8vcY1M504YbHxzo_!!6000000001382-55-tps-56-56.svg',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Icon',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'type',\n      propType: 'string',\n      description: '指定显示哪种图标',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '图标尺寸',\n          en_US: 'Icon Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 指定图标大小',\n          en_US: 'prop: size | description: icon size',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: [\n          {\n            type: 'oneOf',\n            value: ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl', 'inherit'],\n          },\n          'number',\n        ],\n      },\n      description: '指定图标大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'type',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '图标类型',\n              en_US: 'Icon',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: type | 说明: 图标类型',\n              en_US: 'prop: type | description: icon type',\n            },\n          },\n          setter: {\n            componentName: 'IconSetter',\n            props: {\n              hasClear: false,\n            },\n          },\n        },\n      ],\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: (currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n        onMouseDownHook: (e: MouseEvent, currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n        onClickHook: (e: MouseEvent, currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n        onMoveHook: (currentNode: IPublicModelNode) => {\n          return !currentNode?.getPropValue('disabled');\n        },\n      },\n    },\n  },\n  category: '通用',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/icon/snippets.ts",
    "content": "export default [\n  {\n    title: '图标',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i1/O1CN01yR8vcY1M504YbHxzo_!!6000000001382-55-tps-56-56.svg',\n    schema: {\n      componentName: 'Icon',\n      props: {\n        type: 'smile',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/img/meta.ts",
    "content": "module.exports = {\n  componentName: 'Image',\n  title: '图片',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Image',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'src',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '图片链接',\n          en_US: 'Image Address',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: src | 说明: 图片链接',\n          en_US: 'prop: src | description: image address',\n        },\n      },\n      propType: 'string',\n      defaultValue: 'https://img.alicdn.com/tps/TB16TQvOXXXXXbiaFXXXXXXXXXX-120-120.svg',\n    },\n    {\n      name: 'title',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标题',\n          en_US: 'Title',\n        },\n      },\n      propType: 'string',\n    },\n    {\n      name: 'alt',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '代替文本',\n          en_US: 'Alt',\n        },\n      },\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  icon: 'https://img.alicdn.com/imgextra/i3/O1CN01tnhXhk1GUIFhsXwzA_!!6000000000625-55-tps-56-56.svg',\n  category: '基础元素',\n  group: '精选组件',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/img/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '图片',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01tnhXhk1GUIFhsXwzA_!!6000000000625-55-tps-56-56.svg',\n    schema: {\n      title: '图片',\n      componentName: 'Image',\n      props: {\n        src: 'https://img.alicdn.com/tps/TB16TQvOXXXXXbiaFXXXXXXXXXX-120-120.svg',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/inner/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Inner',\n  title: 'Inner',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Dialog',\n    main: '',\n    destructuring: true,\n    subName: 'Inner',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'footer',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'bool',\n          {\n            type: 'instanceOf',\n            value: 'node',\n          },\n        ],\n      },\n    },\n    {\n      name: 'footerAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'center', 'right'],\n      },\n      defaultValue: 'right',\n    },\n    {\n      name: 'footerActions',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      defaultValue: ['ok', 'cancel'],\n    },\n    {\n      name: 'onOk',\n      propType: 'func',\n    },\n    {\n      name: 'onCancel',\n      propType: 'func',\n    },\n    {\n      name: 'okProps',\n      propType: 'object',\n    },\n    {\n      name: 'cancelProps',\n      propType: 'object',\n    },\n    {\n      name: 'closeable',\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'role',\n      propType: 'string',\n      defaultValue: 'dialog',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'height',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input/meta.design.ts",
    "content": "import snippets from './snippets.design';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Input',\n  title: '输入框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Input',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'label',\n      propType: 'string',\n      title: '标签文案',\n      description: 'label',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n      description: 'ID',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否出现清除按钮',\n    },\n    {\n      name: 'state',\n      title: '状态',\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'loading', 'success', 'warning'],\n      },\n      description: '状态\\n@enumdesc 错误, 校验中, 成功, 警告',\n    },\n    {\n      name: 'size',\n      title: '尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸\\n@enumdesc 小, 中, 大',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'maxLength',\n      propType: 'number',\n      description: '最大长度',\n    },\n    {\n      name: 'showLimitHint',\n      propType: 'bool',\n      description: '是否展现最大长度样式',\n    },\n    {\n      name: 'cutString',\n      propType: 'bool',\n      description: '是否截断超出字符串',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'trim',\n      propType: 'bool',\n      description: 'onChange返回会自动去除头尾空字符',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '是否有边框',\n    },\n    {\n      name: 'onPressEnter',\n      propType: 'func',\n      description: '按下回车的回调',\n    },\n    {\n      name: 'onClear',\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n    {\n      name: 'hint',\n      title: 'Icon 水印',\n      propType: 'string',\n      description: '水印 (Icon的type类型，和hasClear占用一个地方)',\n    },\n    {\n      name: 'innerBefore',\n      propType: 'string',\n      description: '文字前附加内容',\n    },\n    {\n      name: 'innerAfter',\n      propType: 'string',\n      description: '文字后附加内容',\n    },\n    {\n      name: 'addonBefore',\n      propType: 'string',\n      description: '输入框前附加内容',\n    },\n    {\n      name: 'addonAfter',\n      propType: 'string',\n      description: '输入框后附加内容',\n    },\n    {\n      name: 'addonTextBefore',\n      propType: 'string',\n      description: '输入框前附加文字',\n    },\n    {\n      name: 'addonTextAfter',\n      propType: 'string',\n      description: '输入框后附加文字',\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '自动聚焦',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'defaultValue',\n        title: '内容',\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'state',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '状态',\n            en_US: 'State',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: state | 说明: 状态\\n@enumdesc 错误, 校验中, 成功, 警告',\n            en_US: 'prop: state | description: input state',\n          },\n        },\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                value: 'error',\n                title: '错误',\n              },\n              {\n                value: 'loading',\n                title: '加载',\n              },\n              {\n                value: 'success',\n                title: '成功',\n              },\n              {\n                value: 'warning',\n                title: '警告',\n              },\n              {\n                value: '',\n                title: '默认',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: '!widget',\n        title: '部件',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '无',\n                value: 'default',\n              },\n              {\n                title: '数字',\n                value: 'number',\n              },\n              {\n                value: 'clear',\n                title: '清除',\n              },\n            ],\n          },\n        },\n        getValue: (target) => {\n          const parentTarget = target.parent;\n          const hasClear = parentTarget.getPropValue('hasClear');\n          const showLimitHint = parentTarget.getPropValue('showLimitHint');\n          if (hasClear) {\n            return 'clear';\n          } else if (showLimitHint) {\n            return 'number';\n          } else {\n            return 'default';\n          }\n        },\n        setValue: (target, value) => {\n          const parentTarget = target.parent;\n          parentTarget.setPropValue('hasClear', false);\n          parentTarget.setPropValue('showLimitHint', false);\n          switch (value) {\n            case 'default':\n              break;\n            case 'clear':\n              parentTarget.setPropValue('hasClear', true);\n              break;\n            case 'number':\n              parentTarget.setPropValue('showLimitHint', true);\n              break;\n            default:\n              break;\n          }\n        },\n      },\n      {\n        name: 'maxLength',\n        title: '限制字数',\n        condition: (target) => target?.parent?.getPropValue('showLimitHint'),\n        setter: 'NumberSetter',\n        defaultValue: 20,\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'hasBorder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示边框',\n            en_US: 'ShowBorder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasBorder | 说明: 是否有边框',\n            en_US: 'prop: hasBorder | description: HasBorder',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '无',\n                value: false,\n              },\n              {\n                label: '有',\n                value: true,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: 'label|输入框内置标签',\n        },\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: 'placeholder|输入提示',\n        },\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n        defaultValue: '请输入',\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Input',\n  title: '输入框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Input',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'label',\n      propType: 'string',\n      title: '标签文案',\n      description: 'label',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n      description: 'ID',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否出现清除按钮',\n    },\n    {\n      name: 'state',\n      title: '状态',\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'loading', 'success', 'warning'],\n      },\n      description: '状态\\n@enumdesc 错误, 校验中, 成功, 警告',\n    },\n    {\n      name: 'size',\n      title: '尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸\\n@enumdesc 小, 中, 大',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'maxLength',\n      propType: 'number',\n      description: '最大长度',\n    },\n    {\n      name: 'hasLimitHint',\n      propType: 'bool',\n      description: '是否展现最大长度样式',\n    },\n    {\n      name: 'cutString',\n      propType: 'bool',\n      description: '是否截断超出字符串',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'trim',\n      propType: 'bool',\n      description: 'onChange返回会自动去除头尾空字符',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '是否有边框',\n    },\n    {\n      name: 'onPressEnter',\n      propType: 'func',\n      description: '按下回车的回调',\n    },\n    {\n      name: 'onClear',\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n    {\n      name: 'hint',\n      title: 'Icon 水印',\n      propType: 'string',\n      description: '水印 (Icon的type类型，和hasClear占用一个地方)',\n    },\n    {\n      name: 'innerBefore',\n      propType: 'string',\n      description: '文字前附加内容',\n    },\n    {\n      name: 'innerAfter',\n      propType: 'string',\n      description: '文字后附加内容',\n    },\n    {\n      name: 'addonBefore',\n      propType: 'string',\n      description: '输入框前附加内容',\n    },\n    {\n      name: 'addonAfter',\n      propType: 'string',\n      description: '输入框后附加内容',\n    },\n    {\n      name: 'addonTextBefore',\n      propType: 'string',\n      description: '输入框前附加文字',\n    },\n    {\n      name: 'addonTextAfter',\n      propType: 'string',\n      description: '输入框后附加文字',\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '自动聚焦',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'label',\n        setter: 'StringSetter',\n        supportVariable: true,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签文本',\n            en_US: 'Label',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: label | 说明: 标签文本内容',\n            en_US: 'prop: label | description: label content',\n          },\n        },\n        description: 'label',\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入提示',\n            en_US: 'Placeholder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: placeholder | 说明: 输入提示',\n            en_US: 'prop: placeholder | description: placeholder',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'state',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '状态',\n            en_US: 'State',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: state | 说明: 状态\\n@enumdesc 错误, 校验中, 成功, 警告',\n            en_US: 'prop: state | description: input state',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                value: 'error',\n                title: 'error',\n              },\n              {\n                value: 'loading',\n                title: 'loading',\n              },\n              {\n                value: 'success',\n                title: 'success',\n              },\n              {\n                value: 'warning',\n                title: 'warning',\n              },\n              {\n                value: '',\n                title: '默认',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'maxLength',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '最大长度',\n            en_US: 'MaxLength',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: maxLength | 说明: 最大长度',\n            en_US: 'prop: maxLength | description: max length',\n          },\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n        description: '最大长度',\n      },\n      {\n        name: 'hasClear',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示清除',\n            en_US: 'Show Clear',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasClear | 说明: 是否出现清除按钮',\n            en_US: 'prop: hasClear | description: show clear icon',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否出现清除按钮',\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否禁用',\n            en_US: 'Disabled',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: disabled | 说明: 是否被禁用',\n            en_US: 'prop: disabled | description: disabled',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否禁用',\n      },\n      {\n        name: 'hasLimitHint',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '展示限制',\n            en_US: 'ShowLimit',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasLimitHint | 说明: 是否展现最大长度样式',\n            en_US: 'prop: hasLimitHint | description: hasLimitHint',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否展现最大长度样式',\n      },\n      {\n        name: 'cutString',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否截断',\n            en_US: 'Cut Off',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: cutString | 说明: 是否截断超出字符串',\n            en_US: 'prop: cutString | description: whether cut off string',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否截断超出字符串',\n      },\n      {\n        name: 'readOnly',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否只读',\n            en_US: 'ReadOnly',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: readOnly | 说明: 是否只读',\n            en_US: 'prop: readOnly | description: ReadOnly',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否只读',\n      },\n      {\n        name: 'trim',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否 Trim',\n            en_US: 'Trim',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: trim | 说明: onChange返回会自动去除头尾空字符',\n            en_US: 'prop: trim | description: whether trim when onChange called',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'hasBorder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示边框',\n            en_US: 'ShowBorder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasBorder | 说明: 是否有边框',\n            en_US: 'prop: hasBorder | description: HasBorder',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'autoFocus',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '自动聚焦',\n            en_US: 'Auto Focus',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: autoFocus | 说明: 自动聚焦',\n            en_US: 'prop: autoFocus | description: autoFocus',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '自动聚焦',\n      },\n      {\n        name: 'hint',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: 'Icon 水印',\n            en_US: 'IconHint',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hint | 说明: Icon 水印',\n            en_US: 'prop: hint | description: Icon hint',\n          },\n        },\n        setter: {\n          componentName: 'IconSetter',\n        },\n      },\n      {\n        name: 'innerBefore',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '文字前附加内容',\n            en_US: 'Inner Before',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: innerBefore | 说明: 文字前附加内容',\n            en_US: 'prop: innerBefore | description: innerBefore',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'innerAfter',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '文字后附加内容',\n            en_US: 'Inner After',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: innerAfter | 说明: 文字后附加内容',\n            en_US: 'prop: innerAfter | description: innerAfter',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonBefore',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框前附加内容',\n            en_US: 'Addon Before',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonBefore | 说明: 输入框前附加内容',\n            en_US: 'prop: addonBefore | description: addonBefore',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonAfter',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框后附加内容',\n            en_US: 'Addon After',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonAfter | 说明: 输入框后附加内容',\n            en_US: 'prop: addonAfter | description: addonAfter',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonTextBefore',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框前附加文字',\n            en_US: 'Text Before',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonTextBefore | 说明: 输入框前附加文字',\n            en_US: 'prop: addonTextBefore | description: addonTextBefore',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonTextAfter',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框后附加文字',\n            en_US: 'Text After',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonTextAfter | 说明: 输入框后附加文字',\n            en_US: 'prop: addonTextAfter | description: addonTextAfter',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input/snippets.design.ts",
    "content": "export default [\n  {\n    title: '输入框',\n    screenshot: 'https://img.alicdn.com/tfs/TB1ysp3u8v0gK0jSZKbXXbK2FXa-112-64.png',\n    schema: {\n      componentName: 'Input',\n      props: {\n        hasBorder: true,\n        size: 'medium',\n        autoComplete: 'off',\n        placeholder: '请输入',\n        maxLength: 20,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input/snippets.ts",
    "content": "export default [\n  {\n    title: '输入框',\n    screenshot: 'https://img.alicdn.com/tfs/TB1ysp3u8v0gK0jSZKbXXbK2FXa-112-64.png',\n    schema: {\n      componentName: 'Input',\n      props: {\n        hasBorder: true,\n        size: 'medium',\n        autoComplete: 'off',\n        placeholder: '请输入',\n      },\n    },\n  },\n  {\n    title: '密码框',\n    screenshot: 'https://img.alicdn.com/tfs/TB1ikF3u7P2gK0jSZPxXXacQpXa-112-64.png',\n    schema: {\n      componentName: 'Input.Password',\n      props: {\n        hasBorder: true,\n        size: 'medium',\n        autoComplete: 'off',\n      },\n    },\n  },\n  {\n    title: 'TextArea',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_input.png',\n    schema: {\n      componentName: 'Input.TextArea',\n      props: {\n        hasBorder: true,\n        size: 'medium',\n        autoComplete: 'off',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input/view.tsx",
    "content": "import * as React from 'react';\nimport { Input } from '@alifd/next';\nimport { ValueWrapper } from 'lowcode/utils/component-wrapper';\n\nexport default ValueWrapper(Input, 'Input');\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input-group/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Input.Group',\n  title: 'Input.Group',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Input',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      description: '样式前缀',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'addonBefore',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '输入框前附加内容',\n    },\n    {\n      name: 'addonBeforeClassName',\n      propType: 'string',\n      description: '输入框前附加内容css',\n    },\n    {\n      name: 'addonAfter',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '输入框后附加内容',\n    },\n    {\n      name: 'addonAfterClassName',\n      propType: 'string',\n      description: '输入框后额外css',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      description: 'rtl',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input-password/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Input.Password',\n  title: '密码框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Input',\n    main: '',\n    destructuring: true,\n    subName: 'Password',\n  },\n  props: [\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'showToggle',\n      propType: 'bool',\n      description: '是否展示切换按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      title: '标签文案',\n      description: 'label',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否出现清除按钮',\n    },\n    {\n      name: 'state',\n      title: '状态',\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'loading', 'success', 'warning'],\n      },\n      description: '状态\\n@enumdesc 错误, 校验中, 成功, 警告',\n    },\n    {\n      name: 'size',\n      title: '尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸\\n@enumdesc 小, 中, 大',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'maxLength',\n      propType: 'number',\n      description: '最大长度',\n    },\n    {\n      name: 'hasLimitHint',\n      propType: 'bool',\n      description: '是否展现最大长度样式',\n    },\n    {\n      name: 'cutString',\n      propType: 'bool',\n      description: '是否截断超出字符串',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'trim',\n      propType: 'bool',\n      description: 'onChange返回会自动去除头尾空字符',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '是否有边框',\n    },\n    {\n      name: 'onPressEnter',\n      propType: 'func',\n      description: '按下回车的回调',\n    },\n    {\n      name: 'onClear',\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n    {\n      name: 'hint',\n      title: 'Icon 水印',\n      propType: 'string',\n      description: '水印 (Icon的type类型，和hasClear占用一个地方)',\n    },\n    {\n      name: 'innerBefore',\n      propType: 'string',\n      description: '文字前附加内容',\n    },\n    {\n      name: 'innerAfter',\n      propType: 'string',\n      description: '文字后附加内容',\n    },\n    {\n      name: 'addonBefore',\n      propType: 'string',\n      description: '输入框前附加内容',\n    },\n    {\n      name: 'addonAfter',\n      propType: 'string',\n      description: '输入框后附加内容',\n    },\n    {\n      name: 'addonTextBefore',\n      propType: 'string',\n      description: '输入框前附加文字',\n    },\n    {\n      name: 'addonTextAfter',\n      propType: 'string',\n      description: '输入框后附加文字',\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '自动聚焦',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'label',\n        setter: 'StringSetter',\n        supportVariable: true,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签文本',\n            en_US: 'Label',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: label | 说明: 标签文本内容',\n            en_US: 'prop: label | description: label content',\n          },\n        },\n        description: 'label',\n      },\n      {\n        name: 'maxLength',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '最大长度',\n            en_US: 'MaxLength',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: maxLength | 说明: 最大长度',\n            en_US: 'prop: maxLength | description: max length',\n          },\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n        description: '最大长度',\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入提示',\n            en_US: 'Placeholder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: placeholder | 说明: 输入提示',\n            en_US: 'prop: placeholder | description: placeholder',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'state',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '状态',\n            en_US: 'State',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: state | 说明: 状态\\n@enumdesc 错误, 校验中, 成功, 警告',\n            en_US: 'prop: state | description: input state',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['error', 'loading', 'success', 'warning'],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'showToggle',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示切换',\n            en_US: 'Show Togger',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: showToggle | 说明: 是否展示切换按钮',\n            en_US: 'prop: showToggle | description: show togger icon',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        defaultValue: true,\n      },\n      {\n        name: 'hasClear',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示清除',\n            en_US: 'Show Clear',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasClear | 说明: 是否出现清除按钮',\n            en_US: 'prop: hasClear | description: show clear icon',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否出现清除按钮',\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否禁用',\n            en_US: 'Disabled',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: disabled | 说明: 是否被禁用',\n            en_US: 'prop: disabled | description: disabled',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否禁用',\n      },\n      {\n        name: 'hasLimitHint',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '展示限制',\n            en_US: 'ShowLimit',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasLimitHint | 说明: 是否展现最大长度样式',\n            en_US: 'prop: hasLimitHint | description: hasLimitHint',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否展现最大长度样式',\n      },\n      {\n        name: 'cutString',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否截断',\n            en_US: 'Cut Off',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: cutString | 说明: 是否截断超出字符串',\n            en_US: 'prop: cutString | description: whether cut off string',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否截断超出字符串',\n      },\n      {\n        name: 'readOnly',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否只读',\n            en_US: 'ReadOnly',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: readOnly | 说明: 是否只读',\n            en_US: 'prop: readOnly | description: ReadOnly',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否只读',\n      },\n      {\n        name: 'trim',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否 Trim',\n            en_US: 'Trim',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: trim | 说明: onChange返回会自动去除头尾空字符',\n            en_US: 'prop: trim | description: whether trim when onChange called',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'hasBorder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示边框',\n            en_US: 'ShowBorder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasBorder | 说明: 是否有边框',\n            en_US: 'prop: hasBorder | description: HasBorder',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'autoFocus',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '自动聚焦',\n            en_US: 'Auto Focus',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: autoFocus | 说明: 自动聚焦',\n            en_US: 'prop: autoFocus | description: autoFocus',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '自动聚焦',\n      },\n      {\n        name: 'hint',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: 'Icon 水印',\n            en_US: 'IconHint',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hint | 说明: Icon 水印',\n            en_US: 'prop: hint | description: Icon hint',\n          },\n        },\n        setter: {\n          componentName: 'IconSetter',\n        },\n      },\n      {\n        name: 'innerBefore',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '文字前附加内容',\n            en_US: 'Inner Before',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: innerBefore | 说明: 文字前附加内容',\n            en_US: 'prop: innerBefore | description: innerBefore',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'innerAfter',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '文字后附加内容',\n            en_US: 'Inner After',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: innerAfter | 说明: 文字后附加内容',\n            en_US: 'prop: innerAfter | description: innerAfter',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonBefore',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框前附加内容',\n            en_US: 'Addon Before',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonBefore | 说明: 输入框前附加内容',\n            en_US: 'prop: addonBefore | description: addonBefore',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonAfter',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框后附加内容',\n            en_US: 'Addon After',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonAfter | 说明: 输入框后附加内容',\n            en_US: 'prop: addonAfter | description: addonAfter',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonTextBefore',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框前附加文字',\n            en_US: 'Text Before',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonTextBefore | 说明: 输入框前附加文字',\n            en_US: 'prop: addonTextBefore | description: addonTextBefore',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'addonTextAfter',\n        display: 'block',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入框后附加文字',\n            en_US: 'Text After',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: addonTextAfter | 说明: 输入框后附加文字',\n            en_US: 'prop: addonTextAfter | description: addonTextAfter',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/input-text-area/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Input.TextArea',\n  title: '多行文本框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Input',\n    main: '',\n    destructuring: true,\n    subName: 'TextArea',\n  },\n  props: [\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '是否有边框',\n      defaultValue: true,\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'warning'],\n      },\n      description: '状态\\n@enumdesc 错误',\n    },\n    {\n      name: 'autoHeight',\n      propType: 'bool',\n      description: '自动高度 true / {minRows: 2, maxRows: 4}',\n      defaultValue: false,\n    },\n    {\n      name: 'rows',\n      propType: 'number',\n      description:\n        '多行文本框高度 <br />(不要直接用height设置多行文本框的高度, ie9 10会有兼容性问题)',\n      defaultValue: 4,\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'onClear',\n      propType: 'func',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n    },\n    {\n      name: 'onFocus',\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'rows',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '行数',\n            en_US: 'Rows',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN:\n              '属性: rows | 说明: 多行文本框高度 <br />(不要直接用height设置多行文本框的高度, ie9 10会有兼容性问题)',\n            en_US: 'prop: rows | description: row numbers',\n          },\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n        defaultValue: 4,\n      },\n      {\n        name: 'maxLength',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '最大长度',\n            en_US: 'MaxLength',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: maxLength | 说明: 最大长度',\n            en_US: 'prop: maxLength | description: max length',\n          },\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n        description: '最大长度',\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '输入提示',\n            en_US: 'Placeholder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: placeholder | 说明: 输入提示',\n            en_US: 'prop: placeholder | description: placeholder',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'state',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '状态',\n            en_US: 'State',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: state | 说明: 状态\\n@enumdesc 错误',\n            en_US: 'prop: state | description: input state',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['error', 'warning'],\n          },\n        },\n      },\n      {\n        name: 'autoHeight',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '自动高度',\n            en_US: 'Auto Height',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: autoHeight | 说明: 自动高度 true / {minRows: 2, maxRows: 4}',\n            en_US: 'prop: autoHeight | description: auto height',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        defaultValue: false,\n      },\n      {\n        name: 'isPreview',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '预览态',\n            en_US: 'Preview',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: isPreview | 说明: 是否为预览态',\n            en_US: 'prop: isPreview | description: preview',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        defaultValue: false,\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否禁用',\n            en_US: 'Disabled',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: disabled | 说明: 是否被禁用',\n            en_US: 'prop: disabled | description: disabled',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否禁用',\n      },\n      {\n        name: 'hasLimitHint',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '展示限制',\n            en_US: 'ShowLimit',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasLimitHint | 说明: 是否展现最大长度样式',\n            en_US: 'prop: hasLimitHint | description: hasLimitHint',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否展现最大长度样式',\n      },\n      {\n        name: 'cutString',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否截断',\n            en_US: 'Cut Off',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: cutString | 说明: 是否截断超出字符串',\n            en_US: 'prop: cutString | description: whether cut off string',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否截断超出字符串',\n      },\n      {\n        name: 'readOnly',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否只读',\n            en_US: 'ReadOnly',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: readOnly | 说明: 是否只读',\n            en_US: 'prop: readOnly | description: ReadOnly',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否只读',\n      },\n      {\n        name: 'trim',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否 Trim',\n            en_US: 'Trim',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: trim | 说明: onChange返回会自动去除头尾空字符',\n            en_US: 'prop: trim | description: whether trim when onChange called',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'hasBorder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示边框',\n            en_US: 'ShowBorder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasBorder | 说明: 是否有边框',\n            en_US: 'prop: hasBorder | description: HasBorder',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'autoFocus',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '自动聚焦',\n            en_US: 'Auto Focus',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: autoFocus | 说明: 自动聚焦',\n            en_US: 'prop: autoFocus | description: autoFocus',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '自动聚焦',\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/link/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Link',\n  title: '链接',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Link',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'href',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '超链接',\n          en_US: 'Link',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性：href | 说明：超链接地址',\n          en_US: 'prop: href | description: link address',\n        },\n      },\n      propType: 'string',\n      defaultValue: 'https://fusion.design',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '链接文案',\n          en_US: 'Text',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性：children | 说明：超链接文案',\n          en_US: 'prop: children | description: text of the link',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      defaultValue: '这是一个超链接',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'target',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '页面目标',\n          en_US: 'Target',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性：target | 说明：跳转页面目标',\n          en_US: 'prop: target | description: target of new page',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['_blank', '_self'],\n      },\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onClick'],\n    },\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'children',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '链接文案',\n            en_US: 'Text',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性：children | 说明：超链接文案',\n            en_US: 'prop: children | description: text of the link',\n          },\n        },\n        setter: 'StringSetter',\n        defaultValue: '这是一个超链接',\n      },\n      {\n        name: '!configType',\n        title: '配置方式',\n        defaultValue: 'link',\n        condition: () => {\n          return AliLowCodeEngine.setters.getSetter('BehaviorSetter');\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '交互配置',\n                value: 'behavior',\n              },\n              {\n                label: '链接配置',\n                value: 'link',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'behavior',\n        title: '交互设置',\n        display: 'block',\n        condition: (target) => {\n          const configType = target.parent.getPropValue('!configType');\n          console.log('configType: ', configType);\n          return configType === 'behavior' && AliLowCodeEngine.setters.getSetter('BehaviorSetter');\n        },\n        setter: {\n          componentName: 'BehaviorSetter',\n          props: () => {\n            return {\n              actions: ['onClick'],\n              type: 'link',\n            };\n          },\n        },\n      },\n      {\n        name: 'target',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '页面目标',\n            en_US: 'Target',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性：target | 说明：跳转页面目标',\n            en_US: 'prop: target | description: target of new page',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                value: '_self',\n                title: '当前页面',\n              },\n              {\n                value: '_blank',\n                title: '新开页面',\n              },\n            ],\n          },\n        },\n        condition: (target) => {\n          const configType = target.parent.getPropValue('!configType');\n          return !configType || configType === 'link';\n        },\n      },\n      {\n        name: 'href',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '跳转链接',\n            en_US: 'Link',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性：href | 说明：超链接地址',\n            en_US: 'prop: href | description: link address',\n          },\n        },\n        setter: 'StringSetter',\n        condition: (target) => {\n          const configType = target.parent.getPropValue('!configType');\n          return !configType || configType === 'link';\n        },\n      },\n    ],\n  },\n  icon:\n    'https://img.alicdn.com/imgextra/i4/O1CN01aGiT9s1ScmzUSmn4s_!!6000000002268-55-tps-56-56.svg',\n  category: '通用',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/link/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Link',\n  title: '链接',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Link',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'href',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '超链接',\n          en_US: 'Link',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性：href | 说明：超链接地址',\n          en_US: 'prop: href | description: link address',\n        },\n      },\n      propType: 'string',\n      defaultValue: 'https://fusion.design',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '链接文案',\n          en_US: 'Text',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性：children | 说明：超链接文案',\n          en_US: 'prop: children | description: text of the link',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      defaultValue: '这是一个超链接',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'target',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '页面目标',\n          en_US: 'Target',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性：target | 说明：跳转页面目标',\n          en_US: 'prop: target | description: target of new page',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['_blank', '_self'],\n      },\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onClick'],\n    },\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'children',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '链接文案',\n            en_US: 'Text',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性：children | 说明：超链接文案',\n            en_US: 'prop: children | description: text of the link',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n        defaultValue: '这是一个超链接',\n      },\n      {\n        name: '!configType',\n        title: '配置方式',\n        defaultValue: 'link',\n        condition: () => {\n          return AliLowCodeEngine.setters.getSetter('BehaviorSetter');\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '交互配置',\n                value: 'behavior',\n              },\n              {\n                label: '链接配置',\n                value: 'link',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'behavior',\n        title: '交互设置',\n        display: 'block',\n        condition: (target) => {\n          const configType = target.parent.getPropValue('!configType');\n          console.log('configType: ', configType);\n          return configType === 'behavior' && AliLowCodeEngine.setters.getSetter('BehaviorSetter');\n        },\n        setter: {\n          componentName: 'BehaviorSetter',\n          props: (target) => {\n            return {\n              actions: ['onClick'],\n              type: 'link',\n            };\n          },\n        },\n      },\n      {\n        name: 'target',\n        condition: () => false,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '页面目标',\n            en_US: 'Target',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性：target | 说明：跳转页面目标',\n            en_US: 'prop: target | description: target of new page',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                value: '_self',\n                title: '当前页面',\n              },\n              {\n                value: '_blank',\n                title: '新开页面',\n              },\n            ],\n          },\n        },\n        condition: (target) => {\n          const configType = target.parent.getPropValue('!configType');\n          return !configType || configType === 'link';\n        },\n      },\n      {\n        name: 'href',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '跳转链接',\n            en_US: 'Link',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性：href | 说明：超链接地址',\n            en_US: 'prop: href | description: link address',\n          },\n        },\n        setter: 'StringSetter',\n        condition: (target) => {\n          const configType = target.parent.getPropValue('!configType');\n          return !configType || configType === 'link';\n        },\n        supportVariable: true,\n      },\n    ],\n  },\n  icon: 'https://img.alicdn.com/imgextra/i4/O1CN01aGiT9s1ScmzUSmn4s_!!6000000002268-55-tps-56-56.svg',\n  category: '通用',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/link/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '链接',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN01aGiT9s1ScmzUSmn4s_!!6000000002268-55-tps-56-56.svg',\n    schema: {\n      componentName: 'Link',\n      title: '链接',\n      props: {\n        href: 'https://fusion.design',\n        target: '_blank',\n        children: '这是一个超链接',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/list/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'List',\n  title: '列表',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'List',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'header',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium'],\n      },\n    },\n    {\n      name: 'footer',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n    {\n      name: 'divider',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/list-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'List.Item',\n  title: '列表项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'List',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n    {\n      name: 'description',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n    {\n      name: 'media',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n    {\n      name: 'extra',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n    },\n  ],\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/loading/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Loading',\n  title: '加载',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Loading',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'tip',\n      propType: 'string',\n      description: '自定义内容',\n    },\n    {\n      name: 'tipAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['right', 'bottom'],\n      },\n      description: '自定义内容位置',\n      defaultValue: 'bottom',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: 'loading 状态, 默认 true',\n      defaultValue: true,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium'],\n      },\n      description: '设置动画尺寸\\n@description 仅仅对默认动画效果起作用\\n@enumdesc 大号, 中号',\n      defaultValue: 'large',\n    },\n    {\n      name: 'color',\n      propType: 'string',\n      description: '动画颜色',\n    },\n    {\n      name: 'fullScreen',\n      propType: 'bool',\n      description: '全屏展示',\n    },\n    {\n      name: 'inline',\n      title: 'inline',\n      propType: 'bool',\n      description: 'should loader be displayed inline',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'tip',\n        title: {\n          label: '自定义内容',\n          tip: '',\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'tipAlign',\n        title: {\n          label: '内容位置',\n          tip: '自定义内容位置',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '动画右边',\n                value: 'right',\n              },\n              {\n                title: '动画下面',\n                value: 'bottom',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: '动画尺寸',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '大',\n                value: 'large',\n              },\n              {\n                title: '中',\n                value: 'medium',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'color',\n        title: '动画颜色',\n        setter: {\n          componentName: 'ColorSetter',\n        },\n      },\n      {\n        name: 'visible',\n        title: {\n          label: '是否显示',\n        },\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'fullScreen',\n        title: '全屏显示',\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'inline',\n        title: '行内显示',\n        setter: 'BoolSetter',\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onVisibleChange'],\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/loading/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Loading',\n  title: '加载',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Loading',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'tip',\n      propType: 'string',\n      description: '自定义内容',\n    },\n    {\n      name: 'tipAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['right', 'bottom'],\n      },\n      description: '自定义内容位置',\n      defaultValue: 'bottom',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: 'loading 状态, 默认 true',\n      defaultValue: true,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium'],\n      },\n      description: '设置动画尺寸\\n@description 仅仅对默认动画效果起作用\\n@enumdesc 大号, 中号',\n      defaultValue: 'large',\n    },\n    {\n      name: 'color',\n      propType: 'string',\n      description: '动画颜色',\n    },\n    {\n      name: 'fullScreen',\n      propType: 'bool',\n      description: '全屏展示',\n    },\n    {\n      name: 'inline',\n      title: 'inline',\n      propType: 'bool',\n      description: 'should loader be displayed inline',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'tip',\n        title: {\n          label: '自定义内容',\n          tip: '',\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'tipAlign',\n        title: {\n          label: '内容位置',\n          tip: '自定义内容位置',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '动画右边',\n                value: 'right',\n              },\n              {\n                title: '动画下面',\n                value: 'bottom',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'visible',\n        title: {\n          label: '是否显示',\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: '动画尺寸',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: 'large',\n                value: 'large',\n              },\n              {\n                title: 'medium',\n                value: 'medium',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'color',\n        title: '动画颜色',\n        setter: {\n          componentName: 'ColorSetter',\n        },\n      },\n      {\n        name: 'fullScreen',\n        title: '全屏显示',\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'inline',\n        title: '行内显示',\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onVisibleChange'],\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/loading/snippets.ts",
    "content": "export default [\n  {\n    title: '加载',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_loading.png',\n    schema: {\n      componentName: 'Loading',\n      props: {\n        color: 'red',\n        prefix: 'next-',\n        tipAlign: 'bottom',\n        visible: true,\n        size: 'large',\n        inline: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu/adaptor.ts",
    "content": "import parseData from '../utils/parse-data';\n\nexport const createDataSource = (\n  list,\n  keys = { selected: [], expanded: {} },\n  level = 0,\n  prefix = '',\n) => {\n  const array = [];\n  let group = [];\n  let grouping = false;\n  let index = 0;\n\n  list.forEach((item) => {\n    switch (item.type) {\n      // eslint-disable-next-line no-case-declarations\n      case 'node':\n        const key = `${prefix || level}-${index++}`;\n\n        if (item.children && item.children.length > 0) {\n          item.children = createDataSource(item.children, keys, level + 1, key);\n        }\n\n        if (grouping) {\n          group.push({\n            ...item,\n            key,\n          });\n        } else {\n          array.push({\n            ...item,\n            key,\n          });\n        }\n\n        if (item.state === 'active') {\n          if (item.children && item.children.length > 0) {\n            keys.expanded.push(key);\n          } else {\n            keys.selected.push(key);\n          }\n        }\n\n        return;\n      case 'comment':\n        if (group.length > 0) {\n          array.push({\n            type: 'group',\n            value: grouping,\n            children: group,\n            key: `${prefix || level}-${index++}`,\n          });\n          group = [];\n        }\n        grouping = item.value;\n        return;\n      case 'divider':\n        if (group.length > 0) {\n          array.push({\n            type: 'group',\n            value: grouping,\n            children: group,\n            key: `${prefix || level}-${index++}`,\n          });\n          group = [];\n        }\n        grouping = false;\n        array.push({\n          type: 'divider',\n          key: `${prefix || level}-${index++}`,\n        });\n        return;\n      default:\n        return;\n    }\n  });\n\n  if (group.length > 0) {\n    array.push({\n      type: 'group',\n      value: grouping,\n      children: group,\n      key: `${prefix || level}-${index++}`,\n    });\n    group = [];\n  }\n\n  return array;\n};\n\nconst createMenuItem = (item) => {\n  if (item.children.length > 0) {\n    // return (\n    //   <Menu.SubMenu key={item.key} disabled={item.state === 'disabled'} label={item.value ? item.value.filter(({ type }) => type === ContentType.text).map(({ value }) => value).join('') : ''}>\n    //     {createContents(item.children)}\n    //   </Menu.SubMenu>\n    // );\n    return {\n      componentName: 'SubMenu',\n      props: {\n        key: item.key,\n        disabled: item.state === 'disabled',\n        label: item.value\n          ? item.value\n              .filter(({ type }) => type === 'text')\n              .map(({ value }) => value)\n              .join('')\n          : '',\n      },\n      children: createContents(item.children),\n    };\n  }\n\n  // return <Menu.Item key={item.key} checked={item.state === 'active'} disabled={item.state === 'disabled'} children={item.value.map(({ type, value }, index) => type === 'icon' ? <Icon key={`icon_${index}`} type={value} size=\"small\" style={{ marginRight: '4px' }} /> : value)} />;\n  return {\n    componentName: 'Menu.Item',\n    props: {\n      key: item.key,\n      checked: item.state === 'active',\n      disabled: item.state === 'disabled',\n      onItemClick: () => {\n        console.log('menu item clicked');\n      },\n    },\n    children: item.value.map(({ type, value }, index) =>\n      type === 'icon'\n        ? {\n            componentName: 'Icon',\n            props: {\n              key: `icon_${index}`,\n              type: value,\n              size: 'small',\n              style: { marginRight: '4px' },\n            },\n          }\n        : value,\n    ),\n  };\n};\n\nexport const createContents = (array = []) => {\n  return array.map((item) => {\n    if (item.type === 'group' && item.children.length > 0) {\n      // return <Menu.Group key={item.key} label={item.value}>{item.children.map(it => createMenuItem(it))}</Menu.Group>;\n      return {\n        componentName: 'Menu.Group',\n        props: {\n          key: item.key,\n          label: item.value,\n        },\n        children: item.children.map((it) => createMenuItem(it)),\n      };\n    }\n\n    if (item.type === 'divider') {\n      // return <Menu.Divider key={item.key}/>;\n      return {\n        componentName: 'Menu.Divider',\n        props: {\n          key: item.key,\n        },\n      };\n    }\n\n    return createMenuItem(item);\n  });\n};\n\nexport function getDataFromPlainText(value) {\n  const keys = { selected: [], expanded: [] };\n  const list = parseData(value, { parseContent: true });\n  const dataSource = createDataSource(list, keys);\n  const children = createContents(dataSource);\n  return { children, selectedKeys: keys.selected };\n}\n\n// const _propsValue = ({ shape, level, size, data, ...others}) =>{\n//   const list = parseData(data, { parseContent: true });\n//   const buttonItem = list[0] ? list[0] : { value: []};\n//   const keys = { selected: [], expanded: [] };\n//   if (buttonItem.type !== 'node') return null;\n//   const label = buttonItem.value.map(({ type, value}) => {\n//     if (type === 'icon') return <Icon type={value} />;\n//     return value;\n//   });\n\n//   return {\n//     ...others,\n//     size,\n//     disabled: buttonItem.state === 'disabled',\n//     visible: buttonItem.state === 'active',\n//     type: shape === 'ghost' ? 'normal' : level,\n//     popupProps: { needAdjust: false, container: node => node },\n//     ghost: shape === 'ghost' ? level : false,\n//     selectMode: \"multiple\",\n//     menuProps: { openKeys: keys.expanded, style: { textAlign: 'left' } },\n//     selectedKeys: keys.selected,\n//     label: label\n//   };\n// };\n// export default {\n//     name: 'SplitButton',\n//     shape: ['normal', 'ghost'],\n//     editor: (shape = 'normal') => ({\n//         props: [{\n//             name: 'level',\n//             type: Types.enum,\n//             options: shape === 'ghost' ? ['light', 'dark'] : ['normal', 'primary', 'secondary'],\n//             default: shape === 'ghost' ? 'light' : 'normal',\n//         }, {\n//             name: 'size',\n//             type: Types.enum,\n//             options: ['large', 'medium', 'small'],\n//             default: 'medium'\n//         }],\n//         data: {\n//             icon: true,\n//             active: true,\n//             disable: true,\n//             default: 'Edit Document\\n\\tUndo\\n\\t*Redo\\n\\tCut\\n\\tCopy\\n\\tPaste'\n//         }\n//     }),\n//     propsValue: _propsValue,\n//     adaptor: (args) => {\n//         const list = parseData(args.data, { parseContent: true });\n//         const keys = { selected: [], expanded: [] };\n//         const dataSouce = createDataSource(list[0] ? list[0].children : [], keys);\n//         const props = _propsValue(args);\n//         return (\n//             <SplitButton\n//                 {...props}\n//             >\n//                 {createContents(dataSouce)}\n//             </SplitButton>\n//         );\n//     },\n//     demoOptions: (demo) => {\n//         const { node = { props: {} } } = demo;\n//         const { level, data } = node.props;\n//         if (data.indexOf('*') === 0) {\n//             demo = {\n//                 ...demo,\n//                 height: 250\n//             };\n//         }\n\n//         if (level === 'dark') {\n//             demo = {\n//                 ...demo,\n//                 background: '#333'\n//             };\n//         } else if(level === 'light') {\n//             demo = {\n//                 ...demo,\n//                 background: 'rgb(235, 236, 240)',\n//             };\n//         }\n\n//         return demo;\n//     }\n// };\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport { getDataFromPlainText } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Menu',\n  title: '菜单',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'dataSource',\n      propType: 'array',\n      description: '使用数据模型构建',\n    },\n    {\n      name: 'defaultExpandedKeys',\n      propType: {\n        type: 'arrayOf',\n        value: 'string',\n      },\n      description: '默认展开keys',\n    },\n    {\n      name: 'expandedKeys',\n      propType: {\n        type: 'arrayOf',\n        value: 'string',\n      },\n      description: '受控展开keys',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n      description: '展开状态发升变化时候的回调',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '所有禁用',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '扩展class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '组件接受行内样式',\n    },\n    {\n      name: 'accordion',\n      propType: 'bool',\n      description: '手风琴模式，一次只能打开一个',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: '!mode',\n        title: '模式',\n        setValue: (target, value) => {\n          const parentTarget = target.parent;\n          switch (value) {\n            case 'single':\n              parentTarget.setPropValue('selectMode', 'single');\n              break;\n            case 'multiple':\n              parentTarget.setPropValue('selectMode', 'multiple');\n              break;\n            case 'arrowLeft':\n              parentTarget.setPropValue('isSelectIconRight', false);\n              break;\n            case 'arrowRight':\n              parentTarget.setPropValue('isSelectIconRight', true);\n              break;\n            default:\n              break;\n          }\n        },\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                title: '单选框',\n                value: 'single',\n              },\n              {\n                title: '复选框',\n                value: 'multiple',\n              },\n              {\n                title: '箭头在左',\n                value: 'arrowLeft',\n              },\n              {\n                title: '箭头在右',\n                value: 'arrowRight',\n              },\n            ],\n          },\n        },\n        defaultValue: 'single',\n      },\n      {\n        name: 'mode',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '内联',\n                value: 'inline',\n              },\n              {\n                label: '弹出',\n                value: 'popup',\n              },\n            ],\n          },\n        },\n        title: '子菜单模式',\n        defaultValue: 'inline',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '内容',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const { children, selectedKeys } = getDataFromPlainText(value);\n          if (children) {\n            target.node.children.importSchema(children);\n          }\n          if (selectedKeys) {\n            target.parent.setPropValue('selectedKeys', selectedKeys);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n            disableIcon: true,\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Menu',\n  title: '菜单',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'onItemClick',\n      propType: 'func',\n      description:\n        '点击菜单项触发的回调函数\\n@param {String} key 点击的菜单项的 key 值\\n@param {Object} item 点击的菜单项对象\\n@param {Object} event 点击的事件对象',\n    },\n    {\n      name: 'defaultOpenAll',\n      propType: 'bool',\n      description:\n        \"初始展开所有的子菜单，只在 mode 设置为 'inline' 以及 openMode 设置为 'multiple' 下生效，优先级高于 defaultOpenKeys\",\n      defaultValue: false,\n    },\n    {\n      name: 'onOpen',\n      propType: 'func',\n      description:\n        '打开或关闭子菜单触发的回调函数\\n@param {String} key 打开的所有子菜单的 key 值\\n@param {Object} extra 额外参数\\n@param {String} extra.key 当前操作子菜单的 key 值\\n@param {Boolean} extra.open 是否是打开',\n    },\n    {\n      name: 'mode',\n      propType: {\n        type: 'oneOf',\n        value: ['inline', 'popup'],\n      },\n      description: '子菜单打开的模式',\n      defaultValue: 'inline',\n    },\n    {\n      name: 'triggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '子菜单打开的触发行为',\n      defaultValue: 'click',\n    },\n    {\n      name: 'openMode',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple'],\n      },\n      description:\n        '展开内连子菜单的模式，同时可以展开一个子菜单还是多个子菜单，该属性仅在 mode 为 inline 时生效',\n      defaultValue: 'multiple',\n    },\n    {\n      name: 'inlineIndent',\n      propType: 'number',\n      description: '内连子菜单缩进距离',\n      defaultValue: 20,\n    },\n    {\n      name: 'inlineArrowDirection',\n      propType: {\n        type: 'oneOf',\n        value: ['down', 'right'],\n      },\n      defaultValue: 'down',\n    },\n    {\n      name: 'popupAutoWidth',\n      propType: 'bool',\n      description:\n        '是否自动让弹层的宽度和菜单项保持一致，如果弹层的宽度比菜单项小则和菜单项保持一致，如果宽度大于菜单项则不做处理',\n      defaultValue: false,\n    },\n    {\n      name: 'popupAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['follow', 'outside'],\n      },\n      description: '弹层的对齐方式',\n      defaultValue: 'follow',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹出子菜单自定义 className',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description:\n        '选中或取消选中菜单项触发的回调函数\\n@param {Array} selectedKeys 选中的所有菜单项的值\\n@param {Object} item 选中或取消选中的菜单项\\n@param {Object} extra 额外参数\\n@param {Boolean} extra.select 是否是选中\\n@param {Array} extra.key 菜单项的 key\\n@param {Object} extra.label 菜单项的文本\\n@param {Array} extra.keyPath 菜单项 key 的路径',\n    },\n    {\n      name: 'selectMode',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple'],\n      },\n      description: '选中模式，单选还是多选，默认无值，不可选',\n    },\n    {\n      name: 'shallowSelect',\n      propType: 'bool',\n      description: '是否只能选择第一层菜单项（不能选择子菜单中的菜单项）',\n      defaultValue: false,\n    },\n    {\n      name: 'hasSelectedIcon',\n      propType: 'bool',\n      description: '是否显示选中图标，如果设置为 false 需配合配置平台设置选中时的背景色以示区分',\n      defaultValue: true,\n    },\n    {\n      name: 'labelToggleChecked',\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'isSelectIconRight',\n      propType: 'bool',\n      description:\n        '是否将选中图标居右，仅当 hasSelectedIcon 为true 时生效。\\n注意：SubMenu 上的选中图标一直居左，不受此API控制',\n      defaultValue: false,\n    },\n    {\n      name: 'direction',\n      propType: {\n        type: 'oneOf',\n        value: ['ver', 'hoz'],\n      },\n      description: '菜单第一层展示方向',\n      defaultValue: 'ver',\n    },\n    {\n      name: 'hozAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'right'],\n      },\n      description:\n        \"横向菜单条 item 和 footer 的对齐方向，在 direction 设置为 'hoz' 并且 header 存在时生效\",\n      defaultValue: 'left',\n    },\n    {\n      name: 'hozInLine',\n      propType: 'bool',\n      description:\n        \"横向菜单模式下，是否维持在一行，即超出一行折叠成 SubMenu 显示， 仅在 direction='hoz' mode='popup' 时生效\",\n      defaultValue: false,\n    },\n    {\n      name: 'header',\n      propType: 'node',\n      description: '自定义菜单头部',\n    },\n    {\n      name: 'footer',\n      propType: 'node',\n      description: '自定义菜单尾部',\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '是否自动获得焦点',\n      defaultValue: false,\n    },\n    {\n      name: 'focusedKey',\n      propType: 'string',\n      description: '当前获得焦点的子菜单或菜单项 key 值',\n    },\n    {\n      name: 'focusable',\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'onItemFocus',\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n    {\n      name: 'embeddable',\n      propType: 'bool',\n      description:\n        \"是否开启嵌入式模式，一般用于Layout的布局中，开启后没有默认背景、外层border、box-shadow，可以配合`<Menu style={{lineHeight: '100px'}}>` 自定义高度\",\n      defaultValue: false,\n    },\n    {\n      name: 'onItemKeyDown',\n      propType: 'func',\n    },\n    {\n      name: 'expandAnimation',\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'itemClassName',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'openKeys',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'arrayOf',\n            value: 'string',\n          },\n        ],\n      },\n      description: '当前打开的子菜单的 key 值',\n    },\n    {\n      name: 'defaultOpenKeys',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'arrayOf',\n            value: 'string',\n          },\n        ],\n      },\n      description: '初始打开的子菜单的 key 值',\n      defaultValue: [],\n    },\n    {\n      name: 'selectedKeys',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'arrayOf',\n            value: 'string',\n          },\n        ],\n      },\n      description: '当前选中菜单项的 key 值',\n    },\n    {\n      name: 'defaultSelectedKeys',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'arrayOf',\n            value: 'string',\n          },\n        ],\n      },\n      description: '初始选中菜单项的 key 值',\n      defaultValue: [],\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu/snippets.design.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\n\nconst plainData =\n  '#Group1\\noption1\\n*option2\\n\\tsub option3\\n\\t-sub option4\\n\\tsub option5\\n---\\n#Group2\\noption1\\n*option2';\nconst { children, selectedKeys } = getDataFromPlainText(plainData);\n\nconst menuProps = {\n  plainData,\n};\n\nif (selectedKeys && selectedKeys.length) {\n  menuProps.selectedKeys = selectedKeys;\n}\n\nexport default [\n  {\n    title: '菜单',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_dialog.png',\n    schema: {\n      componentName: 'Menu',\n      props: {\n        ...menuProps,\n      },\n      children,\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu-button/adaptor.ts",
    "content": "import parseData from '../utils/parse-data';\n\nexport const createDataSource = (\n  list,\n  keys = { selected: [], expanded: {} },\n  level = 0,\n  prefix = '',\n) => {\n  const array = [];\n  let group = [];\n  let grouping = false;\n  let index = 0;\n\n  list.forEach((item) => {\n    switch (item.type) {\n      // eslint-disable-next-line no-case-declarations\n      case 'node':\n        const key = `${prefix || level}-${index++}`;\n\n        if (item.children && item.children.length > 0) {\n          item.children = createDataSource(item.children, keys, level + 1, key);\n        }\n\n        if (grouping) {\n          group.push({\n            ...item,\n            key,\n          });\n        } else {\n          array.push({\n            ...item,\n            key,\n          });\n        }\n\n        if (item.state === 'active') {\n          if (item.children && item.children.length > 0) {\n            keys.expanded.push(key);\n          } else {\n            keys.selected.push(key);\n          }\n        }\n\n        return;\n      case 'comment':\n        if (group.length > 0) {\n          array.push({\n            type: 'group',\n            value: grouping,\n            children: group,\n            key: `${prefix || level}-${index++}`,\n          });\n          group = [];\n        }\n        grouping = item.value;\n        return;\n      case 'divider':\n        if (group.length > 0) {\n          array.push({\n            type: 'group',\n            value: grouping,\n            children: group,\n            key: `${prefix || level}-${index++}`,\n          });\n          group = [];\n        }\n        grouping = false;\n        array.push({\n          type: 'divider',\n          key: `${prefix || level}-${index++}`,\n        });\n\n      default:\n    }\n  });\n\n  if (group.length > 0) {\n    array.push({\n      type: 'group',\n      value: grouping,\n      children: group,\n      key: `${prefix || level}-${index++}`,\n    });\n    group = [];\n  }\n\n  return array;\n};\n\nconst createMenuItem = (item) => {\n  if (item.children.length > 0) {\n    // return (\n    //   <Menu.SubMenu key={item.key} disabled={item.state === 'disabled'} label={item.value ? item.value.filter(({ type }) => type === ContentType.text).map(({ value }) => value).join('') : ''}>\n    //     {createContents(item.children)}\n    //   </Menu.SubMenu>\n    // );\n    return {\n      componentName: 'SubMenu',\n      props: {\n        key: item.key,\n        disabled: item.state === 'disabled',\n        label: item.value\n          ? item.value\n              .filter(({ type }) => type === 'text')\n              .map(({ value }) => value)\n              .join('')\n          : '',\n      },\n      children: createContents(item.children),\n    };\n  }\n\n  // return <Menu.Item key={item.key} checked={item.state === 'active'} disabled={item.state === 'disabled'} children={item.value.map(({ type, value }, index) => type === 'icon' ? <Icon key={`icon_${index}`} type={value} size=\"small\" style={{ marginRight: '4px' }} /> : value)} />;\n  return {\n    componentName: 'Menu.Item',\n    props: {\n      key: item.key,\n      checked: item.state === 'active',\n      disabled: item.state === 'disabled',\n    },\n    children: item.value.map(({ type, value }, index) =>\n      type === 'icon'\n        ? {\n            componentName: 'Icon',\n            props: {\n              disabled: true,\n              key: `icon_${index}`,\n              type: value,\n              size: 'small',\n              style: { marginRight: '4px' },\n            },\n          }\n        : {\n            componentName: 'Typography.Text',\n            props: {\n              children: value,\n              style: {\n                color: 'inherit',\n              },\n            },\n          },\n    ),\n  };\n};\n\nexport const createContents = (array = []) => {\n  return array.map((item) => {\n    if (item.type === 'group' && item.children.length > 0) {\n      // return <Menu.Group key={item.key} label={item.value}>{item.children.map(it => createMenuItem(it))}</Menu.Group>;\n      return {\n        componentName: 'Menu.Group',\n        props: {\n          key: item.key,\n          label: item.value,\n        },\n        children: item.children.map((it) => createMenuItem(it)),\n      };\n    }\n\n    if (item.type === 'divider') {\n      // return <Menu.Divider key={item.key}/>;\n      return {\n        componentName: 'Menu.Divider',\n        props: {\n          key: item.key,\n        },\n      };\n    }\n\n    return createMenuItem(item);\n  });\n};\n\nfunction getButtonLabel(buttonItem) {\n  if (buttonItem.type !== 'node') return {};\n  // return buttonItem.value.find(item => item.type === 'text').value;\n  // FIXME: 渲染时 JSSlot 有问题，暂时不要 icon\n  return {\n    label: {\n      type: 'JSSlot',\n      value: buttonItem.value.map(({ type, value }) => {\n        if (type === 'icon')\n          return {\n            componentName: 'Icon',\n            props: {\n              disabled: true,\n              type: value,\n              size: 'small',\n              style: { marginRight: '4px' },\n            },\n          };\n        return {\n          componentName: 'Typography.Text',\n          props: {\n            children: value,\n            style: {\n              color: 'inherit',\n            },\n          },\n        };\n      }),\n    },\n    disabled: buttonItem?.state === 'disabled',\n  };\n}\n\nexport function getDataFromPlainText(value) {\n  const keys = { selected: [], expanded: [] };\n  const list = parseData(value, { parseContent: true });\n  const buttonItem = list[0] ? list[0] : { value: [] };\n  const { label, disabled } = getButtonLabel(buttonItem);\n  const dataSource = createDataSource(list[0] ? list[0].children : [], keys);\n  const children = createContents(dataSource);\n  return { label, disabled, children, selectedKeys: keys.selected };\n}\n\n// const _propsValue = ({ shape, level, size, data, ...others}) =>{\n//   const list = parseData(data, { parseContent: true });\n//   const buttonItem = list[0] ? list[0] : { value: []};\n//   const keys = { selected: [], expanded: [] };\n//   if (buttonItem.type !== 'node') return null;\n//   const label = buttonItem.value.map(({ type, value}) => {\n//     if (type === 'icon') return <Icon type={value} />;\n//     return value;\n//   });\n\n//   return {\n//     ...others,\n//     size,\n//     disabled: buttonItem.state === 'disabled',\n//     visible: buttonItem.state === 'active',\n//     type: shape === 'ghost' ? 'normal' : level,\n//     popupProps: { needAdjust: false, container: node => node },\n//     ghost: shape === 'ghost' ? level : false,\n//     selectMode: \"multiple\",\n//     menuProps: { openKeys: keys.expanded, style: { textAlign: 'left' } },\n//     selectedKeys: keys.selected,\n//     label: label\n//   };\n// };\n// export default {\n//     name: 'SplitButton',\n//     shape: ['normal', 'ghost'],\n//     editor: (shape = 'normal') => ({\n//         props: [{\n//             name: 'level',\n//             type: Types.enum,\n//             options: shape === 'ghost' ? ['light', 'dark'] : ['normal', 'primary', 'secondary'],\n//             default: shape === 'ghost' ? 'light' : 'normal',\n//         }, {\n//             name: 'size',\n//             type: Types.enum,\n//             options: ['large', 'medium', 'small'],\n//             default: 'medium'\n//         }],\n//         data: {\n//             icon: true,\n//             active: true,\n//             disable: true,\n//             default: 'Edit Document\\n\\tUndo\\n\\t*Redo\\n\\tCut\\n\\tCopy\\n\\tPaste'\n//         }\n//     }),\n//     propsValue: _propsValue,\n//     adaptor: (args) => {\n//         const list = parseData(args.data, { parseContent: true });\n//         const keys = { selected: [], expanded: [] };\n//         const dataSouce = createDataSource(list[0] ? list[0].children : [], keys);\n//         const props = _propsValue(args);\n//         return (\n//             <SplitButton\n//                 {...props}\n//             >\n//                 {createContents(dataSouce)}\n//             </SplitButton>\n//         );\n//     },\n//     demoOptions: (demo) => {\n//         const { node = { props: {} } } = demo;\n//         const { level, data } = node.props;\n//         if (data.indexOf('*') === 0) {\n//             demo = {\n//                 ...demo,\n//                 height: 250\n//             };\n//         }\n\n//         if (level === 'dark') {\n//             demo = {\n//                 ...demo,\n//                 background: '#333'\n//             };\n//         } else if(level === 'light') {\n//             demo = {\n//                 ...demo,\n//                 background: 'rgb(235, 236, 240)',\n//             };\n//         }\n\n//         return demo;\n//     }\n// };\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu-button/meta.design.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'MenuButton',\n  title: '分隔按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'MenuButton',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '主按钮的文案',\n    },\n    {\n      name: 'type',\n      title: '按钮类型',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary', 'secondary'],\n      },\n      description: '按钮的类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: '按钮尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '按钮组的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'component',\n      title: '标签类型',\n      propType: {\n        type: 'oneOf',\n        value: ['button', 'a'],\n      },\n      defaultValue: 'button',\n      description: '设置标签类型',\n    },\n    {\n      name: 'ghost',\n      title: '幽灵按钮',\n      propType: {\n        type: 'oneOf',\n        value: ['light', 'dark', false, true],\n      },\n      description: '是否为幽灵按钮',\n    },\n    {\n      name: 'defaultSelectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '默认激活的菜单项（用法同 Menu 非受控）',\n      defaultValue: [],\n    },\n    {\n      name: 'selectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '激活的菜单项（用法同 Menu 受控）',\n    },\n    {\n      name: 'selectMode',\n      title: '单选多选',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple'],\n      },\n      defaultValue: 'single',\n      description: '菜单的选择模式',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'onItemClick',\n      propType: 'func',\n      description: '点击菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'triggerProps',\n      propType: 'object',\n      description: '触发按钮的属性（支持 Button 的所有属性透传）',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层显示状态变化时的回调函数\\n@param {Boolean} visible 弹层显示状态\\n@param {String} type 触发弹层显示或隐藏的来源 menuSelect 表示由menu触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      title: '弹层触发',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层的触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      title: '弹层对齐',\n      propType: 'string',\n      description: '弹层对齐方式, 详情见Overlay align',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传给弹层的属性',\n    },\n    {\n      name: 'autoWidth',\n      title: '自动宽度',\n      propType: 'bool',\n      description: '弹层菜单的宽度是否与按钮组一致',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层是否显示',\n    },\n    {\n      name: 'defaultVisible',\n      title: '默认显示',\n      defaultValue: true,\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'followTrigger',\n      title: '跟随滚动',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'menuProps',\n      propType: 'object',\n      description: '透传给 Menu 的属性',\n    },\n    {\n      name: 'leftButtonProps',\n      propType: 'object',\n      description: '透传给 左侧按钮 的属性',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n    },\n    props: [\n      {\n        name: '!type',\n        title: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'type',\n        },\n        getValue: (target) => {\n          const parentTarget = target.parent;\n          const isTextButton = parentTarget.getPropValue('text');\n          const isWarningButton = parentTarget.getPropValue('warning');\n          const ghostConfig = parentTarget.getPropValue('ghost');\n          if (isTextButton) {\n            return 'text';\n          } else if (typeof ghostConfig !== 'undefined' && ghostConfig !== false) {\n            return 'ghost';\n          } else {\n            return 'normal';\n          }\n        },\n        setValue: (target, value) => {\n          const parentTarget = target.parent;\n          parentTarget.setPropValue('text', false);\n          parentTarget.setPropValue('ghost', false);\n          switch (value) {\n            case 'normal':\n              break;\n            case 'text':\n              parentTarget.setPropValue('text', true);\n              break;\n            case 'ghost':\n              parentTarget.setPropValue('ghost', 'light');\n              break;\n            default:\n              break;\n          }\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '普通按钮',\n                value: 'normal',\n              },\n              {\n                title: '文本按钮',\n                value: 'text',\n              },\n              {\n                title: '幽灵按钮',\n                value: 'ghost',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'ghost',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        defaultValue: 'light',\n        condition: (target) => target?.parent?.getPropValue('!type') === 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: 'Light',\n                value: 'light',\n              },\n              {\n                label: 'Dark',\n                value: 'dark',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        condition: (target) => target?.parent?.getPropValue('!type') !== 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                value: 'normal',\n                label: '普通',\n              },\n              {\n                value: 'primary',\n                label: '主要',\n              },\n              {\n                value: 'secondary',\n                label: '次要',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const { label, disabled, children, selectedKeys } = getDataFromPlainText(value);\n          if (label) {\n            target.parent.setPropValue('label', label);\n          }\n          if (typeof disabled !== 'undefined') {\n            target.parent.setPropValue('disabled', disabled);\n          }\n          if (children) {\n            target.node.children.importSchema(children);\n          }\n          if (selectedKeys) {\n            target.parent.setPropValue('selectedKeys', selectedKeys);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'disable', 'group'],\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '常用',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu-button/meta.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'MenuButton',\n  title: '分隔按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'MenuButton',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '主按钮的文案',\n    },\n    {\n      name: 'type',\n      title: '按钮类型',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary', 'secondary'],\n      },\n      description: '按钮的类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: '按钮尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '按钮组的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'component',\n      title: '标签类型',\n      propType: {\n        type: 'oneOf',\n        value: ['button', 'a'],\n      },\n      defaultValue: 'button',\n      description: '设置标签类型',\n    },\n    {\n      name: 'ghost',\n      title: '幽灵按钮',\n      propType: {\n        type: 'oneOf',\n        value: ['light', 'dark', false, true],\n      },\n      description: '是否为幽灵按钮',\n    },\n    {\n      name: 'defaultSelectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '默认激活的菜单项（用法同 Menu 非受控）',\n      defaultValue: [],\n    },\n    {\n      name: 'selectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '激活的菜单项（用法同 Menu 受控）',\n    },\n    {\n      name: 'selectMode',\n      title: '单选多选',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple'],\n      },\n      defaultValue: 'single',\n      description: '菜单的选择模式',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'onItemClick',\n      propType: 'func',\n      description: '点击菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'triggerProps',\n      propType: 'object',\n      description: '触发按钮的属性（支持 Button 的所有属性透传）',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层显示状态变化时的回调函数\\n@param {Boolean} visible 弹层显示状态\\n@param {String} type 触发弹层显示或隐藏的来源 menuSelect 表示由menu触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      title: '弹层触发',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层的触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      title: '弹层对齐',\n      propType: 'string',\n      description: '弹层对齐方式, 详情见Overlay align',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传给弹层的属性',\n    },\n    {\n      name: 'autoWidth',\n      title: '自动宽度',\n      propType: 'bool',\n      description: '弹层菜单的宽度是否与按钮组一致',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层是否显示',\n    },\n    {\n      name: 'defaultVisible',\n      title: '默认显示',\n      defaultValue: true,\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'followTrigger',\n      title: '跟随滚动',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'menuProps',\n      propType: 'object',\n      description: '透传给 Menu 的属性',\n    },\n    {\n      name: 'leftButtonProps',\n      propType: 'object',\n      description: '透传给 左侧按钮 的属性',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n    },\n    props: [\n      {\n        name: '!type',\n        title: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'type',\n        },\n        getValue: (target) => {\n          const parentTarget = target.parent;\n          const isTextButton = parentTarget.getPropValue('text');\n          const isWarningButton = parentTarget.getPropValue('warning');\n          const ghostConfig = parentTarget.getPropValue('ghost');\n          if (isTextButton) {\n            return 'text';\n          } else if (typeof ghostConfig !== 'undefined' && ghostConfig !== false) {\n            return 'ghost';\n          } else {\n            return 'normal';\n          }\n        },\n        setValue: (target, value) => {\n          const parentTarget = target.parent;\n          parentTarget.setPropValue('text', false);\n          parentTarget.setPropValue('ghost', false);\n          switch (value) {\n            case 'normal':\n              break;\n            case 'text':\n              parentTarget.setPropValue('text', true);\n              break;\n            case 'ghost':\n              parentTarget.setPropValue('ghost', 'light');\n              break;\n            default:\n              break;\n          }\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '普通按钮',\n                value: 'normal',\n              },\n              {\n                title: '文本按钮',\n                value: 'text',\n              },\n              {\n                title: '幽灵按钮',\n                value: 'ghost',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'ghost',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        defaultValue: 'light',\n        condition: (target) => target?.parent?.getPropValue('!type') === 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: 'Light',\n                value: 'light',\n              },\n              {\n                label: 'Dark',\n                value: 'dark',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        condition: (target) => target?.parent?.getPropValue('!type') !== 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                value: 'normal',\n                label: '普通',\n              },\n              {\n                value: 'primary',\n                label: '主要',\n              },\n              {\n                value: 'secondary',\n                label: '次要',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const { label, disabled, children, selectedKeys } = getDataFromPlainText(value);\n          if (label) {\n            target.parent.setPropValue('label', label);\n          }\n          if (typeof disabled !== 'undefined') {\n            target.parent.setPropValue('disabled', disabled);\n          }\n          if (children) {\n            target.node.children.importSchema(children);\n          }\n          if (selectedKeys) {\n            target.parent.setPropValue('selectedKeys', selectedKeys);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'disable', 'group'],\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '常用',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu-divider/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Menu.Divider',\n  title: '菜单分隔线',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: 'Divider',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: false,\n      nestingRule: {\n        parentWhitelist: ['Menu', 'SubMenu', 'Menu.Group', 'MenuButton'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu-group/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Menu.Group',\n  title: '菜单组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标签内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Menu', 'SubMenu', 'Menu.Group', 'MenuButton'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Menu.Item',\n  title: '菜单项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'key',\n      propType: 'string',\n      description: '菜单项标识符',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'helper',\n      propType: 'node',\n      description: '帮助文本',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Menu', 'SubMenu', 'Menu.Group', 'MenuButton'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/menu-popup-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Menu.PopupItem',\n  title: '自定义弹出内容',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: 'PopupItem',\n  },\n  props: [\n    {\n      name: 'key',\n      propType: 'string',\n      description: '菜单项标识符',\n    },\n    {\n      name: 'label',\n      propType: 'node',\n      description: '标签内容',\n    },\n    {\n      name: 'children',\n      propType: 'node',\n      description: '自定义弹层内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Menu', 'SubMenu', 'Menu.Group', 'MenuButton'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/month-picker/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'MonthPicker',\n  title: 'MonthPicker',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: 'MonthPicker',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '输入框内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: '输入框状态',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'defaultVisibleYear',\n      propType: 'func',\n      description: '默认展现的年\\n@return {MomentObject} 返回包含指定年份的 moment 对象实例',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY-MM',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '输入框尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} type 触发弹层显示和隐藏的来源 calendarSelect 表示由日期表盘的选择触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式, 具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '弹层其他属性',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'inputProps',\n      propType: 'object',\n      description: '输入框其他属性',\n    },\n    {\n      name: 'monthCellRender',\n      propType: 'func',\n      description:\n        '自定义月份渲染函数\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@returns {ReactNode}',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'dateInputAriaLabel',\n      propType: 'string',\n      description: '日期输入框的 aria-label 属性',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {MomentObject} value 月份',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n    },\n    {\n      name: 'popupContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/nav/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Nav',\n  title: '导航',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Nav',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'children',\n      propType: 'node',\n      description: '导航项和子导航',\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary', 'secondary', 'line'],\n      },\n      description: '导航类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'direction',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '导航布局',\n      defaultValue: 'ver',\n    },\n    {\n      name: 'hozAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'right'],\n      },\n      description: '对齐方向',\n      defaultValue: 'left',\n    },\n    {\n      name: 'activeDirection',\n      propType: {\n        type: 'oneOf',\n        value: [null, 'top', 'bottom', 'left', 'right'],\n      },\n      description: '选中条方向',\n    },\n    {\n      name: 'mode',\n      propType: {\n        type: 'oneOf',\n        value: ['inline', 'popup'],\n      },\n      description: '子导航打开的模式',\n      defaultValue: 'inline',\n    },\n    {\n      name: 'triggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '子导航打开的触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'inlineIndent',\n      propType: 'number',\n      description: '内联子导航缩进距离',\n      defaultValue: 20,\n    },\n    {\n      name: 'defaultOpenAll',\n      propType: 'bool',\n      description: '初始展开所有的子导航',\n      defaultValue: false,\n    },\n    {\n      name: 'openMode',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple'],\n      },\n      description: '内联子导航的展开模式',\n      defaultValue: 'multiple',\n    },\n    {\n      name: 'selectedKeys',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n        ],\n      },\n      description: '当前选中导航key值',\n    },\n    {\n      name: 'defaultSelectedKeys',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'instanceOf',\n            value: 'array',\n          },\n        ],\n      },\n      description: '初始选中导航项的key值',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description:\n        '选中或取消选中导航项触发的回调函数\\n@param {Array} selectedKeys 选中的所有导航项的 key\\n@param {Object} item 选中或取消选中的导航项\\n@param {Object} extra 额外参数\\n@param {Boolean} extra.select 是否是选中\\n@param {Array} extra.key 导航项的 key\\n@param {Object} extra.label 导航项的文本\\n@param {Array} extra.keyPath 导航项 key 的路径',\n    },\n    {\n      name: 'popupAlign',\n      propType: {\n        type: 'oneOf',\n        value: ['follow', 'outside'],\n      },\n      description:\n        '弹出子导航的对齐方式（水平导航只支持 follow ）\\n@eumdesc Item 顶端对齐, Nav 顶端对齐',\n      defaultValue: 'follow',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹出子导航的自定义类名',\n    },\n    {\n      name: 'iconOnly',\n      propType: 'bool',\n      description: '是否只显示图标',\n    },\n    {\n      name: 'hasArrow',\n      propType: 'bool',\n      description: '是否显示右侧的箭头',\n      defaultValue: true,\n    },\n    {\n      name: 'hasTooltip',\n      propType: 'bool',\n      description: '是否有ToolTips',\n      defaultValue: false,\n    },\n    {\n      name: 'header',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '自定义导航头部',\n    },\n    {\n      name: 'footer',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '自定义导航尾部',\n    },\n    {\n      name: 'embeddable',\n      propType: 'bool',\n      description: '开启嵌入式模式',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  icon: '',\n  category: '引导',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/nav-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Nav.Item',\n  title: '导航项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Nav',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'icon',\n      propType: {\n        type: 'icon',\n      },\n      description: '自定义图标',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '导航内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  icon: '',\n  category: '引导',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/next-table/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'NextTable',\n  title: '表格',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'NextTable',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'columns',\n      title: '数据列',\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'shape',\n          value: [\n            {\n              name: 'title',\n              description: '列标题',\n              propType: 'string',\n              defaultValue: 'Title',\n            },\n            {\n              name: 'dataKey',\n              description: '列索引',\n              propType: 'string',\n              defaultValue: 'Key',\n            },\n            {\n              name: 'dataType',\n              description: '数据类型',\n              propType: {\n                type: 'oneOf',\n                value: ['text', 'timestamp', 'cascadeTimestamp', 'employee', 'money', 'moneyRange'],\n              },\n              defaultValue: 'Key',\n            },\n            {\n              name: 'editType',\n              description: '编辑类型',\n              propType: {\n                type: 'oneOf',\n                value: ['select', 'text', 'radio', 'date', 'employee'],\n              },\n              defaultValue: 'Key',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'data',\n      title: '数据源',\n      propType: {\n        type: 'oneOfType',\n        value: ['Json', 'JSExpression'],\n      },\n    },\n    {\n      name: 'actionTitle',\n      title: '操作列标题',\n      propType: 'string',\n    },\n    {\n      name: 'actionColumn',\n      title: '操作列',\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'shape',\n          value: [\n            {\n              name: 'title',\n              description: '列标题',\n              propType: 'string',\n              defaultValue: 'Title',\n            },\n            {\n              name: 'callback',\n              description: 'callback',\n              propType: 'func',\n              defaultValue: {\n                type: 'JSFunction',\n                value:\n                  '(rowData, action, table) => {\\n return table.editRow(rowData).then((row) => {\\n console.log(row);\\n })}',\n              },\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'customBarItem',\n      isRequired: true,\n      title: '自定义工具栏渲染',\n      propType: 'any',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'customBarItem',\n        isRequired: true,\n        title: '自定义工具栏渲染',\n        setter: {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 'render',\n                  title: '整体自定义渲染',\n                  setter: {\n                    componentName: 'FunctionSetter',\n                    props: {\n                      supportParams: true,\n                    },\n                  },\n                },\n                {\n                  name: 'rightRender',\n                  title: '底部自定义渲染',\n                  setter: {\n                    componentName: 'SlotSetter',\n                    initialValue: {\n                      type: 'JSSlot',\n                      params: ['value', 'index', 'record'],\n                      value: [],\n                    },\n                  },\n                },\n                {\n                  name: 'bottomRender',\n                  title: '右侧自定义渲染',\n                  setter: {\n                    componentName: 'SlotSetter',\n                    initialValue: {\n                      type: 'JSSlot',\n                      params: ['value', 'index', 'record'],\n                      value: [],\n                    },\n                  },\n                },\n              ],\n            },\n          },\n        },\n      },\n      {\n        name: 'StyleAndTheme',\n        title: '风格和样式',\n        type: 'group',\n        extraProps: {\n          display: 'entry',\n        },\n        items: [\n          {\n            name: 'theme',\n            title: '主题',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: 'zebra',\n                    value: 'zebra',\n                  },\n                  {\n                    title: 'split',\n                    value: 'split',\n                  },\n                  {\n                    title: 'border',\n                    value: 'border',\n                  },\n                ],\n              },\n            },\n          },\n          {\n            name: 'hasHeader',\n            title: '是否显示表头',\n            setter: 'BoolSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'fixedHeader',\n            title: '是否固定表头',\n            setter: 'BoolSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'stickyHeader',\n            title: '表头是否是sticky',\n            setter: 'BoolSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'setEmptyContent',\n            title: '开启自定义空提示',\n            setter: 'BoolSetter',\n            supportVariable: true,\n          },\n          {\n            description: '最大高度',\n            name: 'maxBodyHeight',\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      {\n        name: 'Selector',\n        title: '行选择器',\n        type: 'group',\n        extraProps: {\n          display: 'entry',\n        },\n        items: [\n          {\n            name: 'rowSelector',\n            title: '选择器模式',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: 'checkboxSelector',\n                    value: 'checkboxSelector',\n                  },\n                  {\n                    title: 'radioSelector',\n                    value: 'radioSelector',\n                  },\n                ],\n              },\n            },\n          },\n          {\n            name: 'showRowSelector',\n            title: '是否启用选择模式',\n            setter: 'BoolSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      {\n        name: 'Pagination',\n        title: '分页设置',\n        type: 'group',\n        extraProps: {\n          display: 'entry',\n        },\n        items: [\n          {\n            name: 'isPagination',\n            title: '是否显示分页',\n            setter: 'BoolSetter',\n            supportVariable: true,\n            initialValue: true,\n          },\n          {\n            name: 'pagination',\n            title: '分页设置',\n            setter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'paginationPosition',\n                      title: '翻页器显示位置',\n                      setter: {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'left',\n                              value: 'left',\n                            },\n                            {\n                              title: 'right',\n                              value: 'right',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'size',\n                      title: '分页组件大小',\n                      setter: {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'small',\n                              value: 'small',\n                            },\n                            {\n                              title: 'medium',\n                              value: 'medium',\n                            },\n                            {\n                              title: 'large',\n                              value: 'large',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'type',\n                      title: '分页组件类型',\n                      setter: {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'normal',\n                              value: 'normal',\n                            },\n                            {\n                              title: 'simple',\n                              value: 'simple',\n                            },\n                            {\n                              title: 'mini',\n                              value: 'mini',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'shape',\n                      title: '前进后退按钮样式',\n                      setter: {\n                        componentName: 'SelectSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'normal',\n                              value: 'normal',\n                            },\n                            {\n                              title: 'arrow-only',\n                              value: 'arrow-only',\n                            },\n                            {\n                              title: 'arrow-prev-only',\n                              value: 'arrow-prev-only',\n                            },\n                            {\n                              title: 'no-border',\n                              value: 'no-border',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'pageSizeSelector',\n                      title: '每页显示选择器类型',\n                      setter: 'BoolSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'pageSizeList',\n                      title: '每页显示选择器可选值',\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'pageSizePosition',\n                      title: '每页显示选择器在组件中的位置',\n                      setter: {\n                        componentName: 'SelectSetter',\n                        props: {\n                          options: [\n                            {\n                              title: 'start',\n                              value: 'start',\n                            },\n                            {\n                              title: 'end',\n                              value: 'end',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'hideOnlyOnePage',\n                      title: 'hideOnlyOnePage',\n                      setter: 'BoolSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'showJump',\n                      title: 'showJump',\n                      setter: 'BoolSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'pageShowCount',\n                      title: '页码显示的数量',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                    },\n                  ],\n                },\n              },\n              initialValue: {\n                type: 'normal',\n                shape: 'arrow-only',\n                pageSize: 10,\n                pageSizeSelector: false,\n                pageSizeList: '5,10,20',\n                pageSizePosition: 'end',\n                paginationPosition: 'right',\n                hideOnlyOnePage: false,\n                showJump: true,\n              },\n            },\n          },\n        ],\n      },\n      {\n        name: 'ExpandAndTree',\n        title: '可折叠/树形表格',\n        type: 'group',\n        extraProps: {\n          display: 'entry',\n        },\n        items: [\n          {\n            name: 'hasExpandedRowCtrl',\n            title: '启用折叠',\n            setter: 'BoolSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'isTree',\n            title: '启用树形',\n            setter: 'BoolSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      {\n        name: 'TopAction',\n        title: '顶部操作选项',\n        type: 'group',\n        extraProps: {\n          display: 'entry',\n        },\n        items: [\n          {\n            name: 'showMiniPager',\n            title: '顶部迷你分页器',\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n          {\n            name: 'showActionBar',\n            title: '显示操作条',\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n          {\n            name: 'showLinkBar',\n            title: '显示外链条',\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n          {\n            name: 'showSearch',\n            title: '显示搜索',\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n          {\n            name: 'searchBarPlaceholder',\n            title: '搜索 placeholder',\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'showCustomColumn',\n            title: '显示筛选器',\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n        ],\n      },\n      {\n        name: 'actionBar',\n        title: '操作条',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'title',\n                      description: '标题',\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                      initialValue: 'Title',\n                    },\n                    {\n                      name: 'callback',\n                      description: 'callback',\n                      setter: {\n                        componentName: 'FunctionSetter',\n                      },\n                    },\n                  ],\n                },\n              },\n              initialValue: {\n                title: 'Title',\n              },\n            },\n          },\n        },\n      },\n      {\n        name: 'linkBar',\n        title: '外链操作条',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'title',\n                      description: '标题',\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                      initialValue: 'Title',\n                    },\n                    {\n                      name: 'callback',\n                      description: 'callback',\n                      setter: {\n                        componentName: 'FunctionSetter',\n                      },\n                    },\n                  ],\n                },\n              },\n              initialValue: {\n                title: 'Title',\n              },\n            },\n          },\n        },\n      },\n      {\n        name: 'columns',\n        title: '数据列',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              'ExpressionSetter',\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          {\n                            name: 'title',\n                            description: '列标题',\n                            setter: 'StringSetter',\n                            supportVariable: true,\n                          },\n                          {\n                            name: 'dataKey',\n                            description: '列索引',\n                            setter: 'StringSetter',\n                            supportVariable: true,\n                          },\n                          {\n                            description: '宽度',\n                            name: 'width',\n                            setter: 'StringSetter',\n                            supportVariable: true,\n                          },\n                          {\n                            name: 'dataType',\n                            description: '数据类型',\n                            setter: {\n                              componentName: 'SelectSetter',\n                              props: {\n                                options: [\n                                  {\n                                    title: 'text',\n                                    value: 'text',\n                                  },\n                                  {\n                                    title: 'timestamp',\n                                    value: 'timestamp',\n                                  },\n                                  {\n                                    title: 'cascadeTimestamp',\n                                    value: 'cascadeTimestamp',\n                                  },\n                                  {\n                                    title: 'employee',\n                                    value: 'employee',\n                                  },\n                                  {\n                                    title: 'money',\n                                    value: 'money',\n                                  },\n                                  {\n                                    title: 'moneyRange',\n                                    value: 'moneyRange',\n                                  },\n                                ],\n                              },\n                            },\n                          },\n                          {\n                            name: 'editType',\n                            description: '编辑类型',\n                            setter: {\n                              componentName: 'SelectSetter',\n                              props: {\n                                options: [\n                                  {\n                                    title: 'select',\n                                    value: 'select',\n                                  },\n                                  {\n                                    title: 'text',\n                                    value: 'text',\n                                  },\n                                  {\n                                    title: 'radio',\n                                    value: 'radio',\n                                  },\n                                  {\n                                    title: 'date',\n                                    value: 'date',\n                                  },\n                                  {\n                                    title: 'employee',\n                                    value: 'employee',\n                                  },\n                                ],\n                              },\n                            },\n                          },\n                          {\n                            name: 'lock',\n                            description: '锁定位置',\n                            setter: {\n                              componentName: 'RadioGroupSetter',\n                              props: {\n                                options: [\n                                  {\n                                    title: '左',\n                                    value: 'left',\n                                  },\n                                  {\n                                    title: '右',\n                                    value: 'right',\n                                  },\n                                  {\n                                    title: '无',\n                                    value: '',\n                                  },\n                                ],\n                              },\n                              initialValue: '',\n                            },\n                          },\n                          {\n                            description: '自定义渲染',\n                            name: 'render',\n                            setter: {\n                              componentName: 'SlotSetter',\n                              title: '单元格自定义',\n                              initialValue: {\n                                type: 'JSSlot',\n                                params: [''],\n                                value: [\n                                  {\n                                    componentName: 'Box',\n                                  },\n                                ],\n                              },\n                            },\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: {\n                      title: 'Title',\n                      dataKey: 'Key',\n                      dataType: 'text',\n                      editType: 'text',\n                      width: 200,\n                      lock: '',\n                    },\n                  },\n                },\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'data',\n        title: '数据源',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['JsonSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'action',\n        title: '操作列选项',\n        type: 'group',\n        extraProps: {\n          display: 'entry',\n        },\n        items: [\n          {\n            name: 'actionTitle',\n            title: '操作列标题',\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'actionWidth',\n            title: '操作列宽度',\n            setter: 'NumberSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'actionType',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: 'link',\n                    value: 'link',\n                  },\n                  {\n                    title: 'button',\n                    value: 'button',\n                  },\n                ],\n              },\n            },\n          },\n          {\n            name: 'actionFixed',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: 'right',\n                    value: 'right',\n                  },\n                  {\n                    title: 'none',\n                    value: 'none',\n                  },\n                ],\n              },\n            },\n          },\n          {\n            name: 'actionHidden',\n            setter: 'BoolSetter',\n            supportVariable: true,\n            initialValue: false,\n          },\n        ],\n      },\n      {\n        name: 'actionColumn',\n        title: '操作列',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'title',\n                      description: '列标题',\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                      initialValue: 'Title',\n                    },\n                    {\n                      name: 'callback',\n                      description: 'callback',\n                      setter: {\n                        componentName: 'FunctionSetter',\n                      },\n                    },\n                  ],\n                },\n              },\n              initialValue: {\n                title: 'Title',\n                callback: {\n                  type: 'JSFunction',\n                  value:\n                    '(rowData, action, table) => {\\n return table.editRow(rowData).then((row) => {\\n console.log(row);\\n })}',\n                },\n              },\n            },\n          },\n        },\n      },\n    ],\n    supports: {\n      style: true,\n      events: [\n        'onFetchData',\n        'onSelect',\n        'onRowClick',\n        'onRowMouseEnter',\n        'onRowMouseLeave',\n        'onResizeChange',\n        'onColumnsChange',\n        'onRowOpen',\n        'onShowSearch',\n      ],\n    },\n  },\n  icon: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_table.png',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/next-table/snippets.ts",
    "content": "module.exports = [\n  {\n    title: 'NextTable',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_table.png',\n    schema: {\n      componentName: 'NextTable',\n      title: '表格',\n      props: {\n        setEmptyContent: true,\n        emptyContent: {\n          type: 'JSSlot',\n          title: 'EmptyContent',\n          value: [\n            {\n              componentName: 'Typography.Text',\n              props: {\n                children: 'No Data',\n              },\n            },\n          ],\n        },\n        showMiniPager: true,\n        showActionBar: true,\n        actionBar: [\n          {\n            title: '新增',\n            type: 'primary',\n          },\n          {\n            title: '编辑',\n          },\n        ],\n        columns: [\n          {\n            dataKey: 'name',\n            width: 200,\n            align: 'center',\n            title: '姓名',\n            editType: 'text',\n          },\n          {\n            dataKey: 'age',\n            width: 200,\n            align: 'center',\n            title: '年龄',\n          },\n          {\n            dataKey: 'role',\n            width: 200,\n            align: 'center',\n            title: '职责',\n          },\n        ],\n        data: [\n          {\n            name: '王小',\n            id: '1',\n            age: 15000,\n            role: '开发',\n          },\n          {\n            name: '王中',\n            id: '2',\n            age: 25000,\n            role: '产品',\n          },\n          {\n            name: '王大',\n            id: '3',\n            age: 35000,\n            role: '设计',\n          },\n        ],\n        actionTitle: '操作',\n        actionWidth: 180,\n        actionType: 'link',\n        actionFixed: 'none',\n        actionHidden: false,\n        maxWebShownActionCount: 2,\n        actionColumn: [\n          {\n            title: '编辑',\n            callback: {\n              type: 'JSFunction',\n              value:\n                '(rowData, action, table) => {\\n return table.editRow(rowData).then((row) => {\\n console.log(row);\\n });\\n }',\n            },\n          },\n          {\n            title: '保存',\n            callback: {\n              type: 'JSFunction',\n              value:\n                '(rowData, action, table) => { \\nreturn table.saveRow(rowData).then((row) => { \\nconsole.log(row); \\n}); \\n}',\n            },\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/next-text/meta.ts",
    "content": "module.exports = {\n  componentName: 'NextText',\n  title: '文本',\n  category: '基础元素',\n  group: '精选组件',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'NextText',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'classname',\n      propType: 'bool',\n      defaultValue: true,\n    },\n    {\n      name: 'type',\n      title: '字体大小',\n      extraProps: {\n        defaultValue: 'body2',\n      },\n      defaultValue: 'body2',\n      initialValue: 'body2',\n      setter: {\n        componentName: 'SelectSetter',\n        initialValue: 'body2',\n        props: {\n          defaultValue: 'body2',\n          options: [\n            {\n              title: '默认',\n              value: 'inherit',\n            },\n            {\n              title: 'h1',\n              value: 'h1',\n            },\n            {\n              title: 'h2',\n              value: 'h2',\n            },\n            {\n              title: 'h3',\n              value: 'h3',\n            },\n            {\n              title: 'h4',\n              value: 'h4',\n            },\n            {\n              title: 'h5',\n              value: 'h5',\n            },\n            {\n              title: 'h6',\n              value: 'h6',\n            },\n            {\n              title: 'body1',\n              value: 'body1',\n            },\n            {\n              title: 'body2',\n              value: 'body2',\n            },\n            {\n              title: 'caption',\n              value: 'caption',\n            },\n            {\n              title: 'overline',\n              value: 'overline',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'children',\n      propType: 'string',\n    },\n    {\n      name: 'mark',\n      title: '标记',\n      propType: 'bool',\n      description: '添加标记样式',\n      defaultValue: false,\n    },\n    {\n      name: 'code',\n      title: '代码',\n      propType: 'bool',\n      description: '添加代码样式',\n      defaultValue: false,\n    },\n    {\n      name: 'delete',\n      title: '删除线',\n      propType: 'bool',\n      description: '添加删除线样式',\n      defaultValue: false,\n    },\n    {\n      name: 'underline',\n      title: '下划线',\n      propType: 'bool',\n      description: '添加下划线样式',\n      defaultValue: false,\n    },\n    {\n      name: 'strong',\n      propType: 'bool',\n      description: '是否加粗',\n      defaultValue: false,\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '鼠标点击',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'prefix',\n          condition: () => false,\n        },\n        {\n          name: 'classname',\n          condition: () => false,\n        },\n        {\n          name: 'children',\n          supportVariable: true,\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '文本内容',\n              en_US: 'Text',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性：children | 说明：文本内容',\n              en_US: 'prop: children | description: text of the content',\n            },\n          },\n          setter: 'TextAreaSetter',\n          supportVariable: true,\n        },\n      ],\n    },\n  },\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/next-text/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '标题',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN01E2PcPW1bKJV5QUVMg_!!6000000003446-55-tps-50-50.svg',\n    schema: {\n      componentName: 'NextText',\n      props: {\n        type: 'h5',\n        children: '标题标题',\n      },\n    },\n  },\n  {\n    title: '正文',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01n5wpxc1bi862KuXFz_!!6000000003498-55-tps-50-50.svg',\n    schema: {\n      componentName: 'NextText',\n      props: {\n        type: 'inherit',\n        children:\n          '基于 Ali-Lowcode-Engine 快速打造高生产力的低代码研发平台, 基于自然布局体系快速搭建页面',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/note-wrapper/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Wrapper',\n  title: '备注容器',\n  category: 'Others',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'NoteWrapper',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'note',\n      propType: 'string',\n      defaultValue: '这是一个备注',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: false,\n    },\n    props: [\n      {\n        name: 'style',\n        setter: 'StyleSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'note',\n        propType: 'string',\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n    ],\n  },\n  icon: '',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/number-picker/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'NumberPicker',\n  title: '数字输入框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'NumberPicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium'],\n      },\n      description: '大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'inline'],\n      },\n      description: '设置类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '当前值',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'number',\n      description: '默认值',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'step',\n      propType: 'number',\n      description: '步长',\n      defaultValue: 1,\n    },\n    {\n      name: 'precision',\n      propType: 'number',\n      description: '保留小数点后位数',\n      defaultValue: 0,\n    },\n    {\n      name: 'editable',\n      propType: 'bool',\n      description: '用户是否可以输入',\n      defaultValue: true,\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '自动焦点',\n    },\n    {\n      name: 'max',\n      propType: 'number',\n      description: '最大值',\n      defaultValue: null,\n    },\n    {\n      name: 'min',\n      propType: 'number',\n      description: '最小值',\n      defaultValue: null,\n    },\n    {\n      name: 'format',\n      propType: 'func',\n      description: '格式化当前值',\n    },\n    {\n      name: 'upBtnProps',\n      propType: 'object',\n      description: '增加按钮的props',\n    },\n    {\n      name: 'downBtnProps',\n      propType: 'object',\n      description: '减少按钮的props',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '内联 label',\n    },\n    {\n      name: 'innerAfter',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'icon'],\n      },\n      description: 'inner after',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '数值被改变的事件\\n@param {Number} value 数据\\n@param {Event} e DOM事件对象',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n      description: '键盘按下',\n    },\n    {\n      name: 'onFocus',\n      propType: 'func',\n      description: '焦点获得',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n      description: '焦点失去',\n    },\n    {\n      name: 'onCorrect',\n      propType: 'func',\n      description: '数值订正后的回调\\n@param {Object} obj {currentValue,oldValue:String}',\n    },\n    {\n      name: 'onDisabled',\n      propType: 'func',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'type',\n        title: '类型',\n        defaultValue: 'normal',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '普通', value: 'normal' },\n              { title: '内联', value: 'inline' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'defaultValue',\n        title: '当前值',\n        setter: (target) => {\n          const precision = target?.parent?.getPropValue?.('precision') || 0;\n          console.log('precision: ', precision);\n          return {\n            componentName: 'NumberSetter',\n            props: {\n              step: target?.parent?.getPropValue?.('step') || 0,\n              precision,\n            },\n          };\n        },\n      },\n      {\n        name: 'innerAfter',\n        title: '单位',\n        setter: 'StringSetter',\n      },\n      {\n        name: 'step',\n        title: '步长',\n        defaultValue: 1,\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'precision',\n        title: '小数位数',\n        defaultValue: 0,\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'editable',\n        title: '可以输入',\n        defaultValue: true,\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'disabled',\n        setter: 'BoolSetter',\n        description: '是否禁用',\n      },\n    ],\n    supports: {\n      events: ['onChange', 'onKeyDown', 'onFocus', 'onBlur', 'onCorrect'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/number-picker/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'NumberPicker',\n  title: '数字输入框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'NumberPicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium'],\n      },\n      description: '大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'inline'],\n      },\n      description: '设置类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '当前值',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'number',\n      description: '默认值',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'step',\n      propType: 'number',\n      description: '步长',\n      defaultValue: 1,\n    },\n    {\n      name: 'precision',\n      propType: 'number',\n      description: '保留小数点后位数',\n      defaultValue: 0,\n    },\n    {\n      name: 'editable',\n      propType: 'bool',\n      description: '用户是否可以输入',\n      defaultValue: true,\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '自动焦点',\n    },\n    {\n      name: 'max',\n      propType: 'number',\n      description: '最大值',\n      defaultValue: null,\n    },\n    {\n      name: 'min',\n      propType: 'number',\n      description: '最小值',\n      defaultValue: null,\n    },\n    {\n      name: 'format',\n      propType: 'func',\n      description: '格式化当前值',\n    },\n    {\n      name: 'upBtnProps',\n      propType: 'object',\n      description: '增加按钮的props',\n    },\n    {\n      name: 'downBtnProps',\n      propType: 'object',\n      description: '减少按钮的props',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '内联 label',\n    },\n    {\n      name: 'innerAfter',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'icon'],\n      },\n      description: 'inner after',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '数值被改变的事件\\n@param {Number} value 数据\\n@param {Event} e DOM事件对象',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n      description: '键盘按下',\n    },\n    {\n      name: 'onFocus',\n      propType: 'func',\n      description: '焦点获得',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n      description: '焦点失去',\n    },\n    {\n      name: 'onCorrect',\n      propType: 'func',\n      description: '数值订正后的回调\\n@param {Object} obj {currentValue,oldValue:String}',\n    },\n    {\n      name: 'onDisabled',\n      propType: 'func',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'value',\n        title: '当前值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'type',\n        title: '类型',\n        defaultValue: 'normal',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'RadioGroupSetter',\n                props: {\n                  options: [\n                    { title: '普通', value: 'normal' },\n                    { title: '内联', value: 'inline' },\n                  ],\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        name: 'innerAfter',\n        title: '单位',\n        setter: ['StringSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'step',\n        title: '步长',\n        defaultValue: 1,\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'precision',\n        title: '小数位数',\n        defaultValue: 0,\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'max',\n        title: '最大值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'min',\n        title: '最小值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'editable',\n        title: '可以输入',\n        defaultValue: true,\n        setter: ['BoolSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'format',\n        title: '格式化',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"format\",\n          //   defaultCode=`function format(value) {\n          //     return value;\n          //   }`,\n          // }\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      {\n        name: 'style',\n        setter: {\n          componentName: 'StyleSetter',\n        },\n      },\n    ],\n    supports: {\n      events: ['onChange', 'onKeyDown', 'onFocus', 'onBlur', 'onCorrect'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/number-picker/snippets.ts",
    "content": "export default [\n  {\n    title: '数字输入框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_number-picker.png',\n    schema: {\n      componentName: 'NumberPicker',\n      props: {\n        prefix: 'next-',\n        type: 'normal',\n        size: 'medium',\n        step: 1,\n        editable: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/number-picker/view.tsx",
    "content": "import * as React from 'react';\nimport { NumberPicker } from '@alifd/next';\nimport { ValueWrapper } from 'lowcode/utils/component-wrapper';\n\nexport default ValueWrapper(NumberPicker, 'NumberPicker');\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/page/meta.ts",
    "content": "export default [\n  {\n    group: '原子组件',\n    componentName: 'Page',\n    title: '页面',\n    props: [\n      {\n        name: 'style',\n        propType: 'object',\n        defaultValue: {\n          padding: 12,\n        },\n      },\n    ],\n    configure: {\n      events: {\n        supportedLifecycles: [\n          {\n            description: '初始化时',\n            name: 'constructor',\n          },\n          {\n            description: '装载后',\n            name: 'componentDidMount',\n          },\n          {\n            description: '更新时',\n            name: 'componentDidMount',\n          },\n          {\n            description: '卸载时',\n            name: 'componentWillUnmount',\n          },\n        ],\n      },\n      supports: {\n        style: true,\n      },\n      component: {\n        isContainer: true,\n        disableBehaviors: '*',\n      },\n    },\n    category: '基础',\n  },\n  {\n    componentName: 'Leaf',\n    npm: {\n      package: '@alilc/lowcode-materials',\n      version: '{{version}}',\n      exportName: 'Typography',\n      main: '',\n      destructuring: true,\n      subName: 'Text',\n    },\n    configure: {\n      component: {\n        disableBehaviors: '*',\n      },\n      advanced: {\n        callbacks: {\n          onHoverHook: () => false,\n          onMouseDownHook: () => false,\n          onClickHook: () => false,\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/pagination/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Pagination',\n  title: '翻页器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Pagination',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'type',\n      title: {\n        label: '组件类型',\n        tip: '分页组件类型',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'simple', 'mini'],\n      },\n      description: '分页组件类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: '按钮样式',\n        tip: '前进后退按钮样式',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'arrow-only', 'arrow-prev-only', 'no-border'],\n      },\n      description: '前进后退按钮样式',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: '分页组件大小',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '分页组件大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'current',\n      propType: 'number',\n      description: '（受控）当前页码',\n    },\n    {\n      name: 'defaultCurrent',\n      title: {\n        label: '按钮样式',\n        tip: '前进后退按钮样式',\n      },\n      title: {\n        label: '初始页码',\n        tip: '（非受控）初始页码',\n      },\n      propType: 'number',\n      description: '（非受控）初始页码',\n      defaultValue: 1,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '页码发生改变时的回调函数\\n@param {Number} current 改变后的页码数\\n@param {Object} e 点击事件对象',\n    },\n    {\n      name: 'total',\n      propType: 'number',\n      description: '总记录数',\n      defaultValue: 100,\n    },\n    {\n      name: 'totalRender',\n      propType: 'func',\n      title: {\n        label: '总数渲染',\n        tip: '总数的渲染函数\\n@param {Number} total 总数\\n@param {Array} range 当前数据在总数中的区间',\n      },\n    },\n    {\n      name: 'pageShowCount',\n      propType: 'number',\n      title: {\n        label: '显示页数',\n        tip: '页码显示的数量，更多的使用...代替',\n      },\n      defaultValue: 5,\n    },\n    {\n      name: 'pageSize',\n      title: {\n        label: '单页记录',\n        tip: '一页中的记录数',\n      },\n      propType: 'number',\n      description: '一页中的记录数',\n      defaultValue: 10,\n    },\n    {\n      name: 'pageSizeSelector',\n      title: {\n        label: '选择器类型',\n        tip: '每页显示选择器类型',\n      },\n      propType: {\n        type: 'oneOf',\n        value: [false, 'filter', 'dropdown'],\n      },\n      description: '每页显示选择器类型',\n      defaultValue: false,\n    },\n    {\n      name: 'pageNumberRender',\n      propType: 'func',\n      title: {\n        label: '自定义页码',\n        tip: '自定义页码渲染函数，函数作用于页码button以及当前页/总页数的数字渲染\\n@param {Number} index 分页的页码，从1开始\\n@return {ReactNode} 返回渲染结果',\n      },\n    },\n    {\n      name: 'pageSizePosition',\n      title: {\n        label: '选择器位置',\n        tip: '每页显示选择器在组件中的位置',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['start', 'end'],\n      },\n      description: '每页显示选择器在组件中的位置',\n      defaultValue: 'start',\n    },\n    {\n      name: 'onPageSizeChange',\n      propType: 'func',\n      description:\n        '每页显示记录数量改变时的回调函数\\n@param {Number} pageSize 改变后的每页显示记录数',\n    },\n    {\n      name: 'hideOnlyOnePage',\n      propType: 'bool',\n      title: {\n        label: '单页隐藏',\n        tip: '当分页数为1时，是否隐藏分页器',\n      },\n      defaultValue: false,\n    },\n    {\n      name: 'showJump',\n      propType: 'bool',\n      title: {\n        label: '显示跳转',\n        tip: 'type 设置为 normal 时，在页码数超过5页后，会显示跳转输入框与按钮，当设置 showJump 为 false 时，不再显示该跳转区域',\n      },\n      defaultValue: true,\n    },\n    {\n      name: 'link',\n      title: {\n        label: '跳转链接',\n        tip: '设置页码按钮的跳转链接，它的值为一个包含 {page} 的模版字符串',\n      },\n      propType: 'string',\n      description: '设置页码按钮的跳转链接，它的值为一个包含 {page} 的模版字符串',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'type',\n        title: {\n          label: '类型',\n          tip: '分页组件类型',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: 'normal',\n              },\n              {\n                label: '简单',\n                value: 'simple',\n              },\n              {\n                label: '迷你',\n                value: 'mini',\n              },\n            ],\n          },\n        },\n        description: '分页组件类型',\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: {\n          label: '尺寸',\n          tip: '分页组件大小',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        description: '分页组件大小',\n        defaultValue: 'medium',\n      },\n      {\n        name: 'pageSizeSelector',\n        title: {\n          label: '扩展内容',\n          tip: '每页显示选择器类型',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '无',\n                value: false,\n              },\n              {\n                label: '平铺',\n                value: 'filter',\n              },\n              {\n                label: '下拉选择',\n                value: 'dropdown',\n              },\n            ],\n          },\n        },\n        description: '每页显示选择器类型',\n        defaultValue: false,\n      },\n      {\n        name: 'shape',\n        title: {\n          label: '样式',\n          tip: '前进后退按钮样式',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '文本&图标',\n                value: 'normal',\n              },\n              {\n                label: '仅图标',\n                value: 'arrow-only',\n              },\n              {\n                label: '无边框',\n                value: 'no-border',\n              },\n            ],\n          },\n        },\n        description: '前进后退按钮样式',\n        defaultValue: 'normal',\n      },\n    ],\n  },\n  icon: '',\n  category: '导航',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/pagination/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Pagination',\n  title: '翻页器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Pagination',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'type',\n      title: {\n        label: '组件类型',\n        tip: '分页组件类型',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'simple', 'mini'],\n      },\n      description: '分页组件类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: '按钮样式',\n        tip: '前进后退按钮样式',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'arrow-only', 'arrow-prev-only', 'no-border'],\n      },\n      description: '前进后退按钮样式',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: '分页组件大小',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '分页组件大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'current',\n      propType: 'number',\n      description: '（受控）当前页码',\n    },\n    {\n      name: 'defaultCurrent',\n      title: {\n        label: '按钮样式',\n        tip: '前进后退按钮样式',\n      },\n      title: {\n        label: '初始页码',\n        tip: '（非受控）初始页码',\n      },\n      propType: 'number',\n      description: '（非受控）初始页码',\n      defaultValue: 1,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '页码发生改变时的回调函数\\n@param {Number} current 改变后的页码数\\n@param {Object} e 点击事件对象',\n    },\n    {\n      name: 'total',\n      propType: 'number',\n      description: '总记录数',\n      defaultValue: 100,\n    },\n    {\n      name: 'totalRender',\n      propType: 'func',\n      title: {\n        label: '总数渲染',\n        tip: '总数的渲染函数\\n@param {Number} total 总数\\n@param {Array} range 当前数据在总数中的区间',\n      },\n    },\n    {\n      name: 'pageShowCount',\n      propType: 'number',\n      title: {\n        label: '显示页数',\n        tip: '页码显示的数量，更多的使用...代替',\n      },\n      defaultValue: 5,\n    },\n    {\n      name: 'pageSize',\n      title: {\n        label: '单页记录',\n        tip: '一页中的记录数',\n      },\n      propType: 'number',\n      description: '一页中的记录数',\n      defaultValue: 10,\n    },\n    {\n      name: 'pageSizeSelector',\n      title: {\n        label: '选择器类型',\n        tip: '每页显示选择器类型',\n      },\n      propType: {\n        type: 'oneOf',\n        value: [false, 'filter', 'dropdown'],\n      },\n      description: '每页显示选择器类型',\n      defaultValue: false,\n    },\n    {\n      name: 'pageNumberRender',\n      propType: 'func',\n      title: {\n        label: '自定义页码',\n        tip: '自定义页码渲染函数，函数作用于页码button以及当前页/总页数的数字渲染\\n@param {Number} index 分页的页码，从1开始\\n@return {ReactNode} 返回渲染结果',\n      },\n    },\n    {\n      name: 'pageSizePosition',\n      title: {\n        label: '选择器位置',\n        tip: '每页显示选择器在组件中的位置',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['start', 'end'],\n      },\n      description: '每页显示选择器在组件中的位置',\n      defaultValue: 'start',\n    },\n    {\n      name: 'onPageSizeChange',\n      propType: 'func',\n      description:\n        '每页显示记录数量改变时的回调函数\\n@param {Number} pageSize 改变后的每页显示记录数',\n    },\n    {\n      name: 'hideOnlyOnePage',\n      propType: 'bool',\n      title: {\n        label: '单页隐藏',\n        tip: '当分页数为1时，是否隐藏分页器',\n      },\n      defaultValue: false,\n    },\n    {\n      name: 'showJump',\n      propType: 'bool',\n      title: {\n        label: '显示跳转',\n        tip: 'type 设置为 normal 时，在页码数超过5页后，会显示跳转输入框与按钮，当设置 showJump 为 false 时，不再显示该跳转区域',\n      },\n      defaultValue: true,\n    },\n    {\n      name: 'link',\n      title: {\n        label: '跳转链接',\n        tip: '设置页码按钮的跳转链接，它的值为一个包含 {page} 的模版字符串',\n      },\n      propType: 'string',\n      description: '设置页码按钮的跳转链接，它的值为一个包含 {page} 的模版字符串',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'rtl',\n          condition: () => false,\n        },\n        {\n          name: 'current',\n          condition: () => false,\n          title: {\n            label: '当前页面',\n            tip: '（受控）当前页码',\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['NumberSetter', 'ExpressionSetter'],\n            },\n          },\n        },\n        {\n          name: 'total',\n          title: {\n            label: '总记录数',\n            tip: '总记录数',\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: ['NumberSetter', 'ExpressionSetter'],\n            },\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '引导',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/pagination/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '翻页器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_pagination.png',\n    schema: {\n      componentName: 'Pagination',\n      props: {\n        prefix: 'next-',\n        type: 'normal',\n        shape: 'normal',\n        size: 'medium',\n        defaultCurrent: 1,\n        total: 100,\n        pageShowCount: 5,\n        pageSize: 10,\n        pageSizePosition: 'start',\n        showJump: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/paragraph/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Paragraph',\n  title: '段落',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i3/O1CN01n5wpxc1bi862KuXFz_!!6000000003498-55-tps-50-50.svg',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Paragraph',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'article',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'children',\n      title: '内容',\n      propType: 'string',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'children',\n        title: '内容',\n        setter: 'TextAreaSetter',\n      },\n    ],\n  },\n  icon: 'https://img.alicdn.com/imgextra/i3/O1CN01n5wpxc1bi862KuXFz_!!6000000003498-55-tps-50-50.svg',\n  category: '通用',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/paragraph/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Paragraph',\n  title: 'Paragraph',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Typography',\n    main: '',\n    destructuring: true,\n    subName: 'Paragraph',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'p',\n    },\n    {\n      name: 'type',\n      defaultValue: 'long',\n    },\n    {\n      name: 'size',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/paragraph/snippets.ts",
    "content": "export default [\n  {\n    title: '段落',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01n5wpxc1bi862KuXFz_!!6000000003498-55-tps-50-50.svg',\n    schema: {\n      componentName: 'Paragraph',\n      props: {\n        size: 'medium',\n        style: {\n          wordBreak: 'break-word',\n        },\n        children: `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n  \n        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/popup-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'PopupItem',\n  title: 'PopupItem',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Nav',\n    main: '',\n    destructuring: true,\n    subName: 'PopupItem',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'icon',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'instanceOf',\n            value: 'node',\n          },\n        ],\n      },\n      description: '自定义图标，可以使用 Icon 的 type, 也可以使用组件 `<Icon type=\"icon type\" />`',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标签内容',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '弹出内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/progress/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Progress',\n  title: '进度指示器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Progress',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['circle', 'line'],\n      },\n      description: '形态',\n      defaultValue: 'line',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'percent',\n      title: '百分比',\n      propType: 'number',\n      description: '所占百分比',\n      defaultValue: 0,\n    },\n    {\n      name: 'state',\n      title: '进度状态',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'success', 'error'],\n      },\n      description: '进度状态, 显示优先级: color > progressive > state',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'progressive',\n      title: {\n        label: '色阶变化',\n        tip: '是否为色彩阶段变化模式, 显示优先级: color > progressive > state',\n      },\n      propType: 'bool',\n      description: '是否为色彩阶段变化模式, 显示优先级: color > progressive > state',\n      defaultValue: false,\n    },\n    {\n      name: 'hasBorder',\n      title: '边框',\n      propType: 'bool',\n      description: '是否添加 Border（只适用于 Line Progress)',\n      defaultValue: false,\n    },\n    {\n      name: 'textRender',\n      title: {\n        label: '文本渲染',\n        tip: '文本渲染函数\\n@param {Number} percent 当前的进度信息\\n@param {Object} option 额外的参数\\n@property {Boolean} option.rtl 是否在rtl 模式下渲染\\n@return {ReactNode} 返回文本节点',\n      },\n      propType: 'func',\n      description:\n        '文本渲染函数\\n@param {Number} percent 当前的进度信息\\n@param {Object} option 额外的参数\\n@property {Boolean} option.rtl 是否在rtl 模式下渲染\\n@return {ReactNode} 返回文本节点',\n    },\n    {\n      name: 'color',\n      propType: 'string',\n      description: '进度条颜色, 显示优先级: color > progressive > state',\n    },\n    {\n      name: 'backgroundColor',\n      propType: 'string',\n      description: '背景色',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: '形状',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '圆形',\n                value: 'circle',\n              },\n              {\n                label: '线',\n                value: 'line',\n              },\n            ],\n          },\n        },\n        description: '形态',\n        defaultValue: 'line',\n      },\n      {\n        name: 'progressive',\n        title: {\n          label: '类型',\n          tip: '是否为色彩阶段变化模式, 显示优先级: color > progressive > state',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '基础型',\n                value: false,\n              },\n              {\n                label: '阶段型',\n                value: true,\n              },\n            ],\n          },\n        },\n        description: '是否为色彩阶段变化模式, 显示优先级: color > progressive > state',\n        defaultValue: false,\n      },\n      {\n        name: 'state',\n        title: '状态',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: 'normal',\n              },\n              {\n                label: '成功',\n                value: 'success',\n              },\n              {\n                label: '失败',\n                value: 'error',\n              },\n            ],\n          },\n        },\n        description: '进度状态, 显示优先级: color > progressive > state',\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        description: '尺寸',\n        defaultValue: 'medium',\n      },\n      {\n        name: '!showData',\n        title: {\n          label: '显示数据',\n          tip: '是否显示百分比数据',\n        },\n        setter: 'BoolSetter',\n        setValue: (target, value) => {\n          if (value === false) {\n            target.parent.setPropValue('textRender', () => {});\n          } else {\n            target.parent.setPropValue('textRender', (percent) => `${Math.floor(percent)}%`);\n          }\n        },\n        defaultValue: true,\n      },\n      {\n        name: 'hasBorder',\n        condition: (target) => {\n          return target?.parent?.getPropValue('shape') === 'line';\n        },\n        title: '边框',\n        setter: 'BoolSetter',\n        description: '是否添加 Border（只适用于 Line Progress)',\n        defaultValue: false,\n      },\n      {\n        name: 'style.width',\n        condition: (target) => {\n          return target?.parent?.getPropValue('shape') === 'line';\n        },\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'percent',\n        title: '百分比',\n        setter: 'NumberSetter',\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/progress/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Progress',\n  title: '进度指示器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Progress',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['circle', 'line'],\n      },\n      description: '形态',\n      defaultValue: 'line',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'percent',\n      title: '百分比',\n      propType: 'number',\n      description: '所占百分比',\n      defaultValue: 0,\n    },\n    {\n      name: 'state',\n      title: '进度状态',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'success', 'error'],\n      },\n      description: '进度状态, 显示优先级: color > progressive > state',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'progressive',\n      title: {\n        label: '色阶变化',\n        tip: '是否为色彩阶段变化模式, 显示优先级: color > progressive > state',\n      },\n      propType: 'bool',\n      description: '是否为色彩阶段变化模式, 显示优先级: color > progressive > state',\n      defaultValue: false,\n    },\n    {\n      name: 'hasBorder',\n      title: '边框',\n      propType: 'bool',\n      description: '是否添加 Border（只适用于 Line Progress)',\n      defaultValue: false,\n    },\n    {\n      name: 'textRender',\n      title: {\n        label: '文本渲染',\n        tip: '文本渲染函数\\n@param {Number} percent 当前的进度信息\\n@param {Object} option 额外的参数\\n@property {Boolean} option.rtl 是否在rtl 模式下渲染\\n@return {ReactNode} 返回文本节点',\n      },\n      propType: 'func',\n      description:\n        '文本渲染函数\\n@param {Number} percent 当前的进度信息\\n@param {Object} option 额外的参数\\n@property {Boolean} option.rtl 是否在rtl 模式下渲染\\n@return {ReactNode} 返回文本节点',\n    },\n    {\n      name: 'color',\n      propType: 'string',\n      description: '进度条颜色, 显示优先级: color > progressive > state',\n    },\n    {\n      name: 'backgroundColor',\n      propType: 'string',\n      description: '背景色',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'rtl',\n          condition: () => false,\n        },\n        {\n          name: 'prefix',\n          condition: () => false,\n        },\n        {\n          name: 'percent',\n          title: '百分比',\n          supportVariable: true,\n          setter: 'NumberSetter',\n        },\n        {\n          name: 'color',\n          title: {\n            label: '进度条颜色',\n            tip: 'color|进度条颜色, 显示优先级: color > progressive > state',\n          },\n          setter: {\n            componentName: 'ColorSetter',\n          },\n        },\n        {\n          name: 'backgroundColor',\n          title: {\n            label: '背景色',\n            tip: 'backgroundColor|背景色',\n          },\n          setter: {\n            componentName: 'ColorSetter',\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/progress/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '进度指示器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_progress.png',\n    schema: {\n      componentName: 'Progress',\n      props: {\n        prefix: 'next-',\n        shape: 'line',\n        size: 'medium',\n        state: 'normal',\n        percent: 30,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/radio/meta.design.ts",
    "content": "import snippets from './snippets.design';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Radio',\n  title: '单选框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Radio',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n      description: 'input元素id',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '是否选中',\n    },\n    {\n      name: 'defaultChecked',\n      propType: 'bool',\n      description: '是否默认选中',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '通过属性配置label',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否被禁用',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: 'value',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '状态变化时触发的事件\\n@param {Boolean} checked 是否选中\\n@param {Event} e Dom 事件对象',\n    },\n    {\n      name: 'onMouseEnter',\n      propType: 'func',\n      description: '鼠标进入enter事件\\n@param {Event} e Dom 事件对象',\n    },\n    {\n      name: 'onMouseLeave',\n      propType: 'func',\n      description: '鼠标离开事件\\n@param {Event} e Dom 事件对象',\n    },\n  ],\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/radio/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Radio',\n  title: '单选框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Radio',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n      description: 'input元素id',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '是否选中',\n    },\n    {\n      name: 'defaultChecked',\n      propType: 'bool',\n      description: '是否默认选中',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '通过属性配置label',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否被禁用',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: 'value',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '状态变化时触发的事件\\n@param {Boolean} checked 是否选中\\n@param {Event} e Dom 事件对象',\n    },\n    {\n      name: 'onMouseEnter',\n      propType: 'func',\n      description: '鼠标进入enter事件\\n@param {Event} e Dom 事件对象',\n    },\n    {\n      name: 'onMouseLeave',\n      propType: 'func',\n      description: '鼠标离开事件\\n@param {Event} e Dom 事件对象',\n    },\n  ],\n  icon: '',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/radio/snippets.design.ts",
    "content": "export default [\n  {\n    title: '单选按钮组',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_radio.png',\n    schema: {\n      componentName: 'Radio.Group',\n      props: {\n        dataSource: [\n          {\n            label: '选项一',\n            value: '1',\n          },\n          {\n            label: '选项二',\n            value: '2',\n          },\n          {\n            label: '选项三',\n            value: '3',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/radio/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '单选按钮',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_radio.png',\n    schema: {\n      componentName: 'Radio',\n      props: {\n        label: '选项一',\n        value: '1',\n      },\n    },\n  },\n  {\n    title: '单选按钮组',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_radio.png',\n    schema: {\n      componentName: 'Radio.Group',\n      props: {\n        dataSource: [\n          {\n            label: '选项一',\n            value: '1',\n          },\n          {\n            label: '选项二',\n            value: '2',\n          },\n          {\n            label: '选项三',\n            value: '3',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/radio-group/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Radio.Group',\n  title: '单选框组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Radio',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium', 'small'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'button'],\n      },\n      description: '展示形态',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: '选中项的值',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: '默认值',\n    },\n    {\n      name: 'component',\n      propType: 'string',\n      description: '设置标签类型',\n      defaultValue: 'div',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否被禁用',\n    },\n    {\n      name: 'dataSource',\n      propType: 'object',\n      description: '可选项列表',\n    },\n    {\n      name: 'itemDirection',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '子项目的排列方式',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时的事件\\n@param {String/Number} value 选中项的值\\n@param {Event} e Dom 事件对象',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: '类型',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '单选', value: 'normal' },\n              { title: '单选按钮', value: 'button' },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'itemDirection',\n        title: '排列方式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '水平排列', value: 'hoz' },\n              { title: '垂直排列', value: 'ver' },\n            ],\n          },\n        },\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: '选项',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'label',\n                      title: 'label',\n                      setter: 'StringSetter',\n                      important: true,\n                    },\n                    {\n                      name: 'value',\n                      title: 'value',\n                      setter: 'StringSetter',\n                    },\n                  ],\n                },\n              },\n              initialValue: {\n                label: '选项一',\n                value: '1',\n              },\n            },\n          },\n        },\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/radio-group/meta.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Radio.Group',\n  title: '单选框组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Radio',\n    main: '',\n    destructuring: true,\n    subName: 'Group',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium', 'small'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'button'],\n      },\n      description: '展示形态',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: '选中项的值',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: '默认值',\n    },\n    {\n      name: 'component',\n      propType: 'string',\n      description: '设置标签类型',\n      defaultValue: 'div',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否被禁用',\n    },\n    {\n      name: 'dataSource',\n      propType: 'object',\n      description: '可选项列表',\n    },\n    {\n      name: 'itemDirection',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '子项目的排列方式',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时的事件\\n@param {String/Number} value 选中项的值\\n@param {Event} e Dom 事件对象',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: '展示形状',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '默认', value: 'normal' },\n              { title: '按钮', value: 'button' },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'itemDirection',\n        title: '排列方式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '水平排列', value: 'hoz' },\n              { title: '垂直排列', value: 'ver' },\n            ],\n          },\n        },\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'isPreview',\n        title: '预览态',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        defaultValue: '',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: '选项',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          {\n                            name: 'label',\n                            title: 'label',\n                            setter: 'StringSetter',\n                            supportVariable: true,\n                          },\n                          {\n                            name: 'value',\n                            title: 'value',\n                            setter: 'StringSetter',\n                            supportVariable: true,\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: {\n                      label: '选项一',\n                      value: '1',\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/radio-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'RadioItem',\n  title: '单选菜单项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: 'RadioItem',\n  },\n  props: [\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '是否选中',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中或取消选中触发的回调函数\\n@param {Boolean} checked 是否选中\\n@param {Object} event 选中事件对象',\n    },\n    {\n      name: 'helper',\n      propType: 'node',\n      description: '帮助文本',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Menu', 'SubMenu', 'Menu.Group', 'MenuButton'],\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/range/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Range',\n  title: '区段选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Range',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '分值',\n    },\n    {\n      name: 'slider',\n      title: {\n        label: '滑块个数',\n        tip: '滑块个数: 单个, 两个',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'double'],\n      },\n      description: '滑块个数\\n@enumdesc 单个, 两个',\n      defaultValue: 'single',\n    },\n    {\n      name: 'min',\n      title: {\n        label: '最小值',\n      },\n      propType: 'number',\n      description: '最小值',\n      defaultValue: 0,\n    },\n    {\n      name: 'max',\n      title: {\n        label: '最大值',\n      },\n      propType: 'number',\n      description: '最大值',\n      defaultValue: 100,\n    },\n    {\n      name: 'step',\n      title: {\n        label: '步长',\n        tip: '步长，取值必须大于 0，并且可被 (max - min) 整除。',\n      },\n      propType: 'number',\n      description: '步长，取值必须大于 0，并且可被 (max - min) 整除。',\n      defaultValue: 1,\n    },\n    {\n      name: 'marksPosition',\n      title: {\n        label: 'Marks 位置',\n        tip: \"marksPosition|marks显示在上方('above')or下方('below')\",\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['above', 'below'],\n      },\n      description: \"marks显示在上方('above')or下方('below')\",\n      defaultValue: 'above',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '值为 `true` 时，滑块为禁用状态',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '当 Range 的值发生改变后，会触发 onChange 事件，并把改变后的值作为参数传入, 如果设置了value, 要配合此函数做受控使用\\n@param {String/number} value',\n    },\n    {\n      name: 'onProcess',\n      propType: 'func',\n      description:\n        '滑块拖动的时候触发的事件,不建议在这里setState, 一般情况下不需要用, 滑动时有特殊需求时使用\\n@param {String/number} value',\n    },\n    {\n      name: 'hasTip',\n      title: {\n        label: '是否显示 tip',\n        tip: 'hasTip',\n      },\n      propType: 'bool',\n      description: '是否显示 tip',\n      defaultValue: true,\n    },\n    {\n      name: 'reverse',\n      title: {\n        label: '选中态反转',\n        tip: 'reverse',\n      },\n      propType: 'bool',\n      description: '选中态反转',\n      defaultValue: false,\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n      description: '是否pure render',\n      defaultValue: false,\n    },\n    {\n      name: 'fixedWidth',\n      propType: 'bool',\n      description: '是否为拖动线段类型,默认slider为double, defaultValue必传且指定区间',\n      defaultValue: false,\n    },\n    {\n      name: 'tooltipVisible',\n      propType: 'bool',\n      description: 'tooltip是否默认展示',\n      defaultValue: false,\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'slider',\n        title: {\n          label: '滑块个数',\n          tip: '滑块个数: 单个, 两个',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '单个',\n                value: 'single',\n              },\n              {\n                label: '两个',\n                value: 'double',\n              },\n            ],\n          },\n        },\n        description: '滑块个数\\n@enumdesc 单个, 两个',\n        defaultValue: 'single',\n      },\n      {\n        name: 'marks',\n        title: '显示刻度',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '否',\n                value: false,\n              },\n              {\n                label: '是',\n                value: 5,\n              },\n            ],\n          },\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'marksPosition',\n        title: {\n          label: '刻度位置',\n          tip: \"marksPosition|marks显示在上方('above')or下方('below')\",\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '上',\n                value: 'above',\n              },\n              {\n                label: '下',\n                value: 'below',\n              },\n            ],\n          },\n        },\n        description: \"marks显示在上方('above')or下方('below')\",\n        defaultValue: 'above',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'value',\n        title: '当前值',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'min',\n        title: {\n          label: '最小值',\n        },\n        setter: 'NumberSetter',\n        description: '最小值',\n        defaultValue: 0,\n      },\n      {\n        name: 'max',\n        title: {\n          label: '最大值',\n        },\n        setter: 'NumberSetter',\n        description: '最大值',\n        defaultValue: 100,\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/range/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Range',\n  title: '区段选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Range',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '分值',\n    },\n    {\n      name: 'slider',\n      title: {\n        label: '滑块个数',\n        tip: '滑块个数: 单个, 两个',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'double'],\n      },\n      description: '滑块个数\\n@enumdesc 单个, 两个',\n      defaultValue: 'single',\n    },\n    {\n      name: 'min',\n      title: {\n        label: '最小值',\n      },\n      propType: 'number',\n      description: '最小值',\n      defaultValue: 0,\n    },\n    {\n      name: 'max',\n      title: {\n        label: '最大值',\n      },\n      propType: 'number',\n      description: '最大值',\n      defaultValue: 100,\n    },\n    {\n      name: 'step',\n      title: {\n        label: '步长',\n        tip: '步长，取值必须大于 0，并且可被 (max - min) 整除。',\n      },\n      propType: 'number',\n      description: '步长，取值必须大于 0，并且可被 (max - min) 整除。',\n      defaultValue: 1,\n    },\n    {\n      name: 'marksPosition',\n      title: {\n        label: 'Marks 位置',\n        tip: \"marksPosition|marks显示在上方('above')or下方('below')\",\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['above', 'below'],\n      },\n      description: \"marks显示在上方('above')or下方('below')\",\n      defaultValue: 'above',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '值为 `true` 时，滑块为禁用状态',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '当 Range 的值发生改变后，会触发 onChange 事件，并把改变后的值作为参数传入, 如果设置了value, 要配合此函数做受控使用\\n@param {String/number} value',\n    },\n    {\n      name: 'onProcess',\n      propType: 'func',\n      description:\n        '滑块拖动的时候触发的事件,不建议在这里setState, 一般情况下不需要用, 滑动时有特殊需求时使用\\n@param {String/number} value',\n    },\n    {\n      name: 'hasTip',\n      title: {\n        label: '是否显示 tip',\n        tip: 'hasTip',\n      },\n      propType: 'bool',\n      description: '是否显示 tip',\n      defaultValue: true,\n    },\n    {\n      name: 'reverse',\n      title: {\n        label: '选中态反转',\n        tip: 'reverse',\n      },\n      propType: 'bool',\n      description: '选中态反转',\n      defaultValue: false,\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n      description: '是否pure render',\n      defaultValue: false,\n    },\n    {\n      name: 'fixedWidth',\n      propType: 'bool',\n      description: '是否为拖动线段类型,默认slider为double, defaultValue必传且指定区间',\n      defaultValue: false,\n    },\n    {\n      name: 'tooltipVisible',\n      propType: 'bool',\n      description: 'tooltip是否默认展示',\n      defaultValue: false,\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'value',\n        title: '当前值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'min',\n        title: {\n          label: '最小值',\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n        description: '最小值',\n        defaultValue: 0,\n      },\n      {\n        name: 'max',\n        title: {\n          label: '最大值',\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n        description: '最大值',\n        defaultValue: 100,\n      },\n      {\n        name: 'step',\n        title: {\n          label: '步长',\n          tip: '步长，取值必须大于 0，并且可被 (max - min) 整除。',\n        },\n        setter: 'NumberSetter',\n        supportVariable: true,\n        description: '步长，取值必须大于 0，并且可被 (max - min) 整除。',\n        defaultValue: 1,\n      },\n      {\n        name: 'slider',\n        title: {\n          label: '滑块个数',\n          tip: '滑块个数: 单个, 两个',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['single', 'double'] },\n        },\n        description: '滑块个数\\n@enumdesc 单个, 两个',\n        defaultValue: 'single',\n      },\n      {\n        name: 'marksPosition',\n        title: {\n          label: 'Marks 位置',\n          tip: \"marksPosition|marks显示在上方('above')or下方('below')\",\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['above', 'below'] },\n        },\n        description: \"marks显示在上方('above')or下方('below')\",\n        defaultValue: 'above',\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '值为 `true` 时，滑块为禁用状态',\n        defaultValue: false,\n      },\n      {\n        name: 'hasTip',\n        title: {\n          label: '显示 Tip',\n          tip: 'hasTip',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否显示 tip',\n        defaultValue: true,\n      },\n      {\n        name: 'fixedWidth',\n        title: '固定宽度',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否为拖动线段类型,默认slider为double, defaultValue必传且指定区间',\n        defaultValue: false,\n      },\n      {\n        name: 'tooltipVisible',\n        display: 'block',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: 'tooltip是否默认展示',\n        defaultValue: false,\n      },\n      {\n        name: 'reverse',\n        display: 'block',\n        title: {\n          label: '选中态反转',\n          tip: 'reverse',\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '选中态反转',\n        defaultValue: false,\n      },\n      {\n        name: 'isPreview',\n        display: 'block',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '是否为预览态',\n        defaultValue: false,\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/range/snippets.ts",
    "content": "export default [\n  {\n    title: '区段选择器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_range.png',\n    schema: {\n      componentName: 'Range',\n      props: {\n        prefix: 'next-',\n        slider: 'single',\n        max: 100,\n        step: 1,\n        marksPosition: 'above',\n        hasTip: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/range-calendar/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'RangeCalendar',\n  title: 'RangeCalendar',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Calendar',\n    main: '',\n    destructuring: true,\n    subName: 'RangeCalendar',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      description: '样式前缀',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'defaultStartValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '默认的开始日期',\n    },\n    {\n      name: 'defaultEndValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '默认的结束日期',\n    },\n    {\n      name: 'startValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '开始日期（moment 对象）',\n    },\n    {\n      name: 'endValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '结束日期（moment 对象）',\n    },\n    {\n      name: 'disableChangeMode',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'showOtherMonth',\n      propType: 'bool',\n      description: '是否显示非本月的日期',\n      defaultValue: false,\n    },\n    {\n      name: 'defaultVisibleMonth',\n      propType: 'func',\n      description: '模板展示的月份（起始月份）',\n    },\n    {\n      name: 'onVisibleMonthChange',\n      propType: 'func',\n      description:\n        '展现的月份变化时的回调\\n@param {Object} value 显示的月份 (moment 对象)\\n@param {String} reason 触发月份改变原因',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '不可选择的日期\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@returns {Boolean}',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择日期单元格时的回调\\n@param {Object} value 对应的日期值 (moment 对象)',\n    },\n    {\n      name: 'dateCellRender',\n      propType: 'func',\n      description: '自定义日期单元格渲染',\n    },\n    {\n      name: 'monthCellRender',\n      propType: 'func',\n      description:\n        '自定义月份渲染函数\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@returns {ReactNode}',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'startValue',\n          setter: 'DateSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'defaultStartValue',\n          setter: 'DateSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'defaultEndValue',\n          setter: 'DateSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'endValue',\n          setter: 'DateSetter',\n          supportVariable: true,\n        },\n      ],\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/range-picker/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'RangePicker',\n  title: '日期区段选择',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: 'RangePicker',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['date', 'month', 'year'],\n      },\n      description: '日期范围类型',\n      defaultValue: 'date',\n    },\n    {\n      name: 'defaultVisibleMonth',\n      propType: 'func',\n      description: '默认展示的起始月份\\n@return {MomentObject} 返回包含指定月份的 moment 对象实例',\n    },\n    {\n      name: 'onVisibleMonthChange',\n      propType: 'func',\n    },\n    {\n      name: 'value',\n      propType: 'array',\n      description: '日期范围值数组 [moment, moment]',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'array',\n      description: '初始的日期范围值数组 [moment, moment]',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期格式',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'showTime',\n      propType: 'bool',\n      description: '是否使用时间控件，支持传入 TimePicker 的属性',\n      defaultValue: false,\n    },\n    {\n      name: 'resetTime',\n      propType: 'bool',\n      description: '每次选择是否重置时间（仅在 showTime 开启时有效）',\n      defaultValue: false,\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '日期范围值改变时的回调 [ MomentObject|String, MomentObject|String ]\\n@param {Array<MomentObject|String>} value 日期值',\n    },\n    {\n      name: 'onOk',\n      propType: 'func',\n      description:\n        '点击确认按钮时的回调 返回开始时间和结束时间`[ MomentObject|String, MomentObject|String ]`\\n@return {Array} 日期范围',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '输入框内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'loading', 'success'],\n      },\n      description: '输入框状态',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '输入框尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} type 触发弹层显示和隐藏的来源 okBtnClick 表示由确认按钮触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式, 具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'node',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'startDateInputAriaLabel',\n      propType: 'string',\n      description: '开始日期输入框的 aria-label 属性',\n    },\n    {\n      name: 'startTimeInputAriaLabel',\n      propType: 'string',\n      description: '开始时间输入框的 aria-label 属性',\n    },\n    {\n      name: 'endDateInputAriaLabel',\n      propType: 'string',\n      description: '结束日期输入框的 aria-label 属性',\n    },\n    {\n      name: 'endTimeInputAriaLabel',\n      propType: 'string',\n      description: '结束时间输入框的 aria-label 属性',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: 'string',\n    },\n    {\n      name: 'popupContent',\n      propType: 'node',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onVisibleMonthChange', 'onChange', 'onOk', 'onVisibleChange'],\n    },\n    props: [\n      {\n        name: 'defaultValue',\n        title: {\n          label: '默认值',\n          tip: '初始的日期范围值数组 [moment, moment]',\n        },\n        setter: {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 0,\n                  title: '开始时间',\n                  setter: 'DateSetter',\n                  supportVariable: true,\n                },\n                {\n                  name: 1,\n                  title: '结束时间',\n                  setter: 'DateSetter',\n                  supportVariable: true,\n                },\n              ],\n            },\n          },\n        },\n      },\n      {\n        name: 'type',\n        title: '日期类型',\n        setter: {\n          setter: 'RadioGroupSetter',\n          supportVariable: true,\n          props: { options: ['date', 'month', 'year'] },\n        },\n        description: '日期范围类型',\n        defaultValue: 'date',\n      },\n      {\n        name: 'label',\n        title: '内置标签',\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: '输入框内置标签',\n      },\n      {\n        name: 'state',\n        title: '输入状态',\n        setter: {\n          setter: 'RadioGroupSetter',\n          supportVariable: true,\n          props: { options: ['error', 'loading', 'success'] },\n        },\n        description: '输入框状态',\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        setter: {\n          setter: 'RadioGroupSetter',\n          supportVariable: true,\n          props: { options: ['small', 'medium', 'large'] },\n        },\n        description: '输入框尺寸',\n        defaultValue: 'medium',\n      },\n      {\n        name: 'disabled',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '是否禁用',\n      },\n      {\n        name: 'hasClear',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '清空按钮',\n        defaultValue: true,\n      },\n      {\n        name: 'defaultVisible',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '显示弹层',\n        defaultValue: false,\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n  },\n  category: '信息输入',\n  icon: '',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/rating/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Rating',\n  title: '评分',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Rating',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'number',\n      description: '默认值',\n      defaultValue: 0,\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'count',\n      propType: 'number',\n      description: '评分的总数',\n      defaultValue: 5,\n    },\n    {\n      name: 'showGrade',\n      propType: 'bool',\n      description: '是否显示 grade',\n      defaultValue: false,\n    },\n    {\n      name: 'allowHalf',\n      propType: 'bool',\n      description: '是否允许半星评分',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否为只读态，效果上同 disabeld',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '用户点击评分时触发的回调\\n@param {String} value 评分值',\n    },\n    {\n      name: 'onHoverChange',\n      propType: 'func',\n      description: '用户hover评分时触发的回调\\n@param {String} value 评分值',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '按钮尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'value',\n        title: '当前值',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'count',\n        title: '评分总数',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'showGrade',\n        title: '显示分数',\n        setter: 'BoolSetter',\n      },\n    ],\n    supports: {\n      events: ['onChange', 'onHoverChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/rating/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Rating',\n  title: '评分',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Rating',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'number',\n      description: '默认值',\n      defaultValue: 0,\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'count',\n      propType: 'number',\n      description: '评分的总数',\n      defaultValue: 5,\n    },\n    {\n      name: 'showGrade',\n      propType: 'bool',\n      description: '是否显示 grade',\n      defaultValue: false,\n    },\n    {\n      name: 'allowHalf',\n      propType: 'bool',\n      description: '是否允许半星评分',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否为只读态，效果上同 disabeld',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '用户点击评分时触发的回调\\n@param {String} value 评分值',\n    },\n    {\n      name: 'onHoverChange',\n      propType: 'func',\n      description: '用户hover评分时触发的回调\\n@param {String} value 评分值',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'value',\n        title: '当前值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'count',\n        title: '评分总数',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'allowHalf',\n        title: '半星评分',\n        setter: ['BoolSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'showGrade',\n        title: '显示分数',\n        setter: ['BoolSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'readAs',\n        title: '评分文案生成方法',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"readAs\",\n          //   defaultCode=`function readAs(val) {\n          //     return val + 'source';\n          //   }`,\n          // }\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      {\n        name: 'style',\n        setter: {\n          componentName: 'StyleSetter',\n        },\n      },\n    ],\n    supports: {\n      events: ['onChange', 'onHoverChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/rating/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '评分',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_rating.png',\n    schema: {\n      componentName: 'Rating',\n      props: {\n        prefix: 'next-',\n        count: 5,\n        size: 'medium',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/responsive-grid/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'ResponsiveGrid',\n  title: '布局容器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'ResponsiveGrid',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'any',\n    },\n    {\n      name: 'device',\n      propType: {\n        type: 'oneOf',\n        value: ['phone', 'tablet', 'desktop'],\n      },\n      description: '设备，用来做自适应，默认为PC',\n      defaultValue: 'desktop',\n    },\n    {\n      name: 'columns',\n      propType: 'number',\n      description: '分为几列',\n      defaultValue: 12,\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'layout',\n        title: '布局',\n        defaultValue: '6:6',\n        // setter: {\n        //   componentName: 'NewArraySetter',\n        //   props: {\n        //     itemSetter: {\n        //       componentName: 'NumberSetter',\n        //     }\n        //   }\n        // },\n        setter: {\n          componentName: 'StringSetter',\n        },\n        extraProps: {\n          setValue(target, value) {\n            // 解析x:y:z的数据形式,排除不符合规范的传入\n            let arrValue = value.split(':');\n            arrValue = arrValue.filter((item) => {\n              return item && item.trim(); // 去除空数组项\n            });\n            const flag = arrValue.find((item) => {\n              return isNaN(Number(item));\n            });\n            if (flag) {\n              return;\n            }\n            const { node } = target;\n            node.children.mergeChildren(\n              (child, index) => {\n                child.setPropValue('colSpan', arrValue[index]);\n                return index >= arrValue.length;\n              },\n              (children) => {\n                let l = children.length;\n                const items = [];\n                while (l++ < arrValue.length) {\n                  items.push({\n                    componentName: 'ResponsiveGrid.Cell',\n                    props: {\n                      colSpan: arrValue[l - 1] || 1,\n                    },\n                  });\n                }\n                return items;\n              },\n              null,\n            );\n          },\n        },\n      },\n      {\n        name: 'gap',\n        title: '列间距',\n        defaultValue: 0,\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'NumberSetter',\n                props: {\n                  defaultValue: 8,\n                },\n              },\n              {\n                componentName: 'JsonSetter',\n                props: {\n                  defaultValue: [8, 4],\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        name: 'dense',\n        title: '紧密模式',\n        defaultValue: false,\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'style',\n        setter: {\n          componentName: 'StyleSetter',\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '布局容器类',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/responsive-grid-cell/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'ResponsiveGrid.Cell',\n  title: '布局容器 Cell',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'ResponsiveGrid',\n    main: '',\n    destructuring: true,\n    subName: 'Cell',\n  },\n  props: [\n    {\n      name: 'colSpan',\n      propType: 'number',\n      description: '横向，占据几列',\n    },\n    {\n      name: 'rowSpan',\n      propType: 'number',\n      description: '纵向，占据几行',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    advanced: {\n      // 这个函数返回false会报错...\n      getResizingHandlers: (node) => {\n        const currentNodeIndex = node.index;\n        const parent = node.parent;\n        if (!parent) return [];\n        let layout = parent.getPropValue('layout');\n        if (!layout) return [];\n        layout = layout.split(':').map((item) => parseInt(item, 10));\n        // 最后一个节点不允许拖拽\n        if (currentNodeIndex >= layout.length - 1) {\n          return [];\n        }\n        return ['e'];\n      },\n      callbacks: {\n        onResizeStart: (e, currentNode) => {\n          const { trigger } = e;\n          let nodeIndex = currentNode.index;\n          let startLayout = currentNode.parent.getPropValue('layout');\n          startLayout = startLayout.split(':').map((item) => parseInt(item, 10));\n          let eachWidth = currentNode.getRect().width / startLayout[nodeIndex];\n          // 暴露到currentNode节点上供onResize回调使用\n          currentNode.nodeIndex = nodeIndex;\n          currentNode.startLayout = startLayout;\n          currentNode.eachWidth = eachWidth;\n        },\n        onResize: (e, currentNode) => {\n          const { trigger, deltaX, deltaY } = e;\n          const { nodeIndex, startLayout, eachWidth } = currentNode;\n          let moveColumn = Math.round(deltaX / eachWidth);\n          const layout = [...startLayout]; // 浅拷贝\n          if (moveColumn > 0) {\n            moveColumn = Math.min(moveColumn, layout[nodeIndex + 1] - 1);\n          } else {\n            moveColumn = -Math.min(-moveColumn, layout[nodeIndex] - 1);\n          }\n          layout[nodeIndex] += moveColumn;\n          layout[nodeIndex + 1] -= moveColumn;\n          // 获取下一个节点实例\n          let nextNode = currentNode.parent.children.filter((c, index) => {\n            return index === nodeIndex + 1;\n          });\n          // 为当前节点设置colSpan属性\n          currentNode.setPropValue('colSpan', layout[nodeIndex]);\n          // 为nextChild节点设置colSpan属性\n          if (nextNode && nextNode[0]) {\n            nextNode[0].setPropValue('colSpan', layout[nodeIndex + 1]);\n          }\n          // 为父容器设置layout属性\n          currentNode.parent.setPropValue('layout', layout.join(':'));\n        },\n      },\n    },\n  },\n  icon: '',\n  category: '布局容器类',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/rich-text/meta.ts",
    "content": "module.exports = {\n  componentName: 'RichText',\n  title: '需求占位',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'RichText',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      override: [\n        {\n          name: 'style',\n          propType: 'object',\n        },\n        {\n          name: 'maxHeight',\n          title: '最大高度',\n          propType: 'number',\n          setter: 'NumberSetter',\n          description: '最大高度',\n        },\n        {\n          name: 'content',\n          title: '需求内容',\n          display: 'inline',\n          supportVariable: true,\n          setter: {\n            componentName: 'EditSetter',\n            props: {\n              title: '编辑内容',\n            },\n          },\n        },\n      ],\n    },\n  },\n  advanced: {\n    getResizingHandlers: () => {\n      return ['e'];\n    },\n    callbacks: {\n      onResizeStart: (e, currentNode) => {\n        const parent = currentNode.parent;\n        if (parent) {\n          const parentNode = parent.getDOMNode();\n          if (parentNode) {\n            currentNode.parentRect = parentNode.getBoundingClientRect();\n          }\n        }\n        currentNode.beforeSpan = currentNode.getPropValue('colSpan') || 12;\n        currentNode.startRect = currentNode.getRect();\n      },\n      onResize: (e, currentNode) => {\n        const { deltaX } = e;\n        const startWidth = currentNode.startRect\n          ? currentNode.startRect.width\n          : currentNode.beforeSpan * (currentNode.parentRect.width / 12);\n        let width = startWidth + deltaX;\n        if (!currentNode.startRect) {\n          currentNode.startRect = {\n            width,\n          };\n        }\n        width = Math.max(0, width); // 不能小于0\n        width = Math.min(width, currentNode.parentRect.width); // 不能大于父容器宽度\n        currentNode.getDOMNode().style['width'] = `${Math.round(width)}px`;\n      },\n      onResizeEnd: (e, currentNode) => {\n        currentNode.setPropValue('style.width', currentNode.getDOMNode().style['width']);\n      },\n    },\n  },\n  icon: 'https://img.alicdn.com/imgextra/i3/O1CN01G7Lc8e1pZL7p4cdKc_!!6000000005374-2-tps-112-112.png',\n  category: '基础元素',\n  group: '精选组件',\n  snippets: require('./snippets'),\n  hidden: true,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/rich-text/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '需求占位',\n    screenshot: 'https://img.alicdn.com/tfs/TB160cKkP39YK4jSZPcXXXrUFXa-112-64.png',\n    schema: {\n      title: '需求占位',\n      componentName: 'RichText',\n      props: {\n        title: '需求占位描述',\n        content: {\n          subject: '需求标题',\n          hideTitle: false,\n          description:\n            '<p><span>- 你可以在这里描述需求</span><br /><span>- 或者粘贴需求截图</span></p>',\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/search/meta.design.ts",
    "content": "import snippets from './snippets.design';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Search',\n  title: '搜索',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Search',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    supports: {\n      style: true,\n      events: ['onChange', 'onSearch', 'onFilterChange'],\n    },\n    props: [\n      {\n        name: 'shape',\n        title: {\n          label: '模式',\n          tip: 'shape|形状',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: 'normal',\n              },\n              {\n                label: '简单',\n                value: 'simple',\n              },\n            ],\n          },\n        },\n        description: '形状',\n        defaultValue: 'normal',\n      },\n      {\n        name: 'type',\n        title: {\n          label: '类型',\n          tip: 'type|类型 shape=normal: primary/secondary; shape=simple: normal/dark;',\n        },\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: 'normal',\n              },\n              {\n                label: '主要',\n                value: 'primary',\n              },\n              {\n                label: '次要',\n                value: 'secondary',\n              },\n              {\n                label: '反底',\n                value: 'dark',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '按钮尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'disabled',\n        title: '状态',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: false,\n              },\n              {\n                label: '禁用',\n                value: true,\n              },\n            ],\n          },\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'filter',\n        title: '是否有菜单',\n        defaultValue: false,\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '否',\n                value: false,\n              },\n              {\n                label: '是',\n                value: [\n                  {\n                    label: 'Products',\n                    value: 'Products',\n                  },\n                  {\n                    label: 'Products1',\n                    value: 'Products1',\n                  },\n                  {\n                    label: 'Products2',\n                    value: 'Products2',\n                  },\n                  {\n                    label: 'Products3',\n                    value: 'Products3',\n                  },\n                  {\n                    label: 'Products4',\n                    value: 'Products4',\n                  },\n                  {\n                    label: 'Products5',\n                    value: 'Products5',\n                  },\n                  {\n                    label: 'Products6',\n                    value: 'Products6',\n                  },\n                  {\n                    label: 'Products7',\n                    value: 'Products7',\n                  },\n                  {\n                    label: 'Products8',\n                    value: 'Products8',\n                  },\n                  {\n                    label: 'Products9',\n                    value: 'Products9',\n                  },\n                  {\n                    label: 'Products10',\n                    value: 'Products10',\n                  },\n                  {\n                    label: 'Suppliers',\n                    value: 'Suppliers',\n                  },\n                ],\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'placeholder',\n        title: '提示文字',\n        setter: 'StringSetter',\n        defaultValue: '请输入关键词',\n      },\n      {\n        name: 'searchText',\n        title: '按钮文案',\n        setter: 'StringSetter',\n        description: 'button 的内容',\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/search/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Search',\n  title: '搜索',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Search',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    supports: {\n      style: true,\n      events: ['onChange', 'onSearch', 'onFilterChange'],\n    },\n    props: [\n      {\n        name: 'placeholder',\n        title: '提示文字',\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: '默认提示',\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: '搜索框默认值',\n      },\n      {\n        name: 'searchText',\n        title: '按钮文案',\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: 'button 的内容',\n      },\n      {\n        name: 'size',\n        title: {\n          label: '尺寸',\n          tip: \"size|'大', '小'\",\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: 'large',\n                value: 'large',\n              },\n              {\n                title: 'medium',\n                value: 'medium',\n              },\n            ],\n          },\n        },\n        description: \"大小\\n@enumdesc '大', '小'\",\n        defaultValue: 'medium',\n      },\n      {\n        name: 'shape',\n        title: {\n          label: '形状',\n          tip: 'shape|形状',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['normal', 'simple'],\n          },\n        },\n        description: '形状',\n        defaultValue: 'normal',\n      },\n      {\n        name: 'type',\n        title: {\n          label: '类型',\n          tip: 'type|类型 shape=normal: primary/secondary; shape=simple: normal/dark;',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['primary', 'secondary', 'normal', 'dark'],\n          },\n        },\n        description: '类型 shape=normal: primary/secondary; shape=simple: normal/dark;',\n        defaultValue: 'normal',\n      },\n      {\n        name: 'hasClear',\n        title: '清除按钮',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否显示清除按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'hasIcon',\n        title: '搜索图标',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否显示搜索按钮',\n        defaultValue: true,\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否禁用',\n        defaultValue: false,\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: {\n          label: '搜索框下拉联想列表',\n          tip: 'dataSource | 搜索框下拉联想列表',\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['JsonSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'filter',\n        display: 'block',\n        title: {\n          label: '选择器数据',\n          tip: 'filter|选择器数据',\n        },\n        setter: {\n          componentName: 'JsonSetter',\n        },\n      },\n      {\n        name: 'defaultFilterValue',\n        display: 'block',\n        title: '选择器默认值',\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: '选择器默认值',\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/search/snippets.design.ts",
    "content": "export default [\n  {\n    title: '搜索',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_search.png',\n    schema: {\n      componentName: 'Search',\n      props: {\n        dataSource: [\n          {\n            label: 'Recent',\n            value: 'Recent',\n          },\n          {\n            label: 'dress',\n            value: 'dress',\n          },\n          {\n            label: 'sunglasses',\n            value: 'sunglasses',\n          },\n          {\n            label: 't-shirt',\n            value: 't-shirt',\n          },\n        ],\n        followTrigger: true,\n        searchText: '搜索',\n        prefix: 'next-',\n        shape: 'normal',\n        type: 'normal',\n        size: 'medium',\n        hasIcon: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/search/snippets.ts",
    "content": "export default [\n  {\n    title: '搜索',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_search.png',\n    schema: {\n      componentName: 'Search',\n      props: {\n        dataSource: [\n          {\n            label: 'Recent',\n            value: 'Recent',\n          },\n          {\n            label: 'dress',\n            value: 'dress',\n          },\n          {\n            label: 'sunglasses',\n            value: 'sunglasses',\n          },\n          {\n            label: 't-shirt',\n            value: 't-shirt',\n          },\n        ],\n        followTrigger: true,\n        searchText: '搜索',\n        prefix: 'next-',\n        shape: 'normal',\n        type: 'normal',\n        size: 'medium',\n        hasIcon: true,\n      },\n    },\n  },\n  {\n    title: '带分类',\n    screenshot: 'https://img.alicdn.com/tfs/TB1rRaLu5_1gK0jSZFqXXcpaXXa-112-64.png',\n    schema: {\n      componentName: 'Search',\n      props: {\n        followTrigger: true,\n        defaultFilterValue: 'Products',\n        filter: [\n          {\n            label: 'Products',\n            value: 'Products',\n          },\n          {\n            label: 'Products1',\n            value: 'Products1',\n          },\n        ],\n        dataSource: [\n          {\n            label: 'Recent',\n            value: 'Recent',\n          },\n          {\n            label: 'dress',\n            value: 'dress',\n          },\n          {\n            label: 'sunglasses',\n            value: 'sunglasses',\n          },\n          {\n            label: 't-shirt',\n            value: 't-shirt',\n          },\n        ],\n        searchText: '搜索',\n        prefix: 'next-',\n        shape: 'normal',\n        type: 'normal',\n        size: 'medium',\n        hasIcon: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/select/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport parseData from '../utils/parse-data';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Select',\n  title: '选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Select',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    component: {\n      rootSelector: 'span.next-select',\n    },\n    props: [\n      {\n        name: 'mode',\n        title: {\n          label: '模式',\n          tip: '属性: mode',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            defaultValue: 'single',\n            options: [\n              { value: 'single', title: '单选' },\n              { value: 'multiple', title: '多选' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'visible',\n        title: {\n          label: '状态',\n          tip: '属性: visible',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            defaultValue: 'single',\n            options: [\n              { value: false, title: '普通' },\n              { value: true, title: '展开' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'hasBorder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示边框',\n            en_US: 'ShowBorder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasBorder | 说明: 是否有边框',\n            en_US: 'prop: hasBorder | description: HasBorder',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '无',\n                value: false,\n              },\n              {\n                label: '有',\n                value: true,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n        setValue: (target) => {\n          const visible = target.parent.getPropValue('visible');\n          if (!visible) return;\n          target.parent.setPropValue('visible', false);\n          setTimeout(() => {\n            target.parent.setPropValue('visible', true);\n          }, 300);\n        },\n      },\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: 'label|输入框内置标签',\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: '属性: placeholder',\n        },\n        defaultValue: '请选择', // 不生效\n        setter: 'StringSetter',\n      },\n      {\n        name: 'showSearch',\n        title: {\n          label: '可搜索',\n          tip: '属性: showSearch',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const list = parseData(value).filter(({ type }) => 'node' === type);\n          const dataSource = [];\n          const _value = [];\n\n          list.forEach((item, index) => {\n            dataSource.push({\n              label: item.value,\n              value: index,\n              disabled: item.state === 'disabled',\n            });\n            if (item.state === 'active') {\n              _value.push(index);\n            }\n          });\n          target.parent.setPropValue('dataSource', dataSource);\n          target.parent.setPropValue('value', _value);\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n            disableIcon: true,\n          },\n        },\n      },\n    ],\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          propType: 'func',\n          description: '值发生变化',\n        },\n        {\n          name: 'onVisibleChange',\n          propType: 'func',\n          description: '弹层显示隐藏变化',\n        },\n        {\n          name: 'onRemove',\n          propType: 'func',\n          description: 'Tag 被删除',\n        },\n        {\n          name: 'onSearch',\n          propType: 'func',\n          description: '搜索',\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/select/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Select',\n  title: '选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Select',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'placeholder',\n      title: {\n        label: '占位提示',\n        tip: '属性: placeholder',\n      },\n      defaultValue: '请选择', // 不生效\n      propType: 'string',\n    },\n    {\n      name: 'defaultValue',\n      title: {\n        label: '默认值',\n        tip: '属性: defaultValue',\n      },\n      propType: 'string',\n    },\n    {\n      name: 'mode',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple', 'tag'],\n      },\n      description: '选择器模式',\n    },\n    {\n      name: 'hasClear',\n      title: {\n        label: '清除按钮',\n        tip: '属性: hasClear',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'showSearch',\n      title: {\n        label: '可搜索',\n        tip: '属性: showSearch',\n      },\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'dataSource',\n    },\n    {\n      type: 'group',\n      title: '其他配置',\n      display: 'block',\n      items: [\n        {\n          name: 'notFoundContent',\n          title: {\n            label: '空文案',\n            tip: 'notFoundContent|弹层内容为空的文案',\n          },\n          setter: 'StringSetter',\n          supportVariable: true,\n          description: '弹层内容为空的文案',\n        },\n        {\n          name: 'hasBorder',\n          title: {\n            label: '边框',\n            tip: '是否有边框',\n          },\n          propType: 'bool',\n          setter: 'BoolSetter',\n          supportVariable: true,\n          description: '是否有边框',\n        },\n        {\n          name: 'autoWidth',\n          title: '下拉等宽',\n          propType: 'bool',\n          setter: 'BoolSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'hasArrow',\n          title: '下拉箭头',\n          propType: 'bool',\n          setter: 'BoolSetter',\n          supportVariable: true,\n          description: '是否有下拉箭头',\n          defaultValue: true,\n        },\n      ],\n    },\n    {\n      type: 'group',\n      title: '高级',\n      display: 'block',\n      items: [\n        {\n          name: 'id',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '唯一标识',\n              en_US: 'ID',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: id | 说明: 唯一标识',\n              en_US: 'prop: id | description: switch id',\n            },\n          },\n          setter: 'StringSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'name',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '表单标识',\n              en_US: 'Name',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: name | 说明: 表单标识',\n              en_US: 'prop: name | description: switch name',\n            },\n          },\n          setter: 'StringSetter',\n          supportVariable: true,\n        },\n      ],\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'dataSource',\n          display: 'block',\n          title: '选项',\n          tip: {\n            title: '数据格式',\n            url: '',\n          },\n          setter: {\n            componentName: 'MixedSetter',\n            props: {\n              setters: [\n                {\n                  componentName: 'ArraySetter',\n                  props: {\n                    itemSetter: {\n                      componentName: 'ObjectSetter',\n                      props: {\n                        config: {\n                          items: [\n                            {\n                              name: 'label',\n                              title: 'label',\n                              setter: 'StringSetter',\n                              supportVariable: true,\n                            },\n                            {\n                              name: 'value',\n                              title: 'value',\n                              setter: 'StringSetter',\n                              supportVariable: true,\n                            },\n                          ],\n                        },\n                      },\n                      initialValue: {\n                        title: 'Title',\n                      },\n                    },\n                  },\n                },\n                'ExpressionSetter',\n              ],\n            },\n          },\n        },\n        {\n          name: 'mode',\n          title: {\n            label: '模式',\n            tip: '属性: mode',\n          },\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              defaultValue: 'single',\n              options: [\n                { value: 'single', title: '单选' },\n                { value: 'multiple', title: '多选' },\n                { value: 'tag', title: '标签' },\n              ],\n            },\n          },\n        },\n      ],\n    },\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          propType: 'func',\n          description: '值发生变化',\n        },\n        {\n          name: 'onVisibleChange',\n          propType: 'func',\n          description: '弹层显示隐藏变化',\n        },\n        {\n          name: 'onRemove',\n          propType: 'func',\n          description: 'Tag 被删除',\n        },\n        {\n          name: 'onSearch',\n          propType: 'func',\n          description: '搜索',\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/select/snippets.design.ts",
    "content": "import parseData from '../utils/parse-data';\n\nconst plainData = 'Option 1\\n*Option 2\\nOption 3\\nOption 4\\nOption 5';\nconst list = parseData(plainData).filter(({ type }) => 'node' === type);\nconst dataSource = [];\nconst value = [];\n\nlist.forEach((item, index) => {\n  dataSource.push({\n    label: item.value,\n    value: index,\n    disabled: item.state === 'disabled',\n  });\n  if (item.state === 'active') {\n    value.push(index);\n  }\n});\n\nexport default [\n  {\n    title: '选择器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_select.png',\n    schema: {\n      componentName: 'Select',\n      props: {\n        mode: 'single',\n        hasArrow: true,\n        cacheValue: true,\n        visible: true,\n        plainData,\n        dataSource,\n        value,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/select/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '选择器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_select.png',\n    schema: {\n      componentName: 'Select',\n      props: {\n        mode: 'single',\n        hasArrow: true,\n        cacheValue: true,\n        dataSource: [\n          {\n            value: '1',\n            label: '选项1',\n          },\n          {\n            value: '2',\n            label: '选项2',\n          },\n          {\n            value: '3',\n            label: '选项3',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/select-option/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Select.Option',\n  title: 'Select.Option',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Select',\n    main: '',\n    destructuring: true,\n    subName: 'Option',\n  },\n  props: [\n    {\n      name: 'value',\n      propType: 'string',\n      description: '选项值',\n      defaultValue: 'test',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/slider/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Slider',\n  title: '图片轮播',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Slider',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'slideDirection',\n        title: {\n          label: '轮播方向',\n          tip: 'slideDirection',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '水平',\n                value: 'hoz',\n              },\n              {\n                label: '垂直',\n                value: 'ver',\n              },\n            ],\n          },\n        },\n        description: '轮播方向',\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'speed',\n        title: {\n          label: '轮播速度',\n          tip: 'speed',\n        },\n        setter: 'NumberSetter',\n        description: '轮播速度',\n        defaultValue: 600,\n      },\n      {\n        name: 'arrows',\n        title: {\n          label: '箭头',\n          tip: 'arrows|是否显示箭头',\n        },\n        setter: 'BoolSetter',\n        description: '是否显示箭头',\n        defaultValue: true,\n      },\n      {\n        name: 'arrowSize',\n        title: {\n          label: '箭头大小',\n          tip: \"arrowSize|导航箭头大小 可选值: 'medium', 'large'\",\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        description: \"导航箭头大小 可选值: 'medium', 'large'\",\n        defaultValue: 'medium',\n      },\n      {\n        name: 'arrowPosition',\n        title: {\n          label: '箭头位置',\n          tip: \"arrowPosition|导航箭头位置 可选值: 'inner', 'outer'\",\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '内',\n                value: 'inner',\n              },\n              {\n                label: '外',\n                value: 'outter',\n              },\n            ],\n          },\n        },\n        description: \"导航箭头位置 可选值: 'inner', 'outer'\",\n        defaultValue: 'inner',\n      },\n      {\n        name: 'dots',\n        title: {\n          label: '导航锚点',\n          tip: 'dots|是否显示导航锚点',\n        },\n        setter: 'BoolSetter',\n        description: '是否显示导航锚点',\n        defaultValue: true,\n      },\n      {\n        name: 'dotsDirection',\n        title: {\n          label: '导航锚点位置',\n          tip: 'dotsDirection',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '水平',\n                value: 'hoz',\n              },\n              {\n                label: '垂直',\n                value: 'ver',\n              },\n            ],\n          },\n        },\n        description: '导航锚点位置',\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'style.height',\n        title: '高度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'slidesToShow',\n        title: {\n          label: '图片数量',\n          tip: 'slidesToShow|同时展示的图片数量',\n        },\n        setter: 'NumberSetter',\n        description: '同时展示的图片数量',\n        defaultValue: 1,\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/slider/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Slider',\n  title: '图片轮播',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Slider',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'any',\n      description: '自定义传入的样式',\n    },\n    {\n      name: 'slidesToShow',\n      title: {\n        label: '图片数量',\n        tip: 'slidesToShow|同时展示的图片数量',\n      },\n      propType: 'number',\n      description: '同时展示的图片数量',\n      defaultValue: 1,\n    },\n    {\n      name: 'slidesToScroll',\n      title: {\n        label: '同时滑动的图片数量',\n        tip: 'slidesToScroll',\n      },\n      propType: 'number',\n      description: '同时滑动的图片数量',\n      defaultValue: 1,\n    },\n    {\n      name: 'speed',\n      title: {\n        label: '轮播速度',\n        tip: 'speed',\n      },\n      propType: 'number',\n      description: '轮播速度',\n      defaultValue: 600,\n    },\n    {\n      name: 'activeIndex',\n      title: {\n        label: '指定轮播图',\n        tip: 'activeIndex|跳转到指定的轮播图（受控）',\n      },\n      propType: 'number',\n      description: '跳转到指定的轮播图（受控）',\n    },\n    {\n      name: 'adaptiveHeight',\n      title: {\n        label: '自适应高度',\n        tip: 'adaptiveHeight',\n      },\n      propType: 'bool',\n      description: '是否使用自适应高度',\n      defaultValue: false,\n    },\n    {\n      name: 'animation',\n      title: {\n        label: '动效类型',\n        tip: 'animation',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'bool'],\n      },\n      description: \"动效类型，默认是'slide'\",\n      defaultValue: 'slide',\n    },\n    {\n      name: 'arrows',\n      title: {\n        label: '箭头',\n        tip: 'arrows|是否显示箭头',\n      },\n      propType: 'bool',\n      description: '是否显示箭头',\n      defaultValue: true,\n    },\n    {\n      name: 'arrowSize',\n      title: {\n        label: '箭头大小',\n        tip: \"arrowSize|导航箭头大小 可选值: 'medium', 'large'\",\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['medium', 'large'],\n      },\n      description: \"导航箭头大小 可选值: 'medium', 'large'\",\n      defaultValue: 'medium',\n    },\n    {\n      name: 'arrowPosition',\n      title: {\n        label: '箭头位置',\n        tip: \"arrowPosition|导航箭头位置 可选值: 'inner', 'outer'\",\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['inner', 'outer'],\n      },\n      description: \"导航箭头位置 可选值: 'inner', 'outer'\",\n      defaultValue: 'inner',\n    },\n    {\n      name: 'arrowDirection',\n      title: {\n        label: '箭头方向',\n        tip: \"arrowDirection|导航箭头的方向 可选值: 'hoz', 'ver'\",\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: \"导航箭头的方向 可选值: 'hoz', 'ver'\",\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'autoplay',\n      title: {\n        label: '自动播放',\n        tip: 'autoplay',\n      },\n      propType: 'bool',\n      description: '是否自动播放',\n      defaultValue: false,\n    },\n    {\n      name: 'autoplaySpeed',\n      title: {\n        label: '自动播放的速度',\n        tip: 'autoplaySpeed, 默认 3000 毫秒',\n      },\n      propType: 'number',\n      description: '自动播放的速度',\n      defaultValue: 3000,\n    },\n    {\n      name: 'nextArrow',\n      propType: 'node',\n      description: '向后箭头',\n      defaultValue: null,\n    },\n    {\n      name: 'prevArrow',\n      propType: 'node',\n      description: '向前箭头',\n      defaultValue: null,\n    },\n    {\n      name: 'centerMode',\n      title: {\n        label: '居中模式',\n        tip: 'centerMode',\n      },\n      propType: 'bool',\n      description: '是否启用居中模式',\n      defaultValue: false,\n    },\n    {\n      name: 'dots',\n      title: {\n        label: '导航锚点',\n        tip: 'dots|是否显示导航锚点',\n      },\n      propType: 'bool',\n      description: '是否显示导航锚点',\n      defaultValue: true,\n    },\n    {\n      name: 'dotsDirection',\n      title: {\n        label: '导航锚点位置',\n        tip: 'dotsDirection',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '导航锚点位置',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'draggable',\n      title: {\n        label: '可拖拽',\n        tip: 'draggable',\n      },\n      propType: 'bool',\n      description: '是否可拖拽',\n      defaultValue: true,\n    },\n    {\n      name: 'infinite',\n      title: {\n        label: '无穷循环',\n        tip: 'infinite',\n      },\n      propType: 'bool',\n      description: '是否使用无穷循环模式',\n      defaultValue: true,\n    },\n    {\n      name: 'defaultActiveIndex',\n      title: {\n        label: '初始轮播图',\n        tip: 'defaultActiveIndex|初始被激活的轮播图',\n      },\n      propType: 'number',\n      description: '初始被激活的轮播图',\n      defaultValue: 0,\n    },\n    {\n      name: 'lazyLoad',\n      title: {\n        label: '懒加载',\n        tip: 'lazyLoad|是否启用懒加载',\n      },\n      propType: 'bool',\n      description: '是否启用懒加载',\n      defaultValue: false,\n    },\n    {\n      name: 'slideDirection',\n      title: {\n        label: '轮播方向',\n        tip: 'slideDirection',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '轮播方向',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'triggerType',\n      title: {\n        label: '触发方式',\n        tip: 'triggerType|锚点导航触发方式',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '锚点导航触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '轮播切换的回调函数\\n@param {Number} index 幻灯片的索引',\n    },\n    {\n      name: 'onBeforeChange',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义传入的class',\n      defaultValue: null,\n    },\n    {\n      name: 'focusOnSelect',\n      title: {\n        label: '自动居中',\n        tip: 'focusOnSelect|多图轮播时，点击选中后自动居中',\n      },\n      propType: 'bool',\n      description: '多图轮播时，点击选中后自动居中',\n      defaultValue: false,\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'rtl',\n          condition: () => false,\n        },\n        {\n          name: 'prefix',\n          condition: () => false,\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息展示',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/slider/snippets.ts",
    "content": "export default [\n  {\n    title: '图片轮播',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_slider.png',\n    schema: {\n      componentName: 'Slider',\n      props: {\n        prefix: 'next-',\n        animation: 'slide',\n        arrows: true,\n        arrowSize: 'medium',\n        arrowPosition: 'inner',\n        arrowDirection: 'hoz',\n        autoplaySpeed: 3000,\n        dots: true,\n        dotsDirection: 'hoz',\n        draggable: true,\n        infinite: true,\n        slide: 'div',\n        slideDirection: 'hoz',\n        slidesToShow: 1,\n        slidesToScroll: 1,\n        speed: 600,\n        triggerType: 'click',\n        centerPadding: '50px',\n        cssEase: 'ease',\n        edgeFriction: 0.35,\n        swipe: true,\n        touchMove: true,\n        touchThreshold: 5,\n        useCSS: true,\n        waitForAnimate: true,\n      },\n      children: [\n        {\n          componentName: 'Image',\n          props: {\n            src: 'https://img.alicdn.com/tps/TB1bewbNVXXXXc5XXXXXXXXXXXX-1000-300.png',\n          },\n        },\n        {\n          componentName: 'Image',\n          props: {\n            src: 'https://img.alicdn.com/tps/TB1xuUcNVXXXXcRXXXXXXXXXXXX-1000-300.jpg',\n          },\n        },\n        {\n          componentName: 'Image',\n          props: {\n            src: 'https://img.alicdn.com/tps/TB1ikP.NVXXXXaYXpXXXXXXXXXX-1000-300.jpg',\n          },\n        },\n        {\n          componentName: 'Image',\n          props: {\n            src: 'https://img.alicdn.com/tps/TB1s1_JNVXXXXbhaXXXXXXXXXXX-1000-300.jpg',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/slot/meta.ts",
    "content": "module.exports = {\n  componentName: 'Slot',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Slot',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      {\n        name: '___title',\n        title: {\n          type: 'i18n',\n          'en-US': 'Slot Title',\n          'zh-CN': '插槽标题',\n        },\n        setter: 'StringSetter',\n        defaultValue: '插槽容器',\n      },\n      {\n        name: '___params',\n        title: {\n          type: 'i18n',\n          'en-US': 'Slot Params',\n          'zh-CN': '插槽入参',\n        },\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'StringSetter',\n              props: {\n                placeholder: {\n                  type: 'i18n',\n                  'zh-CN': '参数名称',\n                  'en-US': 'Argument Name',\n                },\n              },\n            },\n          },\n        },\n      },\n    ],\n    component: {\n      isContainer: true,\n      disableBehaviors: '*',\n    },\n    // events/className/style/general/directives\n    supports: false,\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/slot/view.tsx",
    "content": "import { Component } from 'react';\n\nclass Slot extends Component {\n  static displayName = 'Slot';\n\n  static componentMetadata = {\n    componentName: 'Slot',\n    configure: {\n      props: [\n        {\n          name: '___title',\n          title: {\n            type: 'i18n',\n            'en-US': 'Slot Title',\n            'zh-CN': '插槽标题',\n          },\n          setter: 'StringSetter',\n          defaultValue: '插槽容器',\n        },\n        {\n          name: '___params',\n          title: {\n            type: 'i18n',\n            'en-US': 'Slot Params',\n            'zh-CN': '插槽入参',\n          },\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'StringSetter',\n                props: {\n                  placeholder: {\n                    type: 'i18n',\n                    'zh-CN': '参数名称',\n                    'en-US': 'Argument Name',\n                  },\n                },\n              },\n            },\n          },\n        },\n      ],\n      component: {\n        isContainer: true,\n      },\n      // events/className/style/general/directives\n      supports: false,\n    },\n  };\n\n  render() {\n    const { children } = this.props;\n    return <>{children}</>;\n  }\n}\n\nexport default Slot;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/split-button/adaptor.ts",
    "content": "import parseData from '../utils/parse-data';\n\nexport const createDataSource = (\n  list,\n  keys = { selected: [], expanded: {} },\n  level = 0,\n  prefix = '',\n) => {\n  const array = [];\n  let group = [];\n  let grouping = false;\n  let index = 0;\n\n  list.forEach((item) => {\n    switch (item.type) {\n      // eslint-disable-next-line no-case-declarations\n      case 'node':\n        const key = `${prefix || level}-${index++}`;\n\n        if (item.children && item.children.length > 0) {\n          item.children = createDataSource(item.children, keys, level + 1, key);\n        }\n\n        if (grouping) {\n          group.push({\n            ...item,\n            key,\n          });\n        } else {\n          array.push({\n            ...item,\n            key,\n          });\n        }\n\n        if (item.state === 'active') {\n          if (item.children && item.children.length > 0) {\n            keys.expanded.push(key);\n          } else {\n            keys.selected.push(key);\n          }\n        }\n\n        return;\n      case 'comment':\n        if (group.length > 0) {\n          array.push({\n            type: 'group',\n            value: grouping,\n            children: group,\n            key: `${prefix || level}-${index++}`,\n          });\n          group = [];\n        }\n        grouping = item.value;\n        return;\n      case 'divider':\n        if (group.length > 0) {\n          array.push({\n            type: 'group',\n            value: grouping,\n            children: group,\n            key: `${prefix || level}-${index++}`,\n          });\n          group = [];\n        }\n        grouping = false;\n        array.push({\n          type: 'divider',\n          key: `${prefix || level}-${index++}`,\n        });\n\n      default:\n    }\n  });\n\n  if (group.length > 0) {\n    array.push({\n      type: 'group',\n      value: grouping,\n      children: group,\n      key: `${prefix || level}-${index++}`,\n    });\n    group = [];\n  }\n\n  return array;\n};\n\nconst createMenuItem = (item) => {\n  if (item.children.length > 0) {\n    // return (\n    //   <Menu.SubMenu key={item.key} disabled={item.state === 'disabled'} label={item.value ? item.value.filter(({ type }) => type === ContentType.text).map(({ value }) => value).join('') : ''}>\n    //     {createContents(item.children)}\n    //   </Menu.SubMenu>\n    // );\n    return {\n      componentName: 'SubMenu',\n      props: {\n        key: item.key,\n        disabled: item.state === 'disabled',\n        label: item.value\n          ? item.value\n              .filter(({ type }) => type === 'text')\n              .map(({ value }) => value)\n              .join('')\n          : '',\n      },\n      children: createContents(item.children),\n    };\n  }\n\n  // return <Menu.Item key={item.key} checked={item.state === 'active'} disabled={item.state === 'disabled'} children={item.value.map(({ type, value }, index) => type === 'icon' ? <Icon key={`icon_${index}`} type={value} size=\"small\" style={{ marginRight: '4px' }} /> : value)} />;\n  return {\n    componentName: 'Menu.Item',\n    props: {\n      key: item.key,\n      checked: item.state === 'active',\n      disabled: item.state === 'disabled',\n    },\n    children: item.value.map(({ type, value }, index) =>\n      type === 'icon'\n        ? {\n            componentName: 'Icon',\n            props: {\n              disabled: true,\n              key: `icon_${index}`,\n              type: value,\n              size: 'small',\n              style: { marginRight: '4px' },\n            },\n          }\n        : {\n            componentName: 'Typography.Text',\n            props: {\n              children: value,\n              style: {\n                color: 'inherit',\n              },\n            },\n          },\n    ),\n  };\n};\n\nexport const createContents = (array = []) => {\n  return array.map((item) => {\n    if (item.type === 'group' && item.children.length > 0) {\n      // return <Menu.Group key={item.key} label={item.value}>{item.children.map(it => createMenuItem(it))}</Menu.Group>;\n      return {\n        componentName: 'Menu.Group',\n        props: {\n          key: item.key,\n          label: item.value,\n        },\n        children: item.children.map((it) => createMenuItem(it)),\n      };\n    }\n\n    if (item.type === 'divider') {\n      // return <Menu.Divider key={item.key}/>;\n      return {\n        componentName: 'Menu.Divider',\n        props: {\n          key: item.key,\n        },\n      };\n    }\n\n    return createMenuItem(item);\n  });\n};\n\nfunction getButtonLabel(buttonItem) {\n  if (buttonItem.type !== 'node') return {};\n  // return buttonItem.value.find(item => item.type === 'text').value;\n  // FIXME: 渲染时 JSSlot 有问题，暂时不要 icon\n  return {\n    label: {\n      type: 'JSSlot',\n      value: buttonItem.value.map(({ type, value }) => {\n        if (type === 'icon')\n          return {\n            componentName: 'Icon',\n            props: {\n              disabled: true,\n              type: value,\n              size: 'small',\n              style: { marginRight: '4px' },\n            },\n          };\n        return {\n          componentName: 'Typography.Text',\n          props: {\n            children: value,\n            style: {\n              color: 'inherit',\n            },\n          },\n        };\n      }),\n    },\n    disabled: buttonItem?.state === 'disabled',\n  };\n}\n\nexport function getDataFromPlainText(value) {\n  const keys = { selected: [], expanded: [] };\n  const list = parseData(value, { parseContent: true });\n  const buttonItem = list[0] ? list[0] : { value: [] };\n  const { label, disabled } = getButtonLabel(buttonItem);\n  const dataSource = createDataSource(list[0] ? list[0].children : [], keys);\n  const children = createContents(dataSource);\n  return { label, disabled, children, selectedKeys: keys.selected };\n}\n\n// const _propsValue = ({ shape, level, size, data, ...others}) =>{\n//   const list = parseData(data, { parseContent: true });\n//   const buttonItem = list[0] ? list[0] : { value: []};\n//   const keys = { selected: [], expanded: [] };\n//   if (buttonItem.type !== 'node') return null;\n//   const label = buttonItem.value.map(({ type, value}) => {\n//     if (type === 'icon') return <Icon type={value} />;\n//     return value;\n//   });\n\n//   return {\n//     ...others,\n//     size,\n//     disabled: buttonItem.state === 'disabled',\n//     visible: buttonItem.state === 'active',\n//     type: shape === 'ghost' ? 'normal' : level,\n//     popupProps: { needAdjust: false, container: node => node },\n//     ghost: shape === 'ghost' ? level : false,\n//     selectMode: \"multiple\",\n//     menuProps: { openKeys: keys.expanded, style: { textAlign: 'left' } },\n//     selectedKeys: keys.selected,\n//     label: label\n//   };\n// };\n// export default {\n//     name: 'SplitButton',\n//     shape: ['normal', 'ghost'],\n//     editor: (shape = 'normal') => ({\n//         props: [{\n//             name: 'level',\n//             type: Types.enum,\n//             options: shape === 'ghost' ? ['light', 'dark'] : ['normal', 'primary', 'secondary'],\n//             default: shape === 'ghost' ? 'light' : 'normal',\n//         }, {\n//             name: 'size',\n//             type: Types.enum,\n//             options: ['large', 'medium', 'small'],\n//             default: 'medium'\n//         }],\n//         data: {\n//             icon: true,\n//             active: true,\n//             disable: true,\n//             default: 'Edit Document\\n\\tUndo\\n\\t*Redo\\n\\tCut\\n\\tCopy\\n\\tPaste'\n//         }\n//     }),\n//     propsValue: _propsValue,\n//     adaptor: (args) => {\n//         const list = parseData(args.data, { parseContent: true });\n//         const keys = { selected: [], expanded: [] };\n//         const dataSouce = createDataSource(list[0] ? list[0].children : [], keys);\n//         const props = _propsValue(args);\n//         return (\n//             <SplitButton\n//                 {...props}\n//             >\n//                 {createContents(dataSouce)}\n//             </SplitButton>\n//         );\n//     },\n//     demoOptions: (demo) => {\n//         const { node = { props: {} } } = demo;\n//         const { level, data } = node.props;\n//         if (data.indexOf('*') === 0) {\n//             demo = {\n//                 ...demo,\n//                 height: 250\n//             };\n//         }\n\n//         if (level === 'dark') {\n//             demo = {\n//                 ...demo,\n//                 background: '#333'\n//             };\n//         } else if(level === 'light') {\n//             demo = {\n//                 ...demo,\n//                 background: 'rgb(235, 236, 240)',\n//             };\n//         }\n\n//         return demo;\n//     }\n// };\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/split-button/meta.design.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'SplitButton',\n  title: '分隔按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'SplitButton',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '主按钮的文案',\n    },\n    {\n      name: 'type',\n      title: '按钮类型',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary', 'secondary'],\n      },\n      description: '按钮的类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: '按钮尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '按钮组的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'component',\n      title: '标签类型',\n      propType: {\n        type: 'oneOf',\n        value: ['button', 'a'],\n      },\n      defaultValue: 'button',\n      description: '设置标签类型',\n    },\n    {\n      name: 'ghost',\n      title: '幽灵按钮',\n      propType: {\n        type: 'oneOf',\n        value: ['light', 'dark', false, true],\n      },\n      description: '是否为幽灵按钮',\n    },\n    {\n      name: 'defaultSelectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '默认激活的菜单项（用法同 Menu 非受控）',\n      defaultValue: [],\n    },\n    {\n      name: 'selectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '激活的菜单项（用法同 Menu 受控）',\n    },\n    {\n      name: 'selectMode',\n      title: '单选多选',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple'],\n      },\n      defaultValue: 'single',\n      description: '菜单的选择模式',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'onItemClick',\n      propType: 'func',\n      description: '点击菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'triggerProps',\n      propType: 'object',\n      description: '触发按钮的属性（支持 Button 的所有属性透传）',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层显示状态变化时的回调函数\\n@param {Boolean} visible 弹层显示状态\\n@param {String} type 触发弹层显示或隐藏的来源 menuSelect 表示由menu触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      title: '弹层触发',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层的触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      title: '弹层对齐',\n      propType: 'string',\n      description: '弹层对齐方式, 详情见Overlay align',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传给弹层的属性',\n    },\n    {\n      name: 'autoWidth',\n      title: '自动宽度',\n      propType: 'bool',\n      description: '弹层菜单的宽度是否与按钮组一致',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层是否显示',\n    },\n    {\n      name: 'defaultVisible',\n      title: '默认显示',\n      defaultValue: true,\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'followTrigger',\n      title: '跟随滚动',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'menuProps',\n      propType: 'object',\n      description: '透传给 Menu 的属性',\n    },\n    {\n      name: 'leftButtonProps',\n      propType: 'object',\n      description: '透传给 左侧按钮 的属性',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n    },\n    props: [\n      {\n        name: '!type',\n        title: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'type',\n        },\n        getValue: (target) => {\n          const parentTarget = target.parent;\n          const ghostConfig = parentTarget.getPropValue('ghost');\n          if (ghostConfig) {\n            return 'ghost';\n          } else {\n            return 'normal';\n          }\n        },\n        setValue: (target, value) => {\n          const parentTarget = target.parent;\n          parentTarget.setPropValue('ghost', false);\n          switch (value) {\n            case 'normal':\n              break;\n            case 'ghost':\n              parentTarget.setPropValue('ghost', 'light');\n              break;\n            default:\n              break;\n          }\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '普通按钮',\n                value: 'normal',\n              },\n              {\n                title: '幽灵按钮',\n                value: 'ghost',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'ghost',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        defaultValue: 'light',\n        condition: (target) => target?.parent?.getPropValue('!type') === 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: 'Light',\n                value: 'light',\n              },\n              {\n                label: 'Dark',\n                value: 'dark',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        condition: (target) => target?.parent?.getPropValue('!type') !== 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                value: 'normal',\n                label: '普通',\n              },\n              {\n                value: 'primary',\n                label: '主要',\n              },\n              {\n                value: 'secondary',\n                label: '次要',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const { label, disabled, children, selectedKeys } = getDataFromPlainText(value);\n          if (label) {\n            target.parent.setPropValue('label', label);\n          }\n          if (typeof disabled !== 'undefined') {\n            target.parent.setPropValue('disabled', disabled);\n          }\n          if (children) {\n            target.node.children.importSchema(children);\n          }\n          if (selectedKeys) {\n            target.parent.setPropValue('selectedKeys', selectedKeys);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'disable', 'group'],\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '常用',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/split-button/meta.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'SplitButton',\n  title: '分隔按钮',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'SplitButton',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '主按钮的文案',\n    },\n    {\n      name: 'type',\n      title: '按钮类型',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary', 'secondary'],\n      },\n      description: '按钮的类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'size',\n      title: '按钮尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '按钮组的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'component',\n      title: '标签类型',\n      propType: {\n        type: 'oneOf',\n        value: ['button', 'a'],\n      },\n      defaultValue: 'button',\n      description: '设置标签类型',\n    },\n    {\n      name: 'ghost',\n      title: '幽灵按钮',\n      propType: {\n        type: 'oneOf',\n        value: ['light', 'dark', false, true],\n      },\n      description: '是否为幽灵按钮',\n    },\n    {\n      name: 'defaultSelectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '默认激活的菜单项（用法同 Menu 非受控）',\n      defaultValue: [],\n    },\n    {\n      name: 'selectedKeys',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '激活的菜单项（用法同 Menu 受控）',\n    },\n    {\n      name: 'selectMode',\n      title: '单选多选',\n      propType: {\n        type: 'oneOf',\n        value: ['single', 'multiple'],\n      },\n      defaultValue: 'single',\n      description: '菜单的选择模式',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'onItemClick',\n      propType: 'func',\n      description: '点击菜单项时的回调，参考 Menu',\n    },\n    {\n      name: 'triggerProps',\n      propType: 'object',\n      description: '触发按钮的属性（支持 Button 的所有属性透传）',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层显示状态变化时的回调函数\\n@param {Boolean} visible 弹层显示状态\\n@param {String} type 触发弹层显示或隐藏的来源 menuSelect 表示由menu触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      title: '弹层触发',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层的触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      title: '弹层对齐',\n      propType: 'string',\n      description: '弹层对齐方式, 详情见Overlay align',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传给弹层的属性',\n    },\n    {\n      name: 'autoWidth',\n      title: '自动宽度',\n      propType: 'bool',\n      description: '弹层菜单的宽度是否与按钮组一致',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层是否显示',\n    },\n    {\n      name: 'defaultVisible',\n      title: '默认显示',\n      defaultValue: true,\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'followTrigger',\n      title: '跟随滚动',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'menuProps',\n      propType: 'object',\n      description: '透传给 Menu 的属性',\n    },\n    {\n      name: 'leftButtonProps',\n      propType: 'object',\n      description: '透传给 左侧按钮 的属性',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n    },\n    props: [\n      {\n        name: '!type',\n        title: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'type',\n        },\n        getValue: (target) => {\n          const parentTarget = target.parent;\n          const ghostConfig = parentTarget.getPropValue('ghost');\n          if (ghostConfig) {\n            return 'ghost';\n          } else {\n            return 'normal';\n          }\n        },\n        setValue: (target, value) => {\n          const parentTarget = target.parent;\n          parentTarget.setPropValue('ghost', false);\n          switch (value) {\n            case 'normal':\n              break;\n            case 'ghost':\n              parentTarget.setPropValue('ghost', 'light');\n              break;\n            default:\n              break;\n          }\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '普通按钮',\n                value: 'normal',\n              },\n              {\n                title: '幽灵按钮',\n                value: 'ghost',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'ghost',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        defaultValue: 'light',\n        condition: (target) => target?.parent?.getPropValue('!type') === 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: 'Light',\n                value: 'light',\n              },\n              {\n                label: 'Dark',\n                value: 'dark',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形式',\n            en_US: 'Button Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 按钮类型',\n            en_US: 'prop: type | description: button type',\n          },\n        },\n        condition: (target) => target?.parent?.getPropValue('!type') !== 'ghost',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                value: 'normal',\n                label: '普通',\n              },\n              {\n                value: 'primary',\n                label: '主要',\n              },\n              {\n                value: 'secondary',\n                label: '次要',\n              },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const { label, disabled, children, selectedKeys } = getDataFromPlainText(value);\n          if (label) {\n            target.parent.setPropValue('label', label);\n          }\n          if (typeof disabled !== 'undefined') {\n            target.parent.setPropValue('disabled', disabled);\n          }\n          if (children) {\n            target.node.children.importSchema(children);\n          }\n          if (selectedKeys) {\n            target.parent.setPropValue('selectedKeys', selectedKeys);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'disable', 'group'],\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '常用',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/step/adaptor.ts",
    "content": "import parseData from '../utils/parse-data';\n\nexport const createDataSource = (data: any, props) => {\n  const list = parseData(data, { parseContent: true });\n  const dataSource = [];\n  list.forEach((item, index) => {\n    const { value = '' } = item.value.find(({ type }) => type === 'icon') || {};\n    dataSource.push({\n      key: index,\n      icon: value,\n      title: item.value\n        .filter(({ type }) => type === 'text')\n        .map(({ value }) => value)\n        .join(''),\n      content:\n        item.children && item.children.length > 0\n          ? item.children[0].value\n              .filter(({ type }) => type === 'text')\n              .map(({ value }) => value)\n              .join('')\n          : '',\n      disabled: item.state === 'disabled',\n    });\n\n    if (item.state === 'active') {\n      props.current = index;\n    }\n  });\n  return dataSource;\n};\n\nfunction createContents(dataSource) {\n  //dataSouce.map(item => <Step.Item key={item.key} title={item.title} content={item.content} icon={item.icon} percent={item.percent} disabled={item.disabled}/>)\n  return dataSource.map((item) => {\n    return {\n      componentName: 'Step.Item',\n      props: item,\n    };\n  });\n}\n\nexport function getDataFromPlainText(value) {\n  const props = { current: 0 };\n  const dataSource = createDataSource(value, props);\n  const children = createContents(dataSource);\n  return { children, ...props };\n}\n\n// const _propsValue = ({ shape, level,  location }) => {\n//     return {\n//         shape: shape,\n//         direction: level,\n//         labelPlacement: location === 'right' ? 'hoz' : 'ver',\n//     };\n// };\n\n// export default {\n//     name: 'Step',\n//     shape: ['circle', 'arrow', 'dot'],\n//     editor: (shape) => {\n//         if (shape === 'arrow') {\n//             return {\n//                 props: [{\n//                     name: 'state',\n//                     type: Types.enum,\n//                     options: ['normal', 'disabled'],\n//                     default: 'normal'\n//                 }, {\n//                     name: 'width',\n//                     type: Types.number,\n//                     default: 500\n//                 }],\n//                 data: {\n//                     active: true,\n//                     disabled: true,\n//                     default:  'Step 1\\nStep 2\\n*Step 3\\nStep 4'\n//                 }\n//             };\n//         }\n\n//         return {\n//             props: [{\n//                 name: 'level',\n//                 label: 'Orientation',\n//                 type: Types.enum,\n//                 options: [{ value: 'hoz', label: 'Horizontal' }, { value: 'ver', label: 'Vertical' }]\n//             },\n//             ...(\n//                 shape === 'circle' ? [{\n//                     name: 'state',\n//                     type: Types.enum,\n//                     options: ['normal', 'percent', 'disabled'],\n//                     default: 'normal'\n//                 }, {\n//                     name: 'location',\n//                     type: Types.enum,\n//                     options: ['down', 'right'],\n//                     default: 'down'\n\n//                 }] : [{\n//                     name: 'state',\n//                     label: 'Status',\n//                     type: Types.enum,\n//                     options: ['normal', 'disabled'],\n//                     default: 'normal'\n//                 }]\n//             ), {\n//                 name: 'width',\n//                 type: Types.number,\n//                 default: 600\n//             }, {\n//                 name: 'height',\n//                 type: Types.number,\n//                 default: 300\n//             }],\n//             data: {\n//                 active: true,\n//                 disabled: true,\n//                 default: 'Step 1\\n\\tOpen the door Put the elephant into the fridge\\n*Step 2\\n\\tOpen the door Put the elephant into the fridge\\nStep 3\\n\\tOpen the door Put the elephant into the fridge\\nStep 4\\n\\tOpen the door Put the elephant into the fridge'\n//             }\n//         };\n//     },\n//     propsValue:_propsValue,\n//     adaptor: ({ shape, level, state, location, width, height, data, style, ...others }) => {\n//         const list = parseData(data, { parseContent: true }).filter(({ type }) => type === NodeType.node);\n//         const dataSouce = [];\n//         let current = 0;\n//         list.forEach((item, index) => {\n//             const { value = '' } = item.value.find(({ type }) => type === ContentType.icon) || {};\n//             dataSouce.push({\n//                 key: index,\n//                 icon: value,\n//                 title: item.value.filter(({ type }) => type === ContentType.text).map(({ value }) => value).join(''),\n//                 content: item.children && item.children.length > 0 ? item.children[0].value.filter(({ type }) => type === ContentType.text).map(({ value }) => value).join('') : '',\n//                 disabled: state === 'disabled' || item.state === 'disabled',\n//             });\n\n//             if (item.state === 'active') {\n//                 current = index;\n//             }\n//         });\n\n//         if (state === 'percent' && dataSouce[current]) {\n//             dataSouce[current].percent = 60;\n//         }\n\n//         return (\n//             <div {...others} style={{\n//                 width,\n//                 height,\n//                 ...style,\n//             }}>\n//                 <Step\n//                     current={current}\n//                     shape={shape}\n//                     direction={level}\n//                     labelPlacement={location === 'right' ? 'hoz' : 'ver'}\n//                     >\n//                     {\n//                         dataSouce.map(item => <Step.Item key={item.key} title={item.title} content={item.content} icon={item.icon} percent={item.percent} disabled={item.disabled}/>)\n//                     }\n//                 </Step>\n//             </div>\n//         );\n//     },\n//     demoOptions: (demo) => {\n//         if (demo.node.props.level === 'hoz') {\n//             demo.node.props = {\n//                 ...demo.node.props,\n//                 width: 600,\n//                 height: 120\n//             };\n//         } else if (demo.node.props.level === 'ver') {\n//             demo.node.props = {\n//                 ...demo.node.props,\n//                 width: 200,\n//                 height: 300\n//             };\n//         }\n\n//         return demo;\n//     }\n// };\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/step/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport { getDataFromPlainText } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Step',\n  title: '步骤条',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Step',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'current',\n      propType: 'number',\n      description: '当前步骤',\n      defaultValue: 0,\n    },\n    {\n      name: 'direction',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '展示方向',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'labelPlacement',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '横向布局时( direction 为 hoz )的内容排列',\n      defaultValue: 'ver',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['circle', 'arrow', 'dot'],\n      },\n      description: '类型',\n      defaultValue: 'circle',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读模式',\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '是否开启动效',\n      defaultValue: true,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义样式名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n    },\n    props: [\n      {\n        name: 'shape',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '圆圈',\n                value: 'circle',\n              },\n              {\n                label: '箭头',\n                value: 'arrow',\n              },\n              {\n                label: '点',\n                value: 'dot',\n              },\n            ],\n          },\n        },\n        title: '类型',\n        defaultValue: 'circle',\n        setValue: (target, value) => {\n          if (value === 'dot') {\n            target?.parent?.setPropValue?.('labelPlacement', 'ver');\n          }\n        },\n      },\n      {\n        name: 'direction',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '水平',\n                value: 'hoz',\n              },\n              {\n                label: '垂直',\n                value: 'ver',\n              },\n            ],\n          },\n        },\n        title: '方向',\n        defaultValue: 'hoz',\n        condition: (target) => target?.parent?.getPropValue?.('shape') !== 'arrow',\n      },\n      {\n        name: 'labelPlacement',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '右侧',\n                value: 'hoz',\n              },\n              {\n                label: '底侧',\n                value: 'ver',\n              },\n            ],\n          },\n        },\n        title: '内容位置',\n        defaultValue: 'ver',\n        condition: (target) => target?.parent?.getPropValue?.('shape') === 'circle',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        condition: (target) => target?.parent?.getPropValue?.('direction') !== 'ver',\n        setter: 'NumberSetter',\n      },\n      // {\n      //   name: 'style.height',\n      //   title: '高度',\n      //   setter: 'NumberSetter'\n      // },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '内容',\n        setValue: (target, value) => {\n          const { children, current } = getDataFromPlainText(value);\n          if (children) {\n            const map = {};\n            children.forEach((item) => {\n              const { props } = item;\n              map[props.key] = props;\n            });\n            // target.parent.setPropValue('children', children);\n            const _children = target.node.export().children;\n            target.node.children.mergeChildren(\n              (child) => {\n                const primaryKey = String(child.getPropValue('key'));\n                return Object.hasOwnProperty.call(map, primaryKey);\n              },\n              () => {\n                const items = [];\n                for (const key in map) {\n                  const originChild = _children.find((child) => {\n                    const found = child.props.key === key;\n                    return found;\n                  }) || { children: [] };\n                  if (Object.hasOwnProperty.call(map, key)) {\n                    items.push({\n                      componentName: 'Step.Item',\n                      props: map[key],\n                      children: originChild.children,\n                    });\n                  }\n                }\n                return items;\n              },\n              (child1, child2) => {\n                const a = children.findIndex(\n                  (item) => String(item.props.key) === String(child1.getPropValue('key')),\n                );\n                const b = children.findIndex(\n                  (item) => String(item.props.key) === String(child2.getPropValue('key')),\n                );\n                return a - b;\n              },\n            );\n          }\n          if (typeof current !== 'undefined') {\n            target.parent.setPropValue('current', current);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '导航',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/step/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Step',\n  title: '步骤条',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Step',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'current',\n      propType: 'number',\n      description: '当前步骤',\n      defaultValue: 0,\n    },\n    {\n      name: 'direction',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '展示方向',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'labelPlacement',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '横向布局时( direction 为 hoz )的内容排列',\n      defaultValue: 'ver',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['circle', 'arrow', 'dot'],\n      },\n      description: '类型',\n      defaultValue: 'circle',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读模式',\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '是否开启动效',\n      defaultValue: true,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义样式名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'items',\n        title: '步骤项',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'icon',\n                      title: '图标',\n                      setter: 'IconSetter',\n                      supportVariable: true,\n                      description: '图标',\n                    },\n                    {\n                      name: 'title',\n                      title: '标题',\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                      description: '标题',\n                    },\n                    {\n                      name: 'status',\n                      setter: {\n                        componentName: 'RadioGroupSetter',\n                        props: { options: ['wait', 'process', 'finish'] },\n                      },\n                      description:\n                        '步骤的状态，如不传，会根据外层的 Step 的 current 属性生成，可选值为 `wait`, `process`, `finish`',\n                    },\n                    {\n                      name: 'content',\n                      title: {\n                        label: '内容',\n                        tip: 'content|内容填充, shape为 arrow 时无效',\n                      },\n                      setter: 'TextAreaSetter',\n                      supportVariable: true,\n                      description: '内容填充, shape为 arrow 时无效',\n                    },\n                    {\n                      name: 'percent',\n                      title: '百分比',\n                      setter: 'NumberSetter',\n                      supportVariable: true,\n                      description: '百分比',\n                    },\n                    {\n                      name: 'disabled',\n                      title: '是否禁用',\n                      setter: 'BoolSetter',\n                      supportVariable: true,\n                      description: '是否禁用',\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  primaryKey: String(Math.floor(Math.random() * 10000)),\n                  title: 'StepItem',\n                };\n              },\n            },\n          },\n        },\n        extraProps: {\n          getValue(target, fieldValue) {\n            // const node = target.node;\n            // const children = node.children;\n            const map = target.node.children.map((child) => {\n              const primaryKey = child.getPropValue('primaryKey')\n                ? String(child.getPropValue('primaryKey'))\n                : child.id;\n              return {\n                primaryKey,\n                icon: child.getPropValue('icon'),\n                title: child.getPropValue('title'),\n                status: child.getPropValue('status'),\n                content: child.getPropValue('content'),\n                percent: child.getPropValue('percent'),\n                disabled: child.getPropValue('disabled'),\n              };\n            });\n            return map;\n          },\n          setValue(target, value) {\n            const { node } = target;\n            const map = {};\n            if (!Array.isArray(value)) {\n              value = [];\n            }\n            value.forEach((item) => {\n              const tabitem = Object.assign({}, item);\n              map[item.primaryKey] = tabitem;\n            });\n\n            node.children.mergeChildren(\n              (child) => {\n                const primaryKey = String(child.getPropValue('primaryKey'));\n                if (Object.hasOwnProperty.call(map, primaryKey)) {\n                  child.setPropValue('icon', map[primaryKey].icon);\n                  child.setPropValue('title', map[primaryKey].title);\n                  child.setPropValue('content', map[primaryKey].content);\n                  child.setPropValue('status', map[primaryKey].status);\n                  child.setPropValue('percent', map[primaryKey].percent);\n                  child.setPropValue('disabled', map[primaryKey].disabled);\n                  delete map[primaryKey];\n                  return false;\n                }\n                return true;\n              },\n              () => {\n                const items = [];\n                for (const primaryKey in map) {\n                  if (Object.hasOwnProperty.call(map, primaryKey)) {\n                    items.push({\n                      componentName: 'Step.Item',\n                      props: map[primaryKey],\n                    });\n                  }\n                }\n                return items;\n              },\n              (child1, child2) => {\n                const a = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n                );\n                const b = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n                );\n                return a - b;\n              },\n            );\n          },\n        },\n      },\n      {\n        name: 'current',\n        setter: (target) => {\n          const items = target.parent.getPropValue('items') || [];\n          return {\n            componentName: 'MixedSetter',\n            props: {\n              setters: [\n                {\n                  componentName: 'NumberSetter',\n                  props: {\n                    min: 0,\n                    max: items.length - 1,\n                    defaultValue: 0,\n                  },\n                },\n                'ExpressionSetter',\n              ],\n            },\n          };\n        },\n        title: '当前步骤',\n        defaultValue: 0,\n      },\n      {\n        name: 'direction',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['hoz', 'ver'],\n          },\n        },\n        title: '展示方向',\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'labelPlacement',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['hoz', 'ver'],\n          },\n        },\n        title: '内容排列',\n        defaultValue: 'ver',\n      },\n      {\n        name: 'shape',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['circle', 'arrow', 'dot'],\n          },\n        },\n        title: '类型',\n        defaultValue: 'circle',\n      },\n      {\n        name: 'readOnly',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '是否只读',\n      },\n      {\n        name: 'animation',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '开启动效',\n        defaultValue: true,\n      },\n    ],\n  },\n  icon: '',\n  category: '引导',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/step/snippets.design.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\nconst plainData =\n  'Step 1\\n\\tOpen the door Put the elephant into the fridge\\n*Step 2\\n\\tOpen the door Put the elephant into the fridge\\nStep 3\\n\\tOpen the door Put the elephant into the fridge\\nStep 4\\n\\tOpen the door Put the elephant into the fridge';\nconst { current, children } = getDataFromPlainText(plainData);\n\nexport default [\n  {\n    title: '步骤',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_step.png',\n    schema: {\n      componentName: 'Step',\n      props: {\n        prefix: 'next-',\n        direction: 'hoz',\n        labelPlacement: 'ver',\n        shape: 'circle',\n        animation: true,\n        current,\n        plainData,\n      },\n      children,\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/step/snippets.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\nconst plainData =\n  'Step 1\\n\\tOpen the door Put the elephant into the fridge\\n*Step 2\\n\\tOpen the door Put the elephant into the fridge\\nStep 3\\n\\tOpen the door Put the elephant into the fridge\\nStep 4\\n\\tOpen the door Put the elephant into the fridge';\nconst { children } = getDataFromPlainText(plainData);\n\nexport default [\n  {\n    title: '步骤',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_step.png',\n    schema: {\n      componentName: 'Step',\n      props: {\n        prefix: 'next-',\n        direction: 'hoz',\n        labelPlacement: 'ver',\n        shape: 'circle',\n        animation: true,\n      },\n      children,\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/step-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Step.Item',\n  title: '步骤项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Step',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'icon',\n      propType: 'string',\n      description: '图标',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标题',\n    },\n    {\n      name: 'content',\n      title: {\n        label: '内容',\n        tip: 'content|内容填充, shape为 arrow 时无效',\n      },\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '内容填充, shape为 arrow 时无效',\n    },\n    {\n      name: 'status',\n      title: {\n        label: '状态',\n        tip:\n          'status|步骤的状态，如不传，会根据外层的 Step 的 current 属性生成，可选值为 `wait`, `process`, `finish`',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['wait', 'process', 'finish'],\n      },\n      description:\n        '步骤的状态，如不传，会根据外层的 Step 的 current 属性生成，可选值为 `wait`, `process`, `finish`',\n    },\n    {\n      name: 'percent',\n      propType: 'number',\n      description: '百分比',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '点击步骤时的回调\\n@param {Number} index 节点索引',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义样式',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'title',\n          title: '标题',\n          setter: 'StringSetter',\n        },\n        {\n          name: 'icon',\n          title: {\n            label: '图标',\n            tip: 'icon|图标',\n          },\n          setter: {\n            componentName: 'IconSetter',\n          },\n        },\n        {\n          name: 'content',\n          title: {\n            label: '内容',\n            tip: 'content|内容',\n          },\n          setter: {\n            componentName: 'TextAreaSetter',\n          },\n        },\n        {\n          name: 'status',\n          title: {\n            label: '状态',\n            tip: 'status|状态',\n          },\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  title: '等待',\n                  value: 'wait',\n                },\n                {\n                  title: '进行中',\n                  value: 'process',\n                },\n                {\n                  title: '结束',\n                  value: 'finish',\n                },\n                {\n                  title: '默认',\n                  value: '',\n                },\n              ],\n            },\n          },\n        },\n      ],\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  category: 'null',\n  icon: '',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/sub-menu/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'SubMenu',\n  title: '子菜单',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Menu',\n    main: '',\n    destructuring: true,\n    subName: 'SubMenu',\n  },\n  props: [\n    {\n      name: 'key',\n      propType: 'string',\n      description: '子菜单标识符',\n    },\n    {\n      name: 'label',\n      propType: 'node',\n      description: '标签内容',\n    },\n    {\n      name: 'selectable',\n      propType: 'bool',\n      description: '是否可选，该属性仅在设置 Menu 组件 selectMode 属性后生效',\n      defaultValue: false,\n    },\n    {\n      name: 'mode',\n      propType: {\n        type: 'oneOf',\n        value: ['inline', 'popup'],\n      },\n      description: '子菜单打开方式，如果设置会覆盖 Menu 上的同名属性\\n@default Menu 的 mode 属性值',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        parentWhitelist: ['Menu', 'SubMenu', 'Menu.Group', 'MenuButton'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/sub-nav/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'SubNav',\n  title: 'SubNav',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Nav',\n    main: '',\n    destructuring: true,\n    subName: 'SubNav',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'icon',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'string',\n          {\n            type: 'instanceOf',\n            value: 'node',\n          },\n        ],\n      },\n      description: '自定义图标，可以使用 Icon 的 type，也可以使用组件 `<Icon type=\"your type\" />`',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '标签内容',\n    },\n    {\n      name: 'selectable',\n      propType: 'bool',\n      description: '是否可选',\n      defaultValue: false,\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '导航项和子导航',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/switch/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Switch',\n  title: '开关',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Switch',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '当前状态',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['medium', 'small'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'checkedChildren',\n      propType: 'string',\n      description: '打开时的内容',\n    },\n    {\n      name: 'unCheckedChildren',\n      propType: 'string',\n      description: '关闭时的内容',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '开关状态改变是触发此事件\\n@param {Boolean} checked 是否为打开状态\\n@param {Event} e DOM事件对象',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '鼠标点击事件\\n@param {Event} e DOM事件对象',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n      description: '键盘按键事件\\n@param {Event} e DOM事件对象',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'checked',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '当前状态',\n            en_US: 'Checked',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: checked | 说明: 当前状态',\n            en_US: 'prop: checked | description: current status',\n          },\n        },\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否禁用',\n            en_US: 'Disabled',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: disabled | 说明: 是否被禁用',\n            en_US: 'prop: disabled | description: disabled',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '是否禁用',\n        defaultValue: false,\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'checkedChildren',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '开启内容',\n            en_US: 'Checked Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: checkedChildren | 说明: 打开时的内容',\n            en_US: 'prop: checkedChildren | description: checked content',\n          },\n        },\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n        description: '打开时的内容',\n      },\n      {\n        name: 'unCheckedChildren',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '关闭内容',\n            en_US: 'UnChecked Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: unCheckedChildren | 说明: 关闭时的内容',\n            en_US: 'prop: unCheckedChildren | description: unchecked content',\n          },\n        },\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange', 'onClick', 'onKeyDown'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/switch/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Switch',\n  title: '开关',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Switch',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'checked',\n      propType: 'bool',\n      description: '当前状态',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['medium', 'small'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'checkedChildren',\n      propType: 'string',\n      description: '打开时的内容',\n    },\n    {\n      name: 'unCheckedChildren',\n      propType: 'string',\n      description: '关闭时的内容',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '开关状态改变是触发此事件\\n@param {Boolean} checked 是否为打开状态\\n@param {Event} e DOM事件对象',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '鼠标点击事件\\n@param {Event} e DOM事件对象',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n      description: '键盘按键事件\\n@param {Event} e DOM事件对象',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'checked',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '当前状态',\n            en_US: 'Checked',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: checked | 说明: 当前状态',\n            en_US: 'prop: checked | description: current status',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否禁用',\n            en_US: 'Disabled',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: disabled | 说明: 是否被禁用',\n            en_US: 'prop: disabled | description: disabled',\n          },\n        },\n        setter: 'BoolSetter',\n        supportVariable: true,\n        description: '是否禁用',\n        defaultValue: false,\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['medium', 'small'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'checkedChildren',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '开启内容',\n            en_US: 'Checked Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: checkedChildren | 说明: 打开时的内容',\n            en_US: 'prop: checkedChildren | description: checked content',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n        description: '打开时的内容',\n      },\n      {\n        name: 'unCheckedChildren',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '关闭内容',\n            en_US: 'UnChecked Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: unCheckedChildren | 说明: 关闭时的内容',\n            en_US: 'prop: unCheckedChildren | description: unchecked content',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onChange', 'onClick', 'onKeyDown'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/switch/snippets.ts",
    "content": "export default [\n  {\n    title: '开关组件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_switch.png',\n    schema: {\n      componentName: 'Switch',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab/adaptor.ts",
    "content": "import parseData from '../utils/parse-data';\n\nexport const createDataSource = (data: any, props) => {\n  const list = parseData(data, { parseContent: true });\n  const dataSource = [];\n  list.forEach((item, index) => {\n    const { value = '' } = item.value.find(({ type }) => type === 'icon') || {};\n    dataSource.push({\n      icon: value,\n      key: `tab_item_${index}`,\n      title: {\n        type: 'JSSlot',\n        value: item.value.map(({ type, value }) => {\n          if (type === 'icon')\n            return {\n              componentName: 'Icon',\n              props: {\n                disabled: true,\n                type: value,\n                size: 'small',\n                style: { marginRight: '4px' },\n              },\n            };\n          return {\n            componentName: 'Typography.Text',\n            props: {\n              children: value,\n              style: {\n                color: 'inherit',\n              },\n            },\n          };\n        }),\n      },\n      disabled: item.state === 'disabled',\n    });\n\n    if (item.state === 'active') {\n      props.current = `tab_item_${index}`;\n    }\n  });\n  return dataSource;\n};\n\nfunction createContents(dataSource) {\n  //dataSouce.map(item => <Step.Item key={item.key} title={item.title} content={item.content} icon={item.icon} percent={item.percent} disabled={item.disabled}/>)\n  return dataSource.map((item) => {\n    return {\n      componentName: 'Tab.Item',\n      props: item,\n    };\n  });\n}\n\nexport function getDataFromPlainText(value) {\n  const props = { current: `tab_item_0` };\n  const dataSource = createDataSource(value, props);\n  const children = createContents(dataSource);\n  return { children, ...props };\n}\n\n// export default {\n//     name: 'Tab',\n//     shape: ['pure', 'wrapped', 'text', 'capsule'],\n//     editor: (shape = 'pure') => {\n//         const props = [{\n//             name: 'size',\n//             type: Types.enum,\n//             options: ['medium', 'small'],\n//             default: 'medium'\n//         }, {\n//             name: 'closable',\n//             type: Types.bool,\n//             default: false\n//         }];\n\n//         if (['pure', 'wrapped', 'text'].indexOf(shape) !== -1) {\n//             props.push({\n//                 name: 'overflow',\n//                 label: 'Overflow Indicator',\n//                 type: Types.enum,\n//                 options: ['slide', 'dropdown'],\n//                 default: 'slide'\n//             });\n//             props.push({\n//                 name: 'width',\n//                 type: Types.number,\n//                 default: 480\n//             });\n//         }\n\n//         if (shape === 'wrapped') {\n//             props.splice(props.length - 2, 0, {\n//                 name: 'position',\n//                 type: Types.enum,\n//                 options: ['top', 'left', 'right'],\n//                 default: 'top'\n//             });\n//         }\n\n//         return {\n//             props,\n//             data: {\n//                 active: true,\n//                 disable: true,\n//                 default: 'Tab 1\\n*Tab 2\\nTab 3'\n//             }\n//         };\n//     },\n//     adaptor: ({ shape, size, closable, overflow, width, position, style = {}, data, ...others }) => {\n//         const list = parseData(data, { parseContent: true });\n//         const activeKey = list.findIndex((item) => item.state === 'active');\n\n//         return (\n//             <Tab {...others} style={{ minWidth: style.width ? 0 : width, ...style }} activeKey={activeKey} shape={shape} size={size} excessMode={overflow} tabPosition={position}>\n//                 {\n//                     list.map((item, index) => <Tab.Item key={index} title={item.value.map(({ type, value }, i) => type === 'icon' ? <Icon key={`icon_${i}`} type={value} /> : value)} closeable={closable} disabled={item.state === 'disabled'} />)\n//                 }\n//             </Tab>\n//         );\n//     }\n// };\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab/meta.design.ts",
    "content": "import snippets from './snippets';\nimport { getDataFromPlainText } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Tab',\n  title: '选项卡',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tab',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'device',\n      propType: {\n        type: 'oneOf',\n        value: ['tablet', 'desktop', 'phone'],\n      },\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['pure', 'wrapped', 'text', 'capsule'],\n      },\n      description: '外观形态',\n      defaultValue: 'pure',\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '是否开启动效',\n      defaultValue: true,\n    },\n    {\n      name: 'excessMode',\n      propType: {\n        type: 'oneOf',\n        value: ['slide', 'dropdown'],\n      },\n      description: '选项卡过多时的滑动模式',\n      defaultValue: 'slide',\n    },\n    {\n      name: 'tabPosition',\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'bottom', 'left', 'right'],\n      },\n      description: '导航选项卡的位置，只适用于包裹型（wrapped）选项卡',\n      defaultValue: 'top',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'triggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['hover', 'click'],\n      },\n      description: '激活选项卡的触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'lazyLoad',\n      propType: 'bool',\n      description: '是否延迟加载 TabPane 的内容, 默认开启, 即不提前渲染',\n      defaultValue: true,\n    },\n    {\n      name: 'unmountInactiveTabs',\n      propType: 'bool',\n      description: '是否自动卸载未处于激活状态的选项卡',\n      defaultValue: false,\n    },\n    {\n      name: 'navClassName',\n      propType: 'string',\n      description: '导航条的自定义样式类',\n    },\n    {\n      name: 'contentClassName',\n      propType: 'string',\n      description: '内容区容器的自定义样式类',\n    },\n    {\n      name: 'extra',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '导航栏附加内容',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '点击单个选项卡时触发的回调',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '选项卡发生切换时的事件回调\\n@param {String|Number} key 改变后的 key',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '选项卡被关闭时的事件回调\\n@param {String|Number} key   关闭的选项卡的 key',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n    },\n    props: [\n      {\n        name: 'shape',\n        title: '类型',\n        defaultValue: 'pure',\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              { title: '普通型', value: 'pure' },\n              { title: '包裹型', value: 'wrapped' },\n              { title: '文本型', value: 'text' },\n              { title: '胶囊型', value: 'capsule' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        defaultValue: 'medium',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '小', value: 'small' },\n              { title: '中', value: 'medium' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'closeable',\n        title: '关闭入口',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '无',\n                value: false,\n              },\n              {\n                label: '有',\n                value: true,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'excessMode',\n        title: '超出模式',\n        defaultValue: 'slide',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '左右滑动', value: 'slide' },\n              { title: '下拉', value: 'dropdown' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '内容',\n        setValue: (target, value) => {\n          const { children, current } = getDataFromPlainText(value);\n          if (children) {\n            const map = {};\n            children.forEach((item) => {\n              const { props } = item;\n              map[props.key] = props;\n            });\n            // target.parent.setPropValue('children', children);\n            const _children = target.node.export().children;\n            target.node.children.mergeChildren(\n              (child) => {\n                const primaryKey = String(child.getPropValue('key'));\n                return Object.hasOwnProperty.call(map, primaryKey);\n              },\n              () => {\n                const items = [];\n                for (const key in map) {\n                  const originChild = _children.find((child) => {\n                    const found = child.props.key === key;\n                    return found;\n                  }) || { children: [] };\n                  if (Object.hasOwnProperty.call(map, key)) {\n                    items.push({\n                      componentName: 'Tab.Item',\n                      props: map[key],\n                      children: originChild.children,\n                    });\n                  }\n                }\n                return items;\n              },\n              (child1, child2) => {\n                const a = children.findIndex(\n                  (item) => String(item.props.key) === String(child1.getPropValue('key')),\n                );\n                const b = children.findIndex(\n                  (item) => String(item.props.key) === String(child2.getPropValue('key')),\n                );\n                return a - b;\n              },\n            );\n          }\n          const currentShape = target.parent.getPropValue('shape');\n          target.parent.setPropValue('shape', '');\n          target.parent.setPropValue('shape', currentShape);\n          if (typeof current !== 'undefined') {\n            // target.parent.setPropValue('activeKey', current);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'disable'],\n          },\n        },\n      },\n    ],\n    supports: {\n      events: ['onClick', 'onChange', 'onClose'],\n    },\n    advanced: {\n      initialChildren: [\n        {\n          componentName: 'Tab.Item',\n          props: { primaryKey: 'item1' },\n        },\n        {\n          componentName: 'Tab.Item',\n          props: { primaryKey: 'item2' },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '导航',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab/meta.ts",
    "content": "import snippets from './snippets';\nimport { IPublicModelSettingField } from '@alilc/lowcode-types';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Tab',\n  title: '选项卡',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tab',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'device',\n      propType: {\n        type: 'oneOf',\n        value: ['tablet', 'desktop', 'phone'],\n      },\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['pure', 'wrapped', 'text', 'capsule'],\n      },\n      description: '外观形态',\n      defaultValue: 'pure',\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '是否开启动效',\n      defaultValue: true,\n    },\n    {\n      name: 'excessMode',\n      propType: {\n        type: 'oneOf',\n        value: ['slide', 'dropdown'],\n      },\n      description: '选项卡过多时的滑动模式',\n      defaultValue: 'slide',\n    },\n    {\n      name: 'tabPosition',\n      propType: {\n        type: 'oneOf',\n        value: ['top', 'bottom', 'left', 'right'],\n      },\n      description: '导航选项卡的位置，只适用于包裹型（wrapped）选项卡',\n      defaultValue: 'top',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'triggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['hover', 'click'],\n      },\n      description: '激活选项卡的触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'lazyLoad',\n      propType: 'bool',\n      description: '是否延迟加载 TabPane 的内容, 默认开启, 即不提前渲染',\n      defaultValue: true,\n    },\n    {\n      name: 'unmountInactiveTabs',\n      propType: 'bool',\n      description: '是否自动卸载未处于激活状态的选项卡',\n      defaultValue: false,\n    },\n    {\n      name: 'navClassName',\n      propType: 'string',\n      description: '导航条的自定义样式类',\n    },\n    {\n      name: 'contentClassName',\n      propType: 'string',\n      description: '内容区容器的自定义样式类',\n    },\n    {\n      name: 'extra',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '导航栏附加内容',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '点击单个选项卡时触发的回调',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '选项卡发生切换时的事件回调\\n@param {String|Number} key 改变后的 key',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '选项卡被关闭时的事件回调\\n@param {String|Number} key   关闭的选项卡的 key',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'items',\n        title: '标签项',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'title',\n                      title: '名称',\n                      initialValue: '标签项',\n                      setter: 'StringSetter',\n                      important: true,\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'primaryKey',\n                      title: '项目编号',\n                      condition: () => false,\n                      initialValue: (val: string) => {\n                        if (val) return val;\n                        return String(Math.floor(Math.random() * 10000));\n                      },\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'closeable',\n                      title: '可关闭',\n                      initialValue: false,\n                      important: true,\n                      setter: 'BoolSetter',\n                      supportVariable: true,\n                    },\n                    {\n                      name: 'disabled',\n                      title: '是否禁用',\n                      initialValue: false,\n                      important: true,\n                      setter: 'BoolSetter',\n                      supportVariable: true,\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  primaryKey: String(Math.floor(Math.random() * 10000)),\n                  title: '标签项',\n                  closeable: false,\n                  disabled: false,\n                };\n              },\n            },\n          },\n        },\n        extraProps: {\n          getValue(target: IPublicModelSettingField, value: any) {\n            const map = target.node?.children?.map((child) => {\n              const primaryKey = child.getPropValue('primaryKey')\n                ? String(child.getPropValue('primaryKey'))\n                : child.id;\n              return {\n                primaryKey,\n                title: child.getPropValue('title'),\n                closeable: child.getPropValue('closeable'),\n                disabled: child.getPropValue('disabled'),\n              };\n            }) || [];\n            return map;\n          },\n          setValue(target: IPublicModelSettingField, value: any) {\n            const { node } = target;\n            const map: Record<string, any> = {};\n            if (!Array.isArray(value)) {\n              value = [];\n            }\n            value.forEach((item: any) => {\n              const tabitem = Object.assign({}, item);\n              map[item.primaryKey] = tabitem;\n            });\n\n            node?.children?.mergeChildren(\n              (child) => {\n                const primaryKey = String(child.getPropValue('primaryKey'));\n                if (Object.hasOwnProperty.call(map, primaryKey)) {\n                  child.setPropValue('title', map[primaryKey].title);\n                  child.setPropValue('closeable', map[primaryKey].closeable);\n                  child.setPropValue('disabled', map[primaryKey].disabled);\n                  delete map[primaryKey];\n                  return false;\n                }\n                return true;\n              },\n              () => {\n                const items = [];\n                for (const primaryKey in map) {\n                  if (Object.hasOwnProperty.call(map, primaryKey)) {\n                    items.push({\n                      componentName: 'Tab.Item',\n                      props: map[primaryKey],\n                    });\n                  }\n                }\n                return items;\n              },\n              (child1, child2) => {\n                const a = value.findIndex(\n                  (item: any) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n                );\n                const b = value.findIndex(\n                  (item: any) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n                );\n                return a - b;\n              },\n            );\n          },\n        },\n      },\n      {\n        name: 'shape',\n        title: '形态',\n        defaultValue: 'pure',\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              { title: '普通型', value: 'pure' },\n              { title: '包裹型', value: 'wrapped' },\n              { title: '文本型', value: 'text' },\n              { title: '胶囊型', value: 'capsule' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        defaultValue: 'medium',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '小', value: 'small' },\n              { title: '中', value: 'medium' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'excessMode',\n        title: {\n          label: '模式',\n          tip: '选项卡过多时的查看模式',\n        },\n        condition: () => false,\n        defaultValue: 'slide',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '滑动', value: 'slide' },\n              { title: '下拉', value: 'dropdown' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'advance',\n        title: '高级',\n        type: 'group',\n        extraProps: {\n          display: 'accordion',\n        },\n        items: [\n          {\n            name: 'unmountInactiveTabs',\n            title: '切换销毁',\n            defaultValue: false,\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n          {\n            name: 'needBadge',\n            title: '开启徽标',\n            defaultValue: false,\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n          {\n            name: 'renderBadge',\n            title: '徽标渲染',\n            display: 'block',\n            setter: {\n              componentName: 'FunctionSetter',\n              // props: {\n              //   defaultActionName=\"renderBadge\",\n              //   defaultCode=`function renderBadge(tabItem) {\n              //     //支持返回jsx，返回false或者null时不显示内容，返回字符串\"dot\"显示红点\n              //     return 'dot';\n              //   }`,\n              // }\n            },\n            condition(target: IPublicModelSettingField) {\n              return target.parent.getPropValue('needBadge') || false;\n            },\n          },\n          {\n            name: 'tabRender',\n            title: '自定义渲染选项卡',\n            display: 'block',\n            setter: {\n              componentName: 'FunctionSetter',\n              // props: {\n              //   defaultActionName=\"renderBadge\",\n              //   defaultCode=`function renderTabItem(key, props) {\n              //     return props.title;\n              //   }`,\n              // }\n            },\n          },\n          {\n            name: 'extraRender',\n            title: '渲染导航栏附加内容',\n            display: 'block',\n            setter: {\n              componentName: 'FunctionSetter',\n              // props: {\n              //   defaultActionName=\"renderBadge\",\n              //   defaultCode=`function renderTabExtra() {\n              //     return 'Extra';\n              //   }`,\n              // }\n            },\n          },\n        ],\n      },\n      {\n        name: 'style',\n        setter: {\n          componentName: 'StyleSetter',\n        },\n      },\n    ],\n    supports: {\n      events: ['onClick', 'onChange', 'onClose'],\n    },\n    advanced: {\n      initialChildren: [\n        {\n          componentName: 'Tab.Item',\n          props: { primaryKey: 'item1' },\n        },\n        {\n          componentName: 'Tab.Item',\n          props: { primaryKey: 'item2' },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab/snippets.design.ts",
    "content": "import { getDataFromPlainText } from './adaptor';\n\nconst plainData = 'Tab 1\\nTab 2\\nTab 3';\nconst { children } = getDataFromPlainText(plainData);\n\nexport default [\n  {\n    title: '普通型',\n    screenshot: 'https://img.alicdn.com/tfs/TB1D0p2u.z1gK0jSZLeXXb9kVXa-112-64.png',\n    schema: {\n      componentName: 'Tab',\n      props: {\n        shape: 'pure',\n        size: 'medium',\n        excessMode: 'slide',\n        plainData,\n      },\n      children,\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab/snippets.ts",
    "content": "export default [\n  {\n    title: '普通型',\n    screenshot: 'https://img.alicdn.com/tfs/TB1D0p2u.z1gK0jSZLeXXb9kVXa-112-64.png',\n    schema: {\n      componentName: 'Tab',\n      props: {\n        shape: 'pure',\n        size: 'medium',\n        excessMode: 'slide',\n      },\n      children: [\n        {\n          componentName: 'Tab.Item',\n          props: {\n            title: 'Tab1',\n          },\n        },\n        {\n          componentName: 'Tab.Item',\n          props: {\n            title: 'Tab2',\n          },\n        },\n        {\n          componentName: 'Tab.Item',\n          props: {\n            title: 'Tab3',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab-item/meta.design.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Tab.Item',\n  title: '选项卡Item',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tab',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'isAutoContainer',\n      initialValue: true,\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true,\n      condition: () => false,\n    },\n    {\n      name: 'title',\n      propType: 'string',\n      description: '选项卡标题',\n    },\n    {\n      name: 'closeable',\n      propType: 'bool',\n      description: '单个选项卡是否可关闭',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '选项卡是否被禁用',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n      disableBehaviors: '*',\n      nestingRule: {\n        parentWhitelist: ['Tab'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: 'null',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Tab.Item',\n  title: '选项卡Item',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tab',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'isAutoContainer',\n      initialValue: true,\n      defaultValue: true,\n      setter: 'BoolSetter',\n      supportVariable: true,\n      condition: () => false,\n    },\n    {\n      name: 'title',\n      propType: 'string',\n      description: '选项卡标题',\n    },\n    {\n      name: 'closeable',\n      propType: 'bool',\n      description: '单个选项卡是否可关闭',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '选项卡是否被禁用',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n      nestingRule: {\n        parentWhitelist: ['Tab'],\n      },\n    },\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: 'null',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tab-tab-pane/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Tab.TabPane',\n  title: 'Tab.TabPane',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tab',\n    main: '',\n    destructuring: true,\n    subName: 'TabPane',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '选项卡标题',\n    },\n    {\n      name: 'closeable',\n      propType: 'bool',\n      description: '单个选项卡是否可关闭',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '选项卡是否被禁用',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/table/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Table',\n  title: 'Table',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Table',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n    },\n    {\n      name: 'children',\n      propType: 'string',\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'tableLayout',\n      propType: {\n        type: 'oneOf',\n        value: ['fixed', 'auto'],\n      },\n    },\n    {\n      name: 'tableWidth',\n      propType: 'number',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium'],\n      },\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'arrayOf',\n        value: 'object',\n      },\n    },\n    {\n      name: 'entireDataSource',\n      propType: 'array',\n    },\n    {\n      name: 'onRowClick',\n      propType: 'func',\n    },\n    {\n      name: 'onRowMouseEnter',\n      propType: 'func',\n    },\n    {\n      name: 'rowProps',\n      propType: 'func',\n    },\n    {\n      name: 'cellProps',\n      propType: 'func',\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n    },\n    {\n      name: 'hasHeader',\n      propType: 'bool',\n    },\n    {\n      name: 'isZebra',\n      propType: 'bool',\n    },\n    {\n      name: 'loading',\n      propType: 'bool',\n    },\n    {\n      name: 'filterParams',\n      propType: 'object',\n    },\n    {\n      name: 'sort',\n      propType: 'object',\n    },\n    {\n      name: 'sortIcons',\n      propType: 'object',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'components',\n      propType: 'object',\n    },\n    {\n      name: 'columns',\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'shape',\n          value: [\n            {\n              name: 'title',\n              description: '列标题',\n              propType: 'string',\n            },\n            {\n              name: 'dataIndex',\n              description: '列名称',\n              propType: 'string',\n            },\n          ],\n        },\n      },\n    },\n    {\n      name: 'emptyContent',\n      propType: 'node',\n    },\n    {\n      name: 'primaryKey',\n      propType: 'string',\n    },\n    {\n      name: 'lockType',\n      propType: {\n        type: 'oneOf',\n        value: ['left', 'right'],\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'wrapperContent',\n      propType: 'any',\n    },\n    {\n      name: 'refs',\n      propType: 'object',\n    },\n    {\n      name: 'expandedRowRender',\n      propType: 'func',\n    },\n    {\n      name: 'expandedRowIndent',\n      propType: 'array',\n    },\n    {\n      name: 'hasExpandedRowCtrl',\n      propType: 'bool',\n    },\n    {\n      name: 'getExpandedColProps',\n      propType: 'func',\n    },\n    {\n      name: 'openRowKeys',\n      propType: 'array',\n    },\n    {\n      name: 'onRowOpen',\n      propType: 'func',\n    },\n    {\n      name: 'onExpandedRowClick',\n      propType: 'func',\n    },\n    {\n      name: 'fixedHeader',\n      propType: 'bool',\n    },\n    {\n      name: 'rowSelection',\n      propType: 'object',\n    },\n    {\n      name: 'stickyHeader',\n      propType: 'bool',\n    },\n    {\n      name: 'offsetTop',\n      propType: 'number',\n    },\n    {\n      name: 'affixProps',\n      propType: 'object',\n    },\n    {\n      name: 'indent',\n      propType: 'number',\n    },\n    {\n      name: 'isTree',\n      propType: 'bool',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n    },\n    {\n      name: 'onBodyScroll',\n      propType: 'func',\n    },\n    {\n      name: 'expandedIndexSimulate',\n      propType: 'bool',\n    },\n    {\n      name: 'crossline',\n      propType: 'bool',\n    },\n    {\n      name: 'lengths',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'dataSource',\n          setter: 'JsonSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'children',\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'ObjectSetter',\n                props: {\n                  config: {\n                    items: [\n                      {\n                        name: 'componentName',\n                        title: '子组件',\n                        defaultValue: 'Table.Column',\n                        setter: {\n                          componentName: 'StringSetter',\n                        },\n                      },\n                      {\n                        name: 'props',\n                        title: 'props',\n                        setter: {\n                          componentName: 'ObjectSetter',\n                          props: {\n                            config: {\n                              items: [\n                                {\n                                  name: 'title',\n                                  setter: {\n                                    componentName: 'StringSetter',\n                                  },\n                                },\n                                {\n                                  name: 'dataIndex',\n                                  setter: {\n                                    componentName: 'StringSetter',\n                                  },\n                                },\n                              ],\n                            },\n                          },\n                        },\n                      },\n                    ],\n                  },\n                },\n              },\n            },\n          },\n          extraProps: {\n            defaultValue: '',\n            onChange: {\n              type: 'JSFunction',\n              value:\n                '(val, field, editor) => {\\n debugger;\\n console.log(\\'val\\', val);//field.node.children.importSchema(val && {\"componentName\": \"Table.Column\", \"props\": {\"type\": val, \"style\": {\"marginRight\": 5}}}, true); //field.top.setPropValue(\\'children\\', [{\"componentName\": \"Icon\", \"props\": {\"type\": val}}, (field.top.getPropValue(\\'children\\') || []).slice(-1)]);\\n}',\n            },\n          },\n        },\n      ],\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/table-column/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Table.Column',\n  title: 'Table.Column',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Table',\n    main: '',\n    destructuring: true,\n    subName: 'Column',\n  },\n  props: [\n    {\n      name: 'title',\n      propType: 'string',\n    },\n    {\n      name: 'dataIndex',\n      propType: 'string',\n    },\n    {\n      name: 'cell',\n      propType: 'func',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'cell',\n          setter: {\n            componentName: 'SlotSetter',\n            initialValue: {\n              type: 'JSSlot',\n              value: [],\n            },\n            props: {\n              supportParams: true,\n            },\n          },\n          extraProps: {\n            display: 'block',\n          },\n        },\n      ],\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tag/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Tag',\n  title: '标签',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tag',\n    main: '',\n    destructuring: true,\n  },\n  props: [\n    {\n      name: 'type',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签类型',\n          en_US: 'Tag Type',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: type | 说明: 标签的类型',\n          en_US: 'prop: type | description: tag type',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary'],\n      },\n      description: '标签的类型',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签尺寸',\n          en_US: 'Tag Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 标签的尺寸（large 尺寸为兼容表单场景 large = medium）',\n          en_US: 'prop: size | description: tag size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '标签的尺寸（large 尺寸为兼容表单场景 large = medium）',\n    },\n    {\n      name: 'color',\n      propType: 'string',\n      description:\n        '标签颜色, 目前支持：blue、 green、 orange、red、 turquoise、 yellow 和 hex 颜色值 （`color keywords`作为 Tag 组件的保留字，请勿直接使用 ）, `1.19.0` 以上版本生效',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '开启动效',\n          en_US: 'Animation',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: animation | 说明: 是否开启动效',\n          en_US: 'prop: animation | description: enable animation',\n        },\n      },\n      propType: 'bool',\n      description: '是否开启动效',\n    },\n    {\n      name: 'afterAppear',\n      propType: 'func',\n      description: '标签出现动画结束后执行的回调',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '点击回调',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 标签文本内容',\n          en_US: 'prop: children | description: tag content',\n        },\n      },\n      propType: 'string',\n      description: '内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: '!children',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '内容',\n            en_US: 'Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: children | 说明: 按钮文本',\n            en_US: 'prop: children | description: button content',\n          },\n        },\n        setter: 'StringSetter',\n        getValue: (target) => {\n          const { node } = target;\n          const children = node.propsData.children || [];\n          return children.filter((item) => typeof item === 'string').join('');\n        },\n        setValue: (target, value) => {\n          const { node } = target;\n          let children = node.propsData.children || [];\n          const hasTextChild = children.find((item) => typeof item === 'string');\n          if (hasTextChild) {\n            children = children.map((item) => {\n              if (typeof item === 'string') {\n                item = value;\n              }\n              return item;\n            });\n          } else {\n            children.push(value);\n          }\n          node.setPropValue('children', children);\n        },\n      },\n      {\n        name: '!icon',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标',\n            en_US: 'Icon',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: icon | 说明: 图标类型',\n            en_US: 'prop: icon | description: icon type',\n          },\n        },\n        setter: 'IconSetter',\n        supportVariable: false,\n        getValue: (target) => {\n          const { node } = target;\n          const children = node.propsData.children || [];\n          const iconObject = children.find((item) => typeof item === 'object');\n          return iconObject && iconObject.props.type;\n        },\n        setValue: (target, value) => {\n          const { node } = target;\n          let children = node.propsData.children || [];\n          const hasIconChild = children.find((item) => typeof item === 'object');\n          if (hasIconChild) {\n            children = children.map((item) => {\n              if (typeof item === 'object') {\n                item = {\n                  ...item,\n                  props: {\n                    ...item.props,\n                    type: value,\n                  },\n                };\n              }\n              return item;\n            });\n          } else {\n            children.unshift({\n              componentName: 'Icon',\n              props: {\n                type: value,\n                style: {\n                  marginRight: 4,\n                },\n              },\n            });\n          }\n          node.setPropValue('children', children);\n        },\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签类型',\n            en_US: 'Tag Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 标签的类型',\n            en_US: 'prop: type | description: tag type',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '主要',\n                value: 'primary',\n              },\n              {\n                label: '普通',\n                value: 'normal',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签尺寸',\n            en_US: 'Tag Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 标签的尺寸（large 尺寸为兼容表单场景 large = medium）',\n            en_US: 'prop: size | description: tag size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '小', value: 'small' },\n              { title: '中', value: 'medium' },\n              { title: '大', value: 'large' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'disabled',\n        title: '状态',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: false,\n              },\n              {\n                label: '禁用',\n                value: true,\n              },\n            ],\n          },\n        },\n        defaultValue: false,\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tag/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Tag',\n  title: '标签',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tag',\n    main: '',\n    destructuring: true,\n  },\n  props: [\n    {\n      name: 'type',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签类型',\n          en_US: 'Tag Type',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: type | 说明: 标签的类型',\n          en_US: 'prop: type | description: tag type',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'primary'],\n      },\n      description: '标签的类型',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签尺寸',\n          en_US: 'Tag Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 标签的尺寸（large 尺寸为兼容表单场景 large = medium）',\n          en_US: 'prop: size | description: tag size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '标签的尺寸（large 尺寸为兼容表单场景 large = medium）',\n    },\n    {\n      name: 'color',\n      propType: 'string',\n      description:\n        '标签颜色, 目前支持：blue、 green、 orange、red、 turquoise、 yellow 和 hex 颜色值 （`color keywords`作为 Tag 组件的保留字，请勿直接使用 ）, `1.19.0` 以上版本生效',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '开启动效',\n          en_US: 'Animation',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: animation | 说明: 是否开启动效',\n          en_US: 'prop: animation | description: enable animation',\n        },\n      },\n      propType: 'bool',\n      description: '是否开启动效',\n    },\n    {\n      name: 'afterAppear',\n      propType: 'func',\n      description: '标签出现动画结束后执行的回调',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '点击回调',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 标签文本内容',\n          en_US: 'prop: children | description: tag content',\n        },\n      },\n      propType: 'string',\n      description: '内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'color',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '标签颜色',\n              en_US: 'Tag Color',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: color | 说明: 是否开启动效',\n              en_US:\n                'prop: color | description: 目前支持：blue、 green、 orange、red、 turquoise、 yellow 和 hex 颜色值 （`color keywords`作为 Tag 组件的保留字，请勿直接使用 ）, `1.19.0` 以上版本生效',\n            },\n          },\n          setter: {\n            componentName: 'ColorSetter',\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tag/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '标签',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tag.png',\n    schema: {\n      componentName: 'Tag',\n      props: {\n        prefix: 'next-',\n        type: 'normal',\n        size: 'medium',\n        animation: false,\n        children: ['Tag'],\n      },\n    },\n  },\n  {\n    title: '可关闭标签',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tag.png',\n    schema: {\n      componentName: 'Tag.Closeable',\n      props: {\n        prefix: 'next-',\n        closeArea: 'tail',\n        size: 'medium',\n        children: ['Tag'],\n      },\n    },\n  },\n  {\n    title: '可选中标签',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tag.png',\n    schema: {\n      componentName: 'Tag.Selectable',\n      props: {\n        prefix: 'next-',\n        children: ['Tag'],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tag-closeable/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Tag.Closeable',\n  title: '可关闭标签',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tag',\n    main: '',\n    destructuring: true,\n    subName: 'Closeable',\n  },\n  props: [\n    {\n      name: 'closeArea',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '关闭区域',\n          en_US: 'Close Area',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN:\n            '属性: closeArea | 说明: closeable 标签的 onClose 响应区域, tag: 标签体, tail(默认): 关闭按钮',\n          en_US: 'prop: closeArea | description: close area',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['tag', 'tail'],\n      },\n      description: 'closeable 标签的 onClose 响应区域, tag: 标签体, tail(默认): 关闭按钮',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签尺寸',\n          en_US: 'Tag Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 标签的尺寸（large 尺寸为兼容表单场景 large = medium）',\n          en_US: 'prop: size | description: tag size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '标签的尺寸（large 尺寸为兼容表单场景 large = medium）',\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '点击关闭按钮时的回调，返回值 true 则关闭, false 阻止关闭',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '点击回调',\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n      description: '标签关闭后执行的回调',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 标签文本内容',\n          en_US: 'prop: children | description: tag content',\n        },\n      },\n      propType: 'string',\n      description: '内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {},\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tag-selectable/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Tag.Selectable',\n  title: '可选中标签',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tag',\n    main: '',\n    destructuring: true,\n    subName: 'Selectable',\n  },\n  props: [\n    {\n      name: 'checked',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否选中',\n          en_US: 'Checked',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: checked | 说明: 标签是否被选中，受控用法',\n          en_US: 'prop: checked | description: tag checked',\n        },\n      },\n      propType: 'bool',\n      description: '标签是否被选中，受控用法',\n    },\n    {\n      name: 'defaultChecked',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '默认选中',\n          en_US: 'Default Checked',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: defaultChecked | 说明: 标签是否默认被选中，非受控用法',\n          en_US: 'prop: defaultChecked | description: tag default checked',\n        },\n      },\n      propType: 'bool',\n      description: '标签是否默认被选中，非受控用法',\n    },\n    {\n      name: 'disabled',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否禁用',\n          en_US: 'Disabled',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: disabled | 说明: 标签是否被禁用',\n          en_US: 'prop: disabled | description: tag disabled',\n        },\n      },\n      propType: 'bool',\n      description: '标签是否被禁用',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '选中状态变化时触发的事件 Function(checked: Boolean, e: Event) => void',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标签文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 标签文本内容',\n          en_US: 'prop: children | description: tag content',\n        },\n      },\n      propType: 'string',\n      description: '内容',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {},\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/time-picker/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'TimePicker',\n  title: '时间选择框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'TimePicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'name',\n      title: {\n        label: '名称',\n        tip: 'name|表单相关',\n      },\n      propType: 'string',\n      description: 'name|表单相关',\n    },\n    {\n      name: 'label',\n      title: {\n        label: '标签',\n        tip: 'label|输入框内置标签',\n      },\n      propType: 'string',\n      description: 'label|输入框内置标签',\n    },\n    {\n      name: 'state',\n      title: {\n        label: '状态',\n        tip: 'state|输入框状态',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: 'state|输入框状态',\n    },\n    {\n      name: 'placeholder',\n      title: {\n        label: '占位提示',\n        tip: 'placeholder|输入提示',\n      },\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'value',\n      title: {\n        label: 'value',\n        tip: 'value|日期值（受控）',\n      },\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      title: {\n        label: '默认值',\n        tip: 'defaultValue|初始日期值，moment 对象',\n      },\n      propType: 'date',\n      description: 'defaultValue|初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      title: {\n        label: '格式',\n        tip: 'format|日期值的格式（用于限定用户输入和展示）',\n      },\n      propType: 'string',\n      description: 'format|日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'onOk',\n      propType: 'func',\n      description: '点击确认按钮时的回调\\n@return {MomentObject|String} 日期值',\n    },\n    {\n      name: 'size',\n      title: {\n        label: '尺寸',\n        tip: 'size|输入框尺寸',\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: 'size|输入框尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      title: {\n        label: '是否禁用',\n        tip: 'disabled|是否禁用',\n      },\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      title: {\n        label: '清除按钮',\n        tip: 'hasClear|是否显示清空按钮',\n      },\n      propType: 'bool',\n      description: 'hasClear|是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '跟随滚动',\n    },\n    {\n      name: 'defaultVisible',\n      title: {\n        label: '弹层显示',\n        tip: 'defaultVisible|弹层默认是否显示',\n      },\n      propType: 'bool',\n      description: 'defaultVisible|弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'form',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'format',\n        title: '时间格式',\n        defaultValue: 'HH:mm:ss',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: 'HH:mm:ss', value: 'HH:mm:ss' },\n              { title: 'HH:mm', value: 'HH:mm' },\n              { title: 'mm:ss', value: 'mm:ss' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'visible',\n        title: {\n          label: '状态',\n          tip: '属性: visible',\n        },\n        defaultValue: false,\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { value: false, label: '普通' },\n              { value: true, label: '展开' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: 'label|输入框内置标签',\n        },\n        setter: {\n          componentName: 'StringSetter',\n          props: {\n            placeholder: '请输入',\n          },\n        },\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: 'placeholder|输入提示',\n        },\n        defaultValue: '请选择时间',\n        setter: 'StringSetter',\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: 'TimePicker',\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/time-picker/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'TimePicker',\n  title: '时间选择框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'TimePicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'name',\n      title: {\n        label: '名称',\n        tip: 'name|表单相关',\n      },\n      propType: 'string',\n      description: 'name|表单相关',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '按钮的文案',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'success'],\n      },\n      description: '输入框状态',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入框提示',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '时间值（moment 对象或时间字符串，受控状态使用）',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '时间初值（moment 对象或时间字符串，非受控状态使用）',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '时间选择框的尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否允许清空时间',\n      defaultValue: true,\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '时间的格式\\nhttps://momentjs.com/docs/#/parsing/string-format/',\n      defaultValue: 'HH:mm:ss',\n    },\n    {\n      name: 'hourStep',\n      propType: 'number',\n      description: '小时选项步长',\n    },\n    {\n      name: 'minuteStep',\n      propType: 'number',\n      description: '分钟选项步长',\n    },\n    {\n      name: 'secondStep',\n      propType: 'number',\n      description: '秒钟选项步长',\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层是否显示（受控）',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示（非受控）',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '时间值改变时的回调\\n@param {Object|String} value 时间对象或时间字符串',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: ['TimePicker', 'ExpressionSetter'],\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'format',\n        title: '时间格式',\n        defaultValue: 'HH:mm:ss',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'RadioGroupSetter',\n                props: {\n                  options: [\n                    { title: 'HH:mm:ss', value: 'HH:mm:ss' },\n                    { title: 'HH:mm', value: 'HH:mm' },\n                    { title: 'mm:ss', value: 'mm:ss' },\n                  ],\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        name: 'hourStep',\n        title: '小时步长',\n        defaultValue: 1,\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'minuteStep',\n        title: '分钟步长',\n        defaultValue: 1,\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'secondStep',\n        title: '秒钟步长',\n        defaultValue: 1,\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'hasClear',\n        title: '清除按钮',\n        defaultValue: true,\n        setter: ['BoolSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'disabledHours',\n        title: '禁用小时函数',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"disabledHours\",\n          //   defaultCode=`function disabledHours(index) {\n          //     return true;\n          //   }`,\n          // }\n        },\n      },\n      {\n        name: 'disabledMinutes',\n        title: '禁用分钟函数',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"disabledMinutes\",\n          //   defaultCode=`function disabledMinutes(index) {\n          //     return true;\n          //   }`,\n          // }\n        },\n      },\n      {\n        name: 'disabledSeconds',\n        title: '禁用秒钟函数',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"disabledSeconds\",\n          //   defaultCode=`function disabledSeconds(index) {\n          //     return true;\n          //   }`,\n          // }\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      {\n        name: 'style',\n        setter: {\n          componentName: 'StyleSetter',\n        },\n      },\n    ],\n    supports: {\n      events: ['onChange', 'onVisibleChange'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/time-picker/snippets.ts",
    "content": "export default [\n  {\n    title: '时间选择框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_time-picker.png',\n    schema: {\n      componentName: 'TimePicker',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n        hasClear: true,\n        format: 'HH:mm:ss',\n        popupAlign: 'tl tl',\n        popupTriggerType: 'click',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/timeline/meta.design.ts",
    "content": "const updateChildren = (target, value) => {\n  const { node } = target;\n  const map = {};\n  if (!Array.isArray(value)) {\n    value = [];\n  }\n  value.forEach((item) => {\n    const tabitem = Object.assign({}, item);\n    map[item.primaryKey] = tabitem;\n  });\n\n  node.children.mergeChildren(\n    (child) => {\n      const primaryKey = String(child.getPropValue('primaryKey'));\n      if (Object.hasOwnProperty.call(map, primaryKey)) {\n        child.setPropValue('icon', map[primaryKey].icon);\n        child.setPropValue('title', map[primaryKey].title);\n        child.setPropValue('content', map[primaryKey].content);\n        child.setPropValue('state', map[primaryKey].state);\n        child.setPropValue('time', map[primaryKey].time);\n        child.setPropValue('timeLeft', map[primaryKey].timeLeft);\n        child.setPropValue('animation', map[primaryKey].animation);\n        delete map[primaryKey];\n        return false;\n      }\n      return true;\n    },\n    () => {\n      const items = [];\n      for (const primaryKey in map) {\n        if (Object.hasOwnProperty.call(map, primaryKey)) {\n          items.push({\n            componentName: 'Timeline.Item',\n            props: map[primaryKey],\n          });\n        }\n      }\n      return items;\n    },\n    (child1, child2) => {\n      const a = value.findIndex(\n        (item) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n      );\n      const b = value.findIndex(\n        (item) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n      );\n      return a - b;\n    },\n  );\n};\n\nmodule.exports = {\n  group: '原子组件',\n  componentName: 'Timeline',\n  title: '时间轴',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Timeline',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'fold',\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'exact',\n          value: [\n            {\n              name: 'foldArea',\n              propType: {\n                type: 'arrayOf',\n                value: 'number',\n              },\n            },\n            {\n              name: 'foldShow',\n              propType: 'bool',\n            },\n          ],\n        },\n      },\n      description: '自定义折叠选项 示例`[{foldArea: [startIndex, endIndex], foldShow: boolean}]`',\n      defaultValue: [],\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        childWhitelist: ['Timeline.Item'],\n      },\n    },\n    props: [\n      {\n        name: '!timeAlign',\n        title: '时间位置',\n        defaultValue: 'bottom',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '左侧',\n                value: 'left',\n              },\n              {\n                label: '底部',\n                value: 'bottom',\n              },\n            ],\n          },\n        },\n        setValue: (target, value) => {\n          console.log('setvalue');\n          const items = target?.parent?.getPropValue?.('!items');\n          if (items && items.length) {\n            let _items;\n            if (value === 'left') {\n              _items = items.map((item) => ({\n                ...item,\n                time: undefined,\n                timeLeft: item.time,\n              }));\n            } else {\n              _items = items.map((item) => ({\n                ...item,\n                timeLeft: undefined,\n                time: item.timeLeft,\n              }));\n            }\n            target?.parent?.setPropValue?.('!items', _items);\n            updateChildren(target, _items);\n          }\n        },\n      },\n      {\n        name: '!items',\n        title: '时间轴数据',\n        setter: (target) => {\n          return {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'ObjectSetter',\n                props: {\n                  config: {\n                    items: [\n                      {\n                        name: 'title',\n                        setter: 'StringSetter',\n                        important: true,\n                        title: '标题',\n                      },\n                      {\n                        name: 'icon',\n                        title: '图标',\n                        setter: 'IconSetter',\n                        description: '图标',\n                      },\n                      {\n                        name: 'state',\n                        setter: {\n                          componentName: 'RadioGroupSetter',\n                          props: {\n                            options: ['done', 'process', 'error', 'success'],\n                          },\n                        },\n                        title: '节点状态',\n                        defaultValue: 'done',\n                      },\n                      {\n                        name: 'time',\n                        setter: {\n                          componentName: 'DateSetter',\n                          props: {\n                            format: 'YYYY-MM-DD',\n                          },\n                        },\n                        title: '底部时间',\n                        condition: () => {\n                          const timeAlign = target?.parent?.getPropValue?.('!timeAlign') || 'left';\n                          return timeAlign === 'bottom';\n                        },\n                      },\n                      {\n                        name: 'timeLeft',\n                        setter: {\n                          componentName: 'DateSetter',\n                          props: {\n                            format: 'YYYY-MM-DD',\n                          },\n                        },\n                        title: '左侧时间',\n                        condition: () => {\n                          const timeAlign = target?.parent?.getPropValue?.('!timeAlign') || 'left';\n                          return timeAlign === 'left';\n                        },\n                      },\n                      {\n                        name: 'content',\n                        setter: 'TextAreaSetter',\n                        title: '右侧内容',\n                      },\n                      {\n                        name: 'animation',\n                        setter: 'BoolSetter',\n                        title: '启用动画',\n                        defaultValue: true,\n                      },\n                    ],\n                  },\n                },\n                initialValue: () => {\n                  return {\n                    primaryKey: String(Math.floor(Math.random() * 10000)),\n                    title: 'TimelineItem',\n                  };\n                },\n              },\n            },\n          };\n        },\n        extraProps: {\n          getValue: (target, fieldValue) => {\n            // const node = target.node;\n            // const children = node.getChildren();\n            const map = target.node.children.map((child) => {\n              const primaryKey = child.getPropValue('primaryKey')\n                ? String(child.getPropValue('primaryKey'))\n                : child.id;\n              return {\n                primaryKey,\n                icon: child.getPropValue('icon'),\n                title: child.getPropValue('title'),\n                state: child.getPropValue('state'),\n                time: child.getPropValue('time'),\n                timeLeft: child.getPropValue('timeLeft'),\n                content: child.getPropValue('content'),\n                animation: child.getPropValue('animation'),\n              };\n            });\n            return map;\n          },\n          setValue: updateChildren,\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/timeline/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Timeline',\n  title: '时间轴',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Timeline',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'fold',\n      propType: {\n        type: 'arrayOf',\n        value: {\n          type: 'exact',\n          value: [\n            {\n              name: 'foldArea',\n              propType: {\n                type: 'arrayOf',\n                value: 'number',\n              },\n            },\n            {\n              name: 'foldShow',\n              propType: 'bool',\n            },\n          ],\n        },\n      },\n      description: '自定义折叠选项 示例`[{foldArea: [startIndex, endIndex], foldShow: boolean}]`',\n      defaultValue: [],\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n      nestingRule: {\n        childWhitelist: ['Timeline.Item'],\n      },\n    },\n    props: [\n      {\n        name: 'items',\n        title: '时间轴数据',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'title',\n                      setter: 'StringSetter',\n                      supportVariable: true,\n                      isRequired: true,\n                      title: '标题',\n                    },\n                    {\n                      name: 'icon',\n                      title: '图标',\n                      isRequired: true,\n                      setter: 'IconSetter',\n                      supportVariable: true,\n                      description: '图标',\n                    },\n                    {\n                      name: 'state',\n                      setter: {\n                        componentName: 'RadioGroupSetter',\n                        props: {\n                          options: ['done', 'process', 'error', 'success'],\n                        },\n                      },\n                      title: '节点状态',\n                      defaultValue: 'done',\n                    },\n                    {\n                      name: 'time',\n                      setter: 'DateSetter',\n                      supportVariable: true,\n                      title: '右侧时间',\n                    },\n                    {\n                      name: 'timeLeft',\n                      setter: 'DateSetter',\n                      supportVariable: true,\n                      title: '左侧时间',\n                    },\n                    {\n                      name: 'content',\n                      setter: 'TextAreaSetter',\n                      supportVariable: true,\n                      title: '右侧内容',\n                    },\n                    {\n                      name: 'animation',\n                      setter: 'BoolSetter',\n                      supportVariable: true,\n                      title: '启用动画',\n                      defaultValue: true,\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  primaryKey: String(Math.floor(Math.random() * 10000)),\n                  title: 'TimelineItem',\n                };\n              },\n            },\n          },\n        },\n        extraProps: {\n          getValue(target, fieldValue) {\n            // const node = target.node;\n            // const children = node.children;\n            const map = target.node.children.map((child) => {\n              const primaryKey = child.getPropValue('primaryKey')\n                ? String(child.getPropValue('primaryKey'))\n                : child.id;\n              return {\n                primaryKey,\n                icon: child.getPropValue('icon'),\n                title: child.getPropValue('title'),\n                state: child.getPropValue('state'),\n                time: child.getPropValue('time'),\n                timeLeft: child.getPropValue('timeLeft'),\n                content: child.getPropValue('content'),\n                animation: child.getPropValue('animation'),\n              };\n            });\n            return map;\n          },\n          setValue(target, value) {\n            const { node } = target;\n            const map = {};\n            if (!Array.isArray(value)) {\n              value = [];\n            }\n            value.forEach((item) => {\n              const tabitem = Object.assign({}, item);\n              map[item.primaryKey] = tabitem;\n            });\n\n            node.children.mergeChildren(\n              (child) => {\n                const primaryKey = String(child.getPropValue('primaryKey'));\n                if (Object.hasOwnProperty.call(map, primaryKey)) {\n                  child.setPropValue('icon', map[primaryKey].icon);\n                  child.setPropValue('title', map[primaryKey].title);\n                  child.setPropValue('content', map[primaryKey].content);\n                  child.setPropValue('state', map[primaryKey].state);\n                  child.setPropValue('time', map[primaryKey].time);\n                  child.setPropValue('timeLeft', map[primaryKey].timeLeft);\n                  child.setPropValue('animation', map[primaryKey].animation);\n                  delete map[primaryKey];\n                  return false;\n                }\n                return true;\n              },\n              () => {\n                const items = [];\n                for (const primaryKey in map) {\n                  if (Object.hasOwnProperty.call(map, primaryKey)) {\n                    items.push({\n                      componentName: 'Timeline.Item',\n                      props: map[primaryKey],\n                    });\n                  }\n                }\n                return items;\n              },\n              (child1, child2) => {\n                const a = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n                );\n                const b = value.findIndex(\n                  (item) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n                );\n                return a - b;\n              },\n            );\n          },\n        },\n      },\n    ],\n  },\n  icon: '',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/timeline/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '时间轴',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_timeline.png',\n    schema: {\n      componentName: 'Timeline',\n      props: {\n        prefix: 'next-',\n        fold: [],\n        animation: true,\n      },\n      children: [\n        {\n          componentName: 'Timeline.Item',\n          props: {\n            state: 'process',\n            title: 'Buy',\n            time: '2022-02-01',\n          },\n        },\n        {\n          componentName: 'Timeline.Item',\n          props: {\n            title: 'Ship',\n            time: '2022-02-01',\n          },\n        },\n        {\n          componentName: 'Timeline.Item',\n          props: {\n            title: 'Order',\n            time: '2022-02-01',\n          },\n        },\n      ],\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/timeline-item/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Timeline.Item',\n  title: '时间轴项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Timeline',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['done', 'process', 'error', 'success'],\n      },\n      description: '节点状态',\n      defaultValue: 'done',\n    },\n    {\n      name: 'icon',\n      propType: 'string',\n      description: '图标',\n    },\n    {\n      name: 'dot',\n      propType: 'node',\n      description: '自定义时间轴节点',\n    },\n    {\n      name: 'time',\n      propType: 'string',\n      description: '格式化后的时间',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '标题',\n    },\n    {\n      name: 'timeLeft',\n      propType: 'string',\n      description: '左侧时间',\n    },\n    {\n      name: 'content',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '右侧内容',\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '动画',\n      defaultValue: true,\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: false,\n      nestingRule: {\n        parentWhitelist: ['Timeline'],\n      },\n    },\n    props: [\n      {\n        name: 'title',\n        setter: 'StringSetter',\n        supportVariable: true,\n        title: '标题',\n      },\n      {\n        name: 'icon',\n        title: '图标',\n        setter: 'IconSetter',\n        supportVariable: true,\n        description: '图标',\n      },\n      {\n        name: 'state',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['done', 'process', 'error', 'success'],\n          },\n        },\n        title: '节点状态',\n        defaultValue: 'done',\n      },\n      {\n        name: 'time',\n        setter: 'DateSetter',\n        supportVariable: true,\n        title: '右侧时间',\n      },\n      {\n        name: 'timeLeft',\n        setter: 'DateSetter',\n        supportVariable: true,\n        title: '左侧时间',\n      },\n      {\n        name: 'content',\n        setter: 'TextAreaSetter',\n        supportVariable: true,\n        title: '右侧内容',\n      },\n      {\n        name: 'animation',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '启用动画',\n        defaultValue: true,\n      },\n    ],\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  icon: '',\n  category: 'null',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/timeline-item/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Timeline.Item',\n  title: '时间轴项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Timeline',\n    main: '',\n    destructuring: true,\n    subName: 'Item',\n  },\n  props: [\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['done', 'process', 'error', 'success'],\n      },\n      description: '节点状态',\n      defaultValue: 'done',\n    },\n    {\n      name: 'icon',\n      propType: 'string',\n      description: '图标',\n    },\n    {\n      name: 'dot',\n      propType: 'node',\n      description: '自定义时间轴节点',\n    },\n    {\n      name: 'time',\n      propType: 'string',\n      description: '格式化后的时间',\n    },\n    {\n      name: 'title',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '标题',\n    },\n    {\n      name: 'timeLeft',\n      propType: 'string',\n      description: '左侧时间',\n    },\n    {\n      name: 'content',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '右侧内容',\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '动画',\n      defaultValue: true,\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: false,\n      nestingRule: {\n        parentWhitelist: ['Timeline'],\n      },\n    },\n    props: [\n      {\n        name: 'title',\n        setter: 'StringSetter',\n        supportVariable: true,\n        title: '标题',\n      },\n      {\n        name: 'icon',\n        title: '图标',\n        setter: 'IconSetter',\n        supportVariable: true,\n        description: '图标',\n      },\n      {\n        name: 'state',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['done', 'process', 'error', 'success'],\n          },\n        },\n        title: '节点状态',\n        defaultValue: 'done',\n      },\n      {\n        name: 'time',\n        setter: 'DateSetter',\n        supportVariable: true,\n        title: '右侧时间',\n      },\n      {\n        name: 'timeLeft',\n        setter: 'DateSetter',\n        supportVariable: true,\n        title: '左侧时间',\n      },\n      {\n        name: 'content',\n        setter: 'TextAreaSetter',\n        supportVariable: true,\n        title: '右侧内容',\n      },\n      {\n        name: 'animation',\n        setter: 'BoolSetter',\n        supportVariable: true,\n        title: '启用动画',\n        defaultValue: true,\n      },\n    ],\n  },\n  icon: '',\n  category: 'null',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/toast/meta.design.ts",
    "content": "export default {\n  group: '原子组件',\n  componentName: 'Message',\n  title: '提示',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Message',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'title',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标题',\n          en_US: 'Title',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: title | 说明: 标题',\n          en_US: 'prop: title | description: Title',\n        },\n      },\n      propType: 'string',\n      description: '标题',\n      defaultValue: '标题',\n    },\n    {\n      name: 'type',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'Type',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: type | 说明: 反馈类型',\n          en_US: 'prop: type | description: message type',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'warning', 'error', 'notice', 'help', 'loading'],\n      },\n      description: '反馈类型',\n      defaultValue: 'success',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '形状',\n          en_US: 'Shape',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: shape | 说明: 外观',\n          en_US: 'prop: shape | description: message shape',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: [\n          {\n            label: 'Inline',\n            value: 'inline',\n          },\n          {\n            label: 'Addon',\n            value: 'addon',\n          },\n          {\n            label: 'Toast',\n            value: 'toast',\n          },\n        ],\n      },\n      description: '外观',\n      defaultValue: 'inline',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '尺寸',\n          en_US: 'Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 尺寸',\n          en_US: 'prop: size | description: message size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 文本内容',\n          en_US: 'prop: children | description: message content',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '内容',\n    },\n    {\n      name: 'visible',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否显示',\n          en_US: 'Visible',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: visible | 说明: 当前是否显示',\n          en_US: 'prop: visible | description: visible',\n        },\n      },\n      propType: 'bool',\n      description: '当前是否显示',\n    },\n    {\n      name: 'iconType',\n      propType: 'string',\n      description: '显示的图标类型，会覆盖内部设置的IconType',\n    },\n    {\n      name: 'closeable',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '显示 Close',\n          en_US: 'Show Close',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: closeable | 说明: 显示关闭按钮',\n          en_US: 'prop: closeable | description: show close button',\n        },\n      },\n      propType: 'bool',\n      description: '显示关闭按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '关闭按钮的回调',\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n      description: '关闭之后调用的函数',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '开启动效',\n          en_US: 'Animation',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: animation | 说明: 是否开启动效',\n          en_US: 'prop: animation | description: enable animation',\n        },\n      },\n      propType: 'bool',\n      description: '收起动画',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '形状',\n            en_US: 'Shape',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: shape | 说明: 外观',\n            en_US: 'prop: shape | description: message shape',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['inline', 'addon', 'toast'] },\n        },\n        description: '外观',\n        defaultValue: 'inline',\n      },\n      {\n        name: 'type',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '类型',\n            en_US: 'Type',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: type | 说明: 反馈类型',\n            en_US: 'prop: type | description: message type',\n          },\n        },\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                label: '成功',\n                value: 'success',\n              },\n              {\n                label: '警告',\n                value: 'warning',\n              },\n              {\n                label: '失败',\n                value: 'error',\n              },\n              {\n                label: '提示',\n                value: 'notice',\n              },\n              {\n                label: '帮助',\n                value: 'help',\n              },\n              {\n                label: '加载',\n                value: 'loading',\n              },\n            ],\n          },\n        },\n        description: '反馈类型',\n        defaultValue: 'success',\n      },\n      {\n        name: 'title',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标题',\n            en_US: 'Title',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: title | 说明: 标题',\n            en_US: 'prop: title | description: Title',\n          },\n        },\n        setter: 'StringSetter',\n        description: '标题',\n        defaultValue: '标题',\n      },\n      {\n        name: 'iconType',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标',\n            en_US: 'Icon',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: iconType | 说明: 显示的图标类型',\n            en_US: 'prop: iconType | description: icon type',\n          },\n        },\n        setter: {\n          componentName: 'IconSetter',\n        },\n      },\n      {\n        name: 'children',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '文本',\n            en_US: 'Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: children | 说明: 文本内容',\n            en_US: 'prop: children | description: message content',\n          },\n        },\n        setter: 'TextAreaSetter',\n        description: '内容',\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸',\n            en_US: 'prop: size | description: message size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        description: '尺寸',\n        defaultValue: 'medium',\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'visible',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '是否显示',\n            en_US: 'Visible',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: visible | 说明: 当前是否显示',\n            en_US: 'prop: visible | description: visible',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '当前是否显示',\n      },\n      {\n        name: 'closeable',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '关闭按钮',\n            en_US: 'Show Close',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: closeable | 说明: 显示关闭按钮',\n            en_US: 'prop: closeable | description: show close button',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '显示关闭按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'animation',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '开启动效',\n            en_US: 'Animation',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: animation | 说明: 是否开启动效',\n            en_US: 'prop: animation | description: enable animation',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '收起动画',\n        defaultValue: true,\n      },\n    ],\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/toast/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Message',\n  title: '面包片',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Message',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'title',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '标题',\n          en_US: 'Title',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: title | 说明: 标题',\n          en_US: 'prop: title | description: Title',\n        },\n      },\n      propType: 'string',\n      description: '标题',\n      defaultValue: '标题',\n    },\n    {\n      name: 'type',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '类型',\n          en_US: 'Type',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: type | 说明: 反馈类型',\n          en_US: 'prop: type | description: message type',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'warning', 'error', 'notice', 'help', 'loading'],\n      },\n      description: '反馈类型',\n      defaultValue: 'success',\n    },\n    {\n      name: 'shape',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '形状',\n          en_US: 'Shape',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: shape | 说明: 外观',\n          en_US: 'prop: shape | description: message shape',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['inline', 'addon', 'toast'],\n      },\n      description: '外观',\n      defaultValue: 'inline',\n    },\n    {\n      name: 'size',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '尺寸',\n          en_US: 'Size',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: size | 说明: 尺寸',\n          en_US: 'prop: size | description: message size',\n        },\n      },\n      propType: {\n        type: 'oneOf',\n        value: ['medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'children',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '文本',\n          en_US: 'Content',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: children | 说明: 文本内容',\n          en_US: 'prop: children | description: message content',\n        },\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '内容',\n    },\n    {\n      name: 'visible',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '是否显示',\n          en_US: 'Visible',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: visible | 说明: 当前是否显示',\n          en_US: 'prop: visible | description: visible',\n        },\n      },\n      propType: 'bool',\n      description: '当前是否显示',\n    },\n    {\n      name: 'iconType',\n      propType: 'string',\n      description: '显示的图标类型，会覆盖内部设置的IconType',\n    },\n    {\n      name: 'closeable',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '显示 Close',\n          en_US: 'Show Close',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: closeable | 说明: 显示关闭按钮',\n          en_US: 'prop: closeable | description: show close button',\n        },\n      },\n      propType: 'bool',\n      description: '显示关闭按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'onClose',\n      propType: 'func',\n      description: '关闭按钮的回调',\n    },\n    {\n      name: 'afterClose',\n      propType: 'func',\n      description: '关闭之后调用的函数',\n    },\n    {\n      name: 'animation',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '开启动效',\n          en_US: 'Animation',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: animation | 说明: 是否开启动效',\n          en_US: 'prop: animation | description: enable animation',\n        },\n      },\n      propType: 'bool',\n      description: '收起动画',\n      defaultValue: true,\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'iconType',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '图标',\n              en_US: 'Icon',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: iconType | 说明: 显示的图标类型',\n              en_US: 'prop: iconType | description: icon type',\n            },\n          },\n          setter: {\n            componentName: 'IconSetter',\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息反馈',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/toast/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '面包片',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_message.png',\n    schema: {\n      componentName: 'Message',\n      props: {\n        title: 'Toast',\n        type: 'success',\n        shape: 'toast',\n        size: 'medium',\n        visible: true,\n        animation: true,\n        children: 'This item already has the label \"travel\", you can add a new label.',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tooltip/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Tooltip',\n  title: 'Tooltip',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Balloon',\n    main: '',\n    destructuring: true,\n    subName: 'Tooltip',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      description: '样式类名的品牌前缀',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'children',\n      propType: 'node',\n      description: 'tooltip的内容',\n    },\n    {\n      name: 'align',\n      propType: {\n        type: 'oneOf',\n        value: ['t', 'r', 'b', 'l', 'tl', 'tr', 'bl', 'br', 'lt', 'lb', 'rt', 'rb'],\n      },\n      description:\n        '弹出层位置\\n@enumdesc 上, 右, 下, 左, 上左, 上右, 下左, 下右, 左上, 左下, 右上, 右下 及其 两两组合',\n      defaultValue: 'b',\n    },\n    {\n      name: 'trigger',\n      propType: 'node',\n      description: '触发元素',\n    },\n    {\n      name: 'triggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['hover', 'click'],\n      },\n      description:\n        \"触发行为\\n鼠标悬浮,  鼠标点击('hover', 'click')或者它们组成的数组，如 ['hover', 'click'], 强烈不建议使用'focus'，若有复杂交互，推荐使用triggerType为click的Balloon组件\",\n      defaultValue: 'hover',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层组件style，透传给Popup',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层组件className，透传给Popup',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '弹层组件属性，透传给Popup',\n    },\n    {\n      name: 'pure',\n      propType: 'bool',\n      description: '是否pure render',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'string',\n      description: '指定浮层渲染的父节点, 可以为节点id的字符串，也可以返回节点的函数。',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'id',\n      propType: 'string',\n      description: '弹层id, 传入值才会支持无障碍',\n    },\n    {\n      name: 'delay',\n      propType: 'number',\n      description: '如果需要让 Tooltip 内容可被点击，可以设置这个参数，例如 100',\n      defaultValue: 0,\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/transfer/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport parseData from '../utils/parse-data';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Transfer',\n  title: '穿梭框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Transfer',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n      description: '请设置 id 以保证transfer的可访问性',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'mode',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'simple'],\n      },\n      description: '移动选项模式',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'dataSource',\n      propType: 'array',\n      description: '数据源',\n    },\n    {\n      name: 'value',\n      propType: 'array',\n      description: '当前值',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'array',\n      description: '默认值',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'leftDisabled',\n      propType: 'bool',\n      description: '是否禁用左侧面板',\n      defaultValue: false,\n    },\n    {\n      name: 'rightDisabled',\n      propType: 'bool',\n      description: '是否禁用右侧面板',\n      defaultValue: false,\n    },\n    {\n      name: 'itemRender',\n      propType: 'func',\n      description: '列表项渲染函数',\n    },\n    {\n      name: 'showSearch',\n      propType: 'bool',\n      description: '是否显示搜索框',\n      defaultValue: false,\n    },\n    {\n      name: 'filter',\n      propType: 'func',\n      description: '自定义搜索函数',\n    },\n    {\n      name: 'searchPlaceholder',\n      propType: 'string',\n      description: '搜索框占位符',\n    },\n    {\n      name: 'notFoundContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '列表为空显示内容',\n      defaultValue: 'Not Found',\n    },\n    {\n      name: 'titles',\n      propType: 'array',\n      description: '左右面板标题',\n    },\n    {\n      name: 'operations',\n      propType: 'array',\n      description: '向右向左移动按钮显示内容',\n    },\n    {\n      name: 'defaultLeftChecked',\n      propType: 'array',\n      description: '左面板默认选中值',\n    },\n    {\n      name: 'defaultRightChecked',\n      propType: 'array',\n      description: '右面板默认选中值',\n    },\n    {\n      name: 'listClassName',\n      propType: 'string',\n      description: '左右面板列表自定义样式类名',\n    },\n    {\n      name: 'listStyle',\n      propType: 'object',\n      description: '左右面板列表自定义样式对象',\n    },\n    {\n      name: 'sortable',\n      propType: 'bool',\n      description: '是否允许拖拽排序',\n      defaultValue: false,\n    },\n    {\n      name: 'children',\n      propType: 'func',\n      description: '接收 children 自定义渲染列表',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '值发生改变的时候触发的回调函数',\n    },\n    {\n      name: 'onSearch',\n      propType: 'func',\n      description: '搜索框输入时触发的回调函数',\n    },\n    {\n      name: 'onSort',\n      propType: 'func',\n      description: '拖拽排序时触发的回调函数',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'mode',\n        title: '类型',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '普通', value: 'normal' },\n              { title: '简单', value: 'simple' },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'titles.0',\n        title: '左侧标题',\n        setter: 'StringSetter',\n        defaultValue: 'TitleLeft',\n      },\n      {\n        name: 'titles.1',\n        title: '右侧标题',\n        setter: 'StringSetter',\n        defaultValue: 'TitleRight',\n      },\n      {\n        name: 'showSearch',\n        title: '搜索框',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '无', value: false },\n              { title: '有', value: true },\n            ],\n          },\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'showCheckAll',\n        title: '显示全选',\n        setter: 'BoolSetter',\n        defaultValue: true,\n      },\n      {\n        name: 'searchPlaceholder',\n        title: '占位符',\n        setter: 'StringSetter',\n        condition(target) {\n          return target.getProps().getPropValue('showSearch') || false;\n        },\n      },\n      {\n        name: 'sortable',\n        title: '拖拽排序',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '内容',\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n            disableIcon: true,\n          },\n        },\n        setValue: (target, value) => {\n          const list = parseData(value).filter(({ type }) => type === 'node');\n          const keys = [];\n          const dataSource = list.map((item, i) => {\n            if (item.state === 'active') {\n              keys.push(`${i}`);\n            }\n            return {\n              label: `${item.value}`,\n              value: `${i}`,\n              disabled: item.state === 'disabled',\n            };\n          });\n          target.parent.setPropValue('dataSource', dataSource);\n          target.parent.setPropValue('defaultLeftChecked', keys);\n        },\n      },\n    ],\n    supports: {\n      events: ['onChange', 'onSearch', 'onSort'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/transfer/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Transfer',\n  title: '穿梭框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Transfer',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n      description: '请设置 id 以保证transfer的可访问性',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'mode',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'simple'],\n      },\n      description: '移动选项模式',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'dataSource',\n      propType: 'array',\n      description: '数据源',\n    },\n    {\n      name: 'value',\n      propType: 'array',\n      description: '当前值',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'array',\n      description: '默认值',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'leftDisabled',\n      propType: 'bool',\n      description: '是否禁用左侧面板',\n      defaultValue: false,\n    },\n    {\n      name: 'rightDisabled',\n      propType: 'bool',\n      description: '是否禁用右侧面板',\n      defaultValue: false,\n    },\n    {\n      name: 'itemRender',\n      propType: 'func',\n      description: '列表项渲染函数',\n    },\n    {\n      name: 'showSearch',\n      propType: 'bool',\n      description: '是否显示搜索框',\n      defaultValue: false,\n    },\n    {\n      name: 'filter',\n      propType: 'func',\n      description: '自定义搜索函数',\n    },\n    {\n      name: 'searchPlaceholder',\n      propType: 'string',\n      description: '搜索框占位符',\n    },\n    {\n      name: 'notFoundContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '列表为空显示内容',\n      defaultValue: 'Not Found',\n    },\n    {\n      name: 'titles',\n      propType: 'array',\n      description: '左右面板标题',\n    },\n    {\n      name: 'operations',\n      propType: 'array',\n      description: '向右向左移动按钮显示内容',\n    },\n    {\n      name: 'defaultLeftChecked',\n      propType: 'array',\n      description: '左面板默认选中值',\n    },\n    {\n      name: 'defaultRightChecked',\n      propType: 'array',\n      description: '右面板默认选中值',\n    },\n    {\n      name: 'listClassName',\n      propType: 'string',\n      description: '左右面板列表自定义样式类名',\n    },\n    {\n      name: 'listStyle',\n      propType: 'object',\n      description: '左右面板列表自定义样式对象',\n    },\n    {\n      name: 'sortable',\n      propType: 'bool',\n      description: '是否允许拖拽排序',\n      defaultValue: false,\n    },\n    {\n      name: 'children',\n      propType: 'func',\n      description: '接收 children 自定义渲染列表',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '值发生改变的时候触发的回调函数',\n    },\n    {\n      name: 'onSearch',\n      propType: 'func',\n      description: '搜索框输入时触发的回调函数',\n    },\n    {\n      name: 'onSort',\n      propType: 'func',\n      description: '拖拽排序时触发的回调函数',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'value',\n        title: '当前值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'mode',\n        title: '模式',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'RadioGroupSetter',\n                props: {\n                  options: [\n                    { title: 'normal', value: 'normal' },\n                    { title: 'simple', value: 'simple' },\n                  ],\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n        defaultValue: 'simple',\n      },\n      {\n        name: 'showCheckAll',\n        title: '显示全选',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n        defaultValue: true,\n      },\n      {\n        name: 'showSearch',\n        title: '搜索框',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'searchPlaceholder',\n        title: '搜索框占位符',\n        display: 'block',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n        condition(target) {\n          return target.parent.getPropValue('showSearch') || false;\n        },\n      },\n      {\n        name: 'filter',\n        title: '自定义搜索函数',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"filter\",\n          //   defaultCode=`function filter(searchedValue, data) {\n          //     return true;\n          //   }`,\n          // }\n        },\n        condition(target) {\n          return target.parent.getPropValue('showSearch') || false;\n        },\n      },\n      {\n        name: 'sortable',\n        title: '拖拽排序',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'dataSource',\n        title: '数据源',\n        display: 'block',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'JsonSetter',\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n        defaultValue: [\n          { label: 'item0', value: '0', disabled: false },\n          { label: 'item1', value: '1', disabled: false },\n          { label: 'item2', value: '2', disabled: true },\n        ],\n      },\n      {\n        name: 'defaultLeftChecked',\n        title: '左侧面板默认选中值',\n        display: 'block',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'JsonSetter',\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n        defaultValue: ['1'],\n      },\n      {\n        name: 'defaultRightChecked',\n        title: '右侧面板默认选中值',\n        display: 'block',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'JsonSetter',\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n        defaultValue: ['1'],\n      },\n      {\n        name: 'titles',\n        title: '面板标题',\n        display: 'block',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'JsonSetter',\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n        defaultValue: ['TitleLeft', 'TitleRight'],\n      },\n      {\n        name: 'notFountContent',\n        title: '无数据时显示内容',\n        display: 'block',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'StringSetter',\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n        defaultValue: ['无数据'],\n      },\n      {\n        name: 'itemRender',\n        title: '列表项渲染函数',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"itemRender\",\n          //   defaultCode=`function itemRender(data) {\n          //     return data.label;\n          //   }`,\n          // }\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n      {\n        name: 'style',\n        setter: {\n          componentName: 'StyleSetter',\n        },\n      },\n    ],\n    supports: {\n      events: ['onChange', 'onSearch', 'onSort'],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/transfer/snippets.design.ts",
    "content": "import parseData from '../utils/parse-data';\nconst plainData =\n  'Content1\\nContent2\\n*Content3\\n*Content4\\n*Content5\\nContent6\\nContent7\\nContent8\\nContent9\\nContent10';\nconst list = parseData(plainData).filter(({ type }) => type === 'node');\nconst keys = [];\nconst dataSource = list.map((item, i) => {\n  if (item.state === 'active') {\n    keys.push(`${i}`);\n  }\n  return {\n    label: `${item.value}`,\n    value: `${i}`,\n    disabled: item.state === 'disabled',\n  };\n});\n\nexport default [\n  {\n    title: '穿梭框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_transfer.png',\n    schema: {\n      componentName: 'Transfer',\n      props: {\n        prefix: 'next-',\n        mode: 'normal',\n        titles: ['TitleLeft', 'TitleRight'],\n        dataSource,\n        plainData,\n        defaultLeftChecked: keys,\n        notFoundContent: 'Not Found',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/transfer/snippets.ts",
    "content": "export default [\n  {\n    title: '穿梭框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_transfer.png',\n    schema: {\n      componentName: 'Transfer',\n      props: {\n        prefix: 'next-',\n        mode: 'normal',\n        titles: ['TitleLeft', 'TitleRight'],\n        notFoundContent: 'Not Found',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree/adaptor.ts",
    "content": "export const createDataSource = (\n  list,\n  keys = { selected: [], expanded: [] },\n  level = 0,\n  prefix = '',\n) => {\n  const array = [];\n  let index = 0;\n\n  list.forEach((item) => {\n    const key = `${prefix || level}-${index++}`;\n\n    if (item.children && item.children.length > 0) {\n      item.children = createDataSource(item.children, keys, level + 1, key);\n    }\n    if (typeof Array.isArray(item.value) && item.value.length) {\n      let _label, _icon;\n      item.value.forEach((i) => {\n        if (i.type === 'icon') {\n          _icon = i.value;\n        } else {\n          _label = i.value;\n        }\n      });\n      array.push({\n        label: _label,\n        icon: _icon,\n        disabled: item.state === 'disabled',\n        key,\n        children: item.children,\n      });\n    } else {\n      array.push({\n        label: item.value,\n        disabled: item.state === 'disabled',\n        key,\n        children: item.children,\n      });\n    }\n\n    if (item.state === 'active') {\n      if (item.children && item.children.length > 0) {\n        keys.expanded.push(key);\n      } else {\n        keys.selected.push(key);\n      }\n    }\n\n    return;\n  });\n\n  return array;\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport parseData from '../utils/parse-data';\nimport { createDataSource } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Tree',\n  title: '树形控件',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tree',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'object',\n      },\n      description: '数据源，该属性优先级高于 children',\n    },\n    {\n      name: 'showLine',\n      propType: 'bool',\n      description: '是否显示树的线',\n      defaultValue: false,\n    },\n    {\n      name: 'selectable',\n      propType: 'bool',\n      description: '是否支持选中节点',\n      defaultValue: true,\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description:\n        '选中或取消选中节点时触发的回调函数\\n@param {Array} selectedKeys 选中节点key的数组\\n@param {Object} extra 额外参数\\n@param {Array} extra.selectedNodes 选中节点的数组\\n@param {Object} extra.node 当前操作的节点\\n@param {Boolean} extra.selected 当前操作是否是选中',\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否支持多选',\n      defaultValue: false,\n    },\n    {\n      name: 'checkable',\n      propType: 'bool',\n      description: '是否支持勾选节点的复选框',\n      defaultValue: false,\n    },\n    {\n      name: 'checkStrictly',\n      propType: 'bool',\n      description: '勾选节点复选框是否完全受控（父子节点选中状态不再关联）',\n      defaultValue: false,\n    },\n    {\n      name: 'checkedStrategy',\n      propType: {\n        type: 'oneOf',\n        value: ['all', 'parent', 'child'],\n      },\n      description:\n        '定义选中时回填的方式\\n@enumdesc 返回所有选中的节点, 父子节点都选中时只返回父节点, 父子节点都选中时只返回子节点',\n      defaultValue: 'all',\n    },\n    {\n      name: 'onCheck',\n      propType: 'func',\n      description:\n        '勾选或取消勾选复选框时触发的回调函数\\n@param {Array} checkedKeys 勾选复选框节点key的数组\\n@param {Object} extra 额外参数\\n@param {Array} extra.checkedNodes 勾选复选框节点的数组\\n@param {Array} extra.checkedNodesPositions 包含有勾选复选框节点和其位置的对象的数组\\n@param {Array} extra.indeterminateKeys 半选复选框节点 key 的数组\\n@param {Object} extra.node 当前操作的节点\\n@param {Boolean} extra.checked 当前操作是否是勾选',\n    },\n    {\n      name: 'defaultExpandAll',\n      propType: 'bool',\n      description: '是否默认展开所有节点',\n      defaultValue: false,\n    },\n    {\n      name: 'autoExpandParent',\n      propType: 'bool',\n      description: '是否自动展开父节点，建议受控时设置为false',\n      defaultValue: true,\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n      description:\n        '展开或收起节点时触发的回调函数\\n@param {Array} expandedKeys 展开的节点key的数组\\n@param {Object} extra 额外参数\\n@param {Object} extra.node 当前操作的节点\\n@param {Boolean} extra.expanded 当前操作是否是展开',\n    },\n    {\n      name: 'editable',\n      propType: 'bool',\n      description: '是否支持编辑节点内容',\n      defaultValue: false,\n    },\n    {\n      name: 'onEditFinish',\n      propType: 'func',\n      description:\n        '编辑节点内容完成时触发的回调函数\\n@param {String} key 编辑节点的 key\\n@param {String} label 编辑节点完成时节点的文本\\n@param {Object} node 当前编辑的节点',\n    },\n    {\n      name: 'draggable',\n      propType: 'bool',\n      description: '是否支持拖拽节点',\n      defaultValue: false,\n    },\n    {\n      name: 'onDragStart',\n      propType: 'func',\n      description:\n        '开始拖拽节点时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 拖拽的节点',\n    },\n    {\n      name: 'onDragEnter',\n      propType: 'func',\n      description:\n        '拖拽节点进入目标节点时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点\\n@param {Array} info.expandedKeys 当前展开的节点key的数组',\n    },\n    {\n      name: 'onDragOver',\n      propType: 'func',\n      description:\n        '拖拽节点在目标节点上移动的时候触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点',\n    },\n    {\n      name: 'onDragLeave',\n      propType: 'func',\n      description:\n        '拖拽节点离开目标节点时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点',\n    },\n    {\n      name: 'onDragEnd',\n      propType: 'func',\n      description:\n        '拖拽节点拖拽结束时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点',\n    },\n    {\n      name: 'onDrop',\n      propType: 'func',\n      description:\n        '拖拽节点放入目标节点内或前后触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点\\n@param {Object} info.dragNode 拖拽的节点\\n@param {Array} info.dragNodesKeys 拖拽的节点和其子节点 key 的数组\\n@param {Number} info.dropPosition 放置位置，-1代表当前节点前，0代表当前节点里，1代表当前节点后',\n    },\n    {\n      name: 'canDrop',\n      propType: 'func',\n      description: '节点是否可被作为拖拽的目标节点',\n    },\n    {\n      name: 'loadData',\n      propType: 'func',\n      description: '异步加载数据的函数',\n    },\n    {\n      name: 'filterTreeNode',\n      propType: 'func',\n      description: '按需筛选高亮节点',\n    },\n    {\n      name: 'onRightClick',\n      propType: 'func',\n      description: '右键点击节点时触发的回调函数',\n    },\n    {\n      name: 'isLabelBlock',\n      propType: 'bool',\n      description:\n        '设置节点是否占满剩余空间，一般用于统一在各节点右侧添加元素(借助 flex 实现，暂时只支持 ie10+)',\n      defaultValue: false,\n    },\n    {\n      name: 'isNodeBlock',\n      propType: 'bool',\n      description: '设置节点是否占满一行',\n      defaultValue: false,\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '是否开启展开收起动画',\n      defaultValue: true,\n    },\n    {\n      name: 'focusedKey',\n      propType: 'string',\n      description: '当前获得焦点的子菜单或菜单项 key 值',\n    },\n    {\n      name: 'renderChildNodes',\n      propType: 'func',\n      description: '渲染子节点',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n      description: '是否开启虚拟滚动',\n    },\n    {\n      name: 'onItemFocus',\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n    {\n      name: 'onItemKeyDown',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'showLine',\n        title: '类型',\n        defaultValue: false,\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '普通',\n                value: false,\n              },\n              {\n                label: '线性树',\n                value: true,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'isNodeBlock',\n        title: '选择模式',\n        defaultValue: false,\n        condition: (target) => !target?.parent?.getPropValue('showLine'),\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '节点',\n                value: true,\n              },\n              {\n                label: '标签',\n                value: false,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'multiple',\n        title: '支持多选',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description: '是否支持多选',\n        defaultValue: false,\n      },\n      {\n        name: 'checkable',\n        title: '复选框',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description: '是否支持勾选节点的复选框',\n        defaultValue: false,\n      },\n      {\n        name: 'editable',\n        title: '支持编辑',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'draggable',\n        title: '支持拖拽',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'selectable',\n        title: '支持选中',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          let keys = { selected: [], expanded: [] };\n          const parsedValue = createDataSource(parseData(value, { parseContent: true }), keys);\n          target.parent.setPropValue('dataSource', parsedValue);\n          if (keys && keys.selected) {\n            target.parent.setPropValue('selectedKeys', keys.selected);\n          }\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n          },\n        },\n      },\n      // {\n      //   name: \"defaultExpandedKeys\",\n      //   display: \"block\",\n      //   title: \"默认展开的节点\",\n      //   setter: \"JsonSetter\",\n      //   supportVariable: true\n      // },\n      // {\n      //   name: \"defaultSelectedKeys\",\n      //   display: \"block\",\n      //   title: \"默认选中的节点\",\n      //   setter: \"JsonSetter\",\n      //   supportVariable: true\n      // }\n    ],\n    supports: {\n      style: true,\n      events: ['onSelect', 'onCheck', 'onExpand'],\n    },\n  },\n  icon: '',\n  category: '信息展示',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Tree',\n  title: '树形控件',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tree',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'object',\n      },\n      description: '数据源，该属性优先级高于 children',\n    },\n    {\n      name: 'showLine',\n      propType: 'bool',\n      description: '是否显示树的线',\n      defaultValue: false,\n    },\n    {\n      name: 'selectable',\n      propType: 'bool',\n      description: '是否支持选中节点',\n      defaultValue: true,\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description:\n        '选中或取消选中节点时触发的回调函数\\n@param {Array} selectedKeys 选中节点key的数组\\n@param {Object} extra 额外参数\\n@param {Array} extra.selectedNodes 选中节点的数组\\n@param {Object} extra.node 当前操作的节点\\n@param {Boolean} extra.selected 当前操作是否是选中',\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否支持多选',\n      defaultValue: false,\n    },\n    {\n      name: 'checkable',\n      propType: 'bool',\n      description: '是否支持勾选节点的复选框',\n      defaultValue: false,\n    },\n    {\n      name: 'checkStrictly',\n      propType: 'bool',\n      description: '勾选节点复选框是否完全受控（父子节点选中状态不再关联）',\n      defaultValue: false,\n    },\n    {\n      name: 'checkedStrategy',\n      propType: {\n        type: 'oneOf',\n        value: ['all', 'parent', 'child'],\n      },\n      description:\n        '定义选中时回填的方式\\n@enumdesc 返回所有选中的节点, 父子节点都选中时只返回父节点, 父子节点都选中时只返回子节点',\n      defaultValue: 'all',\n    },\n    {\n      name: 'onCheck',\n      propType: 'func',\n      description:\n        '勾选或取消勾选复选框时触发的回调函数\\n@param {Array} checkedKeys 勾选复选框节点key的数组\\n@param {Object} extra 额外参数\\n@param {Array} extra.checkedNodes 勾选复选框节点的数组\\n@param {Array} extra.checkedNodesPositions 包含有勾选复选框节点和其位置的对象的数组\\n@param {Array} extra.indeterminateKeys 半选复选框节点 key 的数组\\n@param {Object} extra.node 当前操作的节点\\n@param {Boolean} extra.checked 当前操作是否是勾选',\n    },\n    {\n      name: 'defaultExpandAll',\n      propType: 'bool',\n      description: '是否默认展开所有节点',\n      defaultValue: false,\n    },\n    {\n      name: 'autoExpandParent',\n      propType: 'bool',\n      description: '是否自动展开父节点，建议受控时设置为false',\n      defaultValue: true,\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n      description:\n        '展开或收起节点时触发的回调函数\\n@param {Array} expandedKeys 展开的节点key的数组\\n@param {Object} extra 额外参数\\n@param {Object} extra.node 当前操作的节点\\n@param {Boolean} extra.expanded 当前操作是否是展开',\n    },\n    {\n      name: 'editable',\n      propType: 'bool',\n      description: '是否支持编辑节点内容',\n      defaultValue: false,\n    },\n    {\n      name: 'onEditFinish',\n      propType: 'func',\n      description:\n        '编辑节点内容完成时触发的回调函数\\n@param {String} key 编辑节点的 key\\n@param {String} label 编辑节点完成时节点的文本\\n@param {Object} node 当前编辑的节点',\n    },\n    {\n      name: 'draggable',\n      propType: 'bool',\n      description: '是否支持拖拽节点',\n      defaultValue: false,\n    },\n    {\n      name: 'onDragStart',\n      propType: 'func',\n      description:\n        '开始拖拽节点时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 拖拽的节点',\n    },\n    {\n      name: 'onDragEnter',\n      propType: 'func',\n      description:\n        '拖拽节点进入目标节点时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点\\n@param {Array} info.expandedKeys 当前展开的节点key的数组',\n    },\n    {\n      name: 'onDragOver',\n      propType: 'func',\n      description:\n        '拖拽节点在目标节点上移动的时候触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点',\n    },\n    {\n      name: 'onDragLeave',\n      propType: 'func',\n      description:\n        '拖拽节点离开目标节点时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点',\n    },\n    {\n      name: 'onDragEnd',\n      propType: 'func',\n      description:\n        '拖拽节点拖拽结束时触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点',\n    },\n    {\n      name: 'onDrop',\n      propType: 'func',\n      description:\n        '拖拽节点放入目标节点内或前后触发的回调函数\\n@param {Object} info 拖拽信息\\n@param {Object} info.event 事件对象\\n@param {Object} info.node 目标节点\\n@param {Object} info.dragNode 拖拽的节点\\n@param {Array} info.dragNodesKeys 拖拽的节点和其子节点 key 的数组\\n@param {Number} info.dropPosition 放置位置，-1代表当前节点前，0代表当前节点里，1代表当前节点后',\n    },\n    {\n      name: 'canDrop',\n      propType: 'func',\n      description: '节点是否可被作为拖拽的目标节点',\n    },\n    {\n      name: 'loadData',\n      propType: 'func',\n      description: '异步加载数据的函数',\n    },\n    {\n      name: 'filterTreeNode',\n      propType: 'func',\n      description: '按需筛选高亮节点',\n    },\n    {\n      name: 'onRightClick',\n      propType: 'func',\n      description: '右键点击节点时触发的回调函数',\n    },\n    {\n      name: 'isLabelBlock',\n      propType: 'bool',\n      description:\n        '设置节点是否占满剩余空间，一般用于统一在各节点右侧添加元素(借助 flex 实现，暂时只支持 ie10+)',\n      defaultValue: false,\n    },\n    {\n      name: 'isNodeBlock',\n      propType: 'bool',\n      description: '设置节点是否占满一行',\n      defaultValue: false,\n    },\n    {\n      name: 'animation',\n      propType: 'bool',\n      description: '是否开启展开收起动画',\n      defaultValue: true,\n    },\n    {\n      name: 'focusedKey',\n      propType: 'string',\n      description: '当前获得焦点的子菜单或菜单项 key 值',\n    },\n    {\n      name: 'renderChildNodes',\n      propType: 'func',\n      description: '渲染子节点',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n      description: '是否开启虚拟滚动',\n    },\n    {\n      name: 'onItemFocus',\n      propType: 'func',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n    },\n    {\n      name: 'onItemKeyDown',\n      propType: 'func',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props: [\n      {\n        name: 'dataSource',\n        title: '节点数据',\n        setter: 'JsonSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'showLine',\n        title: '显示线',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        name: 'multiple',\n        title: '支持多选',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description: '是否支持多选',\n        defaultValue: false,\n      },\n      {\n        name: 'checkable',\n        title: '复选框',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description: '是否支持勾选节点的复选框',\n        defaultValue: false,\n      },\n      {\n        name: 'editable',\n        title: '支持编辑',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'draggable',\n        title: '支持拖拽',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'selectable',\n        title: '支持选中',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        defaultValue: false,\n      },\n      {\n        name: 'defaultExpandedKeys',\n        display: 'block',\n        title: '默认展开的节点',\n        setter: 'JsonSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'defaultSelectedKeys',\n        display: 'block',\n        title: '默认选中的节点',\n        setter: 'JsonSetter',\n        supportVariable: true,\n      },\n    ],\n    supports: {\n      style: true,\n      events: ['onSelect', 'onCheck', 'onExpand'],\n    },\n  },\n  icon: '',\n  category: '信息展示',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree/snippets.design.ts",
    "content": "import parseData from '../utils/parse-data';\nimport { createDataSource } from './adaptor';\n\nconst plainData = 'children\\n\\t123\\n\\t*[ashbin]333\\n\\t-222';\nconst keys = { selected: [], expanded: [] };\nconst dataSource = createDataSource(parseData(plainData, { parseContent: true }), keys);\n\nexport default [\n  {\n    title: '树形控件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tree.png',\n    schema: {\n      componentName: 'Tree',\n      props: {\n        prefix: 'next-',\n        selectable: true,\n        selectedKeys: keys.selected,\n        defaultExpandAll: true,\n        checkedStrategy: 'all',\n        autoExpandParent: true,\n        animation: true,\n        focusable: true,\n        plainData,\n        dataSource,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree/snippets.ts",
    "content": "import parseData from '../utils/parse-data';\nimport { createDataSource } from './adaptor';\n\nconst plainData = 'children\\n\\t123\\n\\t*[ashbin]333\\n\\t-222';\nconst keys = { selected: [], expanded: [] };\nconst dataSource = createDataSource(parseData(plainData, { parseContent: true }), keys);\n\nexport default [\n  {\n    title: '树形控件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tree.png',\n    schema: {\n      componentName: 'Tree',\n      props: {\n        prefix: 'next-',\n        selectable: true,\n        defaultExpandAll: true,\n        checkedStrategy: 'all',\n        autoExpandParent: true,\n        animation: true,\n        focusable: true,\n        plainData,\n        dataSource,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree-node/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'TreeNode',\n  title: '树形控件节点',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Tree',\n    main: '',\n    destructuring: true,\n    subName: 'Node',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '树节点',\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'node'],\n      },\n      description: '节点文本内容',\n      defaultValue: '---',\n    },\n    {\n      name: 'selectable',\n      propType: 'bool',\n      description: '单独设置是否支持选中，覆盖 Tree 的 selectable',\n    },\n    {\n      name: 'checkable',\n      propType: 'bool',\n      description: '单独设置是否出现复选框，覆盖 Tree 的 checkable',\n    },\n    {\n      name: 'editable',\n      propType: 'bool',\n      description: '单独设置是否支持编辑，覆盖 Tree 的 editable',\n    },\n    {\n      name: 'draggable',\n      propType: 'bool',\n      description: '单独设置是否支持拖拽，覆盖 Tree 的 draggable',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁止节点响应',\n      defaultValue: false,\n    },\n    {\n      name: 'checkboxDisabled',\n      propType: 'bool',\n      description: '是否禁止勾选节点复选框',\n      defaultValue: false,\n    },\n    {\n      name: 'isLeaf',\n      propType: 'bool',\n      description: '是否是叶子节点',\n      defaultValue: false,\n    },\n  ],\n  icon: '',\n  category: '信息输入',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree-select/adaptor.ts",
    "content": "export const createDataSource = (\n  list,\n  keys = { selected: [], expanded: [] },\n  level = 0,\n  prefix = '',\n) => {\n  const array = [];\n  let index = 0;\n\n  list.forEach((item) => {\n    const key = `${prefix || level}-${index++}`;\n\n    if (item.children && item.children.length > 0) {\n      item.children = createDataSource(item.children, keys, level + 1, key);\n    }\n    array.push({\n      label: item.value,\n      value: key,\n      disabled: item.state === 'disabled',\n      key,\n      children: item.children,\n    });\n\n    if (item.state === 'active') {\n      if (item.children && item.children.length > 0) {\n        keys.expanded.push(key);\n      } else {\n        keys.selected.push(key);\n      }\n    }\n\n    return;\n  });\n\n  return array;\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree-select/meta.design.ts",
    "content": "import snippets from './snippets.design';\nimport parseData from '../utils/parse-data';\nimport { createDataSource } from './adaptor';\n\nexport default {\n  group: '原子组件',\n  componentName: 'TreeSelect',\n  title: '树型选择控件',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'TreeSelect',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    component: {\n      rootSelector: 'span.next-select',\n    },\n    props: [\n      {\n        name: 'visible',\n        title: {\n          label: '状态',\n          tip: '属性: visible',\n        },\n        defaultValue: true,\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            defaultValue: 'single',\n            options: [\n              { value: false, title: '普通' },\n              { value: true, title: '展开' },\n            ],\n          },\n        },\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Button Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 按钮尺寸',\n            en_US: 'prop: size | description: button size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '小',\n                value: 'small',\n              },\n              {\n                label: '中',\n                value: 'medium',\n              },\n              {\n                label: '大',\n                value: 'large',\n              },\n            ],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'hasBorder',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示边框',\n            en_US: 'ShowBorder',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasBorder | 说明: 是否有边框',\n            en_US: 'prop: hasBorder | description: HasBorder',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '无',\n                value: false,\n              },\n              {\n                label: '有',\n                value: true,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'style.width',\n        title: '宽度',\n        setter: 'NumberSetter',\n        setValue: (target) => {\n          const visible = target.parent.getPropValue('visible');\n          if (!visible) return;\n          target.parent.setPropValue('visible', false);\n          setTimeout(() => {\n            target.parent.setPropValue('visible', true);\n          }, 300);\n        },\n      },\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: 'label|输入框内置标签',\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: '属性: placeholder',\n        },\n        defaultValue: '请选择', // 不生效\n        setter: 'StringSetter',\n      },\n      {\n        name: 'showSearch',\n        title: {\n          label: '可搜索',\n          tip: '属性: showSearch',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'treeCheckable',\n        title: {\n          label: '复选框',\n          tip: '属性: treeCheckable',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'plainData',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setValue: (target, value) => {\n          const list = parseData(value).filter(({ type }) => 'node' === type);\n          const keys = { selected: [], expanded: [] };\n          const dataSource = createDataSource(list, keys);\n          target.parent.setPropValue('dataSource', dataSource);\n          target.parent.setPropValue('value', keys.selected);\n        },\n        setter: {\n          componentName: 'MagicEditorSetter',\n          props: {\n            toolbar: ['normal', 'active', 'disable'],\n          },\n        },\n      },\n    ],\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          propType: 'func',\n          description: '值发生变化',\n        },\n        {\n          name: 'onVisibleChange',\n          propType: 'func',\n          description: '弹层显示隐藏变化',\n        },\n        {\n          name: 'onRemove',\n          propType: 'func',\n          description: 'Tag 被删除',\n        },\n        {\n          name: 'onSearch',\n          propType: 'func',\n          description: '搜索',\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree-select/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'TreeSelect',\n  title: '树型选择控件',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'TreeSelect',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'Json',\n      },\n      description: '数据源',\n    },\n    {\n      name: 'size',\n      title: '尺寸',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '选择框大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'placeholder',\n      title: '占位提示',\n      propType: 'string',\n      description: '选择框占位符',\n    },\n    {\n      name: 'label',\n      title: '内联文案',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '自定义内联label',\n    },\n    {\n      name: 'notFoundContent',\n      title: '空提示',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '无数据时显示内容',\n      defaultValue: 'Not Found',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'hasArrow',\n      title: '下拉箭头',\n      propType: 'bool',\n      description: '是否有下拉箭头',\n      defaultValue: true,\n    },\n    {\n      name: 'hasBorder',\n      title: '边框',\n      propType: 'bool',\n      description: '是否有边框',\n      defaultValue: true,\n    },\n    {\n      name: 'hasClear',\n      title: '清空按钮',\n      propType: 'bool',\n      description: '是否有清空按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'autoWidth',\n      propType: 'bool',\n      description: '下拉框是否与选择器对齐',\n      defaultValue: true,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时触发的回调函数\\n@param {String|Array} value 选中的值，单选时返回单个值，多选时返回数组\\n@param {Object|Array} data 选中的数据，包括 value, label, pos, key属性，单选时返回单个值，多选时返回数组，父子节点选中关联时，同时选中，只返回父节点',\n    },\n    {\n      name: 'showSearch',\n      propType: 'bool',\n      description: '搜索框',\n      defaultValue: false,\n    },\n    {\n      name: 'onSearch',\n      propType: 'func',\n      description: '在搜索框中输入时触发的回调函数\\n@param {String} keyword 输入的关键字',\n    },\n    {\n      name: 'onSearchClear',\n      propType: 'func',\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '支持多选',\n      defaultValue: false,\n    },\n    {\n      name: 'treeCheckable',\n      propType: 'bool',\n      description: '下拉框中的树是否支持勾选节点的复选框',\n      defaultValue: false,\n    },\n    {\n      name: 'treeCheckStrictly',\n      propType: 'bool',\n      description: '下拉框中的树勾选节点复选框是否完全受控（父子节点选中状态不再关联）',\n      defaultValue: false,\n    },\n    {\n      name: 'treeCheckedStrategy',\n      propType: {\n        type: 'oneOf',\n        value: ['all', 'parent', 'child'],\n      },\n      description:\n        '定义选中时回填的方式\\n@enumdesc 返回所有选中的节点, 父子节点都选中时只返回父节点, 父子节点都选中时只返回子节点',\n      defaultValue: 'parent',\n    },\n    {\n      name: 'treeDefaultExpandAll',\n      propType: 'bool',\n      description: '下拉框中的树是否默认展开所有节点',\n      defaultValue: false,\n    },\n    {\n      name: 'treeLoadData',\n      propType: 'func',\n      description:\n        '下拉框中的树异步加载数据的函数，使用请参考[Tree的异步加载数据Demo](https://fusion.design/component/tree)\\n@param {ReactElement} node 被点击展开的节点',\n    },\n    {\n      name: 'treeProps',\n      propType: {\n        type: 'Json',\n      },\n      description: '透传到 Tree 的属性对象',\n    },\n    {\n      name: 'defaultVisible',\n      title: '初始显示',\n      propType: 'bool',\n      description: '初始下拉框是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '当前下拉框是否显示',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '下拉框显示或关闭时触发事件的回调函数\\n@param {Boolean} visible 是否显示\\n@param {String} type 触发显示关闭的操作类型',\n    },\n    {\n      name: 'popupStyle',\n      propType: {\n        type: 'object',\n      },\n      description: '下拉框自定义样式对象',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '下拉框样式自定义类名',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '下拉框挂载的容器节点',\n    },\n    {\n      name: 'popupProps',\n      propType: {\n        type: 'object',\n      },\n      description: '透传到 Popup 的属性对象',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {Array<data>} value 选择值 { label: , value:}',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n      description: '是否开启虚拟滚动',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      type: 'group',\n      title: '高级',\n      display: 'block',\n      items: [\n        {\n          name: 'id',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '唯一标识',\n              en_US: 'ID',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: id | 说明: 唯一标识',\n              en_US: 'prop: id | description: switch id',\n            },\n          },\n          setter: 'StringSetter',\n          supportVariable: true,\n        },\n        {\n          name: 'name',\n          title: {\n            label: {\n              type: 'i18n',\n              zh_CN: '表单标识',\n              en_US: 'Name',\n            },\n            tip: {\n              type: 'i18n',\n              zh_CN: '属性: name | 说明: 表单标识',\n              en_US: 'prop: name | description: switch name',\n            },\n          },\n          setter: 'StringSetter',\n          supportVariable: true,\n        },\n      ],\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'visible',\n          condition: () => false,\n        },\n        {\n          name: 'autoWidth',\n          condition: () => false,\n        },\n        {\n          name: 'useVirtual',\n          condition: () => false,\n        },\n        {\n          name: 'renderPreview',\n          condition: () => false,\n        },\n        {\n          name: 'followTrigger',\n          condition: () => false,\n        },\n        {\n          name: 'popupStyle',\n          condition: () => false,\n        },\n        {\n          name: 'popupClassName',\n          condition: () => false,\n        },\n        {\n          name: 'popupContainer',\n          condition: () => false,\n        },\n        {\n          name: 'popupProps',\n          condition: () => false,\n        },\n        {\n          name: 'treeCheckable',\n          condition: () => false,\n        },\n        {\n          name: 'treeCheckStrictly',\n          condition: () => false,\n        },\n        {\n          name: 'treeCheckedStrategy',\n          condition: () => false,\n        },\n        {\n          name: 'treeDefaultExpandAll',\n          condition: () => false,\n        },\n        {\n          name: 'treeLoadData',\n          condition: () => false,\n        },\n        {\n          name: 'treeProps',\n          condition: () => false,\n        },\n        {\n          name: 'label',\n          title: '内联文案',\n          setter: {\n            componentName: 'StringSetter',\n          },\n        },\n        {\n          name: 'dataSource',\n          title: {\n            label: '节点数据',\n            tip: '数据源',\n          },\n          setter: 'JsonSetter',\n          supportVariable: true,\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '信息输入',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree-select/snippets.design.ts",
    "content": "import parseData from '../utils/parse-data';\nimport { createDataSource } from './adaptor';\n\nconst plainData =\n  '*Trunk\\n\\t-Branch\\n\\t\\t*Branch\\n\\t\\t\\tLeaf\\n\\t\\tLeaf\\n\\t*Branch\\n\\t\\tLeaf\\n\\t\\tLeaf';\nconst list = parseData(plainData).filter(({ type }) => 'node' === type);\nconst keys = { selected: [], expanded: [] };\nconst dataSource = createDataSource(list, keys);\n\nexport default [\n  {\n    title: '树型选择控件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_select.png',\n    schema: {\n      componentName: 'TreeSelect',\n      props: {\n        mode: 'single',\n        hasArrow: true,\n        cacheValue: true,\n        visible: true,\n        plainData,\n        dataSource,\n        value: keys.selected,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/tree-select/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '树型选择控件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tree-select.png',\n    schema: {\n      componentName: 'TreeSelect',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n        hasArrow: true,\n        hasBorder: true,\n        autoWidth: true,\n        notFoundContent: 'Not Found',\n        treeCheckedStrategy: 'parent',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/typography/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Typography',\n  title: 'Text',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Typography',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'component',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n      description: '设置标签类型',\n      defaultValue: 'article',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'children',\n      title: '内容',\n      propType: 'string',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n  },\n  icon: '',\n  category: '常用',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/typography-text/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Typography.Text',\n  title: 'Text',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Typography',\n    main: '',\n    destructuring: true,\n    subName: 'Text',\n  },\n  props: [\n    {\n      name: 'children',\n      propType: 'string',\n    },\n    {\n      name: 'delete',\n      propType: 'bool',\n      description: '添加删除线样式',\n      defaultValue: false,\n    },\n    {\n      name: 'mark',\n      propType: 'bool',\n      description: '添加标记样式',\n      defaultValue: false,\n    },\n    {\n      name: 'underline',\n      propType: 'bool',\n      description: '添加下划线样式',\n      defaultValue: false,\n    },\n    {\n      name: 'strong',\n      propType: 'bool',\n      description: '是否加粗',\n      defaultValue: false,\n    },\n    {\n      name: 'code',\n      propType: 'bool',\n      description: '添加代码样式',\n      defaultValue: false,\n    },\n    {\n      name: 'component',\n      propType: {\n        type: 'oneOf',\n        value: ['span', 'h1', 'h2', 'h3', 'h4'],\n      },\n      description: '设置标签类型',\n      defaultValue: 'span',\n    },\n    {\n      name: 'onClick',\n      propType: 'func',\n      description: '鼠标点击',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'children',\n        setter: 'TextAreaSetter',\n        supportVariable: true,\n      },\n    ],\n    advanced: {\n      callbacks: {\n        onHoverHook: () => false,\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n        onMove: () => false,\n      },\n    },\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/upload/meta.design.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Upload',\n  title: '上传',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Upload',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'action',\n      propType: 'string',\n      description: '上传的地址',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'Json',\n      },\n      description: '文件列表',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'object',\n      description: '默认文件列表',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['card'],\n      },\n      description: '上传按钮形状',\n    },\n    {\n      name: 'listType',\n      propType: {\n        type: 'oneOf',\n        value: ['text', 'image', 'card'],\n      },\n      description: '上传列表的样式',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: '文件名字段',\n    },\n    {\n      name: 'data',\n      propType: {\n        type: 'oneOfType',\n        value: ['object', 'func'],\n      },\n      description: '上传额外传参',\n    },\n    {\n      name: 'formatter',\n      propType: 'func',\n      title: {\n        label: '数据格式化函数',\n        tip: '数据格式化函数，配合自定义 action 使用，参数为服务器的响应数据，详见 [formatter](#formater)\\n@param {Object} response 返回\\n@param {File} file 文件对象',\n      },\n    },\n    {\n      name: 'limit',\n      propType: 'number',\n      description: '最大文件上传个数',\n      defaultValue: null,\n    },\n    {\n      name: 'timeout',\n      propType: 'number',\n      description: '设置上传超时,单位ms',\n    },\n    {\n      name: 'dragable',\n      propType: 'bool',\n      description: '可选参数，是否支持拖拽上传，`ie10+` 支持。',\n    },\n    {\n      name: 'useDataURL',\n      propType: 'bool',\n      description: '可选参数，是否本地预览',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '可选参数，是否禁用上传功能',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择文件回调',\n    },\n    {\n      name: 'onProgress',\n      propType: 'func',\n      description: '上传中',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '上传文件改变时的状态\\n@param {Object} info 文件事件对象',\n    },\n    {\n      name: 'onSuccess',\n      propType: 'func',\n      description:\n        '可选参数，上传成功回调函数，参数为请求下响应信息以及文件\\n@param {Object} file 文件\\n@param {Array<Object>} value 值',\n    },\n    {\n      name: 'afterSelect',\n      propType: 'func',\n      description:\n        '可选参数, 用于校验文件,afterSelect仅在 autoUpload=false 的时候生效,autoUpload=true时,可以使用beforeUpload完全可以替代该功能.\\n@param {Object} file\\n@returns {Boolean} 返回false会阻止上传,其他则表示正常',\n    },\n    {\n      name: 'onRemove',\n      propType: 'func',\n      description:\n        '移除文件回调函数\\n@param {Object} file 文件\\n@returns {Boolean|Promise} 返回 false、Promise.resolve(false)、 Promise.reject() 将阻止文件删除',\n    },\n    {\n      name: 'onError',\n      propType: 'func',\n      description:\n        '可选参数，上传失败回调函数，参数为上传失败的信息、响应信息以及文件\\n@param {Object} file 出错的文件\\n@param {Array} value 当前值',\n    },\n    {\n      name: 'beforeUpload',\n      propType: 'func',\n      title: {\n        label: '开始上传时回调',\n        tip: '可选参数, 详见 [beforeUpload](#beforeUpload)\\n@param {Object} file 所有文件\\n@param {Object} options 参数\\n@returns {Boolean|Object|Promise} 返回值作用见demo',\n      },\n    },\n    {\n      name: 'onDrop',\n      propType: 'func',\n      description: '放文件',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'autoUpload',\n      propType: 'bool',\n      description: '自动上传',\n      defaultValue: true,\n    },\n    {\n      name: 'request',\n      propType: 'func',\n      description:\n        '自定义上传方法\\n@param {Object} option\\n@return {Object} object with abort method',\n    },\n    {\n      name: 'progressProps',\n      propType: 'object',\n      description: '透传给Progress props',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'shape',\n        title: '类型',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '默认',\n                value: '',\n              },\n              {\n                title: '卡片',\n                value: 'card',\n              },\n            ],\n          },\n        },\n        description: '上传按钮形状',\n      },\n      {\n        name: 'listType',\n        title: '列表样式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                label: '文本',\n                value: 'text',\n              },\n              {\n                label: '图片',\n                value: 'image',\n              },\n              {\n                label: '卡片',\n                value: 'card',\n              },\n            ],\n          },\n        },\n        defaultValue: 'text',\n        description: '上传列表的样式',\n      },\n      {\n        name: 'limit',\n        title: '数量限制',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/upload/meta.ts",
    "content": "import snippets from './snippets';\n\nexport default {\n  group: '原子组件',\n  componentName: 'Upload',\n  title: '上传',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Upload',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'action',\n      propType: 'string',\n      description: '上传的地址',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'Json',\n      },\n      description: '文件列表',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'object',\n      description: '默认文件列表',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['card'],\n      },\n      description: '上传按钮形状',\n    },\n    {\n      name: 'listType',\n      propType: {\n        type: 'oneOf',\n        value: ['text', 'image', 'card'],\n      },\n      description: '上传列表的样式',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: '文件名字段',\n    },\n    {\n      name: 'data',\n      propType: {\n        type: 'oneOfType',\n        value: ['object', 'func'],\n      },\n      description: '上传额外传参',\n    },\n    {\n      name: 'formatter',\n      propType: 'func',\n      title: {\n        label: '数据格式化函数',\n        tip: '数据格式化函数，配合自定义 action 使用，参数为服务器的响应数据，详见 [formatter](#formater)\\n@param {Object} response 返回\\n@param {File} file 文件对象',\n      },\n    },\n    {\n      name: 'limit',\n      propType: 'number',\n      description: '最大文件上传个数',\n      defaultValue: null,\n    },\n    {\n      name: 'timeout',\n      propType: 'number',\n      description: '设置上传超时,单位ms',\n    },\n    {\n      name: 'dragable',\n      propType: 'bool',\n      description: '可选参数，是否支持拖拽上传，`ie10+` 支持。',\n    },\n    {\n      name: 'useDataURL',\n      propType: 'bool',\n      description: '可选参数，是否本地预览',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '可选参数，是否禁用上传功能',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择文件回调',\n    },\n    {\n      name: 'onProgress',\n      propType: 'func',\n      description: '上传中',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '上传文件改变时的状态\\n@param {Object} info 文件事件对象',\n    },\n    {\n      name: 'onSuccess',\n      propType: 'func',\n      description:\n        '可选参数，上传成功回调函数，参数为请求下响应信息以及文件\\n@param {Object} file 文件\\n@param {Array<Object>} value 值',\n    },\n    {\n      name: 'afterSelect',\n      propType: 'func',\n      description:\n        '可选参数, 用于校验文件,afterSelect仅在 autoUpload=false 的时候生效,autoUpload=true时,可以使用beforeUpload完全可以替代该功能.\\n@param {Object} file\\n@returns {Boolean} 返回false会阻止上传,其他则表示正常',\n    },\n    {\n      name: 'onRemove',\n      propType: 'func',\n      description:\n        '移除文件回调函数\\n@param {Object} file 文件\\n@returns {Boolean|Promise} 返回 false、Promise.resolve(false)、 Promise.reject() 将阻止文件删除',\n    },\n    {\n      name: 'onError',\n      propType: 'func',\n      description:\n        '可选参数，上传失败回调函数，参数为上传失败的信息、响应信息以及文件\\n@param {Object} file 出错的文件\\n@param {Array} value 当前值',\n    },\n    {\n      name: 'beforeUpload',\n      propType: 'func',\n      title: {\n        label: '开始上传时回调',\n        tip: '可选参数, 详见 [beforeUpload](#beforeUpload)\\n@param {Object} file 所有文件\\n@param {Object} options 参数\\n@returns {Boolean|Object|Promise} 返回值作用见demo',\n      },\n    },\n    {\n      name: 'onDrop',\n      propType: 'func',\n      description: '放文件',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'autoUpload',\n      propType: 'bool',\n      description: '自动上传',\n      defaultValue: true,\n    },\n    {\n      name: 'request',\n      propType: 'func',\n      description:\n        '自定义上传方法\\n@param {Object} option\\n@return {Object} object with abort method',\n    },\n    {\n      name: 'progressProps',\n      propType: 'object',\n      description: '透传给Progress props',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n  ],\n  configure: {\n    props: [\n      {\n        name: 'title',\n        title: '标题',\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'title',\n        title: '标题位置',\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: {\n          componentName: 'JsonSetter',\n        },\n      },\n      {\n        name: 'shape',\n        title: '按钮形状',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '默认',\n                value: '',\n              },\n              {\n                title: '卡片',\n                value: 'card',\n              },\n            ],\n          },\n        },\n        description: '上传按钮形状',\n      },\n      {\n        name: 'listType',\n        title: '列表样式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['text', 'image', 'card'],\n          },\n        },\n        defaultValue: 'text',\n        description: '上传列表的样式',\n      },\n      {\n        name: 'limit',\n        title: '数量限制',\n        setter: 'NumberSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n        supportVariable: true,\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n            supportVariable: true,\n          },\n        ],\n      },\n    ],\n  },\n  icon: '',\n  category: '信息输入',\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/upload/snippets.ts",
    "content": "export default [\n  {\n    title: '上传组件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_upload.png',\n    schema: {\n      componentName: 'Upload',\n      props: {\n        prefix: 'next-',\n        closable: true,\n        autoUpload: true,\n        shape: 'card',\n        defaultValue: [],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/upload-dragger/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Upload.Dragger',\n  title: 'Upload.Dragger',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Upload',\n    main: '',\n    destructuring: true,\n    subName: 'DragUpload',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      description: '样式前缀',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'shape',\n      propType: 'string',\n    },\n    {\n      name: 'onDragOver',\n      propType: 'func',\n    },\n    {\n      name: 'onDragLeave',\n      propType: 'func',\n    },\n    {\n      name: 'onDrop',\n      propType: 'func',\n    },\n    {\n      name: 'limit',\n      propType: 'number',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'listType',\n      propType: 'string',\n    },\n    {\n      name: 'timeout',\n      propType: 'number',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/upload-list/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Upload.List',\n  title: 'Upload.List',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Upload',\n    main: '',\n    destructuring: true,\n    subName: 'List',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n      description: '多语言',\n    },\n    {\n      name: 'listType',\n      propType: {\n        type: 'oneOf',\n        value: ['text', 'image', 'card'],\n      },\n      description: '文件列表，数据格式请参考 文件对象',\n      defaultValue: 'text',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'array',\n      },\n      description: '文件列表',\n      defaultValue: [],\n    },\n    {\n      name: 'closable',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'onRemove',\n      propType: 'func',\n      description: '删除文件回调(支持Promise)',\n    },\n    {\n      name: 'onCancel',\n      propType: 'func',\n      description: '取消上传回调(支持Promise)',\n    },\n    {\n      name: 'onImageError',\n      propType: 'func',\n      description: '头像加载出错回调',\n    },\n    {\n      name: 'onPreview',\n      propType: 'func',\n      description: 'listType=card时点击图片回调',\n    },\n    {\n      name: 'extraRender',\n      propType: 'func',\n      description: '自定义额外渲染',\n    },\n    {\n      name: 'progressProps',\n      propType: 'object',\n      description: '透传给Progress props',\n    },\n    {\n      name: 'children',\n      propType: 'node',\n    },\n    {\n      name: 'uploader',\n      propType: 'any',\n    },\n    {\n      name: 'useDataURL',\n      propType: 'bool',\n      description: '可选参数，是否本地预览',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/upload-selecter/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Upload.Selecter',\n  title: 'Upload.Selecter',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'Upload',\n    main: '',\n    destructuring: true,\n    subName: 'Selecter',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用上传功能',\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否支持多选文件，`ie10+` 支持。开启后按住 ctrl 可选择多个文件',\n      defaultValue: false,\n    },\n    {\n      name: 'dragable',\n      propType: 'bool',\n      description: '是否支持拖拽上传，`ie10+` 支持。',\n    },\n    {\n      name: 'accept',\n      propType: 'string',\n      description:\n        '接受上传的文件类型 (image/png, image/jpg, .doc, .ppt) 详见 [input accept attribute](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input#attr-accept)',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '文件选择回调',\n    },\n    {\n      name: 'onDragOver',\n      propType: 'func',\n      description: '拖拽经过回调',\n    },\n    {\n      name: 'onDragLeave',\n      propType: 'func',\n      description: '拖拽离开回调',\n    },\n    {\n      name: 'onDrop',\n      propType: 'func',\n      description: '拖拽完成回调',\n    },\n    {\n      name: 'children',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      defaultValue: 'file',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/utils/component-wrapper.ts",
    "content": "import * as React from 'react';\n\nconst { createElement } = React;\n\nexport const ValueWrapper = (NextFormComponent: React.ElementType, displayName: string) => {\n  const WrappedComponent = (props: any) => {\n    const { __designMode, value, defaultValue, ...otherProps } = props;\n    const finalValue = __designMode === 'design' ? defaultValue : value;\n    if (typeof finalValue !== 'undefined') {\n      otherProps.value = finalValue;\n    }\n    return createElement(NextFormComponent, { ...otherProps });\n  };\n  WrappedComponent.displayName = displayName;\n  return WrappedComponent;\n};\n\nexport const DynamicPropWrapper = (\n  prop: string,\n  NextFormComponent: React.ElementType,\n  displayName: string,\n) => {\n  const WrappedComponent = (props: any) => {\n    const dynamicProp = prop;\n    const defaultDynamicProp = `default${prop.slice(0, 1).toUpperCase()}${prop.slice(1)}`;\n    const { __designMode, ...otherProps } = props;\n    const dynamicPropValueValue = props[dynamicProp];\n    const defaultDynamicPropValue = props[defaultDynamicProp];\n    const finalValue = __designMode === 'design' ? defaultDynamicPropValue : dynamicPropValueValue;\n    if (typeof finalValue !== 'undefined') {\n      otherProps[dynamicProp] = finalValue;\n    }\n    return createElement(NextFormComponent, { ...otherProps });\n  };\n  WrappedComponent.displayName = displayName;\n  return WrappedComponent;\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/utils/icons.ts",
    "content": "export const Icons = {\n  message:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_message.png',\n  avatar:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_avatar.png',\n  badge:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_badge.png',\n  balloon:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_balloon.png',\n  breadcrumb:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_breadcrumb.png',\n  button:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_button.png',\n  'split-button':\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_split-button.png',\n  card: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_card.png',\n  'cascader-select':\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader-select.png',\n  cascader:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader.png',\n  menu: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_menu.png',\n  'date-picker':\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_date-picker.png',\n  dialog:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_dialog.png',\n  divider:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_divider.png',\n  input:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_input.png',\n  loading:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_loading.png',\n  table:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_table.png',\n  'number-picker':\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_number-picker.png',\n  pagination:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_pagination.png',\n  progress:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_progress.png',\n  radio:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_radio.png',\n  range:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_range.png',\n  rating:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_rating.png',\n  search:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_search.png',\n  select:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_select.png',\n  slider:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_slider.png',\n  step: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_step.png',\n  switch:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_switch.png',\n  tag: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tag.png',\n  'time-picker':\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_time-picker.png',\n  timeline:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_timeline.png',\n  transfer:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_transfer.png',\n  tree: 'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tree.png',\n  'tree-select':\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tree-select.png',\n  upload:\n    'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_upload.png',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/utils/index.ts",
    "content": ""
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/utils/parse-data.ts",
    "content": "export const STATE_MARK: any = {\n  '-': 'disabled',\n  // tslint:disable-next-line:object-literal-sort-keys\n  '*': 'active',\n  '~': 'hover',\n  '': 'normal',\n};\n\nexport enum NodeType {\n  divider = 'divider',\n  node = 'node',\n  comment = 'comment',\n}\n\nexport enum ContentType {\n  text = 'text',\n  icon = 'icon',\n}\n\nexport interface IContent {\n  type: ContentType;\n  value: string;\n}\n\nexport interface INode {\n  type: NodeType;\n  state: string;\n  value: string | IContent[];\n  children: INode[];\n}\n\nexport interface IParseOption {\n  parseContent: boolean;\n}\n\nconst getChildren = (template: string = ''): IContent[] => {\n  if (!template) {\n    return [];\n  }\n\n  return template\n    .replace(/(\\[.*?\\])/g, '\\n$1\\n')\n    .split('\\n')\n    .filter((v) => !!v)\n    .map((d) => {\n      switch (true) {\n        case /^\\[(.*)\\]$/.test(d):\n          return {\n            type: 'icon',\n            value: RegExp.$1,\n          } as IContent;\n        default:\n          return {\n            type: 'text',\n            value: d,\n          } as IContent;\n      }\n    });\n};\n\nexport const parseData = (\n  text: string,\n  options: IParseOption = { parseContent: false },\n): INode[] => {\n  if (!text) {\n    return [];\n  }\n  const root: INode = {\n    type: NodeType.node,\n    state: 'normal',\n    value: '',\n    children: [],\n  };\n  const stack: INode[] = [root];\n\n  text\n    .split('\\n')\n    .filter((line) => line.trim())\n    .forEach((line) => {\n      const re: any = /^(\\t*)([#\\-~*]?)(.*)$/.exec(line);\n      const indent = (re[1] || '').length;\n      const prefix = re[2] || '';\n      const item: INode = {\n        type: NodeType.node,\n        state: 'normal',\n        value: re[3] || '',\n        children: [],\n      };\n\n      if (prefix === '-' && /^-{2,}$/.test(item.value as string)) {\n        item.type = NodeType.divider;\n      } else if (prefix === '#') {\n        item.type = NodeType.comment;\n      } else {\n        item.state = STATE_MARK[prefix];\n      }\n\n      if (item.type === 'node' && options.parseContent) {\n        item.value = getChildren(item.value as string);\n      }\n\n      while (indent <= stack.length - 2) {\n        stack.pop();\n      }\n\n      stack[stack.length - 1].children.push(item);\n      stack.push(item);\n    });\n\n  return root.children;\n};\n\nexport default parseData;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/video/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'Video',\n  title: '视频',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: 'latest',\n    exportName: 'Video',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'src',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '视频链接',\n          en_US: 'Video Address',\n        },\n        tip: {\n          type: 'i18n',\n          zh_CN: '属性: src | 说明: 视频链接',\n          en_US: 'prop: src | description: Video address',\n        },\n      },\n      propType: 'string',\n      defaultValue: 'https://fusion.alicdn.com/fusion-site-2.0/fusion.mp4',\n    },\n    {\n      name: 'autoPlay',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '自动播放',\n          en_US: 'autoPlay',\n        },\n      },\n      propType: 'bool',\n      setter: {\n        componentName: 'BoolSetter',\n      },\n    },\n    {\n      name: 'loop',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '循环播放',\n          en_US: 'loop',\n        },\n      },\n      propType: 'bool',\n    },\n    {\n      name: 'muted',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '静音',\n          en_US: 'muted',\n        },\n      },\n      propType: 'bool',\n    },\n    {\n      name: 'controls',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '控制条',\n          en_US: 'controls',\n        },\n      },\n      propType: 'bool',\n    },\n    {\n      name: 'poster',\n      title: {\n        label: {\n          type: 'i18n',\n          zh_CN: '默认图URL',\n          en_US: 'poster',\n        },\n      },\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: {\n      isExtends: true,\n      override: [\n        {\n          name: 'autoPlay',\n          title: '自动播放',\n          setter: {\n            componentName: 'BoolSetter',\n          },\n          extraProps: {\n            setValue: (target, value) => {\n              if (value) {\n                target.node.setPropValue('muted', true);\n              }\n            },\n          },\n        },\n        {\n          name: 'muted',\n          title: '静音',\n          setter: {\n            componentName: 'BoolSetter',\n          },\n          condition: (target) => {\n            return !target.parent.getPropValue('autoPlay');\n          },\n        },\n      ],\n    },\n  },\n  icon: 'https://img.alicdn.com/imgextra/i4/O1CN01Rc4H6E1KHhpdjKn0n_!!6000000001139-55-tps-56-56.svg',\n  category: '信息展示',\n  snippets: require('./snippets'),\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/video/snippets.ts",
    "content": "module.exports = [\n  {\n    title: '视频',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN01Rc4H6E1KHhpdjKn0n_!!6000000001139-55-tps-56-56.svg',\n    schema: {\n      title: '视频',\n      componentName: 'Video',\n      props: {\n        src: 'https://fusion.alicdn.com/images/page-1.mp4',\n        controls: true,\n        style: {\n          width: '600px',\n        },\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/week-picker/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'WeekPicker',\n  title: 'WeekPicker',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: 'WeekPicker',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '输入框内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: '输入框状态',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'defaultVisibleMonth',\n      propType: 'func',\n      description: '默认展现的月\\n@return {MomentObject} 返回包含指定月份的 moment 对象实例',\n    },\n    {\n      name: 'onVisibleMonthChange',\n      propType: 'func',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY-wo',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '输入框尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} type 触发弹层显示和隐藏的来源 calendarSelect 表示由日期表盘的选择触发； okBtnClick 表示由确认按钮触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式,具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '弹层其他属性',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'inputProps',\n      propType: 'object',\n      description: '输入框其他属性',\n    },\n    {\n      name: 'dateCellRender',\n      propType: 'func',\n      description:\n        '自定义日期渲染函数\\n@param {Object} value 日期值（moment对象）\\n@returns {ReactNode}',\n    },\n    {\n      name: 'monthCellRender',\n      propType: 'func',\n      description:\n        '自定义月份渲染函数\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@returns {ReactNode}',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {MomentObject} value 年份',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n    },\n    {\n      name: 'popupContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/lowcode/year-picker/meta.ts",
    "content": "module.exports = {\n  group: '原子组件',\n  componentName: 'YearPicker',\n  title: 'YearPicker',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alilc/lowcode-materials',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: 'YearPicker',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '输入框内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: '输入框状态',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '输入框尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} reason 触发弹层显示和隐藏的来源 calendarSelect 表示由日期表盘的选择触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式, 具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '弹层其他属性',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'inputProps',\n      propType: 'object',\n      description: '输入框其他属性',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'dateInputAriaLabel',\n      propType: 'string',\n      description: '日期输入框的 aria-label 属性',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {MomentObject} value 年份',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n    },\n    {\n      name: 'popupContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/package.json",
    "content": "{\n  \"name\": \"@alilc/lowcode-materials\",\n  \"version\": \"1.2.1\",\n  \"description\": \"Fusion Next for LowCode\",\n  \"main\": \"lib/index.js\",\n  \"module\": \"es/index.js\",\n  \"lowcodeEditMain\": \"build/lowcode/view.js\",\n  \"stylePath\": \"style.js\",\n  \"scripts\": {\n    \"start\": \"build-scripts start\",\n    \"build\": \"build-scripts build\",\n    \"lowcode:dev\": \"build-scripts start --config ./build.lowcode.js\",\n    \"lowcode:build\": \"build-scripts build --config ./build.lowcode.js\",\n    \"prepublishOnly\": \"npm run build && npm run lowcode:build\",\n    \"beta\": \"npm publish --tag beta\",\n    \"pub\": \"npm publish\"\n  },\n  \"files\": [\n    \"es/\",\n    \"lib/\",\n    \"dist/\",\n    \"build/\",\n    \"lowcode/\",\n    \"lowcode_lib/\",\n    \"lowcode_es/\"\n  ],\n  \"resolutions\": {\n    \"webpack\": \"4.x\"\n  },\n  \"dependencies\": {\n    \"@alifd/next\": \"^1.24.14\",\n    \"@types/react\": \"^16.14.0\",\n    \"big.js\": \"^6.2.1\",\n    \"lodash\": \"^4.17.21\",\n    \"moment\": \"^2.29.4\",\n    \"@babel/runtime\": \"^7.0.0\"\n  },\n  \"devDependencies\": {\n    \"@alib/build-scripts\": \"^0.1.23\",\n    \"@alifd/build-plugin-lowcode\": \"^0.4.1\",\n    \"@alifd/theme-2\": \"^0.4.4\",\n    \"@types/big.js\": \"^6.1.6\",\n    \"@types/lodash\": \"^4.14.191\",\n    \"build-plugin-component\": \"^1.3.3\",\n    \"build-plugin-fusion\": \"^0.1.3\",\n    \"build-plugin-moment-locales\": \"^0.1.0\",\n    \"moment\": \"^2.20.1\",\n    \"react\": \"^16.14.0\",\n    \"react-dom\": \"^16.14.0\",\n    \"typescript\": \"^3.9.3\"\n  },\n  \"authors\": [\n    {\n      \"name\": \"金禅\"\n    },\n    {\n      \"name\": \"荣彬\"\n    },\n    {\n      \"name\": \"屹凡\"\n    },\n    {\n      \"name\": \"启剑\"\n    },\n    {\n      \"name\": \"春希\"\n    },\n    {\n      \"name\": \"度城\"\n    },\n    {\n      \"name\": \"梧忌\"\n    }\n  ],\n  \"componentConfig\": {\n    \"materialSchema\": \"https://alifd.alicdn.com/npm/@alilc/lowcode-materials@1.2.1/build/lowcode/assets-prod.json\"\n  },\n  \"license\": \"MIT\",\n  \"homepage\": \"https://unpkg.com/@alilc/lowcode-materials@1.2.1/build/index.html\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./es/index.js\",\n      \"require\": \"./lib/index.js\"\n    },\n    \"./prototype\": {\n      \"require\": \"./lowcode_lib/meta.js\",\n      \"import\": \"./lowcode_es/meta.js\"\n    },\n    \"./prototypeView\": {\n      \"require\": \"./lowcode_lib/view.js\",\n      \"import\": \"./lowcode_es/view.js\"\n    },\n    \"./*\": \"./*\"\n  },\n  \"lcMeta\": {\n    \"type\": \"component\"\n  },\n  \"repository\": \"https://github.com/alibaba/lowcode-materials.git\"\n}"
  },
  {
    "path": "packages/fusion-lowcode-materials/plugins/compatible.build.js",
    "content": "const fs = require('fs');\nconst path = require('path');\n\nmodule.exports = ({ onHook }) => {\n  onHook('after.build.compile', (stats) => {\n    fs.writeFileSync(\n      path.resolve('dist/utils.js'),\n      fs.readFileSync(path.resolve('scripts/utils.js')),\n    );\n    fs.writeFileSync(\n      path.resolve('dist/assets.json'),\n      fs.readFileSync(path.resolve('build/lowcode/assets-prod.json')),\n    );\n  });\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/scripts/utils.js",
    "content": "module.exports = {\n  replacer(key, value) {\n    if (typeof value === 'function') {\n      return {\n        type: 'JSFunction',\n        value: String(value),\n      };\n    }\n    return value;\n  },\n  isAsyncFunction: (fn) => {\n    return fn[Symbol.toStringTag] === 'AsyncFunction';\n  },\n  reviewer(key, value) {\n    if (!value) {\n      return value;\n    }\n    if (key === 'icon') {\n      if (typeof value === 'object') {\n        return {\n          type: 'smile',\n          size: 'small',\n        };\n      }\n    }\n    if (typeof value === 'object') {\n      if (value.type === 'JSFunction') {\n        let _value = value.value && value.value.trim();\n        let template = `\n          return function lowcode() {\n            const self = this;\n            try {\n              return (${_value}).apply(self, arguments);\n            } catch(e) {\n              console.log('call function which parsed by lowcode for key ${key} failed: ', e);\n              return e.message;\n            }\n          };`;\n        try {\n          return Function(template)();\n        } catch (e) {\n          if (e && e.message.includes(\"Unexpected token '{'\")) {\n            console.log('method need add funtion prefix');\n            _value = 'function ' + _value;\n            template = `\n            return function lowcode() {\n              const self = this;\n              try {\n                return (${_value}).apply(self, arguments);\n              } catch(e) {\n                console.log('call function which parsed by lowcode for key ${key} failed: ', e);\n                return e.message;\n              }\n            };`;\n            return Function(template)();\n          }\n          console.error('parse lowcode function error: ', e);\n          console.error(value);\n          return value;\n        }\n      }\n    }\n    return value;\n  },\n  toJson(object, replacer) {\n    return JSON.stringify(object, replacer || this.replacer, 2);\n  },\n  parseJson(json) {\n    const input = typeof json === 'string' ? json : JSON.stringify(json);\n    return JSON.parse(input, this.reviewer);\n  },\n  calculateDependencies(schema, componentsMap) {\n    function findComps(schema, componentsMap, dependencies) {\n      dependencies = dependencies || {};\n      if (dependencies[schema.componentName]) {\n        dependencies[schema.componentName].count++;\n      } else {\n        dependencies[schema.componentName] = {\n          count: 1,\n        };\n        if (componentsMap && componentsMap[schema.componentName]) {\n          dependencies[schema.componentName].npm = componentsMap[schema.componentName].package;\n          dependencies[schema.componentName].version = componentsMap[schema.componentName].version;\n        }\n      }\n      if (schema.children && Array.isArray(schema.children)) {\n        schema.children.forEach((child) => {\n          dependencies = Object.assign(dependencies, findComps(child, componentsMap, dependencies));\n        });\n      }\n      return dependencies;\n    }\n    const comps = findComps(schema, componentsMap);\n    const deps = {};\n    Object.keys(comps).forEach((key) => {\n      const comp = comps[key];\n      if (!comp.npm) comp.npm = 'BuiltIn';\n      if (deps[`${comp.npm}${comp.version ? '@' + comp.version : ''}`]) {\n        deps[`${comp.npm}${comp.version ? '@' + comp.version : ''}`][key] = comp.count;\n      } else {\n        deps[`${comp.npm}${comp.version ? '@' + comp.version : ''}`] = {\n          [key]: comp.count,\n        };\n      }\n    });\n    return deps;\n  },\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/balloon/index.tsx",
    "content": "import { Balloon } from '@alifd/next';\n\nconst { Tooltip } = Balloon;\n\nexport default (props = {}) => {\n  const { __designMode, defaultVisible, visible, mode, children, ...otherProps } = props || {};\n  console.log('props: ', props);\n  const RealComponent = mode === 'Tooltip' ? Tooltip : Balloon;\n  let finalValue = __designMode === 'design' ? defaultVisible : visible;\n  const finalProps = { ...otherProps };\n  if (typeof finalValue !== 'undefined') {\n    finalProps.visible = finalValue;\n  }\n  if (typeof defaultVisible !== 'undefined') {\n    finalProps.defaultVisible = defaultVisible;\n  }\n\n  return <RealComponent {...finalProps}>{children}</RealComponent>;\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/calendar/index.tsx",
    "content": "import { Calendar } from '@alifd/next';\n\nexport default (props = {}) => {\n  const { __designMode, defaultValue, value, ...otherProps } = props || {};\n  let finalValue = __designMode === 'design' ? defaultValue : value;\n  const finalProps = { ...otherProps };\n  if (finalValue) {\n    finalProps.value = typeof finalValue === 'string' ? moment(finalValue) : finalValue;\n  }\n  if (defaultValue) {\n    finalProps.defaultValue =\n      typeof defaultValue === 'string' ? moment(defaultValue) : defaultValue;\n  }\n  return <Calendar {...finalProps} />;\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/div/index.tsx",
    "content": "import React, { CSSProperties, forwardRef } from 'react';\n\nconst Div = forwardRef<HTMLDivElement, {className?: string; style: CSSProperties }>((props, ref) => {\n  return (\n    <div className={props.className} style={props.style} ref={ref}>\n      {props.children}\n    </div>\n  )\n})\n\nDiv.displayName = 'Div';\n\nexport default Div;"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/image/index.tsx",
    "content": "import * as React from 'react';\ninterface ImageProps {\n  alt?: string;\n  title?: string;\n  src?: string;\n  style?: object;\n}\n\n/**\n * 文字 字体、大小、行高\n * @param props\n */\nconst Image: React.ForwardRefRenderFunction<HTMLImageElement, ImageProps> = (props, ref) => {\n  return <img {...props} ref={ref} />;\n};\n\nconst RefImage = React.forwardRef(Image);\n\nRefImage.defaultProps = {\n  src: 'https://img.alicdn.com/tps/TB16TQvOXXXXXbiaFXXXXXXXXXX-120-120.svg',\n};\n\nexport default RefImage;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/link/index.tsx",
    "content": "import * as React from 'react';\ninterface LinkProps {\n  target?: string;\n  children?: string;\n  href?: string;\n  style?: object;\n  __designMode?: string;\n}\n\n/**\n * 文字 字体、大小、行高\n * @param props\n */\nconst Link: React.ForwardRefRenderFunction<HTMLAnchorElement, LinkProps> = (props, ref) => {\n  const { children, __designMode, ...others } = props;\n  const otherProps: any = {};\n  if (__designMode === 'design') {\n    otherProps.onClick = (e: Event) => {\n      e.preventDefault();\n    };\n  }\n  return (\n    <a {...others} ref={ref} {...otherProps}>\n      {children}\n    </a>\n  );\n};\n\nconst RefLink = React.forwardRef(Link);\n\nRefLink.defaultProps = {\n  href: 'https://fusion.design',\n  children: '这是一个超链接',\n  target: '_blank',\n};\n\nexport default RefLink;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/field/baseTableField.tsx",
    "content": "import React, { ReactNode } from \"react\";\nimport classnames from 'classnames';\nimport { Field } from \"@alifd/next\";\nimport { Rule } from \"@alifd/next/types/field\";\n\nexport interface IBaseTableFieldProps {\n  name: string;\n  value?: any;\n  onChange: (value: any) => void;\n  nextTablePrefix: string;\n  rules?: Rule;\n}\n\nclass BaseTableField<P = {}> extends React.Component<IBaseTableFieldProps & P> {\n  field: Field;\n  constructor(props: IBaseTableFieldProps & P) {\n    super(props);\n\n    this.field = new Field(this, {\n      onChange: (name, value) => {\n        this.dataChangeHandler(value);\n      },\n    });\n  }\n\n  componentWillMount() {\n    const { name } = this.props;\n\n    this.field.setValue(name, this.convertValueToSet(this.props.value));\n  }\n\n  componentWillReceiveProps(nextProps: IBaseTableFieldProps) {\n    const { name } = this.props;\n\n    this.field.setValue(name, this.convertValueToSet(nextProps.value));\n  }\n\n  validate() {\n    return new Promise((resolve) => {\n      const { name } = this.props;\n\n      this.field.validate([name], (errors) => {\n        resolve(errors);\n      });\n    });\n  }\n\n  convertValueToSet(value: any) {\n    return value;\n  }\n\n  dataChangeHandler(value: any) {\n    const { onChange } = this.props;\n    onChange && onChange(value);\n  }\n\n  renderField(): ReactNode {\n    return null;\n  }\n\n  render() {\n    const { nextTablePrefix, name } = this.props;\n    const field = this.field;\n    const errMsg = field.getError(name);\n    const fieldState = field.getState(name);\n\n    return (\n      <div className={classnames((fieldState === \"error\") ? `${nextTablePrefix}field-has-error` : \"\")}>\n        <div>\n          {this.renderField()}\n        </div>\n        {errMsg ? <div>\n          <div className={`${nextTablePrefix}field-msg`}>{errMsg}</div>\n        </div> : null}\n      </div>\n    );\n  }\n}\n\nexport default BaseTableField;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/field/customField.tsx",
    "content": "import { InitResult, Rule } from \"@alifd/next/types/field\";\nimport { ReactNode } from \"react\";\nimport BaseTableField from \"./baseTableField\";\n\nexport interface ICustomFieldProps {\n  rowData: any;\n  renderField: (props: InitResult<any>, value: any, rowData: any) => ReactNode;\n}\n\nexport default class CustomField extends BaseTableField<ICustomFieldProps> {\n\n  renderField() {\n    const field = this.field;\n    const { nextTablePrefix, value, onChange, rules, name, renderField, rowData, ...rest } = this.props;\n\n    const props = field.init(name, { rules }, rest);\n    delete props.value; // 外部默认为非受控模式\n\n    return renderField(props, value, rowData);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/field/dateField.tsx",
    "content": "import React from \"react\";\nimport Moment, { MomentInput } from \"moment\";\nimport { DatePicker } from \"@alifd/next\";\nimport BaseTableField from \"./baseTableField\";\n\nexport default class DateField extends BaseTableField {\n  convertValueToSet(value: MomentInput) {\n    return value ? Moment(value) : value;\n  }\n\n  dataChangeHandler(value: any) {\n    const { onChange } = this.props;\n    onChange && onChange(value ? value.toDate().getTime() : value);\n  }\n\n  renderField() {\n    const field = this.field;\n    const { nextTablePrefix, value, onChange, rules, name, ...rest } = this.props;\n\n    return (<DatePicker className={`${nextTablePrefix}date-picker`} {...field.init(name, { rules }, rest)} />);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/field/dateRangeField.tsx",
    "content": "import React from \"react\";\nimport Moment, { MomentInput } from \"moment\";\nimport { DatePicker } from \"@alifd/next\";\nimport BaseTableField from \"./baseTableField\";\n\nconst { RangePicker } = DatePicker;\n\nexport default class DateRangeField extends BaseTableField {\n  convertValueToSet(value: { start?: MomentInput; end?: MomentInput }) {\n    const { start, end } = value;\n\n    return [\n      start ? Moment(start) : null,\n      end ? Moment(end) : null,\n    ];\n  }\n\n  dataChangeHandler(value: any) {\n    const { onChange } = this.props;\n\n    if (onChange) {\n      const { 0: start, 1: end } = value;\n\n      onChange && onChange({\n        start: start ? start.toDate().getTime() : undefined,\n        end: end ? end.toDate().getTime() : undefined,\n      });\n    }\n  }\n\n  renderField() {\n    const field = this.field;\n    const { nextTablePrefix, value, onChange, rules, name, ...rest } = this.props;\n\n    return (<RangePicker\n      className={`${nextTablePrefix}date-range-picker`} {...field.init(name, { rules }, rest)} />);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/field/inputField.tsx",
    "content": "import React from \"react\";\nimport { Input } from \"@alifd/next\";\nimport BaseTableField from \"./baseTableField\";\n\nexport default class InputField extends BaseTableField {\n\n  renderField() {\n    const field = this.field;\n    const { nextTablePrefix, value, onChange, rules, name, ...rest } = this.props;\n\n    return (\n      <Input\n        className={`${nextTablePrefix}input`} {...field.init(name, { rules }, rest)} />\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/field/radioField.tsx",
    "content": "import React, { ReactNode } from \"react\";\nimport { Radio } from \"@alifd/next\";\nimport BaseTableField from \"./baseTableField\";\nimport { GroupProps } from \"@alifd/next/types/radio\";\n\nconst RadioGroup = Radio.Group;\n\ninterface IRadioFieldProps {\n  renderChildren?(): GroupProps['children'];\n}\n\nexport default class RadioField extends BaseTableField<IRadioFieldProps> {\n\n  renderField() {\n    const field = this.field;\n    const { nextTablePrefix, value, onChange, rules, name, renderChildren, ...rest } = this.props;\n    if (renderChildren) {\n      return (\n        <RadioGroup className={`${nextTablePrefix}radio-group`} {...field.init(name, { rules }, rest)}>\n          {renderChildren()}\n        </RadioGroup>\n      );\n    }\n    return null;\n\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/field/selectField.tsx",
    "content": "import React from \"react\";\nimport { Select } from \"@alifd/next\";\nimport BaseTableField from \"./baseTableField\";\nimport { SelectProps } from \"@alifd/next/types/select\";\n\ninterface ISelectFieldProps {\n  renderChildren?(): SelectProps['children'];\n}\n\nexport default class SelectField extends BaseTableField<ISelectFieldProps> {\n\n  renderField() {\n    const field = this.field;\n    const { nextTablePrefix, value, onChange, rules, name, renderChildren, ...rest } = this.props;\n\n    return (<Select className={`${nextTablePrefix}select`} {...field.init(name, { rules }, rest)}>\n      {renderChildren ? renderChildren() : null}\n    </Select>);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/webCustomColumnDrawer.tsx",
    "content": "import React from \"react\";\nimport { Drawer, Button, Icon, Message, Checkbox, Switch } from '@alifd/next';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport { Table } from '@alifd/next';\n\nfunction getSelectedRowKeys(columns: IWebCustomColumnDrawerProps['columns'] = []) {\n  const selectedRowKeys: string[] = [];\n\n  columns && columns.forEach((item) => {\n    const { hidden, dataKey } = item;\n\n    if (!hidden && dataKey) {\n      selectedRowKeys.push(dataKey);\n    }\n  });\n\n  return selectedRowKeys;\n}\n\nexport interface IWebCustomColumnDrawerProps {\n  columns?: any[];\n  onOk?: (columns: IWebCustomColumnDrawerProps['columns']) => void;\n  onClose?: () => void;\n  locale?: {\n    [propKey: string]: string;\n  }\n  nextTablePrefix?: string;\n  visible: boolean;\n}\n\ninterface IWebCustomColumnDrawerState {\n  defaultColumns: IWebCustomColumnDrawerProps['columns'];\n  currentColumns: IWebCustomColumnDrawerProps['columns'];\n}\n\nexport default class WebCustomColumnDrawer extends React.Component<IWebCustomColumnDrawerProps, IWebCustomColumnDrawerState> {\n  static defaultProps = {\n    columns: [],\n  };\n\n  constructor(props: IWebCustomColumnDrawerProps) {\n    super(props);\n\n    const { columns } = this.props;\n\n    this.state = {\n      defaultColumns: cloneDeep(columns),\n      currentColumns: cloneDeep(columns),\n    };\n  }\n\n  componentWillReceiveProps(nextProps: IWebCustomColumnDrawerProps) {\n    const { defaultColumns } = this.state;\n    const { columns: nextColumns } = nextProps;\n\n    if (!isEqual(defaultColumns, nextColumns)) {\n      this.setState({\n        defaultColumns: cloneDeep(nextColumns),\n        currentColumns: cloneDeep(nextColumns),\n      });\n    }\n  }\n\n  isHidden(dataKey: string) {\n    const { currentColumns = [] } = this.state;\n\n    const column = currentColumns.find((item) => {\n      return item.dataKey === dataKey;\n    });\n\n    return column ? (!!column.hidden) : false;\n  }\n\n  isLocked(dataKey: string) {\n    const { currentColumns = [] } = this.state;\n\n    const column = currentColumns.find((item) => {\n      return item.dataKey === dataKey;\n    });\n\n    let lock = column && column.lock;\n    if (lock === \"none\") {\n      lock = undefined;\n    }\n\n    return !!lock;\n  }\n\n  isAllColumnsShown() {\n    const { currentColumns = [] } = this.state;\n\n    return !currentColumns.some((item) => {\n      return item.hidden;\n    });\n  }\n\n  handleCheck(checked: boolean, dataKey: string) {\n    const { currentColumns = [] } = this.state;\n\n    const column = currentColumns.find((item) => {\n      return item.dataKey === dataKey;\n    });\n\n    if (column) {\n      column.hidden = !checked;\n      column.lock = false;\n      this.forceUpdate();\n    }\n  }\n\n  handleLock(checked: boolean, dataKey: string) {\n    const { currentColumns = [] } = this.state;\n\n    const column = currentColumns.find((item) => {\n      return item.dataKey === dataKey;\n    });\n\n    if (column) {\n      column.lock = checked ? 'left' : undefined;\n      this.forceUpdate();\n    }\n  }\n\n  restoreDefault() {\n    const { defaultColumns } = this.state;\n\n    this.setState({\n      currentColumns: cloneDeep(defaultColumns),\n    });\n  }\n\n  handleOk() {\n    const { currentColumns = [] } = this.state;\n    const { onOk, locale = {} } = this.props;\n\n    let shownCount = 0;\n    let fixedCount = 0;\n    currentColumns.forEach((colums) => {\n      const { lock, hidden } = colums;\n\n      if (!hidden) {\n        shownCount++;\n      }\n\n      if (lock && lock != \"none\") {\n        fixedCount++;\n      }\n    });\n\n    if (currentColumns.length >= 2 && shownCount < 2) {\n      Message.error(locale.tipLeastColumns);\n      return;\n    }\n\n    onOk && onOk(currentColumns);\n  }\n\n  handleCheckAll(checked: boolean) {\n    const { currentColumns = [] } = this.state;\n\n    currentColumns.forEach((item) => {\n      return item.hidden = !checked;\n    });\n\n    this.forceUpdate();\n  }\n\n  renderColumnShown(value: any, record: any, hasCheckbox: boolean) {\n    const { nextTablePrefix } = this.props;\n    const { dataKey } = record;\n\n    return <div className={`${nextTablePrefix}cell-wrap`}>\n      {hasCheckbox ? <Checkbox className={`${nextTablePrefix}cell-checkbox`} onChange={(checked) => {\n        this.handleCheck(checked, dataKey);\n      }} checked={!this.isHidden(dataKey)} /> : null}\n\n      <span className={`${nextTablePrefix}cell`}>\n        {value}\n      </span>\n    </div>;\n  }\n\n  renderColumnFixed(value: any, rowIndex: string, record: any) {\n    const { dataKey } = record;\n\n    return this.isHidden(dataKey) ? null : <Switch\n      checked={this.isLocked(dataKey)}\n      onChange={(checked) => {\n        this.handleLock(checked, dataKey);\n      }} />;\n  }\n  render() {\n    const { nextTablePrefix, onClose, visible, locale = {} } = this.props;\n    const { currentColumns = [] } = this.state;\n    return (\n      <div>\n        <Drawer\n          className={`${nextTablePrefix}web-custom-column-drawer`}\n          width=\"400px\" height=\"100%\" visible={visible} placement=\"right\"\n          closeable=\"mask,esc\" onClose={onClose}>\n\n          <div className={`${nextTablePrefix}title`}>\n            <div className={`${nextTablePrefix}title-txt`}>{locale.customColumn}</div>\n            <Icon className={`${nextTablePrefix}close`}\n              type=\"close\" size=\"medium\" onClick={onClose} />\n          </div>\n\n          <div className={`${nextTablePrefix}center`}>\n            <Table style={{ margin: '12px' }}\n              dataSource={currentColumns.filter(item => {\n                return !item.isGroup\n              })}\n              hasBorder={false} primaryKey=\"dataKey\"\n              rowSelection={{\n                selectedRowKeys: getSelectedRowKeys(currentColumns),\n                onSelectAll: (selected) => {\n                  this.handleCheckAll(selected);\n                },\n                onSelect: (selected, records) => {\n                  const { dataKey } = records;\n                  this.handleCheck(selected, dataKey);\n                },\n              }}>\n              <Table.Column cell={(value, index, record) => {\n                return this.renderColumnShown(value, record, false);\n              }} title={locale.showColumn} dataIndex=\"title\"\n                width=\"60%\" />\n              <Table.Column cell={this.renderColumnFixed.bind(this)} title={locale.stickColumn} dataIndex=\"lock\"\n                width=\"40%\" />\n            </Table>\n          </div>\n\n          <div className={`${nextTablePrefix}bottom`}>\n            <Button className={`${nextTablePrefix}button`} onClick={onClose}>{locale.cancel}</Button>\n            <Button className={`${nextTablePrefix}button`}\n              onClick={this.restoreDefault.bind(this)}>{locale.restoreDefault}</Button>\n            <Button style={{ width: 80 }} type=\"primary\" onClick={this.handleOk.bind(this)}>{locale.submit}</Button>\n          </div>\n        </Drawer>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/webLinkBar.tsx",
    "content": "import React from 'react';\nimport isFunction from \"lodash/isFunction\";\nimport type { IAction } from './webToolbar';\n\nexport interface IWebLinkBarProps {\n  nextTablePrefix?: string;\n  onActionClick?: (item: IAction, index: number) => void;\n  linkBar?: IAction[];\n}\n\nexport default class WebLinkBar extends React.Component<IWebLinkBarProps> {\n  renderActionButton(item: IAction, index: number) {\n    const { nextTablePrefix, onActionClick } = this.props;\n\n    let content;\n    const itemProps = {\n      onClick: () => {\n        onActionClick && onActionClick(item, index);\n      },\n    };\n\n    if (item.render && isFunction(item.render)) {\n      content = (\n        <div className={`${nextTablePrefix}link-div`} {...itemProps}>\n          {item.render(item.title)}\n        </div>\n      );\n    } else {\n      content = (\n        <a className={`${nextTablePrefix}link-a`} {...itemProps}>\n          {item.title}\n        </a>\n      );\n    }\n\n    return (\n      <div className={`${nextTablePrefix}link-item`} key={index}>\n        {content}\n        {index === 0 ? null : <div className={`${nextTablePrefix}link-sp`} />}\n      </div>\n    );\n  }\n\n  render() {\n    const { nextTablePrefix, linkBar = [] } = this.props;\n\n    return (\n      <div className={`${nextTablePrefix}link-wrap`}>\n        {linkBar.slice(0).reverse().map((link, index) => {\n          return link ? this.renderActionButton(link, index) : null;\n        })}\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/webNextTableActionCell.tsx",
    "content": "import React, { ReactNode } from \"react\";\nimport classnames from 'classnames';\nimport { Button, MenuButton } from '@alifd/next';\nimport actionTitleRender from \"../utils/render/actionTitleRender\";\nimport runColumnActionCallback from \"../utils/runColumnActionCallback\";\nimport filterActionColumn from \"../utils/filterActionColumn\";\nimport dispatchResizeEvent from \"../utils/dispatchResizeEvent\";\n\nconst { Item } = MenuButton;\n\nexport interface IActionColumnItem {\n  title: string;\n  callback?: (rowData: any, action: IActionColumnItem, index?: number) => void;\n  device?: string[];\n  mode?: string;\n  render?: (title: IActionColumnItem['title'], rowData: any) => ReactNode;\n}\n\nexport interface IWebNextTableActionCellProps {\n  actionColumn?: IActionColumnItem[];\n  actionType?: string;\n  maxWebShownActionCount?: number;\n  nextTablePrefix?: string;\n  rowData?: any;\n  device?: string;\n  index?: number;\n  locale?: {\n    [prop: string]: string;\n  }\n}\n\nexport default class WebNextTableActionCell extends React.Component<IWebNextTableActionCellProps> {\n  refreshCellUI() {\n    this.forceUpdate(() => {\n      dispatchResizeEvent();\n    });\n  }\n  componentDidMount() {\n    setTimeout(() => {\n      dispatchResizeEvent()\n    }, 400)\n  }\n\n  render() {\n    const { actionColumn, actionType, maxWebShownActionCount = 3, nextTablePrefix, rowData, device, index, locale = {} } = this.props;\n    const currentActionColumn = filterActionColumn(actionColumn, rowData, device);\n    const showMoreAction = currentActionColumn.length > maxWebShownActionCount;\n    const actionColumnToRender = currentActionColumn.slice(0, (showMoreAction ? maxWebShownActionCount - 1 : undefined));\n    const remainActions = currentActionColumn.slice(maxWebShownActionCount - 1);\n    const isLink = actionType === 'link';\n\n    const menu = remainActions.map((action) => {\n      const render = actionTitleRender(action, rowData)\n      return render ? <Item key={action.title}>{render}</Item> : null;\n    }).filter(i => i !== null);\n\n    return (<div className={`${nextTablePrefix}action-cell`}>\n      {\n        actionColumnToRender.map((action) => {\n          const render = actionTitleRender(action, rowData)\n          return (\n            render ? <Button\n              key={action.title}\n              className={classnames(isLink ? `${nextTablePrefix}action-link` : `${nextTablePrefix}action-button`)}\n              text={isLink} type={isLink ? 'primary' : 'secondary'}\n              onClick={(e) => {\n                e.stopPropagation();\n\n                runColumnActionCallback({ index, rowData, action }).finally(() => {\n                  this.refreshCellUI();\n                });\n              }}>\n              {render}\n            </Button> : null\n          );\n        })\n      }\n\n      {showMoreAction && menu.length ?\n        <MenuButton\n          text={isLink}\n          className={classnames(`${nextTablePrefix}action-more`, isLink ? `${nextTablePrefix}action-link` : `${nextTablePrefix}action-button`)}\n          type={isLink ? 'primary' : 'secondary'}\n          popupTriggerType=\"hover\"\n          autoWidth={false}\n          onItemClick={(i, item) => {\n            const title = item.props.title;\n            const action = remainActions.find((item) => {\n              return item.title = title;\n            });\n            runColumnActionCallback({\n              index,\n              rowData,\n              action: action!,\n            }).finally(() => {\n              this.refreshCellUI();\n            });\n          }}\n          label={locale.more}\n        >{menu}</MenuButton> : null}\n    </div>);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/webNextTableCell.tsx",
    "content": "import React from \"react\";\nimport isFunction from \"lodash/isFunction\";\nimport commonTableCellRender from \"../utils/render/commonTableCellRender\";\nimport { safeAccess, safeWrite } from \"../utils/chainAccess\";\nimport InputField from \"./field/inputField\";\nimport SelectField from \"./field/selectField\";\nimport RadioField from \"./field/radioField\";\nimport DateField from \"./field/dateField\";\nimport CustomField from \"./field/customField\";\nimport DateRangeField from \"./field/dateRangeField\";\nimport BaseTableField from \"./field/baseTableField\";\n\nconst fieldsMap = {\n  select: SelectField,\n  text: InputField,\n  radio: RadioField,\n  date: DateField,\n  dateRange: DateRangeField,\n  custom: CustomField,\n};\n\nfunction canEditCell(canEdit: boolean, rowData: IWebNextTableCellProps['rowData']) {\n  if (typeof canEdit === \"undefined\" || canEdit === null) {\n    return true;\n  }\n\n  if (isFunction(canEdit)) {\n    return canEdit(rowData);\n  }\n\n  return !!canEdit;\n}\n\nexport interface IWebNextTableCellProps {\n  rowData: any;\n  column: {\n    editType?: keyof typeof fieldsMap;\n    dataKey: string;\n    [prop: string]: any;\n  };\n  isRenderEditMode?: boolean;\n  rowIndex: number;\n  nextTablePrefix?: string;\n  onCellDataChange?(options: {\n    dataKey: IWebNextTableCellProps['column']['dataKey'];\n    value: any,\n    rowData: IWebNextTableCellProps['rowData'];\n    rowIndex: IWebNextTableCellProps['rowIndex'];\n  }): void;\n}\n\ninterface IWebNextTableCellState {\n  editable: boolean;\n  currentValue: any;\n}\n\nexport default class WebNextTableCell extends React.Component<IWebNextTableCellProps, IWebNextTableCellState> {\n  fieldComponentRef: React.RefObject<BaseTableField>;\n  constructor(props: IWebNextTableCellProps) {\n    super(props);\n\n    this.state = {\n      editable: false,\n      currentValue: this.getRowValue(),\n    };\n\n    this.fieldComponentRef = React.createRef();\n  }\n\n  setEditable(v: boolean) {\n    const { rowData } = this.props;\n    rowData.__mode__ = v ? \"EDIT\" : \"VIEW\";\n\n    this.setState({ editable: !!v });\n  }\n\n  getRowValue() {\n    const { rowData, column } = this.props;\n    const { dataKey } = column;\n\n    return safeAccess(rowData, dataKey);\n  }\n\n  saveCell() {\n    const { currentValue } = this.state;\n    const { rowData, column } = this.props;\n    const { dataKey } = column;\n\n    safeWrite(rowData, dataKey, currentValue);\n    this.setEditable(false);\n  }\n\n  resetCell() {\n    this.setState({\n      currentValue: this.getRowValue(),\n    });\n\n    this.setEditable(false);\n  }\n\n  validateCell() {\n    const current = this.fieldComponentRef.current;\n    const validate = current && current.validate;\n    return validate && validate.call(current);\n  }\n\n  _fillFields(rowData: IWebNextTableCellProps['rowData'], dataKey: IWebNextTableCellProps['column']['dataKey']) {\n    rowData.__fields__ = rowData.__fields__ || {};\n    rowData.__fields__[dataKey] = this;\n  }\n\n  renderCellEditInner() {\n    const { currentValue } = this.state;\n    const { nextTablePrefix, column, rowData, rowIndex, onCellDataChange } = this.props;\n    const { editType, dataKey } = column;\n    const FieldComponent = fieldsMap[editType!];\n\n    let { editProps } = column;\n    if (isFunction(editProps)) {\n      editProps = editProps(rowData);\n    }\n\n    return (<FieldComponent\n      ref={this.fieldComponentRef}\n      nextTablePrefix={nextTablePrefix}\n      name={dataKey}\n      value={currentValue}\n      onChange={(value: any) => {\n        // 兼容乐高 onChange 的返回格式 { value: value, ...rest }\n        let realValue = value;\n        if (value && (typeof value === 'object') && Object.hasOwnProperty.call(value, 'value')) {\n          realValue = value.value;\n        }\n        this.setState({ currentValue: realValue });\n        onCellDataChange && onCellDataChange({\n          dataKey,\n          value: realValue,\n          rowData,\n          rowIndex,\n        });\n      }}\n      rowData={rowData}\n      {...editProps}\n    />);\n  }\n\n  render() {\n    const { editable } = this.state;\n    const { column, rowData, isRenderEditMode, rowIndex } = this.props;\n    const { editType, canEdit, dataKey } = column;\n\n    this._fillFields(rowData, dataKey);\n\n    if (isRenderEditMode && editable && editType && editType in fieldsMap && canEditCell(canEdit, rowData)) {\n      return (<div onClick={(e) => {\n        e.stopPropagation();\n      }}>\n        {this.renderCellEditInner()}\n      </div>);\n    }\n\n    return commonTableCellRender(safeAccess(rowData, dataKey), rowIndex, rowData, column);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/webPagination.tsx",
    "content": "import React from \"react\";\nimport classnames from 'classnames';\nimport isString from \"lodash/isString\";\nimport { Pagination } from '@alifd/next';\nimport { paginationProps, fetchKey } from \"../utils/tableProps\";\nimport { PaginationProps } from \"@alifd/next/types/pagination\";\n\nexport interface IWebPaginationProps extends Pick<PaginationProps, 'pageSize' | 'onChange' | 'onPageSizeChange' | 'pageSizeList'> {\n  nextTablePrefix?: string;\n  currentPage?: PaginationProps['current'];\n  totalCount?: PaginationProps['total'];\n  locale?: {\n    [prop: string]: string;\n  }\n  hideOnlyOnePage?: boolean; \n  noPadding?: boolean;\n  paginationPosition?: string;\n}\n\nexport default class WebPagination extends React.Component<IWebPaginationProps> {\n  render() {\n    const { nextTablePrefix, currentPage, pageSize, totalCount, locale, onChange, onPageSizeChange, hideOnlyOnePage, noPadding } = this.props;\n\n    const myProps = fetchKey<IWebPaginationProps>(this.props, paginationProps as Array<keyof IWebPaginationProps>);\n    const { pageSizeList, paginationPosition = 'right', ...rest } = myProps;\n\n    if (hideOnlyOnePage && pageSize !== undefined && totalCount !== undefined && pageSize > totalCount) {\n      return null\n    }\n    return (\n      <div className={classnames(`${nextTablePrefix}web-pagination-wrap`, {\n        [`${nextTablePrefix}no-padding`]: noPadding\n      })}>\n        <Pagination\n          className={classnames(`${nextTablePrefix}web-pagination`, `${nextTablePrefix}web-pagination-${paginationPosition}`)}\n          totalRender={(total) => {\n            return (\n              <span>{locale && locale.totalCount ? locale.totalCount : '总计'}:{' '}{total}{' '}</span>);\n          }}\n          {...\n            {\n              ...rest,\n              pageSizeList: (pageSizeList && isString(pageSizeList)) ? (() => {\n                const pageSizeArray = pageSizeList.split(',');\n                if (pageSizeArray.length > 1) {\n                  return pageSizeArray.map(i => parseInt(i, 10));\n                }\n              })() : pageSizeList,\n              current: currentPage,\n              pageSize,\n              total: totalCount,\n              onChange,\n              onPageSizeChange,\n            }\n          }\n        />\n        <div style={{ clear: 'both' }}/>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/webRowOrder.tsx",
    "content": "import React, { ReactNode } from 'react';\nimport { Select, Icon } from '@alifd/next';\nimport { SelectProps } from '@alifd/next/types/select';\n\nconst Option = Select.Option;\n\nexport interface IWebRowOrderProps {\n  items: {\n    value: string;\n    text: ReactNode;\n  }[];\n  nextTablePrefix: any;\n  defaultValue: any;\n  onChange: SelectProps['onChange'];\n}\n\nexport default class WebRowOrder extends React.Component<IWebRowOrderProps> {\n\n  render() {\n    const { items, nextTablePrefix, defaultValue, onChange } = this.props;\n\n    return (\n      <div className={`${nextTablePrefix}row-order`}>\n        <Select defaultValue={defaultValue.value} onChange={onChange} hasBorder={false} autoWidth={false}\n          hasArrow={false}\n          valueRender={(item) => {\n            return <span className={`${nextTablePrefix}row-order-v`}>\n              <Icon type=\"order-by\" size=\"small\" />\n              {item.label}\n            </span>;\n          }}>\n          {\n            items.map((item) => {\n              return <Option key={item.value} value={item.value}>{item.text}</Option>;\n            })\n          }\n        </Select>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/component/webToolbar.tsx",
    "content": "import React, { MouseEventHandler, ReactNode } from \"react\";\nimport classnames from \"classnames\";\nimport { Button, Search, Pagination, Icon } from '@alifd/next';\nimport WebRowOrder, { IWebRowOrderProps } from \"./webRowOrder\";\nimport WebLinkBar from \"./webLinkBar\";\nimport { SearchProps } from \"@alifd/next/types/search\";\nimport { PaginationProps } from \"@alifd/next/types/pagination\";\nimport { ButtonProps } from \"@alifd/next/types/button\";\n\nexport interface IAction {\n  render?: (title: IAction['title']) => ReactNode;\n  isDisabled?: () => boolean;\n  title?: ReactNode;\n  type: ButtonProps['type'];\n  disabled: boolean;\n  callback?: (action: IAction) => void;\n}\n\nexport interface IWebToolbarProps {\n  nextTablePrefix?: string;\n  onSearch?: SearchProps['onSearch'];\n  onActionClick?: (action: IAction, index: number) => void;\n  locale?: { [prop: string]: string };\n  showActionBar?: boolean;\n  actionBar?: IAction[];\n  showLinkBar?: boolean;\n  linkBar?: any;\n  showSearch?: boolean;\n  searchBarPlaceholder?: string;\n  showCustomColumn?: boolean;\n  onClickCustomColumn?: MouseEventHandler<HTMLDivElement>;\n  rowOrder?: IWebRowOrderProps;\n  customBarItem?: {\n    render?: () => ReactNode;\n    rightRender?: () => ReactNode;\n    bottomRender?: () => ReactNode;\n  }\n  showMiniPager?: boolean;\n  paginationProps?: Pick<PaginationProps, 'pageSize' | 'onChange' | 'onPageSizeChange'> & {\n    currentPage?: PaginationProps['current'];\n    totalCount?: PaginationProps['total'];\n  };\n  noPadding?: boolean;\n}\n\nexport default class WebToolbar extends React.Component<IWebToolbarProps> {\n  render() {\n    const {\n      nextTablePrefix, onSearch, onActionClick, locale = {},\n      showActionBar, actionBar, showLinkBar, linkBar, showSearch, searchBarPlaceholder, showCustomColumn,\n      onClickCustomColumn, rowOrder, customBarItem, showMiniPager, paginationProps, noPadding\n    } = this.props;\n\n    const { currentPage, pageSize, totalCount, onChange, onPageSizeChange } = paginationProps || {};\n\n    const renderCustomBarItem = !!(customBarItem && customBarItem.render);\n    const renderCustomBarItemRight = !!(customBarItem && customBarItem.rightRender);\n    const renderCustomBarItemBottom = !!(customBarItem && customBarItem.bottomRender);\n    const renderActionBar = !!(showActionBar && actionBar && actionBar.length);\n    const renderLeft = renderActionBar || renderCustomBarItem;\n\n    const renderLinkBar = !!(showLinkBar && linkBar && linkBar.length);\n    const renderRight = renderLinkBar || rowOrder || showCustomColumn || showMiniPager || showSearch || renderCustomBarItemRight;\n\n    const renderToolbar = renderLeft || renderRight;\n    if (!renderToolbar) {\n      return null;\n    }\n\n    return (\n      <div className={classnames(`${nextTablePrefix}web-toolbar`, {\n        [`${nextTablePrefix}no-padding`]: noPadding\n      })}>\n        {renderLeft ? <div className={`${nextTablePrefix}left-wrap`}>\n          {renderActionBar ? actionBar.map((action, index) => {\n            const { isDisabled, title, type, disabled, callback, ...rest } = action\n            const buttonType = type ? type : index === 0 ? 'secondary' : 'normal';\n            const disable = disabled !== undefined ? disabled : isDisabled ? !!(isDisabled()) : false;\n\n            return (\n              <Button {...rest} className={`${nextTablePrefix}button`} type={buttonType} disabled={disable}\n                key={`${buttonType}-${disable ? \"0\" : \"1\"}-${index}`}\n                onClick={() => {\n                  onActionClick && onActionClick(action, index);\n                }}>\n                {title}\n              </Button>\n            );\n          }) : null}\n\n          {renderCustomBarItem ? <div className={`${nextTablePrefix}custom`}>\n            {customBarItem.render!()}\n          </div> : null}\n        </div> : null}\n\n        {renderRight ? <div className={`${nextTablePrefix}right-wrap`}>\n          {renderLinkBar ?\n            <WebLinkBar nextTablePrefix={nextTablePrefix} linkBar={linkBar}\n              onActionClick={onActionClick} /> : null}\n          {rowOrder ? <WebRowOrder {...rowOrder} {...{ nextTablePrefix }} /> : null}\n          {showCustomColumn ? <div className={`${nextTablePrefix}custom-column`}\n            onClick={onClickCustomColumn}>\n            <Icon className={`${nextTablePrefix}icon`} type=\"custom-column\" size=\"small\" />\n            <span className={`${nextTablePrefix}text`}>{locale.customColumn}</span>\n          </div> : null}\n\n          {showMiniPager ? <div className={`${nextTablePrefix}pagination`}>\n            <Pagination {...\n              {\n                current: currentPage,\n                pageSize,\n                total: totalCount,\n                onChange,\n                onPageSizeChange,\n                type: \"simple\",\n                size: \"small\",\n                shape: \"arrow-only\",\n              }} />\n          </div> : null}\n\n          {\n            showSearch\n              ? <Search\n                className={`${nextTablePrefix}search`}\n                shape=\"simple\"\n                hasClear\n                placeholder={searchBarPlaceholder}\n                onSearch={onSearch}\n              /> : null\n          }\n          {\n            renderCustomBarItemRight ? <div className={`${nextTablePrefix}custom-right`}>{customBarItem.rightRender!()}</div> : null\n          }\n        </div> : null\n        }\n\n        <div style={{ clear: 'both' }} />\n\n        {renderCustomBarItemBottom ? <div className={`${nextTablePrefix}custom-bottom`}>\n          {customBarItem.bottomRender!()}\n        </div> : null}\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/index.scss",
    "content": "/* write style here */\n@import \"scss/variables\";\n\n$table-css-prefix: '#{$deep-css-prefix}table-' !default;\n$red: #fb575f;\n$blue: #33a4ff;\n$orange: #ff8c33;\n$green: #82cb78;\n$grey: #c2c2c2;\n$black: #2c2f33;\n$yellow: #F9BD0F;\n\n.#{$table-css-prefix}full-wrap,\n.#{$table-css-prefix}detail-view-drawer {\n\n  .#{$table-css-prefix}detail-list {\n    background-color: #ffffff;\n    width: calc(100% - 18px);\n    .#{$table-css-prefix}detail-field-wrap {\n      line-height: 24px;\n      font-size: 14px;\n      display: flex;\n      .#{$table-css-prefix}detail-label {\n        color: $color-text1-3;\n        white-space: nowrap;\n      }\n\n      .#{$table-css-prefix}detail-value {\n        color: $color-text1-4;\n        .#{$css-prefix}btn {\n          font-size: 14px;\n        }\n        > span {\n          word-break: break-word;\n          font-size: 14px;\n        }\n      }\n    }\n\n    .#{$table-css-prefix}detail-field-highlight {\n      font-size: 16px;\n      padding-left: 0;\n      font-weight: bold;\n      padding-bottom: 8px;\n    }\n  }\n\n  .#{$css-prefix}table-sort {\n    outline: none;\n    line-height: 16px;\n    .#{$css-prefix}icon {\n      &.#{$css-prefix}icon-ascending, &.#{$css-prefix}icon-descending {\n        left: 0;\n      }\n    }\n  }\n\n  .#{$css-prefix}table-filter {\n    width: 16px;\n  }\n\n  .#{$css-prefix}table th {\n    background-color: $color-fill1-1;\n    .#{$css-prefix}table-cell-wrapper {\n      ul.#{$css-prefix}menu {\n        text-align: left;\n      }\n    }\n  }\n\n  .#{$css-prefix}table-cell{\n    .#{$css-prefix}btn-text.deep-table-link-button {\n      color:$color-link-2\n    }\n    .deep-table-badge {\n      display: inline-block;\n      padding: 2px 5px;\n      border-radius: 2px;\n      &.deep-table-badge-background-red {\n        color: white;\n        background-color: $red;\n      }\n      &.deep-table-badge-color-red {\n        color: $red\n      }\n      &.deep-table-badge-background-yellow {\n        color: white;\n        background-color: $yellow;\n      }\n      &.deep-table-badge-color-yellow {\n        color: $yellow\n      }\n\n      &.deep-table-badge-background-black {\n        color: white;\n        background-color: $black;\n      }\n      &.deep-table-badge-color-black {\n        color: $black\n      }\n\n      &.deep-table-badge-background-grey {\n        color: white;\n        background-color: $grey;\n      }\n      &.deep-table-badge-color-grey {\n        color: $grey\n      }\n\n      &.deep-table-badge-background-green {\n        color: white;\n        background-color: $green;\n      }\n      &.deep-table-badge-color-green {\n        color: $green\n      }\n\n      &.deep-table-badge-background-blue {\n        color: white;\n        background-color: $blue;\n      }\n      &.deep-table-badge-color-blue {\n        color: $blue\n      }\n\n      &.deep-table-badge-background-orange {\n        color: white;\n        background-color: $orange;\n      }\n      &.deep-table-badge-color-orange {\n        color: $orange\n      }\n    }\n  }\n\n  .#{$css-prefix}table-cell.#{$css-prefix}table-expanded {\n    .#{$css-prefix}icon-add:before, .#{$css-prefix}icon-minus:before {\n      color: $color-fill1-6;\n      font-size: 16px;\n      width: 16px;\n    }\n\n    .#{$css-prefix}icon-add:before {\n      content: \"\\e724\";\n    }\n\n    .#{$css-prefix}icon-minus:before {\n      content: \"\\e725\";\n    }\n  }\n\n  .#{$table-css-prefix}input {\n    width: 100%;\n  }\n\n  .#{$table-css-prefix}field-msg {\n    line-height: 24px;\n    text-align: left;\n    color: $color-error-3;\n  }\n\n  .#{$table-css-prefix}employee {\n    width: 100%;\n\n    .#{$css-prefix}select-trigger, .#{$css-prefix}select .#{$css-prefix}select-inner {\n      min-width: 50px;\n    }\n  }\n}\n\n.#{$table-css-prefix}full-wrap {\n  .#{$table-css-prefix}web-toolbar {\n    overflow: hidden;\n    padding: 16px 0;\n\n    &.#{$table-css-prefix}no-padding {\n      padding-top: 0;\n    }\n\n    .#{$table-css-prefix}left-wrap {\n      float: left;\n    }\n\n    .#{$table-css-prefix}right-wrap {\n      float: right;\n    }\n\n    .#{$table-css-prefix}button {\n      margin-right: 8px;\n    }\n\n    .#{$table-css-prefix}search {\n      width: 280px;\n      margin-left: 20px;\n      vertical-align: top;\n\n      .#{$css-prefix}search-icon {\n        outline: none;\n      }\n    }\n\n    .#{$table-css-prefix}custom-column, .#{$table-css-prefix}link-a, .#{$table-css-prefix}link-div {\n      color: $color-link-1;\n      font-size: 12px;\n      cursor: pointer;\n      i {\n        color: $color-text1-2;\n        margin-right: 3px;\n      }\n      .#{$table-css-prefix}text {\n        padding-left: 3px;\n      }\n    }\n\n    .#{$table-css-prefix}link-a {\n      text-decoration: none;\n    }\n\n    .#{$table-css-prefix}custom-column {\n      margin-left: 24px;\n      line-height: 32px;\n      display: inline-block;\n      vertical-align: top;\n    }\n\n    .#{$table-css-prefix}link-wrap {\n      margin-left: 24px;\n      display: inline-block;\n      white-space: nowrap;\n      line-height: 32px;\n      vertical-align: top;\n\n      .#{$table-css-prefix}link-item {\n        float: right;\n      }\n\n      .#{$table-css-prefix}link-sp {\n        width: 1px;\n        height: 12px;\n        margin: 10px 12px;\n        display: inline-block;\n        vertical-align: top;\n        background-color: $color-line1-2;\n      }\n    }\n\n    .#{$table-css-prefix}row-order {\n      display: inline-block;\n      vertical-align: top;\n      margin-left: 24px;\n\n      .#{$table-css-prefix}row-order-v {\n        color: $color-link-1;\n        i {\n          color: $color-text1-2;\n          margin-right: 3px;\n        }\n      }\n\n      .#{$css-prefix}input-control {\n        display: none;\n      }\n\n      .#{$css-prefix}input.#{$css-prefix}medium .#{$css-prefix}input-text-field {\n        padding-left: 3px;\n        padding-right: 0;\n        color: $color-link-1;\n      }\n\n      .#{$css-prefix}select-inner {\n        min-width: 50px;\n      }\n\n      .#{$css-prefix}select-trigger {\n        min-width: 50px;\n      }\n\n      .#{$css-prefix}input.#{$css-prefix}medium .#{$css-prefix}icon:before {\n        width: 16px;\n        font-size: 16px;\n      }\n    }\n\n    .#{$table-css-prefix}custom {\n      display: inline-block;\n      height: 32px;\n      line-height: 32px;\n      vertical-align: top;\n      margin: 0 5px;\n    }\n\n    .#{$table-css-prefix}custom-right {\n      display: inline-block;\n      height: 32px;\n      line-height: 32px;\n      vertical-align: top;\n      margin: 0 5px 0 10px;\n    }\n\n    .#{$table-css-prefix}pagination {\n      display: inline-block;\n      vertical-align: top;\n      margin: 2px 0 0 20px;\n    }\n  }\n  .#{$table-css-prefix}mobile-body {\n    .#{$css-prefix}radio-group {\n      width: 100%;\n    }\n  }\n  .#{$table-css-prefix}mobile-toolbar {\n    overflow: hidden;\n    border-bottom: 1px solid $color-line1-2;\n\n    .#{$table-css-prefix}right-wrap {\n      line-height: 44px;\n      display: flex;\n      &-selector {\n        width: 54px;\n        text-align: center;\n      }\n      &-content {\n        width: 100%;\n        text-align: right;\n      }\n    }\n\n    .#{$table-css-prefix}search-wrap {\n      padding: 8px 0;\n\n      .#{$table-css-prefix}search-inner {\n        overflow: hidden;\n        padding-left: 16px;\n      }\n\n      .#{$table-css-prefix}search-cancel-wrap {\n        float: right;\n        line-height: 28px;\n        padding: 0 16px;\n      }\n    }\n\n    .#{$table-css-prefix}search-cancel {\n      font-size: 14px;\n      color: $color-fill1-7;\n    }\n\n    .#{$table-css-prefix}i-wrap, .#{$table-css-prefix}row-order {\n      margin-right: 16px;\n      display: inline-block;\n      vertical-align: top;\n      color: $color-link-1;\n      font-size: 0;\n      position: relative;\n      &:active {\n        &:after {\n          position: absolute;\n          top: 6px;\n          left: -6px;\n          display: inline-block;\n          content: '';\n          width: 32px;\n          height: 32px;\n          background: $color-fill1-1;\n          z-index: -1;\n          border-radius: 16px;\n        }\n      }\n    }\n\n    .#{$table-css-prefix}search {\n      position: relative;\n      overflow: hidden;\n\n      .#{$css-prefix}icon-search {\n        vertical-align: top;\n      }\n\n      .input {\n        line-height: 28px;\n        width: 100%;\n        padding: 0;\n        border: none;\n        font-size: 12px;\n        outline: none;\n        background-color: transparent;\n      }\n\n      .i-wrap {\n        position: absolute;\n        right: 5px;\n        top: 4px;\n        padding: 0 10px;\n        color: $color-fill1-6;\n      }\n\n      .input-wrap {\n        border-radius: 20px;\n        padding: 0 0 0 18px;\n        background: #F1F3F5;\n      }\n    }\n  }\n\n  .#{$table-css-prefix}mobile-table {\n    .#{$css-prefix}table.#{$css-prefix}table-small td .#{$css-prefix}table-cell-wrapper {\n      padding: 8px;\n    }\n\n    .#{$css-prefix}table.#{$css-prefix}table-small .#{$css-prefix}table-prerow .#{$css-prefix}table-cell-wrapper {\n      padding-right: 8px;\n    }\n\n    .#{$css-prefix}table.#{$css-prefix}table-small {\n      td.first,\n      th.#{$css-prefix}table-selection {\n        .#{$css-prefix}table-cell-wrapper {\n          padding-left: 16px;\n        }\n      }\n    }\n    .#{$css-prefix}table.#{$css-prefix}table-small th.#{$css-prefix}table-selection .#{$css-prefix}table-cell-wrapper {\n      padding-left: 16px;\n    }\n\n    .#{$css-prefix}table-expanded-row {\n      background-color: $color-fill1-1;\n    }\n\n    .#{$css-prefix}table.#{$css-prefix}table-small td.#{$table-css-prefix}column-action .#{$css-prefix}table-cell-wrapper {\n      padding: 0;\n    }\n\n    .#{$table-css-prefix}column-action-i {\n      padding: 8px;\n      color: $color-fill1-6;\n    }\n\n    .#{$css-prefix}btn, .#{$css-prefix}table-expanded-ctrl {\n      cursor: default;\n    }\n\n    .#{$css-prefix}table-row.hovered {\n      background-color: #ffffff;\n    }\n\n    .#{$table-css-prefix}expand-wrap {\n      padding-left: 8px;\n    }\n  }\n\n  .#{$table-css-prefix}card-table {\n\n    .#{$table-css-prefix}item-wrap {\n      width: 100%;\n      padding: 16px;\n      border-bottom: 1px solid $color-line1-2;\n      position: relative;\n      font-size: 14px;\n      display: flex;\n      align-items: center;\n      justify-items: center;\n      .#{$table-css-prefix}item-wrap-selector {\n        margin-right: 12px;\n      }\n      .#{$table-css-prefix}item-wrap-content {\n        width: 100%;\n        display: flex;\n        justify-items: center;\n        align-items: center;\n        &.is-right {\n          flex-direction: row-reverse;\n        }\n        .#{$table-css-prefix}item-wrap-content-column {\n          width: 100%;\n        }\n        .#{$table-css-prefix}row-operate {\n          position: absolute;\n          right: 16px;\n          top: 10px;\n          line-height: 30px;\n          color: $color-fill1-6;\n        }\n\n        .#{$table-css-prefix}row-button-wrap {\n          margin-top: 16px;\n          text-align: right;\n        }\n      }\n    }\n\n    .#{$table-css-prefix}expand-wrap {\n      text-align: center;\n      margin-top: 16px;\n    }\n\n    .#{$table-css-prefix}more-wrap {\n      text-align: left;\n    }\n\n    .#{$table-css-prefix}expand-wrap, .#{$table-css-prefix}more-wrap {\n      line-height: 22px;\n      color: $color-fill1-6;\n      font-size: 14px;\n\n      .#{$table-css-prefix}text {\n        padding-right: 4px;\n      }\n\n      .#{$css-prefix}icon {\n        line-height: 20px;\n      }\n    }\n\n    .#{$table-css-prefix}expand-content-wrap {\n      background-color: $color-fill1-1;\n      border-radius: 4px;\n      margin-top: 16px;\n    }\n\n    .#{$css-prefix}btn {\n      cursor: default;\n    }\n  }\n\n  .#{$table-css-prefix}date-picker {\n    &.#{$css-prefix}date-picker, .#{$css-prefix}month-picker, .#{$css-prefix}year-picker {\n      width: 100%;\n    }\n  }\n\n  .#{$table-css-prefix}web-pagination-wrap {\n\n    .#{$table-css-prefix}web-pagination-left {\n      float: left;\n    }\n\n    .#{$table-css-prefix}web-pagination-right {\n      float: right;\n      .#{$css-prefix}select {\n        width: unset !important;\n      }\n    }\n  }\n\n  .#{$table-css-prefix}web-table {\n    .#{$css-prefix}table-expanded-row {\n      background-color: $color-fill1-1;\n    }\n\n    .#{$table-css-prefix}action-cell {\n      .#{$table-css-prefix}action-link {\n        &.#{$css-prefix}btn-text, &.#{$css-prefix}menu-btn.#{$css-prefix}btn-text.#{$css-prefix}btn-primary .#{$css-prefix}menu-btn-arrow {\n          color: $color-link-1;\n        }\n      }\n      .#{$table-css-prefix}action-button {\n        margin-right: 8px;\n        &:last-child {\n          margin-right: 0;\n        }\n        &.#{$table-css-prefix}action-more {\n          .#{$css-prefix}menu-btn-arrow {\n            vertical-align: middle;\n          }\n        }\n      }\n      .#{$table-css-prefix}action-link {\n        padding: 0 12px;\n        position: relative;\n        vertical-align: baseline;\n        &:first-child {\n          padding-left: 0;\n          &:before {\n            width: 0;\n          }\n        }\n        &:last-child {\n          padding-right: 0;\n        }\n        &.#{$table-css-prefix}action-more{\n          &:before {\n            top: 4px\n          }\n        }\n        &:before {\n          position: absolute;\n          content: '';\n          width: 1px;\n          height: 10px;\n          background: $color-line1-4;\n          vertical-align: middle;\n          top: 5px;\n          left: 1px;\n        }\n      }\n\n      .#{$table-css-prefix}action-more {\n        .#{$css-prefix}menu-btn-arrow {\n          vertical-align: top;\n        }\n      }\n    }\n\n    .#{$css-prefix}table-sort {\n      cursor: pointer;\n    }\n  }\n\n  .#{$table-css-prefix}web-pagination-wrap {\n    padding: 16px 10px;\n\n    &.#{$table-css-prefix}no-padding {\n      padding-bottom: 0;\n    }\n  }\n}\n\n.#{$table-css-prefix}mobile-drawer {\n  .#{$css-prefix}drawer-body {\n    padding: 0;\n  }\n\n  &.#{$css-prefix}drawer {\n    background-color: $color-fill1-2;\n  }\n\n  &.#{$css-prefix}drawer-right {\n    max-width: none;\n    width: 100%;\n    height: 100%;\n  }\n\n  .#{$css-prefix}switch, .#{$css-prefix}checkbox-wrapper input[type=\"checkbox\"] {\n    cursor: default;\n  }\n}\n\n.#{$table-css-prefix}detail-view-drawer {\n\n  .#{$css-prefix}drawer-body {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 0;\n    height: 100%;\n  }\n\n  .#{$table-css-prefix}title {\n    line-height: 48px;\n    text-align: center;\n    background: #fff;\n    font-size: 16px;\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 0;\n    border-bottom: 1px solid $color-line1-2;\n    color: $color-text1-4;\n\n    .#{$table-css-prefix}close {\n      position: absolute;\n      right: 16px;\n      top: 12px;\n      line-height: 20px;\n    }\n  }\n\n  .#{$table-css-prefix}detail-list-wrap {\n    background-color: #ffffff;\n    padding: 16px;\n  }\n\n  .#{$table-css-prefix}expand-content-wrap {\n    margin-top: 16px;\n    background-color: #ffffff;\n  }\n\n  .#{$table-css-prefix}center {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 49px;\n    bottom: 0;\n    overflow: auto;\n  }\n\n  .#{$table-css-prefix}center-action {\n    bottom: 51px;\n  }\n\n  .#{$table-css-prefix}bottom {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    z-index: 1002;\n    background-color: #ffffff;\n\n    .#{$table-css-prefix}action-wrap {\n      display: flex;\n      flex-direction: row;\n      border-top: 1px solid $color-fill1-2;\n    }\n\n    .#{$table-css-prefix}action-item {\n      flex: 1;\n      padding: 12px 0;\n    }\n\n    .#{$table-css-prefix}action-inner {\n      line-height: 24px;\n      color: $color-fill1-7;\n      border-left: 1px solid $color-line1-2;\n      text-align: center;\n      padding: 0 5px;\n      font-size: 16px;\n    }\n\n    .#{$table-css-prefix}action-disable {\n      color: $color-fill1-5;\n    }\n\n    .#{$table-css-prefix}action-item.first .#{$table-css-prefix}action-inner {\n      border-left: none;\n    }\n  }\n}\n\n.#{$table-css-prefix}operation-drawer {\n  .#{$table-css-prefix}item {\n    line-height: 47px;\n    font-size: 17px;\n    text-align: center;\n    background-color: #fff;\n    border-bottom: 1px solid $color-line1-2;\n  }\n\n  .#{$table-css-prefix}item-disable {\n    color: $color-fill1-5;\n  }\n\n  .#{$table-css-prefix}close {\n    line-height: 47px;\n    font-size: 17px;\n    text-align: center;\n    background-color: #fff;\n    margin-top: 10px;\n  }\n\n  .#{$table-css-prefix}action-list {\n    max-height: 384px;\n    overflow-x: hidden;\n    overflow-y: auto;\n  }\n}\n\n.#{$table-css-prefix}web-custom-column-drawer {\n\n  .#{$css-prefix}drawer-body {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 0;\n    height: 100%;\n    padding: 0;\n  }\n\n  .#{$table-css-prefix}title {\n    line-height: 48px;\n    text-align: left;\n    background: #fff;\n    font-size: 16px;\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 0;\n    color: $color-text1-4;\n    border-bottom: 1px solid $color-line1-2;\n\n    .#{$table-css-prefix}title-txt {\n      padding: 0 16px;\n      font-weight: bold;\n    }\n\n    .#{$table-css-prefix}close {\n      line-height: 20px;\n      position: absolute;\n      right: 16px;\n      top: 12px;\n      cursor: pointer;\n    }\n  }\n\n  .#{$table-css-prefix}center {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 49px;\n    bottom: 53px;\n    overflow: auto;\n  }\n\n\n  .#{$table-css-prefix}cell-wrap {\n    line-height: 32px;\n  }\n\n  .#{$table-css-prefix}cell, .#{$table-css-prefix}select-all-content {\n    font-size: 12px;\n    color: $color-text1-4;\n    vertical-align: top;\n  }\n\n  .#{$css-prefix}table {\n    td, th {\n      .#{$css-prefix}table-cell-wrapper {\n        padding-left: 0;\n        padding-right: 0;\n      }\n      &.#{$css-prefix}table-selection {\n        .#{$css-prefix}table-cell-wrapper {\n          padding: 12px 16px;\n        }\n      }\n    }\n  }\n\n\n  .#{$table-css-prefix}cell-checkbox, .#{$table-css-prefix}select-all-checkbox {\n    vertical-align: top;\n    position: relative;\n    top: -2px;\n  }\n\n  .#{$table-css-prefix}bottom {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    border-top: 1px solid $color-line1-2;\n    padding: 10px 16px;\n    text-align: right;\n    left: 0;\n    background: #fff;\n    border-radius: 0 0 4px 4px;\n  }\n\n  .#{$table-css-prefix}select-all {\n    float: left;\n    margin-left: 20px;\n  }\n\n  .#{$table-css-prefix}button {\n    margin-right: 6px;\n  }\n}\n\n.#{$table-css-prefix}mobile-custom-column-drawer {\n\n  .#{$css-prefix}drawer-body {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 0;\n    height: 100%;\n  }\n\n  .#{$table-css-prefix}title {\n    line-height: 48px;\n    text-align: center;\n    background: #fff;\n    font-size: 16px;\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 0;\n    color: $color-text1-4;\n\n    .#{$table-css-prefix}close {\n      line-height: 20px;\n      position: absolute;\n      right: 16px;\n      top: 12px;\n    }\n  }\n\n  .#{$table-css-prefix}cell-wrap {\n    line-height: 32px;\n  }\n\n  .#{$table-css-prefix}cell, .#{$table-css-prefix}select-all-content {\n    margin-left: 12px;\n    font-size: 16px;\n    color: $color-text1-4;\n    vertical-align: top;\n  }\n\n  .#{$table-css-prefix}cell-checkbox, .#{$table-css-prefix}select-all-checkbox {\n    vertical-align: top;\n    position: relative;\n    top: -2px;\n  }\n\n  .#{$table-css-prefix}messge {\n    line-height: 30px;\n  }\n\n  .#{$table-css-prefix}center {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 49px;\n    bottom: 48px;\n    overflow: auto;\n  }\n\n  .#{$table-css-prefix}bottom {\n    position: absolute;\n    bottom: 0;\n    line-height: 48px;\n    background: #ffffff;\n    left: 0;\n    width: 100%;\n  }\n\n  .#{$table-css-prefix}select-all {\n    float: left;\n    margin-left: 20px;\n  }\n\n  .#{$table-css-prefix}button {\n    float: right;\n    margin-right: 16px;\n  }\n\n  .#{$css-prefix}checkbox-wrapper .#{$css-prefix}checkbox-inner {\n    border-radius: 50%;\n  }\n}\n\n.#{$table-css-prefix}full-wrap {\n  .#{$css-prefix}table-header {\n    overflow: hidden;\n    &::-webkit-scrollbar {\n      display: none;\n    }\n  }\n}\n\n.#{$table-css-prefix}column-title {\n  .#{$table-css-prefix}column-tooltip {\n    color: $color-notice-3;\n    line-height: 14px;\n    margin-left: 4px;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/index.tsx",
    "content": "import classnames from 'classnames';\nimport React from 'react';\nimport { Table, Loading, ConfigProvider } from '@alifd/next'\nimport WebTable, { IWebTableProps } from './table/webTable';\nimport { fetchKey, tableProps } from \"./utils/tableProps\";\nimport buildNextTableMethod from \"./utils/buildNextTableMethod\";\nimport delegateFunctions from \"./utils/delegateFunctions\";\nimport getColumnsFromChildren from './utils/getColumnsFromChildern'\nimport zhCN from './locale/zh-cn'\nimport { LoadingProps } from '@alifd/next/types/loading';\nimport { IEditableMethods } from './mixin/editableMethods';\nimport { ICommonMethods } from './mixin/commonMethods';\nimport './index.scss';\n\nconst { GroupHeader, GroupFooter, Column, ColumnGroup } = Table\n\nexport interface ITableProps extends IWebTableProps {}\n\ninterface NextTable extends React.Component<ITableProps>, Omit<IEditableMethods, 'init'>, Pick<ICommonMethods, 'getDataSource'> {}\nclass NextTable extends React.Component<ITableProps> {\n  static Column = Column\n  static ColumnGroup = ColumnGroup\n  static GroupHeader = GroupHeader\n  static GroupFooter = GroupFooter\n\n  static defaultProps = {\n    columns: [],\n    clsPrefix: 'deep-',\n    locale: zhCN,\n    tablePrefix: 'table-',\n    primaryKey: 'id',\n    maxWebShownActionCount: 3,\n    expandedIndexSimulate: false,\n    loadingComponent: (props: LoadingProps) => {\n      return <Loading\n        indicator={<img src=\"https://g.alicdn.com/uxcore/pic/loading.svg\" width=\"45\" alt=\"\" />} {...props} />;\n    },\n  };\n  tableRef: React.RefObject<WebTable>;\n\n  constructor(props: ITableProps) {\n    super(props);\n\n    this.tableRef = React.createRef();\n    buildNextTableMethod(this);\n  }\n\n  renderTable() {\n    const { clsPrefix, tablePrefix } = this.props;\n    const myProps = fetchKey<IWebTableProps>(this.props, tableProps);\n    const { children } = myProps;\n    if (children) {\n      myProps.columns = getColumnsFromChildren(children)\n    }\n    myProps.nextTablePrefix = `${clsPrefix}${tablePrefix}`;\n    myProps.actionColumn = delegateFunctions(myProps.actionColumn, 'callback', this, 2);\n    myProps.actionBar = delegateFunctions(myProps.actionBar, 'callback', this);\n    myProps.linkBar = delegateFunctions(myProps.linkBar, 'callback', this);\n\n    return <WebTable {...myProps} ref={this.tableRef} />;\n  }\n\n  render() {\n    const { clsPrefix, tablePrefix, className } = this.props;\n    const nextTablePrefix = `${clsPrefix}${tablePrefix}`;\n\n    return (\n      <div className={classnames(`${nextTablePrefix}full-wrap`, className,)}>\n        {this.renderTable()}\n      </div>\n    );\n  }\n}\n\nexport {\n  NextTable,\n};\n\nexport default ConfigProvider.config(NextTable);"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/interface/index.ts",
    "content": ""
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/locale/en-us.ts",
    "content": "export default {\n  tipLeastNeededColumns: '2 shown columns is needed at least',\n  tipLeastColumns: '2 shown columns at least',\n  customColumn: 'Custom Columns',\n  showColumn: 'Show Column',\n  stickColumn: 'Stick Column',\n  showAll: 'Show All',\n  noData: 'No data',\n  restoreDefault: 'Reset',\n  notice: 'Notice',\n  ok: 'OK',\n  detail: 'Detail',\n  cancel: 'Cancel',\n  submit: 'Submit',\n  totalCount: 'Total',\n  collapse: 'Collapse',\n  expand: 'Expand',\n  more: 'More',\n}"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/locale/zh-cn.ts",
    "content": "export default {\n  tipLeastNeededColumns: '最少需要展示2列',\n  tipLeastColumns: '最少展示2列',\n  customColumn: '自定义列',\n  showColumn: '展示此列',\n  stickColumn: '固定此列',\n  showAll: '全部展示',\n  noData: '没有数据',\n  restoreDefault: '恢复默认',\n  notice: '提示',\n  ok: '确定',\n  detail: '详情',\n  cancel: '取消',\n  submit: '提交',\n  totalCount: '总计',\n  collapse: '收起',\n  expand: '展开',\n  more: '更多',\n}"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/mixin/columnMethods.tsx",
    "content": "import React, { ReactNode } from \"react\";\nimport assign from \"lodash/assign\";\nimport deepcopy from 'lodash/cloneDeep';\nimport WebCustomColumnDrawer from \"../component/webCustomColumnDrawer\";\nimport filterColumn from \"../utils/filterColumn\";\nimport type WebTable from \"../table/webTable\";\nimport { IWebTableProps } from \"../table/webTable\";\n\nexport interface IColumnMethods {\n    init(this: WebTable): void;\n    showCustomColumnDrawer(this: WebTable): void;\n    hideCustomColumnDrawer(this: WebTable): void;\n    setOriginalColumns(this: WebTable, columns: IWebTableProps['columns']): void;\n    changeCurrentColumns(this: WebTable, columns: IWebTableProps['columns']): void;\n    renderCustomColumnDrawer(this: WebTable): ReactNode;\n}\n\nconst methods: IColumnMethods = {\n    init() {\n        const { columns = [] } = this.props;\n\n        const mergeState = {\n            isCustomColumnDrawerShown: false,\n            originalColumns: deepcopy(columns),\n            currentColumns: filterColumn(columns),\n        };\n\n        this.state = this.state || {};\n        assign(this.state, mergeState);\n    },\n\n    showCustomColumnDrawer() {\n        this.setState({\n            isCustomColumnDrawerShown: true,\n        });\n    },\n\n    hideCustomColumnDrawer() {\n        this.setState({\n            isCustomColumnDrawerShown: false,\n        });\n    },\n\n    setOriginalColumns(columns) {\n        this.setState({\n            originalColumns: deepcopy(columns),\n        });\n    },\n\n    changeCurrentColumns(columns) {\n        this.setState({\n            currentColumns: filterColumn(columns),\n        });\n    },\n    renderCustomColumnDrawer() {\n        const { isCustomColumnDrawerShown, originalColumns } = this.state;\n        const { nextTablePrefix, locale, onColumnsChange = () => { } } = this.props;\n\n        return (\n            <WebCustomColumnDrawer\n                locale={locale}\n                columns={originalColumns}\n                nextTablePrefix={nextTablePrefix}\n                visible={isCustomColumnDrawerShown}\n                onClose={this.hideCustomColumnDrawer.bind(this)}\n                onOk={(columns) => {\n                    this.changeCurrentColumns(columns);\n                    onColumnsChange(columns)\n                    this.hideCustomColumnDrawer();\n                }}\n            />\n        );\n    },\n};\n\nexport default methods;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/mixin/commonMethods.ts",
    "content": "import assign from \"lodash/assign\";\nimport deepcopy from \"lodash/cloneDeep\";\nimport { isValidElement, ReactNode } from \"react\";\nimport WebTable from \"../table/webTable\";\nimport convertData from \"../utils/convertData\";\nimport getDataSource from \"../utils/getDataSource\";\n\n\nexport interface ICommonMethods {\n  init(this: WebTable): void;\n  loadData(this: WebTable, from: string): void;\n  getDataSource(this: WebTable): any;\n  getDataItem(this: WebTable, value: any): any;\n  onSort(this: WebTable, dataIndex: string, order: string): void;\n  onSearch(this: WebTable, searchKey: string): void;\n  renderEmptyContent(this: WebTable): ReactNode | null;\n  onPageSizeChange(this: WebTable, pageSize: number): void;\n  onPageNumChange(this: WebTable, current: number): void;\n  getPaginationProps(this: WebTable): any;\n}\n\nconst methods: ICommonMethods =  {\n  init() {\n    const { pagination = {} } = this.props;\n    const { pageSize } = pagination;\n    const result = convertData(getDataSource(this.props));\n\n    const mergeState = {\n      searchKey: '',\n      orderColumn: '',\n      orderType: '',\n      dataSource: result.dataSource || [],\n      totalCount: result.totalCount || 0,\n      pageSize,\n      currentPage: result.currentPage || 1,\n    };\n\n    this.state = this.state || {};\n    assign(this.state, mergeState);\n  },\n  loadData(this, from) {\n    const { onFetchData, onLoadData } = this.props;\n    const { currentPage, pageSize, searchKey, orderColumn, orderType } = this.state;\n\n    if (onLoadData) {\n      onLoadData(currentPage, pageSize, searchKey, orderColumn, orderType, from);\n\n    } else {\n      onFetchData && onFetchData({ currentPage, pageSize, searchKey, orderColumn, orderType, from });\n    }\n  },\n  getDataSource(this) {\n    const { dataSource } = this.state;\n\n    const list = deepcopy(dataSource);\n\n    list.forEach((item: any) => {\n      delete item.__mode__;\n      delete item.__fields__;\n      delete item.__expand__;\n    });\n\n    return list;\n  },\n  getDataItem(value) {\n    const { primaryKey } = this.props;\n    const { dataSource } = this.state;\n\n    return dataSource.find((item: any) => {\n      return item[primaryKey!] === value;\n    });\n  },\n  onSort(dataIndex, order) {\n    this.setState({\n      orderColumn: dataIndex,\n      orderType: order,\n    }, () => {\n      this.loadData('order');\n    });\n  },\n  onSearch(searchKey) {\n    this.setState({ searchKey }, () => {\n      this.loadData('search');\n    });\n  },\n  renderEmptyContent() {\n    const { setEmptyContent, emptyContent } = this.props;\n\n    if (!setEmptyContent) {\n      return null;\n    }\n\n    return typeof emptyContent === 'function' ? emptyContent() : isValidElement(emptyContent) ? emptyContent : null;\n  },\n  onPageSizeChange(pageSize) {\n    this.setState({ pageSize }, () => {\n      this.loadData('pagination');\n    });\n  },\n  onPageNumChange(current) {\n    this.setState({\n      currentPage: current,\n    }, () => {\n      this.loadData('pagination');\n    });\n  },\n  getPaginationProps() {\n    const { nextTablePrefix, pagination, locale, noPadding } = this.props;\n    const { currentPage, pageSize, totalCount } = this.state;\n    return {\n      nextTablePrefix, currentPage, totalCount,\n      ...pagination,\n      noPadding,\n      pageSize,\n      locale,\n      onChange: this.onPageNumChange.bind(this),\n      onPageSizeChange: this.onPageSizeChange.bind(this),\n    };\n  },\n};\n\nexport default methods;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/mixin/editableMethods.ts",
    "content": "import assign from \"lodash/assign\";\nimport isObject from \"lodash/isObject\";\nimport isEmpty from \"lodash/isEmpty\";\nimport dispatchResizeEvent from \"../utils/dispatchResizeEvent\";\nimport getCleanRowData from \"../utils/getCleanRowData\";\nimport type WebTable from \"../table/webTable\";\n\nfunction getDataItemByValue(rowData: any, instance: WebTable) {\n  const { primaryKey } = instance.props;\n  const primaryValue = isObject(rowData) ? (rowData as any)[primaryKey!] : rowData;\n\n  return instance.getDataItem(primaryValue);\n}\n\nfunction getAndCloneDataItem(rowData: any, instance: WebTable) {\n  return getCleanRowData(getDataItemByValue(rowData, instance));\n}\n\nfunction callTableCell(rowData: any, instance: WebTable, callback: (field: any) => any) {\n  const item = getDataItemByValue(rowData, instance) || {};\n  const { __fields__ } = item;\n\n  if (__fields__) {\n    const promiseList: Promise<any>[] = [];\n\n    Object.keys(__fields__).forEach((name) => {\n      const field = __fields__[name];\n      if (field && callback) {\n        promiseList.push(Promise.resolve(callback(field)));\n      }\n    });\n\n    return Promise.all(promiseList);\n  }\n\n  return Promise.resolve();\n}\n\n// editRow(rowData): 使指定的行切换到编辑模式。\n// saveRow(rowData): 保存行至数据\n// resetRow(rowData): 重置行到数据（若保存过，则为保存过后的数据）。\n\n\nexport interface IEditableMethodsProps {\n  onEditRow?(rowItem: any): void;\n  onResetRow?(rowItem: any): void;\n  onSaveRow?(rowItem: any): void;\n}\n\nexport interface IEditableMethods {\n  init(this: WebTable): void;\n  validateRow(this: WebTable, rowData: any): any;\n  editRow(this: WebTable, rowData: any): any;\n  saveRow(this: WebTable, rowData: any): any;\n  resetRow(this: WebTable, rowData: any): any;\n}\n\nconst methods: IEditableMethods = {\n  init() {\n    const mergeState = {};\n\n    this.state = this.state || {};\n    assign(this.state, mergeState);\n  },\n  validateRow(rowData) {\n    return callTableCell(rowData, this, (field) => {\n      return field.validateCell();\n    }).then((dataList) => {\n      const result: any = {};\n\n      dataList && dataList.forEach((field) => {\n        field && Object.keys(field).forEach((name) => {\n          result[name] = field[name];\n        });\n      });\n\n      return isEmpty(result) ? undefined : result;\n    });\n  },\n  editRow(rowData) {\n    const { onEditRow } = this.props;\n\n    const promise = callTableCell(rowData, this, (field) => {\n      return field.setEditable(true);\n    }).then(() => {\n      const rowItem = getAndCloneDataItem(rowData, this);\n      rowItem && onEditRow && onEditRow(rowItem);\n\n      return rowItem;\n    });\n\n    promise.finally(() => {\n      dispatchResizeEvent();\n    });\n\n    return promise;\n  },\n  saveRow(rowData) {\n    const { onSaveRow } = this.props;\n\n    const promise = this.validateRow(rowData).then((error: Error) => {\n      if (error) {\n        return Promise.reject(error);\n\n      } else {\n        return callTableCell(rowData, this, (field) => {\n          return field.saveCell();\n        });\n      }\n    }).then(() => {\n      const rowItem = getAndCloneDataItem(rowData, this);\n      rowItem && onSaveRow && onSaveRow(rowItem);\n\n      return rowItem;\n    });\n\n    promise.finally(() => {\n      dispatchResizeEvent();\n    });\n\n    return promise;\n  },\n  resetRow(rowData) {\n    const { onResetRow } = this.props;\n\n    const promise = callTableCell(rowData, this, (field) => {\n      return field.resetCell();\n    }).then(() => {\n      const rowItem = getAndCloneDataItem(rowData, this);\n      rowItem && onResetRow && onResetRow(rowItem);\n\n      return rowItem;\n    });\n\n    promise.finally(() => {\n      dispatchResizeEvent();\n    });\n\n    return promise;\n  },\n};\n\nexport default methods;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/mixin/loadMethods.ts",
    "content": "import isPlainObject from \"lodash/isPlainObject\";\n\nexport default function loadMethods(target: {[propKey: string]: any}, source: {[propKey: string]: any}) {\n    if (!source || !isPlainObject(source)) {\n        return;\n    }\n\n    const { init, ...srcMethods } = source;\n\n    // eslint-disable-next-line guard-for-in,no-restricted-syntax\n    for (const methodName in srcMethods) {\n        target[methodName] = source[methodName];\n    }\n\n    if (typeof init === 'function') {\n        init.call(target);\n    }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/scss/variables.scss",
    "content": "/* write style here */\n@import '~@alifd/next/variables.scss';\n\n// 必须设置，请严格遵循该包含default的写法。\n$css-prefix: 'next-' !default;\n$deep-css-prefix: 'deep-' !default;\n\n// 使用到的主题扩展变量,内置默认值\n$color-fill1-5: #BBC3CC !default;\n$color-fill1-6: #A5AFBC !default;\n$color-fill1-7: #79889B !default;\n$color-fill1-8: #4C6079 !default;\n$color-fill1-9: #1F3858 !default;\n\n// default for theme-97\n$color-brand1-2: #FFF0E5 !default;\n$color-brand1-3: #FFF7F0 !default;\n\n// default for theme-254\n//$color-brand1-2: #E5F1FD !default;\n//$color-brand1-3: #F0F7FF !default;\n\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/table/webTable.tsx",
    "content": "import React, { ReactNode } from 'react';\nimport { Table } from '@alifd/next';\nimport isEqual from 'lodash/isEqual';\nimport { ColumnProps, TableProps } from '@alifd/next/types/table';\nimport convertData from '../utils/convertData';\nimport loadMethods from \"../mixin/loadMethods\";\nimport commonMethods, { ICommonMethods } from \"../mixin/commonMethods\";\nimport columnMethods, { IColumnMethods } from \"../mixin/columnMethods\";\nimport WebToolbar, { IWebToolbarProps } from \"../component/webToolbar\";\nimport WebPagination from \"../component/webPagination\";\nimport hasRowAction from \"../utils/hasRowAction\";\nimport runToolbarActionCallback from \"../utils/runToolbarActionCallback\";\nimport buildTableProps from \"../utils/buildTableProps\";\nimport editableMethods, { IEditableMethods, IEditableMethodsProps } from \"../mixin/editableMethods\";\nimport WebNextTableActionCell, { IWebNextTableActionCellProps } from \"../component/webNextTableActionCell\";\nimport WebNextTableCell, { IWebNextTableCellProps } from \"../component/webNextTableCell\";\nimport getDataSource from \"../utils/getDataSource\";\nimport titleMessageRender from \"../utils/render/titleMessageRender\";\nimport { LoadingProps } from '@alifd/next/types/loading';\n\n\n\nexport interface IWebTableProps extends IWebToolbarProps, IEditableMethodsProps, Omit<IWebNextTableActionCellProps, 'index'>, Omit<TableProps, 'locale' | 'onSelect'> {\n  data?: any;\n  columns?: any[];\n  nextTablePrefix?: string;\n  isPagination?: boolean;\n  actionTitle?: string;\n  actionFixed?: string;\n  actionWidth?: number | string;\n  pagination?: any;\n  primaryKey?: string;\n  onFetchData?: (options: Pick<IWebTableState, \"currentPage\" | \"pageSize\" | \"searchKey\" | \"orderColumn\" | \"orderType\"> & { from: string; }) => void;\n  onLoadData?: (...options: any[]) => void;\n  onColumnsChange?: (columns: IWebTableProps['columns']) => void;\n  setEmptyContent?: boolean;\n  emptyContent?: (() => ReactNode) | ReactNode;\n  noPadding?: boolean;\n  dataSource?: any;\n  device?: string;\n  actionHidden?: boolean;\n  theme?: string;\n  width?: string | number;\n  height?: string | number;\n  showRowSelector?: boolean;\n  onSelect?: NonNullable<TableProps['rowSelection']>['onSelect'];\n  onSelectAll?: NonNullable<TableProps['rowSelection']>['onSelectAll'];\n  isRowSelectorDisabled?: (rowData: any, index: number) => boolean;\n  rowSelector?: string;\n  onCellDataChange?: IWebNextTableCellProps['onCellDataChange'];\n  clsPrefix?: string;\n  tablePrefix?: string;\n  className?: string;\n  loadingComponent?: (props: LoadingProps) => ReactNode;\n }\n\ninterface IWebTableState {\n  originalColumns?: any[];\n  currentColumns?: any[]\n  currentPage: number;\n  pageSize: number;\n  searchKey: string; \n  orderColumn: string;\n  orderType: string;\n  dataSource: any;\n  totalCount: number;\n  isCustomColumnDrawerShown: boolean;\n}\n\ninterface WebTable extends React.Component<IWebTableProps, IWebTableState>, Omit<ICommonMethods, 'init'>, Omit<IColumnMethods, 'init'>, Omit<IEditableMethods, 'init'> {}\nclass WebTable extends React.Component<IWebTableProps, IWebTableState> {\n  static displayName = 'WebTable';\n\n  constructor(props: IWebTableProps) {\n    super(props);\n\n    loadMethods(this, commonMethods);\n    loadMethods(this, columnMethods);\n    loadMethods(this, editableMethods);\n  }\n\n  componentWillReceiveProps(nextProps: IWebTableProps) {\n    const { data } = this.props;\n    const nextData = getDataSource(nextProps);\n\n    if (!isEqual(nextData, data)) {\n      this.setState(convertData(nextData));\n    }\n\n    const {originalColumns} = this.state;\n    const {columns : nextColumns} = nextProps;\n\n    if (!isEqual(originalColumns, nextColumns)) {\n      this.setOriginalColumns(nextColumns);\n      this.changeCurrentColumns(nextColumns);\n    }\n  }\n\n  renderColumn(column: any) {\n    const { nextTablePrefix, onCellDataChange } = this.props;\n    const { lock, dataKey, width, title, titleRender, message, sortable, align, resizable, filters, filterMode } = column;\n    const props: ColumnProps = {\n      dataIndex: dataKey,\n      cell: (value, rowIndex, rowData) => {\n        return (<WebNextTableCell {...{\n          value,\n          rowIndex,\n          rowData,\n          column,\n          isRenderEditMode: true,\n          nextTablePrefix,\n          onCellDataChange,\n        }}/>);\n      },\n      title: titleMessageRender(title, message, nextTablePrefix),\n      width,\n      sortable,\n      align,\n      resizable,\n      filters,\n      filterMode,\n    };\n\n    if (lock && lock !== 'none') {\n      props.lock = lock;\n    }\n\n    if (titleRender) {\n      props.title = titleRender(column.title);\n    }\n\n    return <Table.Column {...props} key={dataKey}/>;\n  }\n\n\n  renderColumns(columns: IWebTableState['currentColumns']) {\n    return columns ? columns.map((column) => {\n      if (!column.isGroup) {\n        return this.renderColumn(column)\n      }\n      return (\n        column.children && column.children.length ? <Table.ColumnGroup key={column.dataKey || `_${Math.random()}`}  title={column.title || 'group'}>\n          {\n            this.renderColumns(column.children)\n          }\n        </Table.ColumnGroup> : null\n      )\n    }) : null;\n  }\n\n  renderActionColumns() {\n    const {\n      actionTitle, actionFixed, actionWidth, actionColumn, actionType,\n      maxWebShownActionCount, nextTablePrefix, device, primaryKey, locale\n    } = this.props;\n\n    if (!hasRowAction(this.props)) {\n      return null;\n    }\n\n    const actionColumnProps: ColumnProps = {\n      title: actionTitle,\n      lock: actionFixed !== 'none' ? actionFixed : false,\n      width: actionWidth,\n      cell: (value, index, rowData) => {\n        return <WebNextTableActionCell {...{\n          locale,\n          device,\n          actionColumn,\n          actionType,\n          maxWebShownActionCount,\n          nextTablePrefix,\n          primaryKey,\n          value,\n          index,\n          rowData,\n        }}/>;\n      },\n    };\n\n    return <Table.Column {...actionColumnProps} />;\n  }\n\n  render() {\n    const { nextTablePrefix, isPagination, locale } = this.props;\n    const { dataSource, currentColumns } = this.state;\n    const paginationProps = this.getPaginationProps();\n\n    return (\n      <div className={`${nextTablePrefix}web-table`}>\n        <WebToolbar\n          {...(this.props)}\n          onActionClick={(item) => {\n            runToolbarActionCallback({ action: item });\n          }}\n          onSearch={this.onSearch.bind(this)}\n          onClickCustomColumn={this.showCustomColumnDrawer.bind(this)}\n          paginationProps={paginationProps}\n        />\n\n        <Table\n          {...buildTableProps({\n            ...this.props,\n            dataSource,\n            onSort: this.onSort.bind(this),\n            emptyContent: this.renderEmptyContent(),\n          })}>\n          {this.renderColumns(currentColumns)}\n          {this.renderActionColumns()}\n        </Table>\n\n        {isPagination ? <WebPagination {...paginationProps} locale={locale}/> : null}\n\n        {this.renderCustomColumnDrawer()}\n      </div>\n    );\n  }\n}\n\nexport default WebTable;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/buildNextTableMethod.ts",
    "content": "import type { NextTable } from \"..\";\nimport { IEditableMethods } from \"../mixin/editableMethods\";\n\nconst methodList: (keyof Omit<IEditableMethods, 'init'> | 'getDataSource')[] = [\n  'editRow',\n  'saveRow',\n  'resetRow',\n  'validateRow',\n  'getDataSource',\n];\n\nexport default function buildNextTableMethod(instance: NextTable) {\n  methodList.forEach((name) => {\n    instance[name] = function () {\n      const { tableRef } = instance;\n      const { current } = tableRef;\n      if (current) {\n        const method = current[name];\n        if (method) {\n          return method.apply(current, arguments as any);\n        }\n      }\n\n    };\n  });\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/buildTableProps.ts",
    "content": "import { IWebTableProps } from \"../table/webTable\";\nimport { TableProps } from '@alifd/next/types/table';\n\nexport default function buildTableProps(props: IWebTableProps) {\n  const {\n    loading, dataSource, onSort, emptyContent, onFilter, cellProps, rowProps,\n    primaryKey, theme, hasHeader, fixedHeader, maxBodyHeight, stickyHeader, isTree, indent,\n    onRowClick, onRowMouseEnter, onRowMouseLeave, onResizeChange, width, height, loadingComponent,\n    hasExpandedRowCtrl, expandedRowRender, onRowOpen, expandedRowIndent, useVirtual,offsetTop, sort, sortIcons,\n    showRowSelector, onSelect, onSelectAll, isRowSelectorDisabled, rowSelector, size, expandedIndexSimulate, rowSelection,\n  } = props;\n\n  let tableProps: TableProps = {\n    size,\n    primaryKey: primaryKey || 'id',\n    dataSource: dataSource || [],\n    hasBorder: theme === 'border',\n    hasHeader,\n    isZebra: theme === 'zebra',\n    loading,\n    emptyContent,\n    cellProps,\n    rowProps,\n    onFilter,\n    fixedHeader,\n    maxBodyHeight,\n    stickyHeader,\n    offsetTop,\n    isTree,\n    indent,\n    useVirtual,\n    onRowClick,\n    onRowMouseEnter,\n    onRowMouseLeave,\n    onResizeChange,\n    sort,\n    sortIcons,\n    onSort,\n    loadingComponent,\n    hasExpandedRowCtrl,\n    expandedRowRender,\n    onRowOpen,\n    expandedRowIndent,\n    style: { width, height },\n    expandedIndexSimulate,\n  };\n\n  if ('openRowKeys' in props) {\n    tableProps.openRowKeys = props.openRowKeys\n  }\n\n  if (showRowSelector) {\n    let selection: TableProps['rowSelection'];\n\n    if (rowSelection) {\n      selection = rowSelection;\n\n    } else {\n      selection = {};\n\n      if (onSelect) {\n        selection.onSelect = onSelect;\n      }\n\n      if (onSelectAll) {\n        selection.onSelectAll = onSelectAll;\n      }\n      selection.mode = rowSelector === 'checkboxSelector' ? 'multiple' : 'single';\n      if (isRowSelectorDisabled) {\n        const isRowSelectorDisabledFunc = isRowSelectorDisabled;\n        selection.getProps = (rowData, index) => ({\n          disabled: isRowSelectorDisabledFunc(rowData, index),\n        });\n      }\n    }\n    tableProps.rowSelection = selection;\n  }\n\n  return tableProps;\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/chainAccess.ts",
    "content": "export function safeAccess(obj: { [prop: string]: any }, str: string) {\n  return str.split('.').reduce((o, k) => (o ? o[k] : undefined), obj);\n};\n\nexport function safeWrite(obj: { [prop: string]: any }, str: string, value: any) {\n  const segs = str.split('.');\n  const key = segs.pop();\n  const leaf = segs.reduce((o, k) => {\n    if (!o[k]) {\n      o[k] = {};\n    }\n    return o[k];\n  }, obj);\n  if (typeof key === 'string') {\n    leaf[key] = value;\n  }\n};\n\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/convertData.ts",
    "content": "import deepcopy from 'lodash/cloneDeep';\nimport isPlainObject from \"lodash/isPlainObject\";\n\nexport default function convertData(data: Array<any> | { data?: Array<any>; currentPage?: string; totalCount?: string; }) {\n    let dataSource: Array<any> | undefined = [];\n    let currentPage = 1;\n    let totalCount = 0;\n\n    if (Array.isArray(data)) {\n        dataSource = data;\n\n    } else if (isPlainObject(data)) {\n        dataSource = data.data;\n        currentPage = typeof data.currentPage !== \"undefined\" ? parseInt(data.currentPage, 10) : 1;\n        totalCount = typeof data.totalCount !== \"undefined\" ? parseInt(data.totalCount, 10) : 0;\n    }\n\n    return {dataSource : dataSource ? deepcopy(dataSource) : [], currentPage, totalCount};\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/delegateFunctions.ts",
    "content": "import deepcopy from \"lodash/cloneDeep\";\nimport isFunction from \"lodash/isFunction\";\n\nexport default function delegateFunctions(list: any[] | undefined, key: string, context: any, newArgPosition?: number) {\n    if (list && list.length) {\n        const result = deepcopy(list);\n\n        result.forEach((item) => {\n            const func = item && item[key];\n\n            if (func && isFunction(func)) {\n                item[key] = function () {\n                    const ARGS = Array.prototype.slice.call(arguments);\n                    if (newArgPosition === undefined) {\n                        ARGS.push(context);\n                    } else {\n                        ARGS.splice(newArgPosition, 0, context);\n                    }\n\n                    return func.apply(context, ARGS);\n                };\n            }\n        });\n\n        return result;\n    }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/dispatchResizeEvent.ts",
    "content": "let lastDelayId: number;\n\nexport default function dispatchResizeEvent() {\n    clearTimeout(lastDelayId);\n\n    lastDelayId = window.setTimeout(function () {\n        if (window.dispatchEvent) {\n            window.dispatchEvent(new Event('resize'));\n        }\n    }, 10);\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/filterActionColumn.ts",
    "content": "import type { IWebTableProps } from \"../table/webTable\";\nimport filterActionColumnByDevice from \"./filterActionColumnByDevice\";\n\nexport default function filterActionColumn(actionColumn: IWebTableProps['actionColumn'], rowData: any, device: IWebTableProps['device']) {\n  const filterByEditable = actionColumn.filter((action) => {\n    if (action.render && typeof action.render === 'function' && !action.render(action.title, rowData)) {\n      return false\n    }\n    if (rowData.__mode__ === \"EDIT\") {\n      return action.mode === \"EDIT\";\n    } else {\n      return action.mode !== \"EDIT\";\n    }\n\n  });\n\n  return filterActionColumnByDevice(filterByEditable, device);\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/filterActionColumnByDevice.ts",
    "content": "import type { IWebTableProps } from \"../table/webTable\";\n\nexport default function filterActionColumnByDevice(actionColumn: IWebTableProps['actionColumn'] = [], device: IWebTableProps['device']) {\n  return actionColumn.filter((action) => {\n    let actionDevice = action.device;\n\n    if (device && actionDevice) {\n      if (!Array.isArray(actionDevice)) {\n        actionDevice = [actionDevice];\n      }\n\n      return actionDevice.includes(device);\n\n    } else {\n      return true;\n    }\n  });\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/filterColumn.ts",
    "content": "import type { IWebCustomColumnDrawerProps } from \"../component/webCustomColumnDrawer\";\n\nexport default function filterColumn(columns: IWebCustomColumnDrawerProps['columns'] = []) {\n  return columns.filter((item) => {\n      return item.hidden !== true;\n  });\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/formatter.ts",
    "content": "import Big from 'big.js';\n\nconst Formatter = {\n  date: (str: string | false | null, pattern?: string) => {\n    // new Date(null,false) 会返回最初日期。\n    if (str === null || str === false || str === undefined || str === '') {\n      console.warn('Formatter: invalid date');\n      return '';\n    }\n    const date = new Date(str);\n    if (Object.prototype.toString.call(date) === '[object Date]') {\n      if (isNaN(date.getTime())) {\n        // invalid\n        console.warn('Formatter: invalid date');\n        return '';\n      }\n      let actualPattern = pattern || 'YYYY-MM-DD';\n      const o = {\n        'M+': date.getMonth() + 1, // 月份\n        'D+': date.getDate(), // 日\n        'd+': date.getDate(), // 日\n        'H+': date.getHours(), // 小时\n        'h+': date.getHours(), // 小时\n        'm+': date.getMinutes(), // 分\n        's+': date.getSeconds(), // 秒\n        'Q+': Math.floor((date.getMonth() + 3) / 3), // 季度\n        'q+': Math.floor((date.getMonth() + 3) / 3), // 季度\n        S: date.getMilliseconds(), // 毫秒\n      };\n      if (/(y+)/i.test(actualPattern)) {\n        actualPattern = actualPattern.replace(\n          /(y+)/i,\n          (substr, $1) => {\n            return (`${date.getFullYear()}`).slice(4 - $1.length)\n          }\n        );\n      }\n      (Object.keys(o) as Array<keyof typeof o>).forEach((k) => {\n        if (new RegExp(`(${k})`).test(actualPattern)) {\n          actualPattern = actualPattern.replace(new RegExp(`(${k})`), (substr, $1) => {\n            if ($1.length === 1) return `${o[k]}`;\n            return `00${o[k]}`.slice(`${o[k]}`.length)\n          })\n        }\n      });\n      return actualPattern;\n    }\n    return '';\n  },\n  money: (str: string, delimiter = ' ', fixedNum?: number | string) => {\n    const actualStr = fixedNum ? new Big(str).toFixed(parseInt(fixedNum.toString(), 10)).toString() : str;\n    if (actualStr.indexOf('.') !== -1) {\n      return actualStr.replace(/(\\d)(?=(?:\\d{3})+(\\.))/g, (match, $1) => $1 + delimiter)\n        .replace(/(\\d{3})(?![$|\\.|\\(|\\s])/g, (match, $1) => $1);\n    }\n    return actualStr.replace(/(\\d)(?=(?:\\d{3})+$)/g, (match, $1) => $1 + delimiter);\n  },\n};\n\n\n\n\n\nexport default Formatter;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/getCleanRowData.ts",
    "content": "import isPlainObject from \"lodash/isPlainObject\";\nimport forOwn from \"lodash/forOwn\";\nimport isArray from \"lodash/isArray\";\n\nfunction deepCopyExcept(data: any, callback: (value: any, key: string | number) => boolean) {\n  let dest: any, i, shouldExcept, newValue;\n\n  if (isPlainObject(data)) {\n    dest = {};\n    forOwn(data, (value, key) => {\n      newValue = deepCopyExcept(value, callback);\n      shouldExcept = callback(newValue, key);\n      if (!shouldExcept) {\n        dest[key] = newValue;\n      }\n    });\n  } else if (isArray(data)) {\n    dest = [];\n    for (i = 0; i < data.length; i++) {\n      newValue = deepCopyExcept(data[i], callback);\n      shouldExcept = callback(newValue, i);\n      if (!shouldExcept) {\n        dest.push(newValue);\n      }\n    }\n  } else {\n    return data;\n  }\n  return dest;\n};\n\nexport default function getCleanRowData(rowData: any) {\n  if (rowData) {\n    const blackList = ['__mode__', '__fields__', '__expand__'];\n    return deepCopyExcept(rowData, (value, key) => {\n      return blackList.indexOf(<string>key) !== -1\n    })\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/getColumnsFromChildern.tsx",
    "content": "import React, { ReactNode, ReactElement } from 'react'\nexport default (children: ReactNode) => {\n  const getColumns = (children: ReactNode) => {\n    let columns: any = []\n    const getCols = (children: ReactNode) => {\n      React.Children.map(children, item => {\n        const { props } = item as ReactElement;\n        if (props.children && props.children.length) {\n          columns.push({\n            isGroup: true,\n            title: props.align ? <div style={{textAlign: props.align}}>{props.title || ''}</div> : props.title || '',\n            children: getColumns(props.children)\n          })\n        } else {\n          columns.push({...props})\n        }\n      });\n    }\n    getCols(children)\n    return columns;\n  }\n  return getColumns(children)\n}"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/getDataSource.ts",
    "content": "import type { IWebTableProps } from \"../table/webTable\";\n\nexport default function getDataSource(props: IWebTableProps) {\n  if (props) {\n      return props.dataSource || props.data;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/hasRowAction.ts",
    "content": "import { IWebTableProps } from \"../table/webTable\";\nimport filterActionColumnByDevice from \"./filterActionColumnByDevice\";\n\nexport default function hasRowAction(props: IWebTableProps, withoutEdit?: boolean) {\n  const { actionHidden, actionColumn, device } = props;\n\n  if (actionHidden) {\n    return false;\n  }\n\n  if (actionColumn && actionColumn.length) {\n    let actionColumnFilter = filterActionColumnByDevice(actionColumn, device);\n\n    if (withoutEdit) {\n      actionColumnFilter = actionColumnFilter.filter((action) => {\n        return action.mode !== \"EDIT\";\n      });\n    }\n\n    return !!(actionColumnFilter && actionColumnFilter.length);\n\n  } else {\n    return false;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/actionTitleRender.tsx",
    "content": "import type { IActionColumnItem } from \"../../component/webNextTableActionCell\";\n\nexport default function actionTitleRender(action: IActionColumnItem, rowData: any) {\n  const { title, render } = action;\n\n  if (render) {\n    try {\n      return render(title, rowData);\n    } catch (e) {\n      if (e instanceof Error) {\n        console.warn(e.stack);\n      }\n      return title;\n    }\n\n  } else {\n    return title;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/cascadeTimestampRender.tsx",
    "content": "import errorRender from './errorRender';\nimport defaultRender from './defaultRender';\nimport Formatter from '../formatter';\n\nexport default function cascadeTimestampRender(cellData: any, item: { timeFormatter?: string }) {\n  if (!cellData) {\n    return '';\n  }\n\n  const { timeFormatter } = item;\n  if (Object.prototype.toString.call(cellData) === '[object Object]') {\n    if (!cellData.hasOwnProperty('start') && !cellData.hasOwnProperty('end')) {\n      return errorRender();\n    }\n    const start = Formatter.date(cellData.start, timeFormatter);\n    const end = Formatter.date(cellData.end, timeFormatter);\n    return defaultRender(`${start} ~ ${end}`);\n  }\n  return errorRender();\n};\n\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/commonTableCellRender.tsx",
    "content": "import defaultRender from \"./defaultRender\";\nimport timestampRender from \"./timestampRender\";\nimport cascadeTimestampRender from \"./cascadeTimestampRender\";\nimport moneyRender from \"./moneyRender\";\nimport moneyRangeRender from \"./moneyRangeRender\";\nimport linkRender from './linkRender'\nimport fileRender from './fileRender'\nimport enumRender from './enumRender'\nimport imageRender from './imageRender'\n\nexport default function commonTableCellRender(value: any, index: number, rowData: any, column: any) {\n  const { dataType } = column;\n\n  if (dataType === 'text') {\n    return defaultRender(value);\n  }\n\n  if (dataType === 'link') {\n    return linkRender(value, column, rowData)\n  }\n\n  if (dataType === 'file') {\n    return fileRender(value)\n  }\n  if (dataType === 'image') {\n    return imageRender(value, column, rowData)\n  }\n\n  if (dataType === 'enum') {\n    return enumRender(value, column)\n  }\n\n  if (dataType === 'timestamp') {\n    return timestampRender(value, column);\n  }\n\n  if (dataType === 'cascadeTimestamp') {\n    return cascadeTimestampRender(value, column);\n  }\n\n  if (dataType === 'money') {\n    return moneyRender(value);\n  }\n\n  if (dataType === 'moneyRange') {\n    return moneyRangeRender(value);\n  }\n\n  const { render } = column;\n  if (render) {\n    try {\n      return render(value, index, rowData);\n    } catch (e) {\n      if (e instanceof Error) {\n        console.warn(e.stack);\n      }\n      return defaultRender(value);\n    }\n\n  } else {\n    return defaultRender(value);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/defaultRender.tsx",
    "content": "import React from 'react';\nimport isObject from \"lodash/isObject\";\n\nexport default function defaultRender(value: any, className = '') {\n  if (value === undefined || value === null) {\n    return '';\n  }\n\n  if (isObject(value)) {\n    value = JSON.stringify(value);\n  }\n\n  return (\n    <span title={value} className={className}>\n      {value}\n    </span>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/enumRender.tsx",
    "content": "import React, { ReactNode } from 'react';\n\nexport default function enumRender(cellData: any, column: { \n  enumData?: { value: any; text?: ReactNode; color?: string }[]; \n  enumBadgeType?: string;  \n}) {\n  if (!cellData && cellData !== 0) {\n    return '';\n  }\n\n  const { enumData, enumBadgeType } = column;\n  if (!enumData || !Array.isArray(enumData) || enumData.length === 0) {\n    return cellData;\n  }\n\n  const found = enumData.find((item) => {\n    return item.value === cellData;\n  });\n\n  let color = 'black';\n  let theme = 'background';\n\n  if (!found) {\n    return cellData;\n  }\n\n  if (found.color) {\n    color = found.color;\n    if (enumBadgeType) {\n      theme = enumBadgeType;\n    }\n    let className = `deep-table-badge deep-table-badge-${theme}-${color}`;\n    return <span className={className}>{found.text}</span>\n  }\n\n  return found.text;\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/errorRender.tsx",
    "content": "import defaultRender from './defaultRender';\n\nexport default function errorRender() {\n    return defaultRender('数据格式不合法', 'error-cell');\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/fileRender.tsx",
    "content": "import React from 'react';\n\nexport default function fileRender(value: {name?: string; url?: string}[]) {\n  if (!value) {\n    return '';\n  }\n  if (!value.length || !value.splice) {\n    return <div style={{ color: '#F04631' }}>数据格式不合规，请返回数组形式！</div>\n  }\n  return value.map(file => {\n    return (\n      <a\n        key={file.name}\n        style={{ display: 'inline-block', margin: '0 5px' }}\n        title={file.name}\n        className=\"overflow-hidden-cell\"\n        href={file.url}\n      >\n        {file.name}\n      </a>\n    )\n  })\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/imageRender.tsx",
    "content": "import React, { MouseEvent } from 'react';\n\ninterface IImageRenderColumn {\n  imageProps?: React.CSSProperties & { onClick?(e: MouseEvent<HTMLImageElement>, column: IImageRenderColumn, rowData: any): void };\n  imageWrapProps?: React.CSSProperties;\n}\n\nexport default function ImageRender(value: string, column: IImageRenderColumn, rowData: any) {\n  if (!value || typeof value !== 'string') {\n    return <div style={{ color: '#F04631' }}>数据格式不合规，请返回字符串形式！</div>\n  }\n  const imageProps = column.imageProps || {\n    width: 80,\n    height: 80,\n    borderRadius: 4\n  }\n  const imageWrapProps = column.imageWrapProps || {\n    display: 'inline-block',\n    padding: 4,\n    background: '#eee',\n    borderRadius: 4,\n    height: 88,\n    width: 88\n  }\n  const { onClick, width } = imageProps\n  const renderImageProps = {\n    src: value,\n    width: width,\n    style: { ...imageProps },\n    onClick: (e: MouseEvent<HTMLImageElement>) => {\n      if (onClick && typeof onClick === 'function') {\n        onClick(e, column, rowData)\n        e.stopPropagation()\n      }\n    }\n  };\n\n  return (\n    <i style={{ ...imageWrapProps }}>\n      <img {...renderImageProps} />\n    </i>\n  )\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/linkRender.tsx",
    "content": "import React from 'react';\nimport { Button } from '@alifd/next'\nimport { ButtonProps } from '@alifd/next/types/button';\n\nexport default function linkRender(value?: { title?: string; href?: string } | string, column?: any, rowData?: any, onClick?: () => void) {\n  if (value === undefined || value === null) {\n    return '';\n  }\n  let renderProps: ButtonProps = {\n    text: true,\n    type: 'primary',\n    className: `deep-table-link-button`,\n    title: typeof value == 'object' ? value.title : value,\n    style: { ...(rowData.style || {}) },\n    onClick: () => {\n      onClick && typeof onClick === 'function' && onClick();\n      if (typeof value === 'object' && value.href) {\n        location.href = value.href;\n      } else if (typeof value == 'string') {\n        location.href = value;\n      }\n    }\n  }\n  return (\n    <Button {...renderProps}>{typeof value == 'object' ? value.title : value}</Button>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/moneyRangeRender.tsx",
    "content": "import errorRender from './errorRender';\nimport defaultRender from './defaultRender';\nimport Formatter from '../formatter';\n\nexport default function moneyRangeRender(cellData: {\n  lower?: string;\n  upper?: string;\n  currency?: string;\n}) {\n  if (!cellData) {\n    return '';\n  }\n\n  if (Object.prototype.toString.call(cellData) === '[object Object]') {\n    if (!cellData.hasOwnProperty('lower') || !cellData.hasOwnProperty('upper')) {\n      return errorRender();\n    }\n\n    let lower;\n    let upper;\n    try {\n      lower = Formatter.money(cellData.lower || '0', ',', 2);\n      upper = Formatter.money(cellData.upper || '0', ',', 2);\n    } catch (e) {\n      return errorRender();\n    }\n\n    return defaultRender(`${lower} ${cellData.currency || ''} ~ ${upper} ${cellData.currency || ''}`);\n  }\n  return errorRender();\n};\n\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/moneyRender.tsx",
    "content": "import errorRender from './errorRender';\nimport defaultRender from './defaultRender';\nimport Formatter from '../formatter';\n\nexport default function moneyRender(cellData: {\n  amount: string;\n  currency: string;\n} | string) {\n    if (cellData === undefined || cellData === null) {\n        return '';\n    }\n\n    let money;\n    if (typeof cellData === 'object') {\n        if (!cellData.hasOwnProperty('amount') || !cellData.hasOwnProperty('currency')) {\n            return errorRender();\n        }\n        try {\n            money = Formatter.money(cellData.amount || '0', ',', 2);\n        } catch (e) {\n            return errorRender();\n        }\n        return defaultRender(`${money} ${cellData.currency}`);\n    }\n\n    try {\n        money = Formatter.money(cellData || '0', ',', 2);\n    } catch (e) {\n        return errorRender();\n    }\n\n    return defaultRender(money);\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/timestampRender.tsx",
    "content": "import errorRender from './errorRender';\nimport defaultRender from './defaultRender';\nimport Formatter from '../formatter';\n\nexport default function timestampRender(cellData: string, item: { timeFormatter?: string }) {\n  if (!cellData) {\n    return '';\n  }\n\n  if (isNaN(Number(cellData))) {\n    return errorRender();\n  }\n\n  const { timeFormatter } = item;\n  const result = Formatter.date(cellData, timeFormatter);\n  return defaultRender(result);\n}"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/render/titleMessageRender.tsx",
    "content": "import { Balloon, Icon } from '@alifd/next';\nimport React, { ReactNode } from 'react';\nexport default function titleMessageRender(title: ReactNode, message: ReactNode, prefix?: string) {\n  if (!message) {\n    return title;\n  } else {\n    return <span className={`${prefix}column-title`}>\n      {title}\n      <Balloon.Tooltip\n        trigger={<Icon type=\"prompt-filling\" className={`${prefix}column-tooltip`} size=\"small\" />}\n        align=\"t\"\n      >\n        {message}\n      </Balloon.Tooltip>\n    </span>\n  }\n}"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/runColumnActionCallback.ts",
    "content": "import { IActionColumnItem } from \"../component/webNextTableActionCell\";\nimport getCleanRowData from \"./getCleanRowData\";\n\nexport default function runColumnActionCallback(param: { action: IActionColumnItem; rowData: any; index?: number }) {\n  const { action, rowData, index } = param;\n  const { callback = () => { } } = action;\n\n  try {\n    if (rowData && callback) {\n      return Promise.resolve(callback(getCleanRowData(rowData), action, index));\n    }\n  } catch (e) {\n    if (e instanceof Error) {\n      console.warn(e.stack);\n    }\n  }\n\n  return Promise.reject();\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/runToolbarActionCallback.ts",
    "content": "import { IAction } from \"../component/webToolbar\";\n\nexport default function runToolbarActionCallback(param: { action: IAction }) {\n  const { action } = param;\n  const { callback } = action;\n\n  try {\n    return callback && callback(action);\n  } catch (e) {\n    if (e instanceof Error) {\n      console.warn(e.stack);\n    }\n  }\n};\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-table/utils/tableProps.ts",
    "content": "import type { IWebTableProps } from \"../table/webTable\";\n\nexport function fetchKey<T>(source: T, keyList: Array<keyof T>): Partial<T> {\n  const result: Partial<T> = {};\n\n  keyList.forEach((k) => {\n    const v = source[k];\n\n    if (typeof v !== \"undefined\") {\n      result[k] = v;\n    }\n  });\n\n  return result;\n}\n\nexport const tableProps: Array<keyof IWebTableProps> = [\n  'clsPrefix',\n  'loading',\n  'device',\n  'locale',\n  'data',\n  'children',\n  'size',\n  'hasBorder',\n  'isZebra',\n  'noPadding',\n\n  'useVirtual',\n  'dataSource',\n  'onLoadData',\n  'onFetchData',\n  'columns',\n  'openRowKeys',\n  'onFilter',\n\n  'actionBar',\n  'isPagination',\n  'pagination',\n  'actionColumn',\n  'showMiniPager',\n  'sort',\n  'sortIcons',\n  'onColumnsChange',\n\n  'primaryKey', 'theme', 'hasHeader', 'fixedHeader', 'maxBodyHeight', 'stickyHeader', 'isTree', 'indent',\n  'onRowClick', 'onRowMouseEnter', 'onRowMouseLeave', 'onResizeChange', 'width', 'height', 'loadingComponent',\n  'hasExpandedRowCtrl', 'expandedRowRender', 'onRowOpen', 'expandedRowIndent',\n  'showRowSelector', 'onSelect', 'onSelectAll', 'isRowSelectorDisabled', 'rowSelector',\n  'actionHidden',\n  'actionColumn',\n  'actionTitle',\n  'actionType',\n  'actionFixed',\n  'actionWidth',\n  'maxWebShownActionCount',\n  'rowSelection',\n  'cellProps',\n  'rowProps',\n  'offsetTop',\n\n\n  'showActionBar',\n  'actionBar',\n  'showSearch',\n  'showCustomColumn',\n  'searchBarPlaceholder',\n  'showLinkBar',\n  'linkBar',\n  \"rowOrder\",\n  \"customBarItem\",\n  'onCellDataChange',\n  'expandedIndexSimulate',\n  'onEditRow',\n  'onSaveRow',\n  'onResetRow',\n  'setEmptyContent',\n  'emptyContent'\n];\n\nexport const paginationProps = [\n  'size',\n  'type',\n  'shape',\n  'pageShowCount',\n  'pageSize',\n  'pageSizeSelector',\n  'pageSizeList',\n  'pageNumberRender',\n  'pageSizePosition',\n  'useFloatLayout',\n  'hideOnlyOnePage',\n  'showJump',\n  'link',\n  'popupProps',\n  'paginationPosition',\n];\n\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-text/index.scss",
    "content": "$css-prefix: '.next-';\n\n:root {\n  --s-base: 4px;\n  --s-compact: calc(var(--s-base) * 50);\n  --s-comfortable: calc(var(--s-base) * 80);\n  --s-luxury: calc(var(--s-base) * 160);\n  --s-1: 4px;\n  --s-2: 8px;\n  --s-3: 12px;\n  --s-4: 16px;\n  --s-5: 20px;\n  --s-6: 24px;\n  --s-7: 28px;\n  --s-8: 32px;\n  --s-9: 36px;\n  --s-10: 40px;\n\n  /* font */\n  --font-family: Roboto, 'Helvetica Neue', Helvetica, Tahoma, Arial, 'PingFang SC',\n    'Microsoft YaHei';\n  --p-h1-font-size: 56px;\n  --p-h1-icon-size: 56px;\n  --p-h1-font-weight: 900;\n  --p-h1-line-height: 64px;\n  --p-h1-margin-top: var(--s-9);\n  --p-h1-margin-bottom: var(--s-1);\n\n  --p-h2-font-size: 48px;\n  --p-h2-icon-size: 48px;\n  --p-h2-font-weight: 800;\n  --p-h2-line-height: 52px;\n  --p-h2-margin-top: var(--s-8);\n  --p-h2-margin-bottom: var(--s-1);\n\n  --p-h3-font-size: 36px;\n  --p-h3-icon-size: 36px;\n  --p-h3-font-weight: 700;\n  --p-h3-line-height: 44px;\n  --p-h3-margin-top: var(--s-7);\n  --p-h3-margin-bottom: var(--s-1);\n\n  --p-h4-font-size: 24px;\n  --p-h4-icon-size: 24px;\n  --p-h4-font-weight: 600;\n  --p-h4-line-height: 32px;\n  --p-h4-margin-top: var(--s-5);\n  --p-h4-margin-bottom: var(--s-2);\n\n  --p-h5-font-size: 20px;\n  --p-h5-icon-size: 20px;\n  --p-h5-font-weight: 500;\n  --p-h5-line-height: 28px;\n  --p-h5-margin-top: var(--s-4); // 上下不一定相等\n  --p-h5-margin-bottom: var(--s-1);\n\n  /* large */\n  --p-h6-font-size: 16px;\n  --p-h6-icon-size: 16px;\n  --p-h6-font-weight: 400;\n  --p-h6-line-height: 24px;\n  --p-h6-margin-top: var(--s-4);\n  --p-h6-margin-bottom: var(--s-1);\n\n  --p-body1-font-size: 16px;\n  --p-body1-icon-size: 16px;\n  --p-body1-font-weight: 400;\n  --p-body1-line-height: 24px;\n  --p-body1-margin-top: var(--s-3);\n  --p-body1-margin-bottom: var(--s-1);\n  --p-body1-indent-size: var(--s-2);\n\n  /* medium */\n  --p-body2-font-size: 14px;\n  --p-body2-icon-size: 14px;\n  --p-body2-font-weight: 400;\n  --p-body2-line-height: 22px;\n  --p-body2-margin-top: var(--s-2);\n  --p-body2-margin-bottom: var(--s-1);\n  --p-body2-indent-size: var(--s-2);\n\n  /* small */\n  --p-caption-font-size: 12px;\n  --p-caption-icon-size: 12px;\n  --p-caption-font-weight: 300;\n  --p-caption-line-height: 20px;\n  --p-caption-margin-top: var(--s-3);\n  --p-caption-margin-bottom: var(--s-1);\n  --p-caption-indent-size: var(--s-1);\n\n  --p-overline-font-size: 10px;\n  --p-overline-icon-size: 10px;\n  --p-overline-font-weight: 200;\n  --p-overline-line-height: 18px;\n  --p-overline-margin-top: var(--s-1);\n  --p-overline-margin-bottom: var(--s-1);\n}\n\nbody {\n  --p-h1-margin-top: var(--s-1);\n  --p-h2-margin-top: var(--s-1);\n  --p-h3-margin-top: var(--s-1);\n  --p-h4-margin-top: var(--s-1);\n  --p-h5-margin-top: var(--s-1);\n  --p-h6-margin-top: var(--s-1);\n  --p-body1-margin-top: var(--s-1);\n  --p-body2-margin-top: var(--s-1);\n  --p-caption-margin-top: var(--s-1);\n}\n#{$css-prefix}text {\n  color: #1f2633;\n  text-align: justify;\n\n  // & + & {\n  //     margin-left: 0;\n  // }\n\n  &-title {\n    font-weight: bold;\n    margin-bottom: 0.5em;\n  }\n\n  & + &-title {\n    margin-top: 1.2em;\n  }\n\n  &-paragraph {\n    color: #1f2633;\n    margin-bottom: 1em;\n    font-size: 14px;\n    line-height: 1.5;\n  }\n\n  mark {\n    padding: 0;\n    background: #fffbc7;\n    color: #1f2633;\n  }\n\n  strong {\n    font-weight: bold;\n  }\n\n  code {\n    background-color: #f4f6f9;\n    color: #1f2633;\n    border: 1px solid #e4e8ee;\n    margin: 0 0.2em;\n    padding: 0.2em 0.4em 0.1em;\n    font-size: 85%;\n    border-radius: 4px;\n  }\n\n  ul,\n  ol {\n    margin: 0 0 1em 0;\n    padding: 0;\n  }\n\n  li {\n    list-style-type: circle;\n    margin: 0 0 0 20px;\n    padding: 0 0 0 4px;\n  }\n\n  a {\n    text-decoration: none;\n    &:link {\n      color: rgba(3, 193, 253, 1);\n    }\n    &:visited {\n      color: rgba(0, 123, 176, 1);\n    }\n    &:hover {\n      color: rgba(0, 157, 214, 1);\n    }\n    &:active {\n      text-decoration: underline;\n      color: rgba(0, 157, 214, 1);\n    }\n  }\n}\n\nh1#{$css-prefix}text-title {\n  font-size: 24px;\n}\n\nh2#{$css-prefix}text-title {\n  font-size: 20px;\n}\n\nh3#{$css-prefix}text-title {\n  font-size: 16px;\n}\n\nh4#{$css-prefix}text-title {\n  font-size: 16px;\n}\n\nh5#{$css-prefix}text-title {\n  font-size: 14px;\n}\n\nh6#{$css-prefix}text-title {\n  font-size: 14px;\n}\n#{$css-prefix}text {\n  &-inherit {\n    font-family: inherit;\n    font-size: inherit;\n    font-weight: inherit;\n    line-height: inherit;\n  }\n  &-overline {\n    font-family: var(--p-overline-font-family);\n    font-size: var(--p-overline-font-size);\n    font-weight: var(--p-overline-font-weight);\n    line-height: var(--p-overline-line-height);\n  }\n\n  &-caption {\n    font-family: var(--p-caption-font-family);\n    font-size: var(--p-caption-font-size);\n    font-weight: var(--p-caption-font-weight);\n    line-height: var(--p-caption-line-height);\n  }\n\n  &-body2 {\n    font-family: var(--p-body2-font-family);\n    font-size: var(--p-body2-font-size);\n    font-weight: var(--p-body2-font-weight);\n    line-height: var(--p-body2-line-height);\n  }\n\n  &-body1 {\n    font-family: var(--p-body1-font-family);\n    font-size: var(--p-body1-font-size);\n    font-weight: var(--p-body1-font-weight);\n    line-height: var(--p-body1-line-height);\n  }\n\n  &-h6 {\n    font-family: var(--p-h6-font-family);\n    font-size: var(--p-h6-font-size);\n    font-weight: var(--p-h6-font-weight);\n    line-height: var(--p-h6-line-height);\n  }\n\n  &-h5 {\n    font-family: var(--p-h5-font-family);\n    font-size: var(--p-h5-font-size);\n    font-weight: var(--p-h5-font-weight);\n    line-height: var(--p-h5-line-height);\n  }\n\n  &-h4 {\n    font-family: var(--p-h4-font-family);\n    font-size: var(--p-h4-font-size);\n    font-weight: var(--p-h4-font-weight);\n    line-height: var(--p-h4-line-height);\n  }\n\n  &-h3 {\n    font-family: var(--p-h3-font-family);\n    font-size: var(--p-h3-font-size);\n    font-weight: var(--p-h3-font-weight);\n    line-height: var(--p-h3-line-height);\n  }\n\n  &-h2 {\n    font-family: var(--p-h2-font-family);\n    font-size: var(--p-h2-font-size);\n    font-weight: var(--p-h2-font-weight);\n    line-height: var(--p-h2-line-height);\n  }\n\n  &-h1 {\n    font-family: var(--p-h1-font-family);\n    font-size: var(--p-h1-font-size);\n    font-weight: var(--p-h1-font-weight);\n    line-height: var(--p-h1-line-height);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/next-text/index.tsx",
    "content": "import * as React from 'react';\nimport classNames from 'classnames';\n\nexport const createTitle = (Tag) => {\n  /**\n   * Typography.Title\n   * @description 分为 H1, H2, H3, H4, H5, H6 不同的组件，表示不同层级，继承 Typography.Text API\n   * @order 1\n   */\n  class Title extends React.Component {\n    static defaultProps = {\n      prefix: 'next-',\n    };\n\n    render() {\n      const { prefix, className, ...others } = this.props;\n      return (\n        <Text\n          {...others}\n          component={Tag}\n          className={`${className || ''} ${prefix}typography-title`}\n        />\n      );\n    }\n  }\n\n  Title.displayName = Tag.toUpperCase();\n  return Title;\n};\n\n/**\n * 判断是否是生产环境\n * @type {Boolean}\n */\nexport const isProduction = () => {\n  const PRODUCTION_ENV = 'production';\n  let result = false;\n  try {\n    if (process.env.NODE_ENV === PRODUCTION_ENV) {\n      result = true;\n    }\n  } catch (err) {\n    //\n  }\n\n  return result;\n};\n\n// 兼容老逻辑\nexport const textTypeMap = {\n  'body-1': 'body2',\n  'body-2': 'body1',\n  subhead: 'h6',\n  title: 'h5',\n  headline: 'h4',\n  'display-1': 'h3',\n  'display-2': 'h2',\n  'display-3': 'h1',\n};\n\ninterface TextProps {\n  prefix?: string;\n  className?: string;\n  // type?: 'overline' | 'caption' | 'body-1' | 'body-2' | 'subhead' | 'title' | 'headline' | 'display-1' | 'display-2' | 'display-3';\n  // title === h5\n  // des === description\n  type?:\n    | 'h1'\n    | 'h2'\n    | 'h3'\n    | 'h4'\n    | 'h5'\n    | 'title'\n    | 'h6'\n    | 'body1'\n    | 'body2'\n    | 'caption'\n    | 'overline'\n    | 'inherit';\n  children?: React.ReactNode;\n  /**\n   * 添加删除线样式\n   */\n  delete?: boolean;\n  /**\n   * 添加标记样式\n   */\n  mark?: boolean;\n  /**\n   * 添加下划线样式\n   */\n  underline?: boolean;\n  /**\n   * 是否加粗\n   */\n  strong?: boolean;\n  /**\n   * 添加代码样式\n   */\n  code?: boolean;\n  /**\n   * 设置标签类型\n   */\n  component?: React.ElementType;\n}\n\n/**\n * 文字 字体、大小、行高\n * @param props\n */\nconst Text: React.FC<TextProps> = (props, ref) => {\n  const {\n    prefix,\n    className,\n    type,\n    component = 'span',\n    strong,\n    underline,\n    delete: deleteProp,\n    code,\n    mark,\n    ...others\n  } = props;\n\n  let { children } = props;\n  const newType = textTypeMap[type] || type;\n\n  const cls = classNames(className, {\n    [`${prefix}text`]: true,\n    [`${prefix}text-${newType}`]: newType,\n  });\n\n  if (typeof children === 'string' && children.indexOf('\\n') !== -1) {\n    const childrenList = children.split('\\n');\n    const newChildren: any = [];\n    childrenList.forEach((child) => {\n      newChildren.push(child);\n      newChildren.push(<br />);\n    });\n    newChildren.pop();\n\n    children = newChildren;\n  }\n\n  const Tag = component;\n\n  if (strong) {\n    children = <strong>{children}</strong>;\n  }\n\n  if (underline) {\n    children = <u>{children}</u>;\n  }\n\n  if (deleteProp) {\n    children = <del>{children}</del>;\n  }\n\n  if (code) {\n    children = <code>{children}</code>;\n  }\n\n  if (mark) {\n    children = <mark>{children}</mark>;\n  }\n\n  return (\n    <Tag {...others} className={cls} ref={ref}>\n      {children}\n    </Tag>\n  );\n};\n\nconst RefText = React.forwardRef(Text);\n\nRefText.defaultProps = {\n  prefix: 'next-',\n};\n\nconst Paragraph: React.FC<TextProps> = (props) => {\n  const { prefix, className, component, ...others } = props;\n\n  const cls = classNames(`${prefix}text-paragraph`, className);\n\n  if (!isProduction()) {\n    console.warn('Warning: Text.Paragraph is deprecated, use P instead');\n  }\n  return <Text {...others} className={cls} component={component} />;\n};\n// 为了保证兼容性，@alifd/next基础组件中 Typography 组件有的所有子组件、功能，Text也有，但是均不建议使用\nRefText.H1 = createTitle('h1');\nRefText.H2 = createTitle('h2');\nRefText.H3 = createTitle('h3');\nRefText.H4 = createTitle('h4');\nRefText.H5 = createTitle('h5');\nRefText.H6 = createTitle('h6');\nRefText.Paragraph = Paragraph;\n\nexport default RefText;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/note-wrapper/index.scss",
    "content": "/* write style here */\n.done-note-wrapper.render-wrapper-root {\n  // display: none !important;\n  display: block !important;\n  position: absolute !important;\n  z-index: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  width: 100% !important;\n  height: 100% !important;\n  line-height: 0 !important;\n  color: #000 !important;\n  border: 1px dashed rgba(9, 195, 182, 0.5) !important;\n  border-radius: 0 !important;\n  pointer-events: none !important;\n  text-align: left !important;\n  margin: 0;\n  padding: 0;\n\n  .render-wrapper-note {\n    display: inline-block;\n    width: 18px;\n    height: 18px;\n    margin: -1px 0 0 -1px;\n    line-height: 18px;\n    text-align: center;\n    font-size: 12px;\n    color: #fff;\n    background: #09c3b6;\n    border-radius: 0 0 60% 0;\n    opacity: 0.5;\n    pointer-events: auto;\n    cursor: pointer;\n    &:hover {\n      opacity: 1;\n      box-shadow: 1px 1px 4px rgba(68, 215, 182, 0.5);\n    }\n  }\n\n  &.hover {\n    border-color: #09c3b6 !important;\n    .render-wrapper-note {\n      opacity: 1;\n      background: #09c3b6;\n    }\n  }\n}\n\n.render-wrapper-target:hover > .render-wrapper-root,\n.render-wrapper-root.hover {\n  display: block !important;\n}\n\n// 全局禁用批注\n.preview-shell-note-0 {\n  .render-wrapper-root {\n    display: none !important;\n  }\n  .render-wrapper-target:hover > .render-wrapper-root,\n  .render-wrapper-root.hover {\n    display: none !important;\n  }\n}\n// 全局开启批注\n.preview-shell-note-1 {\n}\n// 全局批注全部显示\n.preview-shell-note-2 {\n  .render-wrapper-root {\n    display: block !important;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/note-wrapper/index.tsx",
    "content": "import React, { useEffect } from 'react';\nimport ReactDom from 'react-dom';\nimport { Balloon } from '@alifd/next';\n\nconst targetClass = 'render-wrapper-target';\nconst rootClass = 'render-wrapper-root done-note-wrapper';\n\n// 获取DOM真实style的方法\nconst getStyle = (obj, attr) => {\n  if (obj.currentStyle) {\n    // 兼容IE\n    return obj.currentStyle[attr];\n  } else {\n    return window.getComputedStyle(obj, null)[attr];\n  }\n};\n\ninterface NoteProps {\n  note?: string;\n  id?: string;\n}\n\nconst NoteWrapper: React.ForwardRefRenderFunction<HTMLElement, NoteProps> = (props, ref) => {\n  const el = document.createElement('div');\n  let innerRef = null;\n  el.className = rootClass;\n  el.id = props.id;\n  el.ref = ref;\n\n  const _renderLayer = function() {\n    const { note } = props;\n    const defaultTrigger = <div className=\"render-wrapper-note\">N</div>;\n    const node = (\n      <Balloon.Tooltip\n        trigger={defaultTrigger}\n        align=\"rb\"\n        triggerType=\"click\"\n        popupStyle={{ fontSize: '12px', lineHeight: '1.6', background: '#fff' }}\n      >\n        {note}\n      </Balloon.Tooltip>\n    );\n    ReactDom.render(node, el);\n  };\n\n  useEffect(() => {\n    _renderLayer();\n    if (innerRef) {\n      const refDom = ReactDom.findDOMNode(innerRef);\n      if (refDom.className.indexOf(targetClass) === -1) {\n        if (getStyle(refDom, 'position') === 'static') {\n          refDom.style.position = 'relative'; // 当target目标组件的position为static时, 则使用relative, 方便内层元素定位\n        }\n        refDom.className += ` ${targetClass}`;\n        refDom.appendChild(el);\n      }\n    }\n  });\n  const { children } = props;\n  const _children = React.Children.map(children, (child) => {\n    let c = child;\n    if (typeof child === 'string') c = <span>{child}</span>;\n    return React.cloneElement(c, { ref: (ref) => (innerRef = ref) });\n  });\n  return _children || <></>;\n};\n\nconst RefNoteWrapper = React.forwardRef(NoteWrapper);\n\nRefNoteWrapper.displayName = 'Wrapper';\n\nexport default RefNoteWrapper;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/rich-text/index.tsx",
    "content": "import * as React from 'react';\n\n// 新结构\ninterface IContent {\n  aone?: {\n    // 可能未绑定\n    url: string;\n    priorityId: string;\n    project: { id: string; name: string };\n    creator: { empId: string; name: string };\n    assigner: { empId: string; name: string };\n  };\n  subject: string;\n  description: string;\n  hideTitle?: boolean;\n  id?: string;\n}\ninterface IRichTextProps {\n  content?: IContent | string;\n  className?: string;\n  maxHeight?: string;\n}\n\n/**\n * 文字 字体、大小、行高\n * @param props\n */\nconst RichText: React.ForwardRefRenderFunction<HTMLImageElement, IRichTextProps> = (props, ref) => {\n  const {\n    content = { subject: '', description: '' },\n    maxHeight = 'auto',\n    ...others\n  }: IRichTextProps = props;\n  const oldType = typeof content === 'string';\n  const desc = oldType ? content : content?.description || '';\n  const title = (!oldType && content?.subject) || '';\n  const hideTitle = oldType || content?.hideTitle;\n  return (\n    <div {...others} ref={ref}>\n      {!hideTitle && (\n        <div style={{ fontSize: '30px', color: '#333', lineHeight: '32px' }}>\n          <span>{title}</span>\n        </div>\n      )}\n      <div\n        style={{ maxHeight, overflowY: 'scroll' }}\n        className=\"message-content\"\n        dangerouslySetInnerHTML={{\n          __html: desc,\n        }}\n      />\n    </div>\n  );\n};\n\nconst RefRichText = React.forwardRef(RichText);\n\nRefRichText.defaultProps = {\n  content: {\n    subject: '需求标题',\n    hideTitle: false,\n    description:\n      '<div><span>- 你可以在这里描述需求</span><br /><span>- 或者粘贴需求截图</span></div>',\n  },\n  className: '',\n};\n\nexport default RefRichText;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/components/video/index.tsx",
    "content": "import * as React from 'react';\n\nexport interface Props {\n  src?: string;\n  autoPlay?: boolean; //自动播放必须设置 muted=true\n  loop?: boolean;\n  muted?: boolean;\n  controls?: boolean;\n  poster?: string;\n  style?: object;\n}\n\n/**\n * 视频\n */\nconst Video: React.ForwardRefRenderFunction<HTMLVideoElement, Props> = (props, ref) => {\n  return <video {...props} ref={ref}></video>;\n};\n\nconst RefVideo = React.forwardRef<HTMLVideoElement, Props>(Video);\n\nRefVideo.defaultProps = {\n  src: 'https://fusion.alicdn.com/fusion-site-2.0/fusion.mp4',\n};\n\nexport default RefVideo;\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/index.scss",
    "content": "@import './components/note-wrapper/index.scss';\n@import './components/next-text/index.scss';\n"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/index.tsx",
    "content": "import Link from './components/link';\nimport Image from './components/image';\nimport Video from './components/video';\nimport Balloon from './components/balloon';\nimport Calendar from './components/calendar';\nimport RichText from './components/rich-text';\nimport NextText from './components/next-text';\nimport NoteWrapper from './components/note-wrapper';\nimport NextTable from './components/next-table';\nimport Div from './components/div';\n\nexport {\n  Affix,\n  Animate,\n  Badge,\n  Breadcrumb,\n  Button,\n  Calendar2,\n  Card,\n  Cascader,\n  CascaderSelect,\n  Checkbox,\n  Collapse,\n  ConfigProvider,\n  DatePicker,\n  Dialog,\n  Drawer,\n  Dropdown,\n  Form,\n  Grid,\n  Icon,\n  Input,\n  Loading,\n  Menu,\n  MenuButton,\n  Message,\n  Nav,\n  Notification,\n  NumberPicker,\n  Overlay,\n  Pagination,\n  Paragraph,\n  Progress,\n  Radio,\n  Range,\n  Rating,\n  Search,\n  Select,\n  Slider,\n  SplitButton,\n  Step,\n  Switch,\n  Tab,\n  Table,\n  Tag,\n  TimePicker,\n  TimePicker2,\n  Timeline,\n  Transfer,\n  Tree,\n  TreeSelect,\n  Upload,\n  VirtualList,\n  Typography,\n  Field,\n  Divider,\n  Avatar,\n  ResponsiveGrid,\n  Box,\n  List,\n  DatePicker2,\n} from '@alifd/next';\n\nexport { Link, Image, Video, RichText, NextText, NoteWrapper, Calendar, Balloon, NextTable, Div };"
  },
  {
    "path": "packages/fusion-lowcode-materials/src/utils.js",
    "content": "module.exports = {\n  replacer(key, value) {\n    if (typeof value === 'function') {\n      return {\n        type: 'JSFunction',\n        value: String(value),\n      };\n    }\n    return value;\n  },\n  isAsyncFunction: (fn) => {\n    return fn[Symbol.toStringTag] === 'AsyncFunction';\n  },\n  reviewer(key, value) {\n    if (!value) {\n      return value;\n    }\n    if (key === 'icon') {\n      if (typeof value === 'object') {\n        return {\n          type: 'smile',\n          size: 'small',\n        };\n      }\n    }\n    if (typeof value === 'object') {\n      if (value.type === 'JSFunction') {\n        let _value = value.value && value.value.trim();\n        let template = `\n          return function lowcode() {\n            const self = this;\n            try {\n              return (${_value}).apply(self, arguments);\n            } catch(e) {\n              console.log('call function which parsed by lowcode for key ${key} failed: ', e);\n              return e.message;\n            }\n          };`;\n        try {\n          return Function(template)();\n        } catch (e) {\n          if (e && e.message.includes(\"Unexpected token '{'\")) {\n            console.log('method need add funtion prefix');\n            _value = 'function ' + _value;\n            template = `\n            return function lowcode() {\n              const self = this;\n              try {\n                return (${_value}).apply(self, arguments);\n              } catch(e) {\n                console.log('call function which parsed by lowcode for key ${key} failed: ', e);\n                return e.message;\n              }\n            };`;\n            return Function(template)();\n          }\n          console.error('parse lowcode function error: ', e);\n          console.error(value);\n          return value;\n        }\n      }\n    }\n    return value;\n  },\n  toJson(object, replacer) {\n    return JSON.stringify(object, replacer || this.replacer, 2);\n  },\n  parseJson(json) {\n    const input = typeof json === 'string' ? json : JSON.stringify(json);\n    return JSON.parse(input, this.reviewer);\n  },\n  calculateDependencies(schema, componentsMap) {\n    function findComps(schema, componentsMap, dependencies) {\n      dependencies = dependencies || {};\n      if (dependencies[schema.componentName]) {\n        dependencies[schema.componentName].count++;\n      } else {\n        dependencies[schema.componentName] = {\n          count: 1,\n        };\n        if (componentsMap && componentsMap[schema.componentName]) {\n          dependencies[schema.componentName].npm = componentsMap[schema.componentName].package;\n          dependencies[schema.componentName].version = componentsMap[schema.componentName].version;\n        }\n      }\n      if (schema.children && Array.isArray(schema.children)) {\n        schema.children.forEach((child) => {\n          dependencies = Object.assign(dependencies, findComps(child, componentsMap, dependencies));\n        });\n      }\n      return dependencies;\n    }\n    const comps = findComps(schema, componentsMap);\n    const deps = {};\n    Object.keys(comps).forEach((key) => {\n      const comp = comps[key];\n      if (!comp.npm) comp.npm = 'BuiltIn';\n      if (deps[`${comp.npm}${comp.version ? '@' + comp.version : ''}`]) {\n        deps[`${comp.npm}${comp.version ? '@' + comp.version : ''}`][key] = comp.count;\n      } else {\n        deps[`${comp.npm}${comp.version ? '@' + comp.version : ''}`] = {\n          [key]: comp.count,\n        };\n      }\n    });\n    return deps;\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/.editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nquote_type = single\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": "packages/fusion-ui/.eslintignore",
    "content": "node_modules/\nbuild/\ndist/\nlib/\nes/\ndocs/\nplugins/\nbuild*\n**/*.min.js\n**/*-min.js\n**/*.bundle.js\n"
  },
  {
    "path": "packages/fusion-ui/.eslintrc.js",
    "content": "module.exports = {\n  extends: [\n    'eslint-config-ali/typescript/react',\n    'prettier',\n    'prettier/@typescript-eslint',\n    'prettier/react',\n  ],\n  rules: {\n    '@typescript-eslint/ban-ts-comment': 'off',\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/.gitignore",
    "content": "lowcode_es/\r\nlowcode_lib/\r\n# See https://help.github.com/ignore-files/ for more about ignoring files.\n\n# dependencies\nnode_modules/\n\n# production\nbuild/\ndist/\ntmp/\nlib/\nes/\n\n# misc\n.idea/\n.happypack\n.DS_Store\n*.swp\n*.dia~\n.tmp\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nyarn.lock\n\nstorybook-static/\n\ndocs/src/.umi/"
  },
  {
    "path": "packages/fusion-ui/.markdownlint.json",
    "content": "{\n  \"extends\": \"markdownlint-config-ali\"\n}\n"
  },
  {
    "path": "packages/fusion-ui/.markdownlintignore",
    "content": "node_modules/\nbuild/\ndist/\n\n"
  },
  {
    "path": "packages/fusion-ui/.prettierrc.js",
    "content": "module.exports = {\n  printWidth: 100,\n  tabWidth: 2,\n  semi: true,\n  singleQuote: true,\n  trailingComma: 'all',\n  arrowParens: 'always',\n};\n"
  },
  {
    "path": "packages/fusion-ui/.stylelintignore",
    "content": "node_modules/\nbuild/\ndist/\nes/\nlib/\ndocs/\n**/*.min.css\n**/*-min.css\n**/*.bundle.css\n\n"
  },
  {
    "path": "packages/fusion-ui/.stylelintrc.js",
    "content": "module.exports = {\n  extends: 'stylelint-config-ali',\n};\n"
  },
  {
    "path": "packages/fusion-ui/README.md",
    "content": "# README\n\n## 开发常用命令\n\n- `cnpm start` 运行所有组件的开发调试环境\n- `cnpm start page-header` 运行单个组件的开发调试环境\n- `cnpm run lowcode:dev` 启动低代码开发调试环境\n- `cnpm run lowcode:build` 构建低代码产物\n- `cnpm run build` 打包生成 lib/ es/ dist/ build/文件\n- `cnpm run materials` 生成物料中心需要的入库 JSON 文件\n- `cnpm run lint` 进行代码检查\n"
  },
  {
    "path": "packages/fusion-ui/build.json",
    "content": "{\n  \"library\": \"AlifdFusionUi\",\n  \"libraryTarget\": \"umd\",\n  \"sourceMap\": false,\n  \"alias\": {\n    \"@\": \"./src\",\n    \"@components\": \"./src/components\"\n  },\n  \"plugins\": [\n    [\n      \"build-plugin-component\",\n      {\n        \"themePackage\": \"@alifd/theme-2\"\n      }\n    ],\n    [\n      \"build-plugin-fusion\",\n      {\n        \"uniteBaseComponent\": \"@alifd/next\",\n        \"cssVariable\": true,\n        \"importOptions\": {\n          \"libraryDirectory\": \"lib\"\n        }\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": "packages/fusion-ui/build.lowcode.js",
    "content": "const { library } = require('./build.json');\nconst { version, name } = require('./package.json');\n\nmodule.exports = {\n  sourceMap: false,\n  alias: {\n    '@': './src',\n    '@alifd/fusion-ui': './src',\n  },\n  plugins: [\n    [\n      '@alifd/build-plugin-lowcode',\n      {\n        noParse: true,\n        renderUrls: [\n          `https://alifd.alicdn.com/npm/${name}@${version}/dist/${library}.js`,\n          `https://alifd.alicdn.com/npm/${name}@${version}/dist/${library}.css`,\n        ],\n        baseUrl: {\n          prod: `https://alifd.alicdn.com/npm/${name}@${version}`,\n          daily: `https://alifd.alicdn.com/npm/${name}@${version}`,\n        },\n        engineScope: '@alilc',\n      },\n    ],\n    [\n      'build-plugin-fusion',\n      {\n        uniteBaseComponent: '@alifd/next',\n        cssVariable: true,\n        importOptions: {\n          libraryDirectory: 'lib',\n        },\n      },\n    ],\n  ],\n};\n"
  },
  {
    "path": "packages/fusion-ui/commitlint.config.js",
    "content": "module.exports = {\n  extends: ['ali'],\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/.dumi/theme/builtins/API.tsx",
    "content": "import React, { useContext } from 'react';\nimport type { IApiComponentProps } from 'dumi/theme';\nimport { context, useApiData } from 'dumi/theme';\n\nimport './index.scss';\n\nconst LOCALE_TEXTS = {\n  'zh-CN': {\n    name: '参数',\n    description: '说明',\n    type: '类型',\n    default: '默认值',\n    required: '(必选)',\n  },\n  'en-US': {\n    name: 'Name',\n    description: 'Description',\n    type: 'Type',\n    default: 'Default',\n    required: '(required)',\n  },\n};\n\nexport default ({ identifier, export: expt }: IApiComponentProps) => {\n  const data = useApiData(identifier);\n  const { locale = '' } = useContext(context);\n\n  const texts = /^zh|cn$/i.test(locale) ? LOCALE_TEXTS['zh-CN'] : LOCALE_TEXTS['en-US'];\n\n  const defaultComponentName = identifier\n    ?.replace(/-([a-z])/g, function (all, i) {\n      return i.toUpperCase();\n    })\n    ?.replace(/^\\S/, (s) => s.toUpperCase());\n\n  return (\n    <>\n      {data && (\n        <>\n          <h3 id={expt} className=\"apiTitle\">\n            <a aria-hidden=\"true\" data-tabindex=\"-1\" href={`/${identifier}#${expt}`}>\n              <span className=\"icon icon-link\" />\n            </a>\n            {expt === 'default' ? defaultComponentName : expt}\n          </h3>\n          <table className=\"apiContainer\">\n            <thead>\n              <tr>\n                <th>{texts.name}</th>\n                <th>{texts.description}</th>\n                <th>{texts.type}</th>\n                <th>{texts.default}</th>\n              </tr>\n            </thead>\n            <tbody>\n              {data[expt]?.map((row) => (\n                <tr key={row.identifier}>\n                  <td>{row.identifier}</td>\n                  <td>{row.description || '--'}</td>\n                  <td>\n                    <code>{row.type}</code>\n                  </td>\n                  <td>\n                    <code>{row.default || (row.required && texts.required) || '--'}</code>\n                  </td>\n                </tr>\n              ))}\n            </tbody>\n          </table>\n        </>\n      )}\n    </>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/.dumi/theme/builtins/index.scss",
    "content": ".apiContainer {\n  border: none !important;\n  .apiTitle{\n    text-transform: capitalize;\n  }\n  thead tr {\n    th {\n      background: #fff;\n      border: none;\n      font-weight: 700;\n      text-align: left;\n      word-wrap: break-word;\n      letter-spacing: 0.2px;\n      padding: 4px 0 10px;\n      border-bottom: 2px solid #333;\n      font-size: 14px;\n      &:first-child {\n        padding-left: 8px;\n      }\n    }\n  }\n  tbody tr {\n    td {\n      border: none;\n      border-bottom: 1px solid #ccc;\n      text-align: left;\n      margin: 0;\n      padding: 18px 18px 18px 0;\n      color: #666;\n      word-wrap: break-word;\n      line-height: 24px;\n      letter-spacing: 0.2px;\n\t\t\tfont-size: 14px;\n      code {\n        color: #666;\n        word-wrap: break-word;\n        line-height: 24px;\n        letter-spacing: 0.2px;\n\t\t\t\tfont-size: 13px;\n      }\n\t\t\t&:last-child {\n        min-width: 72px;\n      }\n\t\t\t&:first-child{\n\t\t\t\tcolor: #595959;\n\t\t\t\tfont-weight: 600;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\tpadding-left: 8px;\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n    }\n  }\n}\n\n.__dumi-default-layout-footer-meta {\n  border: none;\n}\n"
  },
  {
    "path": "packages/fusion-ui/docs/.dumi/theme/layout.tsx",
    "content": "import React from 'react';\nimport Layout from 'dumi-theme-default/es/layout';\n\nimport '@/index.scss';\nimport '@alifd/theme-2/dist/next.min.css';\n\nexport default ({ children, ...props }) => {\n  return <Layout {...props}>{children}</Layout>;\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/.fatherrc.ts",
    "content": "export default {\n  esm: 'rollup',\n  sassInRollupMode: {},\n\tsass: {\n    // 默认值 Dart Sass，如果要改用 Node Sass，可安装 node-sass 依赖，然后使用该配置项\n    implementation: require('node-sass'),\n    // 传递给 Dart Sass 或 Node Sass 的配置项，可以是一个 Function\n    sassOptions: {\n      \n    },\n  },\n}"
  },
  {
    "path": "packages/fusion-ui/docs/.umirc.ts",
    "content": "import { defineConfig } from 'dumi';\nimport fs from 'fs';\nimport { join } from 'path';\n\nconst { version } = JSON.parse(fs.readFileSync(join(__dirname, '../package.json'), 'utf8'));\n\nconst productStyles =\n  '.__dumi-default-menu{display:none} .__dumi-default-layout{padding-left:58px!important}';\n\nconst productPath = `/@alifd/fusion-ui@${version}/build/docs/`;\n\nexport default defineConfig({\n  // other config entry\n  chainWebpack(memo) {\n    memo.module\n      .rule('js')\n      .include.add(join(__dirname, '../'))\n      .end()\n      .exclude.add(/node_modules/);\n\n    // 删除 dumi 内置插件\n    memo.plugins.delete('friendly-error');\n    memo.plugins.delete('copy');\n    // 配置文件import alias\n    memo.resolve.alias.set('@', join(__dirname, '../src'));\n    memo.resolve.alias.set('@components', join(__dirname, '../src/components'));\n    memo.resolve.alias.set('@alifd/fusion-ui', join(__dirname, '../src'));\n  },\n  logo: 'https://fusion.alicdn.com/images/jdSvK6gaqaWB.png',\n  exportStatic: process.env.NODE_ENV === 'production' ? { htmlSuffix: true } : {},\n  base: process.env.NODE_ENV === 'production' ? productPath : '/',\n  publicPath: process.env.NODE_ENV === 'production' ? productPath : '/',\n  styles: process.env.NODE_ENV === 'production' ? [productStyles] : [],\n  nodeModulesTransform: {\n    type: 'none',\n    exclude: [],\n  },\n  // md文件中使用@需配置alias\n  alias: {\n    '@': join(__dirname, '../src'),\n    '@components': join(__dirname, '../src/components'),\n    '@alifd/fusion-ui': join(__dirname, '../src'),\n  },\n  apiParser: {\n    propFilter: (prop) => {\n      if (prop.declarations !== undefined && prop.declarations.length > 0) {\n        const hasPropAdditionalDescription = prop.declarations.find((declaration) => {\n          if (declaration.fileName.includes('node_modules')) {\n            return (\n              declaration.fileName.includes('alifd/next') ||\n              declaration.fileName.includes('bizcharts')\n            );\n          }\n          return true;\n        });\n\n        return Boolean(hasPropAdditionalDescription);\n      }\n      return true;\n    },\n  },\n  mfsu: {},\n  locales: [\n    ['zh-CN', '中文'],\n    ['en-US', 'English'],\n  ],\n  outputPath: '../build/docs',\n});\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/BarChart/index.md",
    "content": "## 何时使用\n\nBarChart 的基础用法。\n\n## 示例\n\n```tsx\nimport React from 'react';\n\nimport { BarChart } from '@alifd/fusion-ui';\n\nconst props = {\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 4192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 3192312 },\n  ],\n  xField: 'value',\n  yField: 'year',\n  color: '#0079f2',\n  label: {\n    visible: true,\n    position: 'middle',\n  },\n};\n\nexport default () => {\n  return (\n    <div>\n      basic demo\n      <BarChart {...props} />\n    </div>\n  );\n};\n```\n\n## API\n\n<API hideTitle src=\"@/components/bar-chart/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ColumnChart/index.md",
    "content": "## 何时使用\n\nColumnChart 的基础用法。\n\n## 示例\n\n```tsx\nimport React from 'react';\n\nimport { ColumnChart } from '@alifd/fusion-ui';\n\nconst props = {\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 4192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 3192312 },\n  ],\n  xField: 'year',\n  yField: 'value',\n  color: '#0079f2',\n  label: {\n    visible: true,\n    position: 'middle',\n  },\n};\n\nexport default () => {\n  return (\n    <div>\n      basic demo\n      <ColumnChart {...props} />\n    </div>\n  );\n};\n```\n\n## API\n\n<API hideTitle src=\"@/components/column-chart/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/DonutChart/index.md",
    "content": "## 何时使用\n\nDonutChart 的基础用法。\n\n## 示例\n\n### 基本用法\n\n```tsx\nimport React from 'react';\n\nimport { DonutChart } from '@alifd/fusion-ui';\n\nconst props = {\n  legend: {\n    position: 'top-left',\n  },\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 2192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 1192312 },\n  ],\n  angleField: 'value',\n  colorField: 'year',\n  label: {\n    visible: true,\n    type: 'spider',\n  },\n  color: ['#3BCBD1', '#47A4FE', '#EDBA42', '#F4704E', '#ED6899', '#7F62C3', '#6E7BC9'],\n};\n\nexport default () => {\n  return (\n    <div>\n      <DonutChart {...props} />\n    </div>\n  );\n};\n```\n\n### 显示百分比\n\n```tsx\nimport React from 'react';\nimport { DonutChart } from '@alifd/fusion-ui';\n\nconst props = {\n  legend: {\n    position: 'top-left',\n  },\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 2192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 1192312 },\n  ],\n  angleField: 'value',\n  colorField: 'year',\n  color: ['#3BCBD1', '#47A4FE', '#EDBA42', '#F4704E', '#ED6899', '#7F62C3', '#6E7BC9'],\n};\n\nexport default () => {\n  return (\n    <div>\n      <DonutChart {...props} />\n    </div>\n  );\n};\n```\n\n## API\n\n<API hideTitle src=\"@/components/donut-chart/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/EditTable/index.md",
    "content": "## 何时使用\n\nEditTable 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n<code src=\"./index.tsx\"></code>\n\n## API\n\n<API hideTitle src=\"@/components/pro-table/components/edit-table/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/EditTable/index.tsx",
    "content": "import React from 'react';\nimport { EditTable } from '@alifd/fusion-ui';\n\nconst props = {\n  dataSource: [\n    {\n      id: 'id-2f5DdE2b-0',\n      date: '2013-06-12',\n      percent: 1.862,\n      documentAmount: 2022,\n      currency: 'CNY',\n      company: '支付宝科技有限公司',\n      childTableProps: {\n        dataSource: [],\n        columns: [\n          {\n            title: '公司',\n            dataIndex: 'company',\n            width: 160,\n            formatType: 'link',\n            searchable: true,\n          },\n          {\n            title: '单据金额',\n            dataIndex: 'documentAmount',\n            formatType: 'money',\n          },\n          {\n            title: '币种',\n            dataIndex: 'currency',\n            formatType: 'currency',\n            filters: [\n              {\n                label: 'CNY',\n                value: 'CNY',\n              },\n              {\n                label: 'USD',\n                value: 'USD',\n              },\n              {\n                label: 'JPY',\n                value: 'JPY',\n              },\n              {\n                label: 'HKD',\n                value: 'HKD',\n              },\n            ],\n            filterMode: 'multiple',\n            explanation: '提示信息',\n            width: 110,\n          },\n          {\n            title: '完成进度',\n            dataIndex: 'percent',\n            formatType: 'progress',\n          },\n          {\n            title: '到账日期',\n            dataIndex: 'date',\n            formatType: 'date',\n          },\n        ],\n      },\n    },\n    {\n      id: 'id-2f5DdE2b-1',\n      date: '2013-06-12',\n      percent: 1.862,\n      documentAmount: 2022,\n      currency: 'CNY',\n      company: '支付宝科技有限公司',\n      childTableProps: {\n        dataSource: [],\n        columns: [\n          {\n            title: '公司',\n            dataIndex: 'company',\n            width: 160,\n            formatType: 'link',\n            searchable: true,\n          },\n          {\n            title: '单据金额',\n            dataIndex: 'documentAmount',\n            formatType: 'money',\n          },\n          {\n            title: '币种',\n            dataIndex: 'currency',\n            formatType: 'currency',\n            filters: [\n              {\n                label: 'CNY',\n                value: 'CNY',\n              },\n              {\n                label: 'USD',\n                value: 'USD',\n              },\n              {\n                label: 'JPY',\n                value: 'JPY',\n              },\n              {\n                label: 'HKD',\n                value: 'HKD',\n              },\n            ],\n            filterMode: 'multiple',\n            explanation: '提示信息',\n            width: 110,\n          },\n          {\n            title: '完成进度',\n            dataIndex: 'percent',\n            formatType: 'progress',\n          },\n          {\n            title: '到账日期',\n            dataIndex: 'date',\n            formatType: 'date',\n          },\n        ],\n      },\n    },\n    {\n      id: 'id-2f5DdE2b-2',\n      date: '2013-06-12',\n      percent: 1.862,\n      documentAmount: 2022,\n      currency: 'CNY',\n      company: '支付宝科技有限公司',\n      childTableProps: {\n        dataSource: [],\n        columns: [\n          {\n            title: '公司',\n            dataIndex: 'company',\n            width: 160,\n            formatType: 'link',\n            searchable: true,\n          },\n          {\n            title: '单据金额',\n            dataIndex: 'documentAmount',\n            formatType: 'money',\n          },\n          {\n            title: '币种',\n            dataIndex: 'currency',\n            formatType: 'currency',\n            filters: [\n              {\n                label: 'CNY',\n                value: 'CNY',\n              },\n              {\n                label: 'USD',\n                value: 'USD',\n              },\n              {\n                label: 'JPY',\n                value: 'JPY',\n              },\n              {\n                label: 'HKD',\n                value: 'HKD',\n              },\n            ],\n            filterMode: 'multiple',\n            explanation: '提示信息',\n            width: 110,\n          },\n          {\n            title: '完成进度',\n            dataIndex: 'percent',\n            formatType: 'progress',\n          },\n          {\n            title: '到账日期',\n            dataIndex: 'date',\n            formatType: 'date',\n          },\n        ],\n      },\n    },\n  ],\n  actionColumnButtons: {\n    dataSource: [\n      {\n        children: '查看',\n        type: 'primary',\n      },\n      {\n        children: '编辑',\n        type: 'primary',\n        disabled: true,\n      },\n      {\n        children: '删除',\n        type: 'primary',\n      },\n    ],\n    text: true,\n    visibleButtonCount: 3,\n  },\n  actionBarButtons: {\n    dataSource: [\n      {\n        type: 'primary',\n        children: '操作一',\n      },\n      {\n        type: 'normal',\n        children: '操作二',\n      },\n    ],\n    visibleButtonCount: 3,\n  },\n  paginationProps: {\n    pageSize: 20,\n    current: 1,\n  },\n  settingButtons: true,\n  columns: [\n    {\n      title: '公司',\n      dataIndex: 'company',\n      width: 160,\n      formatType: 'link',\n      searchable: true,\n    },\n    {\n      title: '单据金额',\n      dataIndex: 'documentAmount',\n      formatType: 'money',\n    },\n    {\n      title: '币种',\n      dataIndex: 'currency',\n      formatType: 'currency',\n      filters: [\n        {\n          label: 'CNY',\n          value: 'CNY',\n        },\n        {\n          label: 'USD',\n          value: 'USD',\n        },\n        {\n          label: 'JPY',\n          value: 'JPY',\n        },\n        {\n          label: 'HKD',\n          value: 'HKD',\n        },\n      ],\n      filterMode: 'multiple',\n      explanation: '提示信息',\n      width: 110,\n    },\n    {\n      title: '完成进度',\n      dataIndex: 'percent',\n      formatType: 'progress',\n    },\n    {\n      title: '到账日期',\n      dataIndex: 'date',\n      formatType: 'date',\n    },\n  ],\n};\n\nexport default () => {\n  return (\n    <div>\n      <EditTable {...props} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ExpandTable/index.md",
    "content": "## 何时使用\n\nExpandTable 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n<code src=\"./index.tsx\"></code>\n\n## API\n\n<API hideTitle src=\"@/components/expand-table/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ExpandTable/index.tsx",
    "content": "import React from 'react';\nimport { ExpandTable } from '@alifd/fusion-ui';\n\nconst props = {\n  dataSource: [\n    {\n      id: 'id-2f5DdE2b-0',\n      date: '2013-06-12',\n      percent: 1.862,\n      documentAmount: 2022,\n      currency: 'CNY',\n      company: '支付宝科技有限公司',\n      childTableProps: {\n        dataSource: [],\n        columns: [\n          {\n            title: '公司',\n            dataIndex: 'company',\n            width: 160,\n            formatType: 'link',\n            searchable: true,\n          },\n          {\n            title: '单据金额',\n            dataIndex: 'documentAmount',\n            formatType: 'money',\n          },\n          {\n            title: '币种',\n            dataIndex: 'currency',\n            formatType: 'currency',\n            filters: [\n              {\n                label: 'CNY',\n                value: 'CNY',\n              },\n              {\n                label: 'USD',\n                value: 'USD',\n              },\n              {\n                label: 'JPY',\n                value: 'JPY',\n              },\n              {\n                label: 'HKD',\n                value: 'HKD',\n              },\n            ],\n            filterMode: 'multiple',\n            explanation: '提示信息',\n            width: 110,\n          },\n          {\n            title: '完成进度',\n            dataIndex: 'percent',\n            formatType: 'progress',\n          },\n          {\n            title: '到账日期',\n            dataIndex: 'date',\n            formatType: 'date',\n          },\n        ],\n      },\n    },\n    {\n      id: 'id-2f5DdE2b-1',\n      date: '2013-06-12',\n      percent: 1.862,\n      documentAmount: 2022,\n      currency: 'CNY',\n      company: '支付宝科技有限公司',\n      childTableProps: {\n        dataSource: [],\n        columns: [\n          {\n            title: '公司',\n            dataIndex: 'company',\n            width: 160,\n            formatType: 'link',\n            searchable: true,\n          },\n          {\n            title: '单据金额',\n            dataIndex: 'documentAmount',\n            formatType: 'money',\n          },\n          {\n            title: '币种',\n            dataIndex: 'currency',\n            formatType: 'currency',\n            filters: [\n              {\n                label: 'CNY',\n                value: 'CNY',\n              },\n              {\n                label: 'USD',\n                value: 'USD',\n              },\n              {\n                label: 'JPY',\n                value: 'JPY',\n              },\n              {\n                label: 'HKD',\n                value: 'HKD',\n              },\n            ],\n            filterMode: 'multiple',\n            explanation: '提示信息',\n            width: 110,\n          },\n          {\n            title: '完成进度',\n            dataIndex: 'percent',\n            formatType: 'progress',\n          },\n          {\n            title: '到账日期',\n            dataIndex: 'date',\n            formatType: 'date',\n          },\n        ],\n      },\n    },\n    {\n      id: 'id-2f5DdE2b-2',\n      date: '2013-06-12',\n      percent: 1.862,\n      documentAmount: 2022,\n      currency: 'CNY',\n      company: '支付宝科技有限公司',\n      childTableProps: {\n        dataSource: [],\n        columns: [\n          {\n            title: '公司',\n            dataIndex: 'company',\n            width: 160,\n            formatType: 'link',\n            searchable: true,\n          },\n          {\n            title: '单据金额',\n            dataIndex: 'documentAmount',\n            formatType: 'money',\n          },\n          {\n            title: '币种',\n            dataIndex: 'currency',\n            formatType: 'currency',\n            filters: [\n              {\n                label: 'CNY',\n                value: 'CNY',\n              },\n              {\n                label: 'USD',\n                value: 'USD',\n              },\n              {\n                label: 'JPY',\n                value: 'JPY',\n              },\n              {\n                label: 'HKD',\n                value: 'HKD',\n              },\n            ],\n            filterMode: 'multiple',\n            explanation: '提示信息',\n            width: 110,\n          },\n          {\n            title: '完成进度',\n            dataIndex: 'percent',\n            formatType: 'progress',\n          },\n          {\n            title: '到账日期',\n            dataIndex: 'date',\n            formatType: 'date',\n          },\n        ],\n      },\n    },\n  ],\n  actionColumnButtons: {\n    dataSource: [\n      {\n        children: '查看',\n        type: 'primary',\n      },\n      {\n        children: '编辑',\n        type: 'primary',\n        disabled: true,\n      },\n      {\n        children: '删除',\n        type: 'primary',\n      },\n    ],\n    text: true,\n    visibleButtonCount: 3,\n  },\n  actionBarButtons: {\n    dataSource: [\n      {\n        type: 'primary',\n        children: '操作一',\n      },\n      {\n        type: 'normal',\n        children: '操作二',\n      },\n    ],\n    visibleButtonCount: 3,\n  },\n  paginationProps: {\n    pageSize: 20,\n    current: 1,\n  },\n  settingButtons: true,\n  columns: [\n    {\n      title: '公司',\n      dataIndex: 'company',\n      width: 160,\n      formatType: 'link',\n      searchable: true,\n    },\n    {\n      title: '单据金额',\n      dataIndex: 'documentAmount',\n      formatType: 'money',\n    },\n    {\n      title: '币种',\n      dataIndex: 'currency',\n      formatType: 'currency',\n      filters: [\n        {\n          label: 'CNY',\n          value: 'CNY',\n        },\n        {\n          label: 'USD',\n          value: 'USD',\n        },\n        {\n          label: 'JPY',\n          value: 'JPY',\n        },\n        {\n          label: 'HKD',\n          value: 'HKD',\n        },\n      ],\n      filterMode: 'multiple',\n      explanation: '提示信息',\n      width: 110,\n    },\n    {\n      title: '完成进度',\n      dataIndex: 'percent',\n      formatType: 'progress',\n    },\n    {\n      title: '到账日期',\n      dataIndex: 'date',\n      formatType: 'date',\n    },\n  ],\n};\n\nexport default () => {\n  return (\n    <div>\n      <ExpandTable {...props} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/Filter/index.md",
    "content": "## 何时使用\n\nFilter 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n<code src=\"./index.tsx\"></code>\n\n## API\n\n<API hideTitle src=\"@/components/filter/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/Filter/index.tsx",
    "content": "import React from 'react';\nimport { Input } from '@alifd/next';\nimport { Filter, ProForm } from '@alifd/fusion-ui';\n\nconst ProFormItem = ProForm.Item;\n\nexport default () => {\n  return (\n    <Filter\n      operations={[\n        { action: 'submit', type: 'primary', content: '提交' },\n        { action: 'reset', type: 'secondary', content: '重置' },\n        { action: 'custom', type: 'secondary', content: 'abc' },\n      ]}\n      emptyContent=\"添加表单项\"\n      operationConfig={{ align: 'operation-align-center' }}\n      labelAlign=\"top\"\n      placeholderStyle={{\n        border: 0,\n        color: '#0088FF',\n        background: '#d8d8d836',\n        height: '38px',\n        gridArea: 'span 4 / span 4',\n      }}\n      columns={3}\n      placeholder=\"请在右侧面板添加表单项+\"\n      labelCol={{ fixedSpan: 4 }}\n    >\n      <ProFormItem\n        required\n        name=\"email\"\n        size=\"medium\"\n        componentProps={{ componentName: 'Input' }}\n        label=\"表单项\"\n        device=\"desktop\"\n        primaryKey=\"9815\"\n      >\n        <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n      </ProFormItem>\n      <ProFormItem\n        size=\"medium\"\n        componentProps={{ componentName: 'Input' }}\n        label=\"表单项\"\n        device=\"desktop\"\n        primaryKey=\"1961\"\n      >\n        <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n      </ProFormItem>\n      <ProFormItem\n        size=\"medium\"\n        componentProps={{ componentName: 'Input' }}\n        label=\"表单项\"\n        device=\"desktop\"\n        primaryKey=\"6067\"\n      >\n        <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n      </ProFormItem>\n    </Filter>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/GroupTable/index.md",
    "content": "## 何时使用\n\nGroupTable 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n<code src=\"./index.tsx\"></code>\n\n## API\n\n<API hideTitle src=\"@/components/pro-table/components/group-table/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/GroupTable/index.tsx",
    "content": "import React from 'react';\nimport { GroupTable } from '@alifd/fusion-ui';\n\nconst dataSource = [\n  {\n    header: '头部文字',\n    footer: '尾部文字',\n    children: [\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n    ],\n  },\n  {\n    header: '头部文字2',\n    footer: '尾部文字2',\n    children: [\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n    ],\n  },\n];\nconst props = {\n  dataSource,\n  actionColumnButtons: {\n    dataSource: [\n      {\n        children: '查看',\n        type: 'primary',\n      },\n      {\n        children: '编辑',\n        type: 'primary',\n        disabled: true,\n      },\n      {\n        children: '删除',\n        type: 'primary',\n      },\n    ],\n    text: true,\n    visibleButtonCount: 3,\n  },\n  actionBarButtons: {\n    dataSource: [\n      {\n        type: 'primary',\n        children: '操作一',\n      },\n      {\n        type: 'normal',\n        children: '操作二',\n      },\n    ],\n    visibleButtonCount: 3,\n  },\n  paginationProps: {\n    pageSize: 20,\n    current: 1,\n  },\n  settingButtons: true,\n  columns: [\n    {\n      title: '公司',\n      dataIndex: 'company',\n      width: 160,\n      formatType: 'link',\n      searchable: true,\n    },\n    {\n      title: '单据金额',\n      dataIndex: 'documentAmount',\n      formatType: 'money',\n    },\n    {\n      title: '币种',\n      dataIndex: 'currency',\n      formatType: 'currency',\n      filters: [\n        {\n          label: 'CNY',\n          value: 'CNY',\n        },\n        {\n          label: 'USD',\n          value: 'USD',\n        },\n        {\n          label: 'JPY',\n          value: 'JPY',\n        },\n        {\n          label: 'HKD',\n          value: 'HKD',\n        },\n      ],\n      filterMode: 'multiple',\n      explanation: '提示信息',\n      width: 110,\n    },\n    {\n      title: '完成进度',\n      dataIndex: 'percent',\n      formatType: 'progress',\n    },\n    {\n      title: '到账日期',\n      dataIndex: 'date',\n      formatType: 'date',\n    },\n  ],\n};\n\nexport default () => {\n  return (\n    <div>\n      <GroupTable {...props} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/LineChart/basic.tsx",
    "content": "import React from 'react';\n\nimport { LineChart } from '@alifd/fusion-ui';\n\nconst props = {\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 4192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 3192312 },\n  ],\n  xField: 'year',\n  yField: 'value',\n  color: '#0079f2',\n  label: {\n    visible: true,\n  },\n};\n\nexport default () => {\n  return (\n    <div>\n      <LineChart {...props} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/LineChart/index.md",
    "content": "## 何时使用\n\nLineChart 的基础用法。\n\n## 示例\n\n### 基础用法\n\n<code src=\"./basic.tsx\"></code>\n\n### 缩略轴\n\n<code src=\"./slider.tsx\"></code>\n\n## API\n\n<API hideTitle src=\"@/components/line-chart/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/LineChart/slider.tsx",
    "content": "import React from 'react';\n\nimport { LineChart } from '@alifd/fusion-ui';\n\nconst props = {\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 4192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 3192312 },\n  ],\n  xField: 'year',\n  yField: 'value',\n  color: '#0079f2',\n  label: {\n    visible: true,\n  },\n  interactions: [\n    {\n      type: 'slider',\n      cfg: {\n        start: 0,\n        end: 1,\n      },\n    },\n  ],\n};\n\nexport default () => {\n  return (\n    <div>\n      <LineChart {...props} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/PageHeader/basic.tsx",
    "content": "import React from 'react';\nimport { PageHeader } from '@alifd/fusion-ui';\n\nexport default () => {\n  return (\n    <PageHeader\n      className=\"site-page-header\"\n      title=\"Title\"\n      subTitle=\"This is a subtitle\"\n      operations={[\n        {\n          action: 'ok',\n          type: 'primary',\n          content: '确认',\n        },\n        {\n          action: 'cancel',\n          type: 'normal',\n          content: '取消',\n        },\n      ]}\n    />\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/PageHeader/breadcrumb.tsx",
    "content": "import React from 'react';\nimport { PageHeader } from '@alifd/fusion-ui';\nimport { Breadcrumb } from '@alifd/next';\n\nexport default () => {\n  return (\n    <PageHeader\n      className=\"site-page-header\"\n      title=\"Title\"\n      breadcrumb={\n        <Breadcrumb>\n          <Breadcrumb.Item>1</Breadcrumb.Item>\n          <Breadcrumb.Item>2</Breadcrumb.Item>\n          <Breadcrumb.Item>3</Breadcrumb.Item>\n        </Breadcrumb>\n      }\n      subTitle=\"This is a subtitle\"\n    />\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/PageHeader/index.md",
    "content": "## 何时使用\n\nPageHeader 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n### 基础用法\n\n<code src=\"./basic.tsx\"></code>\n\n### 面包屑用法\n\n<code src=\"./breadcrumb.tsx\"></code>\n\n## API\n\n<API hideTitle src=\"@/components/page-header/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/PieChart/basic.tsx",
    "content": "import React from 'react';\nimport { PieChart } from '@alifd/fusion-ui';\n\nconst props = {\n  legend: {\n    position: 'top-left',\n  },\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 2192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 1192312 },\n  ],\n  angleField: 'value',\n  colorField: 'year',\n  label: {\n    visible: true,\n    type: 'spider',\n  },\n  color: ['#3BCBD1', '#47A4FE', '#EDBA42', '#F4704E', '#ED6899', '#7F62C3', '#6E7BC9'],\n};\n\nexport default () => {\n  return (\n    <div>\n      <PieChart {...props} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/PieChart/index.md",
    "content": "## 何时使用\n\nPieChart 的基础用法。\n\n## 示例\n\n### 基础用法\n\n<code src=\"./basic.tsx\"></code>\n\n### 标签显示百分比\n\n<code src=\"./percent.tsx\"></code>\n\n## API\n\n<API hideTitle src=\"@/components/pie-chart/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/PieChart/percent.tsx",
    "content": "import React from 'react';\n\nimport { PieChart } from '@alifd/fusion-ui';\n\nconst props = {\n  legend: {\n    position: 'top-left',\n  },\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 2192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 1192312 },\n  ],\n  angleField: 'value',\n  colorField: 'year',\n  color: ['#3BCBD1', '#47A4FE', '#EDBA42', '#F4704E', '#ED6899', '#7F62C3', '#6E7BC9'],\n};\n\nexport default () => {\n  return (\n    <div>\n      <PieChart {...props} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProDialog/basic.tsx",
    "content": "import React from 'react';\nimport { ProDialog } from '@alifd/fusion-ui';\nimport { Button } from '@alifd/next';\n\nexport default () => {\n  const dialogRef = React.useRef();\n\n  return (\n    <div>\n      <Button\n        onClick={function() {\n          dialogRef?.current?.show();\n        }}\n      >\n        点我\n      </Button>\n      <ProDialog\n        ref={dialogRef}\n        id=\"prodialog-basic\"\n        title=\"Welcome to Alibaba.com\"\n        operationConfig={{ align: 'right' }}\n        operations={[\n          {\n            action: 'ok',\n            type: 'primary',\n            content: '确认',\n          },\n          {\n            action: 'cancel',\n            type: 'normal',\n            content: '取消',\n          },\n        ]}\n        onOk={() => {\n          console.log('ok');\n        }}\n        onCancel={() => {\n          console.log('cancel');\n        }}\n        onClose={() => {\n          console.log('close');\n        }}\n      >\n        Start your business here by searching a popular product\n      </ProDialog>\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProDialog/index.md",
    "content": "## 何时使用\n\nProDialog 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n### 基本用法\n\n<code  src=\"./basic.tsx\"></code>\n\n### 长文本\n\n<code  src=\"./large-content.tsx\"></code>\n\n## API\n\n<API hideTitle  src=\"@/components/pro-dialog/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProDialog/large-content.tsx",
    "content": "import React from 'react';\nimport { ProDialog } from '@alifd/fusion-ui';\nimport { Button, Typography } from '@alifd/next';\n\nconst { H4 } = Typography;\n\nexport default () => {\n  const dialogRef = React.useRef();\n\n  const largeContent = new Array(60)\n    .fill()\n    .map((_, index) => (\n      <H4 key={index}>Start your business here by searching a popular product</H4>\n    ));\n  return (\n    <div>\n      <Button\n        onClick={function() {\n          dialogRef?.current?.show();\n        }}\n      >\n        长文本\n      </Button>\n      <ProDialog\n        id=\"prodialog-basic\"\n        ref={dialogRef}\n        title=\"Welcome to Alibaba.com\"\n        operationConfig={{ align: 'right' }}\n        operations={[\n          {\n            action: 'ok',\n            type: 'primary',\n            content: '确认',\n          },\n          {\n            action: 'cancel',\n            type: 'normal',\n            content: '取消',\n          },\n        ]}\n        onOk={() => {\n          console.log('ok');\n        }}\n        onCancel={() => {\n          console.log('cancel');\n        }}\n        onClose={() => {\n          console.log('close');\n        }}\n      >\n        {largeContent}\n      </ProDialog>\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProDrawer/basic.tsx",
    "content": "import React, { useRef } from 'react';\nimport { ProDrawer } from '@alifd/fusion-ui';\nimport { Button } from '@alifd/next';\n\nexport default () => {\n  const drawerRef = useRef();\n\n  const handleChangeVis = () => {\n    drawerRef?.current?.show();\n  };\n\n  return (\n    <div>\n      <Button onClick={handleChangeVis}>点我</Button>\n      <ProDrawer\n        id=\"prodrawer-basic\"\n        ref={drawerRef}\n        visible\n        title=\"Welcome to Alibaba.com\"\n        operationConfig={{ align: 'right' }}\n        operations={[\n          {\n            action: 'ok',\n            type: 'primary',\n            content: '确认',\n          },\n          {\n            action: 'cancel',\n            type: 'normal',\n            content: '取消',\n          },\n        ]}\n        onOk={() => {\n          console.log('ok');\n        }}\n        onCancel={() => {\n          console.log('cancel');\n        }}\n        onClose={() => {\n          console.log('close');\n        }}\n      >\n        Start your business here by searching a popular product\n      </ProDrawer>\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProDrawer/index.md",
    "content": "## 何时使用\n\nProDrawer 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n### 基本用法\n\n<code  src=\"./basic.tsx\"></code>\n\n## API\n\n<API hideTitle  src=\"@/components/pro-drawer/drawer.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProForm/basic.tsx",
    "content": "import React from 'react';\nimport { Input, Field } from '@alifd/next';\nimport { ProForm, FormInput } from '@alifd/fusion-ui';\n\nconst ProFormItem = ProForm.Item;\n\nexport default () => {\n  const field = Field.useField([]);\n  const [values, setValues] = React.useState();\n  return (\n    <div>\n      <ProForm\n        field={field}\n        operations={[\n          { action: 'submit', type: 'primary', content: '提交' },\n          { action: 'reset', type: 'secondary', content: '重置' },\n          {\n            action: 'custom',\n            type: 'secondary',\n            content: '打印表单数据',\n            onClick: () => {\n              const _values = field.getValues();\n              setValues(_values);\n            },\n          },\n        ]}\n        emptyContent=\"添加表单项\"\n        operationConfig={{ align: 'center' }}\n        labelAlign=\"top\"\n        columns={3}\n        labelCol={{ fixedSpan: 4 }}\n      >\n        <ProFormItem required size=\"medium\" name=\"nickname\" label=\"昵称\" device=\"desktop\">\n          <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n        </ProFormItem>\n        <Input\n          formItemProps={{\n            required: true,\n            name: 'email',\n            label: '邮箱',\n          }}\n          autoComplete=\"off\"\n          size=\"medium\"\n          hasBorder\n        />\n        <FormInput\n          formItemProps={{\n            required: true,\n            name: 'password',\n            label: '密码',\n          }}\n          autoComplete=\"off\"\n          size=\"medium\"\n          hasBorder\n        />\n      </ProForm>\n      表单数据: {JSON.stringify(values || {}, null, 2)}\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProForm/index.md",
    "content": "## 何时使用\n\nProForm 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n### 基本用法\n\n<code  src=\"./basic.tsx\"></code>\n\n### 操作按钮用法\n\n<code  src=\"./operations.tsx\"></code>\n\n## API\n\n<API hideTitle  src=\"@/components/pro-form/layouts/pro-form/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProForm/operations.tsx",
    "content": "import React from 'react';\nimport { Input, Button } from '@alifd/next';\nimport { ProForm } from '@alifd/fusion-ui';\n\nexport default () => {\n  return (\n    <div>\n      <ProForm\n        operations={[\n          <Button> 自定义按钮</Button>,\n          { action: 'submit', type: 'primary', content: '提交' },\n        ]}\n        emptyContent=\"添加表单项\"\n        operationConfig={{ align: 'center' }}\n        labelAlign=\"top\"\n        placeholderStyle={{\n          border: 0,\n          color: '#0088FF',\n          background: '#d8d8d836',\n          height: '38px',\n          gridArea: 'span 4 / span 4',\n        }}\n        columns={3}\n        placeholder=\"请在右侧面板添加表单项+\"\n        labelCol={{ fixedSpan: 4 }}\n      >\n        <Input\n          formItemProps={{\n            required: true,\n            name: 'email',\n            size: 'medium',\n            label: '表单项',\n            device: 'desktop',\n          }}\n          autoComplete=\"off\"\n          size=\"medium\"\n          hasBorder\n        />\n      </ProForm>\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProTable/basic.tsx",
    "content": "import * as React from 'react';\nimport { ProTable, useProTable } from '@alifd/fusion-ui';\nimport { fetchPaginationList } from './service';\nimport { Dialog } from '@alifd/next';\n\nconst columns = [\n  {\n    title: '公司',\n    dataIndex: 'company',\n    width: 160,\n  },\n  {\n    title: '完成进度',\n    dataIndex: 'percent',\n    formatType: 'percent',\n  },\n];\nconst actionColumnButtons = {\n  dataSource: [\n    { children: '查看' },\n    {\n      children: '编辑',\n      disabled: (payload) => payload.rowRecord.percent > 0.5,\n    },\n    {\n      children: '删除',\n      onClick: (e, payload) => {\n        Dialog.confirm({\n          title: `是否删除${payload.rowRecord.company}`,\n        });\n      },\n    },\n  ],\n};\n\nexport default () => {\n  const { tableProps } = useProTable(fetchPaginationList);\n\n  return <ProTable columns={columns} {...tableProps} actionColumnButtons={actionColumnButtons} />;\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProTable/index.md",
    "content": "## 何时使用\n\nProTable 的基础用法，演示自己控制数据的用法。code试一下能不能用\n\n## 示例\n\n### 基本用法\n\n<code transform=\"true\"  src=\"./basic.tsx\"></code>\n\n## API\n\n<API hideTitle  src=\"@/components/pro-table/components/pro-table/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/ProTable/service.ts",
    "content": "import qs from 'qs';\n\nexport const fetchPaginationList = async ({ current, pageSize }) => {\n  const size = +pageSize || 10;\n  return fetch(\n    `https://oneapi.alibaba-inc.com/mock/whalebase/pro-table/pagination-list?${qs.stringify({\n      current,\n      pageSize,\n    })}`,\n  )\n    .then((res) => res.json())\n    .then(({ content }) => ({\n      ...content,\n      dataSource: content.dataSource\n        .slice(0, size)\n        .map((vo, index) => ({ ...vo, id: `id-${current * size + index}` })),\n    }));\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/StepForm/basic.tsx",
    "content": "import React from 'react';\nimport { Input } from '@alifd/next';\nimport { StepForm, ProForm } from '@alifd/fusion-ui';\n\nconst ProFormItem = ProForm.Item;\n\nconst props = {\n  current: 0,\n  operations: [\n    {\n      content: '上一步',\n      action: 'previous',\n      type: 'secondary',\n    },\n    {\n      content: '下一步',\n      action: 'next',\n      type: 'primary',\n    },\n  ],\n};\n\nexport default () => {\n  return (\n    <div>\n      <StepForm {...props}>\n        <ProForm\n          operations={[\n            { action: 'submit', type: 'primary', content: '提交' },\n            { action: 'reset', type: 'secondary', content: '重置' },\n            { action: 'custom', type: 'secondary', content: 'abc' },\n          ]}\n          emptyContent=\"添加表单项\"\n          operationConfig={{ align: 'operation-align-center' }}\n          labelAlign=\"top\"\n          placeholderStyle={{\n            border: 0,\n            color: '#0088FF',\n            background: '#d8d8d836',\n            height: '38px',\n            gridArea: 'span 4 / span 4',\n          }}\n          columns={3}\n          placeholder=\"请在右侧面板添加表单项+\"\n          labelCol={{ fixedSpan: 4 }}\n        >\n          <ProFormItem\n            required\n            name=\"email\"\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"9815\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n          <ProFormItem\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"1961\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n          <ProFormItem\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"6067\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n        </ProForm>\n        <ProForm\n          operations={[\n            { action: 'submit', type: 'primary', content: '提交' },\n            { action: 'reset', type: 'secondary', content: '重置' },\n            { action: 'custom', type: 'secondary', content: 'abc' },\n          ]}\n          emptyContent=\"添加表单项\"\n          operationConfig={{ align: 'operation-align-center' }}\n          labelAlign=\"top\"\n          placeholderStyle={{\n            border: 0,\n            color: '#0088FF',\n            background: '#d8d8d836',\n            height: '38px',\n            gridArea: 'span 4 / span 4',\n          }}\n          columns={3}\n          placeholder=\"请在右侧面板添加表单项+\"\n          labelCol={{ fixedSpan: 4 }}\n        >\n          <ProFormItem\n            required\n            name=\"email\"\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"9815\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n          <ProFormItem\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"1961\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n          <ProFormItem\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"6067\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n        </ProForm>\n        <ProForm\n          operations={[\n            { action: 'submit', type: 'primary', content: '提交' },\n            { action: 'reset', type: 'secondary', content: '重置' },\n            { action: 'custom', type: 'secondary', content: 'abc' },\n          ]}\n          emptyContent=\"添加表单项\"\n          operationConfig={{ align: 'operation-align-center' }}\n          labelAlign=\"top\"\n          placeholderStyle={{\n            border: 0,\n            color: '#0088FF',\n            background: '#d8d8d836',\n            height: '38px',\n            gridArea: 'span 4 / span 4',\n          }}\n          columns={3}\n          placeholder=\"请在右侧面板添加表单项+\"\n          labelCol={{ fixedSpan: 4 }}\n        >\n          <ProFormItem\n            required\n            name=\"email\"\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"9815\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n          <ProFormItem\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"1961\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n          <ProFormItem\n            size=\"medium\"\n            componentProps={{ componentName: 'Input' }}\n            label=\"表单项\"\n            device=\"desktop\"\n            primaryKey=\"6067\"\n          >\n            <Input autoComplete=\"off\" size=\"medium\" hasBorder />\n          </ProFormItem>\n        </ProForm>\n      </StepForm>\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/StepForm/index.md",
    "content": "## 何时使用\n\nStepForm 的基础用法，演示自己控制数据的用法。code 试一下能不能用\n\n## 示例\n\n### 基本用法\n\n<code transform=\"true\"  src=\"./basic.tsx\"></code>\n\n## API\n\n<API hideTitle  src=\"@/components/pro-form/layouts/step-form/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/TabContainer/basic.tsx",
    "content": "import React from 'react';\nimport { TabContainer } from '@alifd/fusion-ui';\n\nconst props = {\n  shape: 'pure',\n  size: 'medium',\n  excessMode: 'slide',\n};\n\nexport default () => {\n  return (\n    <div>\n      <TabContainer {...props}>\n        <TabContainer.Item title=\"选项卡1\">内容1</TabContainer.Item>\n        <TabContainer.Item title=\"选项卡2\">内容2</TabContainer.Item>\n        <TabContainer.Item title=\"选项卡3\">内容3</TabContainer.Item>\n      </TabContainer>\n    </div>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/TabContainer/index.md",
    "content": "## 何时使用\n\nTabContainer 的基础用法，演示自己控制数据的用法。code试一下能不能用\n\n\n## 示例\n\n### 基本用法\n\n<code transform=\"true\"  src=\"./basic.tsx\"></code>\n\n## API\n\n<API hideTitle  src=\"@/components/tab-container/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/anchorForm/index.md",
    "content": "## 何时使用\n\n适合表单场景。\n\n## 示例\n\n```tsx\nimport React from 'react';\nimport { AnchorForm, ChildForm, FormInput, TabContainer } from '@alifd/fusion-ui';\n\nconst anchorFormProps = {\n  showAnchor: true,\n  enableRandomHtmlId: true,\n  anchorProps: {\n    direction: 'hoz',\n    hasAffix: true,\n  },\n  operationConfig: {\n    align: 'center',\n  },\n  operations: [\n    {\n      content: '提交',\n      action: 'submit',\n      type: 'secondary',\n    },\n    {\n      content: '重置',\n      action: 'reset',\n      type: 'secondary',\n    },\n  ],\n};\n\nconst childFormProps = [1, 2, 3, 4, 5, 6, 7, 8].map((item) => ({\n  columns: 2,\n  mode: 'independent',\n  anchorItemProps: {\n    label: `Tab-${item}`,\n  },\n  cardSectionProps: {\n    noBullet: true,\n    tagGroup: [\n      {\n        label: '操作',\n        color: 'orange',\n      },\n      {\n        label: '操作',\n        color: 'green',\n      },\n      {\n        label: '操作',\n        color: 'blue',\n      },\n    ],\n  },\n}));\n\nconst formInputProps = {\n  formItemProps: {\n    label: '表单项',\n    size: 'medium',\n    device: 'desktop',\n    fullWidth: true,\n  },\n  placeholder: '请输入',\n};\n\nexport default () => {\n  return (\n    <div>\n      basic demo\n      <TabContainer>\n        <TabContainer.Item title=\"123\">\n          <AnchorForm {...anchorFormProps}>\n            <ChildForm {...childFormProps[0]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n            <ChildForm {...childFormProps[1]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n            <ChildForm {...childFormProps[2]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n            <ChildForm {...childFormProps[3]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n          </AnchorForm>\n        </TabContainer.Item>\n        <TabContainer.Item title=\"456\">\n          <AnchorForm {...anchorFormProps}>\n            <ChildForm {...childFormProps[4]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n            <ChildForm {...childFormProps[5]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n            <ChildForm {...childFormProps[6]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n            <ChildForm {...childFormProps[7]}>\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n              <FormInput {...formInputProps} />\n            </ChildForm>\n          </AnchorForm>\n        </TabContainer.Item>\n      </TabContainer>\n    </div>\n  );\n};\n```\n\n## API\n\n<API hideTitle  src=\"@/components/pro-form/layouts/anchor-form/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/areaChart/index.md",
    "content": "## 何时使用\n\n区域图表。\n\n## 示例\n\n```tsx\nimport React from 'react';\nimport { AreaChart } from '@alifd/fusion-ui';\n\nconst props = {\n  data: [\n    { year: '1991', value: 72345678 },\n    { year: '1992', value: 4321132 },\n    { year: '1993', value: 33121112.5 },\n    { year: '1994', value: 45227221 },\n    { year: '1995', value: 4321221.9 },\n    { year: '1996', value: 6322121 },\n    { year: '1997', value: 78312213 },\n    { year: '1998', value: 4192312 },\n    { year: '1999', value: 6212332 },\n    { year: '2000', value: 3192312 },\n  ],\n  xField: 'year',\n  yField: 'value',\n  color: '#0079f2',\n  label: {\n    visible: true,\n  },\n};\n\nexport default () => {\n  return <AreaChart {...props} />;\n};\n```\n\n## API\n\n<API hideTitle src=\"../../../src/components/area-chart/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/docs/src/childForm/index.md",
    "content": "## 何时使用\n\n适合表单场景。\n\n## 示例\n\n```tsx\nimport React from 'react';\nimport { Input } from '@alifd/next';\nimport { ChildForm, ProForm } from '@alifd/fusion-ui';\n\nconst ProFormItem = ProForm.Item;\n\nexport default () => {\n  return (\n    <ChildForm\n      operations={[\n        { action: 'submit', type: 'primary', content: '提交' },\n        { action: 'reset', type: 'secondary', content: '重置' },\n        { action: 'custom', type: 'secondary', content: 'abc' },\n      ]}\n      emptyContent=\"添加表单项\"\n      operationConfig={{ align: 'operation-align-center' }}\n      labelAlign=\"top\"\n      placeholderStyle={{\n        border: 0,\n        color: '#0088FF',\n        background: '#d8d8d836',\n        height: '38px',\n        gridArea: 'span 4 / span 4',\n      }}\n      columns={3}\n      placeholder=\"请在右侧面板添加表单项+\"\n      labelCol={{ fixedSpan: 4 }}\n    >\n      <ProFormItem\n        required\n        name=\"email\"\n        size=\"medium\"\n        componentProps={{ componentName: 'Input' }}\n        label=\"表单项\"\n        device=\"desktop\"\n        primaryKey=\"9815\"\n      >\n        <Input autoComplete=\"off\" size=\"medium\" hasBorder={true} />\n      </ProFormItem>\n      <ProFormItem\n        size=\"medium\"\n        componentProps={{ componentName: 'Input' }}\n        label=\"表单项\"\n        device=\"desktop\"\n        primaryKey=\"1961\"\n      >\n        <Input autoComplete=\"off\" size=\"medium\" hasBorder={true} />\n      </ProFormItem>\n      <ProFormItem\n        size=\"medium\"\n        componentProps={{ componentName: 'Input' }}\n        label=\"表单项\"\n        device=\"desktop\"\n        primaryKey=\"6067\"\n      >\n        <Input autoComplete=\"off\" size=\"medium\" hasBorder={true} />\n      </ProFormItem>\n    </ChildForm>\n  );\n};\n```\n\n## API\n\n<API hideTitle  src=\"@/components/pro-form/layouts/child-form/index.tsx\" />\n"
  },
  {
    "path": "packages/fusion-ui/f2elint.config.js",
    "content": "module.exports = {\n  enableStylelint: true,\n  enableMarkdownlint: true,\n  enablePrettier: true,\n};\n"
  },
  {
    "path": "packages/fusion-ui/jest.config.js",
    "content": "module.exports = {\n  setupFilesAfterEnv: ['<rootDir>/test/setupTests.js'],\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/anchor/meta.ts",
    "content": "import { hideProp } from '../utils';\n\nconst meta = {\n  components: [\n    {\n      componentName: 'Anchor',\n      group: '精选组件',\n      title: '电梯容器',\n      category: '布局容器类',\n      docUrl: '',\n      screenshot:\n        'https://img.alicdn.com/imgextra/i3/O1CN01aDpmze26zlTZVDhtR_!!6000000007733-2-tps-112-112.png',\n      devMode: 'proCode',\n      npm: {\n        package: '@alifd/fusion-ui',\n        version: '1.0.24-5',\n        exportName: 'Anchor',\n        main: 'lib/index.js',\n        destructuring: true,\n        subName: '',\n      },\n      configure: {\n        props: [\n          {\n            title: {\n              label: { type: 'i18n', 'en-US': 'dataSource', 'zh-CN': '锚点列表数据源' },\n              tip: 'dataSource | 锚点列表数据源',\n            },\n            name: 'dataSource',\n            description: '锚点列表数据源',\n            setter: {\n              componentName: 'ArraySetter',\n              props: {\n                itemSetter: {\n                  componentName: 'ObjectSetter',\n                  props: {\n                    config: {\n                      items: [\n                        {\n                          title: { label: { type: 'i18n', 'en-US': 'htmlId', 'zh-CN': 'htmlId' } },\n                          name: 'htmlId',\n                          setter: {\n                            componentName: 'StringSetter',\n                            isRequired: true,\n                            initialValue: '',\n                          },\n                        },\n                        {\n                          title: { label: { type: 'i18n', 'en-US': 'label', 'zh-CN': 'label' } },\n                          name: 'label',\n                          setter: {\n                            componentName: 'StringSetter',\n                            isRequired: true,\n                            initialValue: '',\n                          },\n                        },\n                        {\n                          title: {\n                            label: { type: 'i18n', 'en-US': 'children', 'zh-CN': 'children' },\n                          },\n                          name: 'children',\n                          setter: {\n                            componentName: 'ArraySetter',\n                            props: {\n                              itemSetter: {\n                                componentName: 'ObjectSetter',\n                                props: {},\n                                isRequired: false,\n                                initialValue: {},\n                              },\n                            },\n                            initialValue: [],\n                          },\n                        },\n                      ],\n                    },\n                  },\n                },\n              },\n              isRequired: true,\n              initialValue: [],\n            },\n          },\n          {\n            title: {\n              label: { type: 'i18n', 'en-US': 'container', 'zh-CN': '容器，默认是 win' },\n              tip: 'container | 容器，默认是 window',\n            },\n            condition: hideProp,\n            name: 'container',\n            setter: { componentName: 'FunctionSetter', isRequired: false },\n          },\n          {\n            title: {\n              label: { type: 'i18n', 'en-US': 'direction', 'zh-CN': '锚点方向' },\n              tip: 'direction | 锚点方向',\n            },\n            name: 'direction',\n            defaultValue: 'ver',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                dataSource: [\n                  { label: 'ver', value: 'ver' },\n                  { label: 'hoz', value: 'hoz' },\n                ],\n                options: [\n                  { label: 'ver', value: 'ver' },\n                  { label: 'hoz', value: 'hoz' },\n                ],\n              },\n              initialValue: 'ver',\n            },\n          },\n          {\n            title: {\n              label: { type: 'i18n', 'en-US': 'hasAffix', 'zh-CN': '固定在顶部' },\n              tip: 'hasAffix | direction=\"hoz\" 生效',\n            },\n            condition: (target) => {\n              return target.getProps().getPropValue('direction') === 'hoz';\n            },\n            name: 'hasAffix',\n            setter: { componentName: 'BoolSetter', isRequired: false, initialValue: false },\n          },\n          {\n            title: {\n              label: { type: 'i18n', 'en-US': 'affixProps', 'zh-CN': '固钉配置' },\n              tip: 'affixProps | hasAffix={true} 后使用',\n            },\n            condition: (target) => {\n              const hasAffix = target.getProps().getPropValue('hasAffix');\n              return typeof hasAffix === 'boolean' && hasAffix;\n            },\n            name: 'affixProps',\n            setter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      title: {\n                        label: { type: 'i18n', 'en-US': 'container', 'zh-CN': 'container' },\n                      },\n                      name: 'container',\n                      setter: { componentName: 'FunctionSetter', isRequired: false },\n                    },\n                    {\n                      title: {\n                        label: { type: 'i18n', 'en-US': 'offsetTop', 'zh-CN': 'offsetTop' },\n                      },\n                      name: 'offsetTop',\n                      setter: { componentName: 'NumberSetter', isRequired: false, initialValue: 0 },\n                    },\n                    {\n                      title: {\n                        label: { type: 'i18n', 'en-US': 'offsetBottom', 'zh-CN': 'offsetBottom' },\n                      },\n                      name: 'offsetBottom',\n                      setter: { componentName: 'NumberSetter', isRequired: false, initialValue: 0 },\n                    },\n                    {\n                      title: { label: { type: 'i18n', 'en-US': 'onAffix', 'zh-CN': 'onAffix' } },\n                      name: 'onAffix',\n                      setter: { componentName: 'FunctionSetter' },\n                    },\n                    {\n                      title: {\n                        label: { type: 'i18n', 'en-US': 'useAbsolute', 'zh-CN': 'useAbsolute' },\n                      },\n                      name: 'useAbsolute',\n                      setter: {\n                        componentName: 'BoolSetter',\n                        isRequired: false,\n                        initialValue: false,\n                      },\n                    },\n                  ],\n                },\n              },\n            },\n          },\n        ],\n        supports: { className: true, style: true },\n        component: {},\n      },\n    },\n  ],\n};\n\nexport default meta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/anchor-form/meta.ts",
    "content": "import { IComponentDescription } from '../types';\nimport { hideProp, mockId } from '../utils';\nimport { operationProps } from '../common';\n\nconst AnchorFormMeta: IComponentDescription = {\n  componentName: 'AnchorForm',\n  title: '电梯表单',\n  category: '表单类',\n  group: '精选组件',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i1/O1CN01jnfLpK1rFJ4nPj9Pt_!!6000000005601-55-tps-56-56.svg',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.22',\n    exportName: 'AnchorForm',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    supports: { className: true, style: true, events: ['onChange'] },\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n      nestingRule: {\n        childWhitelist: ['ChildForm'],\n      },\n    },\n    props: [\n      {\n        name: 'anchorConfig',\n        title: '电梯设置',\n        type: 'group',\n        display: 'accordion',\n        items: [\n          {\n            name: 'showAnchor',\n            title: '电梯显示',\n            defaultValue: true,\n            setter: 'BoolSetter',\n          },\n          {\n            title: {\n              label: { type: 'i18n', 'en-US': 'direction', 'zh-CN': '锚点方向' },\n              tip: 'direction | 锚点方向',\n            },\n            name: 'anchorProps.direction',\n            condition: (target) => {\n              const showAnchor = target.getProps().getPropValue('showAnchor');\n              return typeof showAnchor === 'undefined' || showAnchor;\n            },\n            defaultValue: 'ver',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                dataSource: [\n                  { label: '垂直', value: 'ver' },\n                  { label: '水平', value: 'hoz' },\n                ],\n                options: [\n                  { label: '垂直', value: 'ver' },\n                  { label: '水平', value: 'hoz' },\n                ],\n              },\n              initialValue: 'ver',\n            },\n          },\n          {\n            title: {\n              label: { type: 'i18n', 'en-US': 'hasAffix', 'zh-CN': '固定在顶部' },\n              tip: 'hasAffix | direction=\"hoz\" 生效',\n            },\n            condition: (target) => {\n              const showAnchor = target.getProps().getPropValue('showAnchor');\n              return (\n                showAnchor && target.getProps().getPropValue('anchorProps.direction') === 'hoz'\n              );\n            },\n            name: 'anchorProps.hasAffix',\n            setter: { componentName: 'BoolSetter', isRequired: false, initialValue: false },\n          },\n        ],\n      },\n      {\n        title: {\n          label: { type: 'i18n', 'en-US': 'container', 'zh-CN': '容器，默认是 win' },\n          tip: 'container | 容器，默认是 window',\n        },\n        condition: hideProp,\n        name: 'container',\n        setter: { componentName: 'FunctionSetter', isRequired: false },\n      },\n      {\n        title: {\n          label: { type: 'i18n', 'en-US': 'affixProps', 'zh-CN': '固钉配置' },\n          tip: 'affixProps | hasAffix={true} 后使用',\n        },\n        condition: (target) => {\n          const hasAffix = target.getProps().getPropValue('hasAffix');\n          return typeof hasAffix === 'boolean' && hasAffix;\n        },\n        name: 'affixProps',\n        setter: {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  title: { label: { type: 'i18n', 'en-US': 'container', 'zh-CN': 'container' } },\n                  name: 'container',\n                  setter: { componentName: 'FunctionSetter', isRequired: false },\n                },\n                {\n                  title: { label: { type: 'i18n', 'en-US': 'offsetTop', 'zh-CN': 'offsetTop' } },\n                  name: 'offsetTop',\n                  setter: { componentName: 'NumberSetter', isRequired: false, initialValue: 0 },\n                },\n                {\n                  title: {\n                    label: { type: 'i18n', 'en-US': 'offsetBottom', 'zh-CN': 'offsetBottom' },\n                  },\n                  name: 'offsetBottom',\n                  setter: { componentName: 'NumberSetter', isRequired: false, initialValue: 0 },\n                },\n                {\n                  title: { label: { type: 'i18n', 'en-US': 'onAffix', 'zh-CN': 'onAffix' } },\n                  name: 'onAffix',\n                  setter: { componentName: 'FunctionSetter' },\n                },\n                {\n                  title: {\n                    label: { type: 'i18n', 'en-US': 'useAbsolute', 'zh-CN': 'useAbsolute' },\n                  },\n                  name: 'useAbsolute',\n                  setter: { componentName: 'BoolSetter', isRequired: false, initialValue: false },\n                },\n              ],\n            },\n          },\n        },\n      },\n      ...operationProps,\n      {\n        title: {\n          label: { type: 'i18n', 'en-US': 'onChange', 'zh-CN': '点击不同锚点时的自定' },\n          tip: 'onChange | 点击不同锚点时的自定义触发函数',\n        },\n        condition: hideProp,\n        name: 'onChange',\n        setter: { componentName: 'FunctionSetter' },\n      },\n      {\n        title: {\n          label: { type: 'i18n', 'en-US': 'offsetY', 'zh-CN': '垂直跳转偏移量' },\n          tip: 'offsetY | 垂直跳转偏移量',\n        },\n        condition: hideProp,\n        name: 'offsetY',\n        defaultValue: 0,\n        setter: { componentName: 'NumberSetter', isRequired: false, initialValue: 0 },\n      },\n      {\n        title: {\n          label: { type: 'i18n', 'en-US': 'scrollTop', 'zh-CN': '自定义滚动到页首的方' },\n          tip: 'scrollTop | 自定义滚动到页首的方法',\n        },\n        condition: hideProp,\n        name: 'scrollTop',\n        setter: { componentName: 'FunctionSetter', isRequired: false },\n      },\n    ],\n  },\n};\nconst snippets: Snippet[] = [\n  {\n    title: '电梯表单',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i1/O1CN01jnfLpK1rFJ4nPj9Pt_!!6000000005601-55-tps-56-56.svg',\n    schema: {\n      componentName: 'AnchorForm',\n      props: {\n        showAnchor: true,\n        anchorProps: {\n          direction: 'hoz',\n        },\n      },\n      children: [\n        {\n          componentName: 'ChildForm',\n          props: {\n            columns: 2,\n            mode: 'independent',\n            anchorItemProps: {\n              htmlId: mockId(),\n              label: 'Tab1',\n            },\n            cardSectionProps: {\n              noBullet: true,\n            },\n            operationConfig: {},\n            labelCol: {\n              fixedSpan: 4,\n            },\n            labelAlign: 'top',\n          },\n          children: [...new Array(4).keys()].map(() => ({\n            componentName: 'FormInput',\n            props: {\n              formItemProps: {\n                primaryKey: mockId(),\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n                fullWidth: true,\n              },\n              placeholder: '请输入',\n            },\n          })),\n        },\n        {\n          componentName: 'ChildForm',\n          props: {\n            mode: 'independent',\n            anchorItemProps: {\n              htmlId: mockId(),\n              label: 'Tab2',\n            },\n            cardSectionProps: {\n              noBullet: true,\n            },\n            columns: 2,\n            operationConfig: {},\n            labelCol: {\n              fixedSpan: 4,\n            },\n            labelAlign: 'top',\n          },\n          children: [...new Array(4).keys()].map(() => ({\n            componentName: 'FormInput',\n            props: {\n              formItemProps: {\n                primaryKey: mockId(),\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n                fullWidth: true,\n              },\n              placeholder: '请输入',\n            },\n          })),\n        },\n        {\n          componentName: 'ChildForm',\n          props: {\n            mode: 'independent',\n            anchorItemProps: {\n              htmlId: mockId(),\n              label: 'Tab3',\n            },\n            cardSectionProps: {\n              noBullet: true,\n            },\n            columns: 2,\n            operationConfig: {},\n            labelCol: {\n              fixedSpan: 4,\n            },\n            labelAlign: 'top',\n          },\n          children: [...new Array(4).keys()].map(() => ({\n            componentName: 'FormInput',\n            props: {\n              formItemProps: {\n                primaryKey: mockId(),\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n                fullWidth: true,\n              },\n              placeholder: '请输入',\n            },\n          })),\n        },\n        {\n          componentName: 'ChildForm',\n          props: {\n            mode: 'independent',\n            anchorItemProps: {\n              htmlId: mockId(),\n              label: 'Tab4',\n            },\n            cardSectionProps: {\n              noBullet: true,\n            },\n            columns: 2,\n            operationConfig: {},\n            labelCol: {\n              fixedSpan: 4,\n            },\n            labelAlign: 'top',\n          },\n          children: [...new Array(4).keys()].map(() => ({\n            componentName: 'FormInput',\n            props: {\n              formItemProps: {\n                primaryKey: mockId(),\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n                fullWidth: true,\n              },\n              placeholder: '请输入',\n            },\n          })),\n        },\n      ],\n    },\n  },\n];\n\nexport default {\n  ...AnchorFormMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/area-chart/meta.ts",
    "content": "import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';\nimport { actionConfigure } from '../common/chart-action';\nimport { plotConfigure } from '../common/chart-plot';\n\nconst AreaChartMeta: IPublicTypeComponentMetadata = {\n  componentName: 'AreaChart',\n  title: '面积图',\n  category: '图表',\n  group: '精选组件',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.3-beta.3',\n    exportName: 'AreaChart',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      // 数据\n      {\n        name: 'data',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '数据',\n        },\n        items: [\n          {\n            name: 'data',\n            title: '图表数据',\n            setter: 'JsonSetter',\n          },\n          {\n            name: 'xField',\n            title: {\n              label: 'x轴字段名',\n              tip: 'x 方向映射对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'yField',\n            title: {\n              label: 'y轴字段名',\n              tip: 'y 方向映射所对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      // 图形属性\n      {\n        name: '',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图形属性',\n        },\n        items: [\n          {\n            name: 'color',\n            title: '颜色',\n            setter: 'ColorSetter',\n          },\n          {\n            name: 'line.size',\n            title: '粗细',\n            setter: 'NumberSetter',\n          },\n          {\n            name: 'smooth',\n            title: '平滑',\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'point.visible',\n            title: '显示点',\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'label.visible',\n            title: '显示标签',\n            setter: 'BoolSetter',\n          },\n        ],\n      },\n      ...plotConfigure,\n      ...actionConfigure,\n    ],\n  },\n};\nconst snippets: IPublicTypeSnippet[] = [\n  {\n    title: '面积图',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i2/O1CN012P76ko1dqUbwwmuF8_!!6000000003787-55-tps-56-56.svg',\n    schema: {\n      componentName: 'AreaChart',\n      props: {\n        data: [\n          { year: '1991', value: 72345678 },\n          { year: '1992', value: 4321132 },\n          { year: '1993', value: 33121112.5 },\n          { year: '1994', value: 45227221 },\n          { year: '1995', value: 4321221.9 },\n          { year: '1996', value: 6322121 },\n          { year: '1997', value: 78312213 },\n          { year: '1998', value: 4192312 },\n          { year: '1999', value: 6212332 },\n          { year: '2000', value: 3192312 },\n        ],\n        xField: 'year',\n        yField: 'value',\n        color: '#0079f2',\n        label: {\n          visible: true,\n        },\n      },\n    },\n  },\n];\n\nexport default {\n  ...AreaChartMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/bar-chart/meta.ts",
    "content": "import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';\nimport { actionConfigure } from '../common/chart-action';\nimport { plotConfigure } from '../common/chart-plot';\n\nconst BarChartMeta: IPublicTypeComponentMetadata = {\n  componentName: 'BarChart',\n  title: '条形图',\n  category: '图表',\n  group: '精选组件',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.3-beta.3',\n    exportName: 'BarChart',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      // 数据\n      {\n        name: 'data',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '数据',\n        },\n        items: [\n          {\n            name: 'data',\n            title: '图表数据',\n            setter: 'JsonSetter',\n          },\n          {\n            name: 'xField',\n            title: {\n              label: 'x轴字段名',\n              tip: 'x 方向映射对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'yField',\n            title: {\n              label: 'y轴字段名',\n              tip: 'y 方向映射所对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      // 图形属性\n      {\n        name: '',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图形属性',\n        },\n        items: [\n          {\n            name: 'color',\n            title: '颜色',\n            setter: 'ColorSetter',\n          },\n          {\n            name: 'barSize',\n            title: '粗细',\n            setter: 'NumberSetter',\n          },\n          {\n            name: 'label',\n            type: 'group',\n            display: 'accordion',\n            title: {\n              label: '标签',\n            },\n            items: [\n              {\n                name: 'label.visible',\n                title: '显示',\n                setter: 'BoolSetter',\n              },\n              {\n                name: 'label.position',\n                title: '位置',\n                setter: {\n                  componentName: 'RadioGroupSetter',\n                  props: {\n                    options: [\n                      { title: '左', value: 'left' },\n                      { title: '中', value: 'middle' },\n                      { title: '右', value: 'right' },\n                    ],\n                  },\n                },\n                condition: (target) => {\n                  return !!target.getProps().getPropValue('label.visible');\n                },\n              },\n            ],\n          },\n        ],\n      },\n      ...plotConfigure,\n      ...actionConfigure,\n    ],\n  },\n};\nconst snippets: IPublicTypeSnippet[] = [\n  {\n    title: '条形图',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01cOF2841sYpZkxzCsv_!!6000000005779-55-tps-56-56.svg',\n    schema: {\n      componentName: 'BarChart',\n      props: {\n        data: [\n          { year: '1991', value: 72345678 },\n          { year: '1992', value: 4321132 },\n          { year: '1993', value: 33121112.5 },\n          { year: '1994', value: 45227221 },\n          { year: '1995', value: 4321221.9 },\n          { year: '1996', value: 6322121 },\n          { year: '1997', value: 78312213 },\n          { year: '1998', value: 4192312 },\n          { year: '1999', value: 6212332 },\n          { year: '2000', value: 3192312 },\n        ],\n        xField: 'value',\n        yField: 'year',\n        color: '#0079f2',\n        label: {\n          visible: true,\n          position: 'middle',\n        },\n      },\n    },\n  },\n];\n\nexport default {\n  ...BarChartMeta,\n  snippets\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/cascader-select/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormCascaderSelect',\n  isFormItemComponent: true,\n  title: '级联选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormCascaderSelect',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'label',\n      title: {\n        label: 'label',\n        tip: '自定义内联 label',\n      },\n      propType: 'string',\n      description: '自定义内联 label',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '占位符',\n    },\n    {\n      name: 'dataSource',\n      propType: {\n        type: 'arrayOf',\n        value: 'object',\n      },\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'hasArrow',\n      propType: 'bool',\n      description: '下拉箭头',\n      defaultValue: true,\n    },\n    {\n      name: 'hasBorder',\n      propType: 'bool',\n      description: '边框',\n      defaultValue: true,\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '清除按钮',\n      defaultValue: false,\n    },\n    {\n      name: 'notFoundContent',\n      title: {\n        label: '无数据时显示内容',\n        tip: 'notFoundContent',\n      },\n      propType: {\n        type: 'oneOfType',\n        value: ['node', 'string'],\n      },\n      description: '无数据时显示内容',\n      defaultValue: 'Not Found',\n    },\n    {\n      name: 'loadData',\n      propType: 'func',\n      description: '异步加载数据函数\\n@param {Object} data 当前点击异步加载的数据',\n    },\n    {\n      name: 'header',\n      propType: 'node',\n      description: '自定义下拉框头部',\n    },\n    {\n      name: 'footer',\n      propType: 'node',\n      description: '自定义下拉框底部',\n    },\n    {\n      name: 'defaultVisible',\n      title: {\n        label: '初始下拉框是否显示',\n        tip: 'defaultVisible',\n      },\n      propType: 'bool',\n      description: '初始下拉框是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'visible',\n      title: {\n        label: '当前下拉框是否显示',\n        tip: 'visible',\n      },\n      propType: 'bool',\n      description: '当前下拉框是否显示',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否只读',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时触发的回调函数\\n@param {String|Array} value 选中的值，单选时返回单个值，多选时返回数组\\n@param {Object|Array} data 选中的数据，包括 value 和 label，单选时返回单个值，多选时返回数组，父子节点选中关联时，同时选中，只返回父节点\\n@param {Object} extra 额外参数\\n@param {Array} extra.selectedPath 单选时选中的数据的路径\\n@param {Boolean} extra.checked 多选时当前的操作是选中还是取消选中\\n@param {Object} extra.currentData 多选时当前操作的数据\\n@param {Array} extra.checkedData 多选时所有被选中的数据\\n@param {Array} extra.indeterminateData 多选时半选的数据',\n    },\n    {\n      name: 'expandTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '展开触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'onExpand',\n      propType: 'func',\n    },\n    {\n      name: 'useVirtual',\n      propType: 'bool',\n      description: '虚拟滚动',\n      defaultValue: false,\n    },\n    {\n      name: 'multiple',\n      propType: 'bool',\n      description: '是否多选',\n      defaultValue: false,\n    },\n    {\n      name: 'changeOnSelect',\n      title: {\n        label: '选中即改变',\n        tip: 'changeOnSelect|是否选中即发生改变, 该属性仅在单选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否选中即发生改变, 该属性仅在单选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'canOnlyCheckLeaf',\n      title: {\n        label: 'canOnlyCheckLeaf',\n        tip: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      },\n      propType: 'bool',\n      description: '是否只能勾选叶子项的checkbox，该属性仅在多选模式下有效',\n      defaultValue: false,\n    },\n    {\n      name: 'checkStrictly',\n      title: {\n        label: 'checkStrictly',\n        tip: '父子节点是否选中不关联',\n      },\n      propType: 'bool',\n      description: '父子节点是否选中不关联',\n      defaultValue: false,\n    },\n    {\n      name: 'listStyle',\n      propType: 'object',\n      description: '每列列表样式对象',\n    },\n    {\n      name: 'resultAutoWidth',\n      title: {\n        label: 'resultAutoWidth',\n        tip: '搜索结果列表是否和选择框等宽',\n      },\n      propType: 'bool',\n      description: '搜索结果列表是否和选择框等宽',\n      defaultValue: true,\n    },\n    {\n      name: 'showSearch',\n      propType: 'bool',\n      description: '搜索框',\n      defaultValue: false,\n    },\n    {\n      name: 'filter',\n      propType: 'func',\n      description:\n        '自定义搜索函数\\n@param {String} searchValue 搜索的关键字\\n@param {Array} path 节点路径\\n@return {Boolean} 是否匹配\\n@default 根据路径所有节点的文本值模糊匹配',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '下拉框显示或关闭时触发事件的回调函数\\n@param {Boolean} visible 是否显示\\n@param {String} type 触发显示关闭的操作类型, fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '下拉框自定义样式对象',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '透传到 Popup 的属性对象',\n    },\n    {\n      name: 'followTrigger',\n      title: {\n        label: '是否跟随滚动',\n        tip: 'followTrigger',\n      },\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'isPreview',\n      title: {\n        label: '是否为预览态',\n        tip: 'isPreview',\n      },\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onChange', 'onExpand', 'onVisibleChange'],\n    },\n    props: wrapFormItemProps([\n      {\n        name: 'label',\n        title: {\n          label: '内联文案',\n          tip: '自定义内联 label',\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['small', 'medium', 'large'] },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'placeholder',\n        title: '占位提示',\n        setter: 'StringSetter',\n      },\n      {\n        name: 'dataSource',\n        title: '级联数据',\n        setter: 'JsonSetter',\n      },\n      {\n        name: 'disabled',\n        setter: 'BoolSetter',\n        title: '是否禁用',\n        defaultValue: false,\n      },\n      {\n        name: 'hasArrow',\n        setter: 'BoolSetter',\n        title: '下拉箭头',\n        defaultValue: true,\n      },\n      {\n        name: 'hasBorder',\n        setter: 'BoolSetter',\n        title: '边框',\n        defaultValue: true,\n      },\n      {\n        name: 'hasClear',\n        setter: 'BoolSetter',\n        title: '清除按钮',\n        defaultValue: false,\n      },\n      {\n        name: 'readOnly',\n        setter: 'BoolSetter',\n        title: '是否只读',\n      },\n      {\n        name: 'multiple',\n        setter: 'BoolSetter',\n        title: '是否多选',\n        defaultValue: false,\n      },\n      {\n        name: 'showSearch',\n        setter: 'BoolSetter',\n        title: '搜索框',\n        defaultValue: false,\n      },\n      {\n        name: 'followTrigger',\n        title: {\n          label: '跟随滚动',\n          tip: 'followTrigger',\n        },\n        setter: 'BoolSetter',\n        description: '是否跟随滚动',\n      },\n      {\n        name: 'isPreview',\n        title: {\n          label: '预览态',\n          tip: 'isPreview',\n        },\n        setter: 'BoolSetter',\n        description: '是否为预览态',\n      },\n      {\n        name: 'expandTriggerType',\n        display: 'block',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: { options: ['click', 'hover'] },\n        },\n        title: '展开触发方式',\n        defaultValue: 'click',\n      },\n      {\n        name: 'notFoundContent',\n        display: 'block',\n        title: {\n          label: '无数据时显示内容',\n          tip: 'notFoundContent',\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'SlotSetter'],\n          },\n        },\n        defaultValue: 'Not Found',\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n    ]),\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/cascader-select/snippets.js",
    "content": "module.exports = [\n  {\n    title: '收起模式',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader-select.png',\n    schema: {\n      componentName: 'CascaderSelect',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n        hasArrow: true,\n        hasBorder: true,\n        expandTriggerType: 'click',\n        resultAutoWidth: true,\n        notFoundContent: 'Not Found',\n        dataSource: [\n          {\n            value: '2974',\n            label: '西安',\n            children: [\n              {\n                value: '2975',\n                label: '西安市',\n              },\n              {\n                value: '2976',\n                label: '高陵县',\n              },\n              {\n                value: '2977',\n                label: '蓝田县',\n              },\n            ],\n          },\n        ],\n      },\n    },\n  },\n  {\n    title: '展开模式',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_cascader.png',\n    schema: {\n      componentName: 'Cascader',\n      props: {\n        prefix: 'next-',\n        expandTriggerType: 'click',\n        dataSource: [\n          {\n            value: '2974',\n            label: '西安',\n            children: [\n              {\n                value: '2975',\n                label: '西安市',\n              },\n              {\n                value: '2976',\n                label: '高陵县',\n              },\n              {\n                value: '2977',\n                label: '蓝田县',\n              },\n            ],\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/checkbox-group/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormCheckboxGroup',\n  isFormItemComponent: true,\n  title: '复选按钮组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormCheckboxGroup',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: wrapFormItemProps([\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'itemDirection',\n        title: '排列方式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '水平排列', value: 'hoz' },\n              { title: '垂直排列', value: 'ver' },\n            ],\n          },\n        },\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'isPreview',\n        title: '预览态',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        defaultValue: '[]',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['JsonSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: '选项',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          {\n                            name: 'label',\n                            title: 'label',\n                            setter: 'StringSetter',\n                          },\n                          {\n                            name: 'value',\n                            title: 'value',\n                            setter: 'StringSetter',\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: {\n                      label: '选项一',\n                      value: '1',\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      // {\n      //   name: \"renderPreview\",\n      //   title: \"预览态模式下渲染的内容\",\n      //   display: \"block\",\n      //   setter: {\n      //     componentName: \"FunctionSetter\"\n      //   },\n      //   condition(target) {\n      //     return target.getProps().getPropValue(\"isPreview\") || false;\n      //   }\n      // }\n    ]),\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n    advanced: {\n      initials: [\n        {\n          name: 'dataSource',\n          initial: () => {\n            return [\n              {\n                label: '选项一',\n                value: '1',\n              },\n              {\n                label: '选项二',\n                value: '2',\n              },\n              {\n                label: '选项三',\n                value: '3',\n              },\n            ];\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/child-form/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@ali/lowcode-types';\nimport { default as formBaseProps } from '../pro-form/common/form-base-props';\n\nconst ChildFormMeta: ComponentMetadata = {\n  componentName: 'ChildForm',\n  title: '子表单',\n  docUrl: '',\n  screenshot: '',\n  category: '表单类',\n  group: '精选组件',\n  devMode: 'proCode',\n  hidden: true,\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.24',\n    exportName: 'ChildForm',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: formBaseProps,\n    supports: {\n      className: true,\n      style: true,\n    },\n    component: {\n      isContainer: true,\n      isMinimalRenderUnit: true,\n      nestingRule: {\n        childWhitelist: new RegExp('form.*', 'i'),\n      },\n    },\n  },\n};\nconst snippets: Snippet[] = [\n  {\n    title: '子表单',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i1/O1CN01MJT0lc1pXVaHIcoBy_!!6000000005370-55-tps-56-56.svg',\n    schema: {\n      componentName: 'ChildForm',\n      props: {\n        primaryKey: String(Math.floor(Math.random() * 10000)),\n        placeholder: '请在右侧面板添加表单项+',\n        placeholderStyle: {\n          height: '38px',\n          color: '#0088FF',\n          background: '#d8d8d836',\n          border: 0,\n          gridArea: 'span 4 / span 4',\n        },\n        columns: 3,\n        labelCol: {\n          fixedSpan: 4,\n        },\n        labelAlign: 'top',\n        emptyContent: '添加表单项',\n      },\n      children: [...new Array(3).keys()].map((item) => ({\n        componentName: 'FormInput',\n        props: {\n          formItemProps: {\n            primaryKey: String(Math.floor(Math.random() * 10000) + item),\n            label: '表单项',\n            size: 'medium',\n            device: 'desktop',\n            fullWidth: true,\n          },\n          placeholder: '请输入',\n        },\n      })),\n    },\n  },\n];\n\nexport default {\n  ...ChildFormMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/column-chart/meta.ts",
    "content": "import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';\nimport { actionConfigure } from '../common/chart-action';\nimport { plotConfigure } from '../common/chart-plot';\n\nconst ColumnChartMeta: IPublicTypeComponentMetadata = {\n  componentName: 'ColumnChart',\n  title: '柱状图',\n  category: '图表',\n  group: '精选组件',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.3-beta.3',\n    exportName: 'ColumnChart',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      // 数据\n      {\n        name: 'data',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '数据',\n        },\n        items: [\n          {\n            name: 'data',\n            title: '图表数据',\n            setter: 'JsonSetter',\n          },\n          {\n            name: 'xField',\n            title: {\n              label: 'x轴字段名',\n              tip: 'x 方向映射对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'yField',\n            title: {\n              label: 'y轴字段名',\n              tip: 'y 方向映射所对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      // 图形属性\n      {\n        name: '',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图形属性',\n        },\n        items: [\n          {\n            name: 'color',\n            title: '颜色',\n            setter: 'ColorSetter',\n          },\n          {\n            name: 'columnSize',\n            title: '粗细',\n            setter: 'NumberSetter',\n          },\n          {\n            name: 'label',\n            type: 'group',\n            display: 'accordion',\n            title: {\n              label: '标签',\n            },\n            items: [\n              {\n                name: 'label.visible',\n                title: '显示',\n                setter: 'BoolSetter',\n              },\n              {\n                name: 'label.position',\n                title: '位置',\n                setter: {\n                  componentName: 'RadioGroupSetter',\n                  props: {\n                    options: [\n                      { title: '上', value: 'top' },\n                      { title: '中', value: 'middle' },\n                      { title: '下', value: 'bottom' },\n                    ],\n                  },\n                },\n                condition: (target) => {\n                  return !!target.getProps().getPropValue('label.visible');\n                },\n              },\n            ],\n          },\n        ],\n      },\n      ...plotConfigure,\n      ...actionConfigure,\n    ],\n  },\n};\n\nconst snippets: IPublicTypeSnippet[] = [\n  {\n    title: '柱状图',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i1/O1CN01mz7siK1JIn9XZmCF6_!!6000000001006-55-tps-56-56.svg',\n    schema: {\n      componentName: 'ColumnChart',\n      props: {\n        data: [\n          { year: '1991', value: 72345678 },\n          { year: '1992', value: 4321132 },\n          { year: '1993', value: 33121112.5 },\n          { year: '1994', value: 45227221 },\n          { year: '1995', value: 4321221.9 },\n          { year: '1996', value: 6322121 },\n          { year: '1997', value: 78312213 },\n          { year: '1998', value: 4192312 },\n          { year: '1999', value: 6212332 },\n          { year: '2000', value: 3192312 },\n        ],\n        xField: 'year',\n        yField: 'value',\n        color: '#0079f2',\n        label: {\n          visible: true,\n          position: 'middle',\n        },\n\n        // data: [\n        //   {\n        //     name: 'London',\n        //     月份: 'Jan.',\n        //     月均降雨量: 18.9,\n        //   },\n        //   {\n        //     name: 'London',\n        //     月份: 'Feb.',\n        //     月均降雨量: 28.8,\n        //   },\n        //   {\n        //     name: 'London',\n        //     月份: 'Mar.',\n        //     月均降雨量: 39.3,\n        //   },\n        //   {\n        //     name: 'London',\n        //     月份: 'Apr.',\n        //     月均降雨量: 81.4,\n        //   },\n        //   {\n        //     name: 'London',\n        //     月份: 'May',\n        //     月均降雨量: 47,\n        //   },\n        //   {\n        //     name: 'London',\n        //     月份: 'Jun.',\n        //     月均降雨量: 20.3,\n        //   },\n        //   {\n        //     name: 'London',\n        //     月份: 'Jul.',\n        //     月均降雨量: 24,\n        //   },\n        //   {\n        //     name: 'London',\n        //     月份: 'Aug.',\n        //     月均降雨量: 35.6,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'Jan.',\n        //     月均降雨量: 12.4,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'Feb.',\n        //     月均降雨量: 23.2,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'Mar.',\n        //     月均降雨量: 34.5,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'Apr.',\n        //     月均降雨量: 99.7,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'May',\n        //     月均降雨量: 52.6,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'Jun.',\n        //     月均降雨量: 35.5,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'Jul.',\n        //     月均降雨量: 37.4,\n        //   },\n        //   {\n        //     name: 'Berlin',\n        //     月份: 'Aug.',\n        //     月均降雨量: 42.4,\n        //   },\n        // ],\n        // xField: '月份',\n        // yField: '月均降雨量',\n        // seriesField: 'name',\n        // legend: {\n        //   position: 'top-left',\n        // }\n      },\n    },\n  },\n];\n\nexport default {\n  ...ColumnChartMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/common/actions.ts",
    "content": "export const commonActions = [\n  {\n    name: 'actionType',\n    title: '操作类型',\n    display: 'inline',\n    editable: true,\n    initialValue: 'link',\n    setter: {\n      componentName: 'SelectSetter',\n      props: {\n        options: [\n          {\n            value: 'formDialog',\n            title: '打开表单弹窗',\n          },\n          {\n            value: 'link',\n            title: '链接',\n          },\n        ],\n      },\n    },\n  },\n  {\n    name: 'text',\n    title: '标题',\n    editable: true,\n    initialValue: '详情',\n    display: 'inline',\n    setter: {\n      componentName: 'TextSetter',\n    },\n  },\n  {\n    name: 'key',\n    title: '标识',\n    display: 'none',\n    initialValue: (currentValue, defaultValue) => {\n      return currentValue || defaultValue || `data-${Math.random().toString(36).substr(-6)}`;\n    },\n    setter: {\n      componentName: 'TextSetter',\n    },\n  },\n  {\n    name: '_redirect_url',\n    title: '跳转页面',\n    display: 'inline',\n    accessor() {\n      const _redirect = this.parent.getParam('_redirect').getValue() || {};\n      return _redirect.url;\n    },\n    mutator(value) {\n      this.parent.getParam('_redirect').setValue({\n        externalLink: true,\n        openType: 'current',\n        url: value,\n      });\n    },\n    setter() {\n      const pages = this.node.getProp('_pages_').getValue();\n      const data = pages.map((item) => {\n        return {\n          title: item.title.zh_CN,\n          value: `/${item.navUuid}`,\n        };\n      });\n      return {\n        componentName: 'SelectSetter',\n        props: {\n          options: data,\n        },\n      };\n    },\n    hidden() {\n      return this.parent.getParam('actionType').getValue() !== 'link';\n    },\n  },\n  {\n    name: '_redirect',\n    title: '跳转页面',\n    display: 'none',\n    hidden: true,\n  },\n  {\n    title: '关联弹窗',\n    name: '_bindFormDialog',\n    display: 'inline',\n    hidden() {\n      const actionType = this.parent.getParam('actionType').toData();\n      return actionType !== 'formDialog';\n    },\n    setter() {\n      // 兼容Vision低版本\n      const nodeDocument = this.node.document || this.node.page;\n      const { nodeList } = nodeDocument.getRootNodeVisitor('NodeCache');\n\n      const options = nodeList\n        .filter((x) => x.componentName.includes('Dialog'))\n        .map((x) => ({\n          title:\n            x.propsData && x.propsData.title\n              ? `${x.propsData.title}(${x.id})`\n              : `${x.id}(${x.componentName})`,\n          value: x.id,\n        }));\n\n      return {\n        componentName: 'SelectSetter',\n        props: {\n          options,\n          hasClear: true,\n        },\n      };\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/common/button-groups.ts",
    "content": "import { IProps } from '../types/index';\nimport { hideProp } from '../utils';\n\nexport const buttonConfigureProps: IProps[] = [\n  {\n    name: 'children',\n    title: '名称',\n    display: 'inline',\n    initialValue: '操作',\n    isRequired: true,\n    setter: 'StringSetter',\n  },\n  {\n    name: 'type',\n    title: '按钮样式',\n    display: 'inline',\n    isRequired: true,\n    initialValue: 'primary',\n    setter: {\n      componentName: 'SelectSetter',\n      props: {\n        options: [\n          {\n            title: '普通按钮',\n            value: 'normal',\n          },\n          {\n            title: '主按钮',\n            value: 'primary',\n          },\n          {\n            title: '次按钮',\n            value: 'secondary',\n          },\n        ],\n      },\n    },\n  },\n  {\n    name: 'key',\n    title: '标识',\n    condition: hideProp,\n    initialValue: (currentValue, defaultValue) =>\n      currentValue || defaultValue || `data-${Math.random().toString(36).substr(-6)}`,\n    setter: {\n      componentName: 'StringSetter',\n    },\n  },\n  {\n    name: 'disabled',\n    title: '是否禁用',\n    display: 'inline',\n    initialValue: false,\n    setter: 'BoolSetter',\n  },\n  {\n    name: 'hidden',\n    title: '是否隐藏',\n    display: 'inline',\n    initialValue: false,\n    setter: 'BoolSetter',\n  },\n  {\n    name: 'actionType',\n    title: '操作类型(TODO)',\n    condition: hideProp,\n    display: 'inline',\n    initialValue: 'batch',\n    setter: {\n      componentName: 'SelectSetter',\n      props: {\n        options: [\n          // {\n          //   title: '批量',\n          //   value: 'batch',\n          // },\n          {\n            title: '表单弹窗',\n            value: 'formDialog',\n          },\n          {\n            title: '链接',\n            value: 'link',\n          },\n          {\n            title: '导入',\n            value: 'import',\n          },\n          // {\n          //   title: '同步',\n          //   value: 'sync',\n          // },\n          {\n            title: '导出',\n            value: 'export',\n          },\n          // {\n          //   title: '解析导出',\n          //   value: 'analysisExport',\n          // },\n        ],\n      },\n    },\n  },\n  {\n    name: 'onClick',\n    title: '点击事件',\n    setter: 'FunctionSetter',\n  },\n];\nexport const buttonGroupConfigureProp: IProps = {\n  type: 'field',\n  name: 'buttonGroup',\n  title: '按钮组',\n  extraProps: {\n    display: 'accordion',\n  },\n  setter: {\n    componentName: 'ObjectSetter',\n    props: {\n      config: {\n        items: [\n          {\n            name: 'text',\n            title: {\n              label: '文字模式',\n              tip: '是否设定按钮为文字模式',\n            },\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'visibleButtonCount',\n            title: {\n              label: '可见数量',\n              tip: '超过会收起到”更多“菜单中',\n            },\n            extraProps: {\n              defaultValue: 3,\n            },\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                max: 6,\n                min: 1,\n              },\n            },\n          },\n          {\n            name: 'dataSource',\n            title: '按钮组',\n            extraProps: {\n              display: 'plain',\n            },\n            setter: {\n              componentName: 'ArraySetter',\n              props: {\n                hideDescription: true,\n                itemSetter: {\n                  componentName: 'ObjectSetter',\n                  props: {\n                    config: {\n                      items: buttonConfigureProps,\n                    },\n                  },\n                  initialValue: () => ({\n                    children: '操作',\n                    type: 'normal',\n                  }),\n                },\n              },\n            },\n          },\n        ],\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/common/chart-action.ts",
    "content": "import { IPublicTypeConfigure } from '@alilc/lowcode-types';\n\nexport const actionConfigure: NonNullable<IPublicTypeConfigure['props']> = [\n  {\n    type: 'field',\n    name: 'cardProps.actionButtons',\n    title: '操作配置',\n    extraProps: {\n      display: 'accordion',\n    },\n    setter: {\n      componentName: 'ArraySetter',\n      props: {\n        itemSetter: {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 'children',\n                  title: '名称',\n                  display: 'inline',\n                  initialValue: '操作',\n                  important: true,\n                  setter: 'StringSetter',\n                },\n                {\n                  name: 'onClick',\n                  title: '点击事件',\n                  display: 'inline',\n                  important: true,\n                  setter: 'FunctionSetter',\n                },\n              ],\n            },\n          },\n          initialValue: () => {\n            return {\n              children: '操作',\n            };\n          },\n        },\n      },\n    },\n  },\n  {\n    name: 'cardProps.text',\n    title: {\n      label: '文字模式',\n      tip: '是否设定按钮为文字模式',\n    },\n    setter: 'BoolSetter',\n  },\n  {\n    name: 'cardProps.visibleButtonCount',\n    title: {\n      label: '可见数量',\n      tip: '超过会收起到”更多“菜单中',\n    },\n    extraProps: {\n      defaultValue: 3,\n    },\n    setter: {\n      componentName: 'NumberSetter',\n      props: {\n        max: 6,\n        min: 1,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/common/chart-plot.ts",
    "content": "import { IPublicTypeConfigure } from '@alilc/lowcode-types';\n\nexport const plotConfigure: NonNullable<IPublicTypeConfigure['props']> = [\n  {\n    name: 'autoFit',\n    title: '自适应宽高',\n    display: 'block',\n    defaultValue: true,\n    setter: 'BoolSetter',\n  },\n  {\n    name: 'height',\n    title: '高度',\n    display: \"block\",\n    defaultValue: 300,\n    setter: {\n      componentName: 'NumberSetter',\n    },\n  }\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/common/index.ts",
    "content": "export * from './actions';\nexport * from './chart-action';\nexport * from './operations';\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/common/operations.ts",
    "content": "import { IProps } from '../types';\nimport { hideProp } from '../utils';\nimport { IPublicModelSettingField } from '@alilc/lowcode-types';\n\nexport const operationConfig: IProps = {\n  name: 'operationConfig',\n  display: 'accordion',\n  title: '底部操作',\n  setter: {\n    componentName: 'ObjectSetter',\n    props: {\n      config: {\n        items: [\n          {\n            name: 'visibleButtonCount',\n            title: {\n              label: '可见数量',\n              tip: '超过会收起到”更多“菜单中',\n            },\n            extraProps: {\n              defaultValue: 3,\n            },\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                max: 6,\n                min: 1,\n              },\n            },\n          },\n          {\n            name: 'fixed',\n            title: '吸底',\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'showSaveTime',\n            title: '显示时间',\n            setter: {\n              componentName: 'BoolSetter',\n            },\n          },\n          {\n            name: 'align',\n            title: '布局',\n            defaultValue: 'center',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '居左',\n                    value: 'left',\n                  },\n                  {\n                    title: '居中',\n                    value: 'center',\n                  },\n                  {\n                    title: '居右',\n                    value: 'right',\n                  },\n                ],\n              },\n            },\n          },\n        ],\n      },\n    },\n  },\n};\n\nexport const operations: IProps = {\n  name: 'operations',\n  display: 'block',\n  title: '操作项',\n  getValue: (target, value) => {\n    return value || [];\n  },\n  setter: {\n    componentName: 'MixedSetter',\n    props: {\n      setters: [\n        {\n          componentName: 'SlotSetter',\n          defaultValue: {\n            type: 'JSSlot',\n            value: [],\n          },\n        },\n        {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'id',\n                      condition: hideProp,\n                      setter: (target: IPublicModelSettingField) => {\n                        if (!target.getValue()) {\n                          target.setValue(`${target.id}`);\n                        }\n                        return 'StringSetter';\n                      },\n                    },\n                    {\n                      name: 'content',\n                      display: 'inline',\n                      title: '文本',\n                      setter: 'StringSetter',\n                      important: true,\n                    },\n                    {\n                      name: 'action',\n                      display: 'inline',\n                      title: '操作',\n                      important: true,\n                      setValue: (target: IPublicModelSettingField, value: any) => {\n                        const actionNameMap: any = {\n                          submit: '提交',\n                          reset: '重置',\n                          custom: '自定义',\n                        };\n                        const actionName = actionNameMap[value] || '自定义';\n                        target.parent.setPropValue('content', actionName);\n                      },\n                      setter: {\n                        componentName: 'SelectSetter',\n                        props: {\n                          options: [\n                            {\n                              title: '提交',\n                              value: 'submit',\n                            },\n                            {\n                              title: '重置',\n                              value: 'reset',\n                            },\n                            {\n                              title: '自定义',\n                              value: 'custom',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'type',\n                      display: 'inline',\n                      title: '样式',\n                      important: true,\n                      setter: {\n                        componentName: 'SelectSetter',\n                        props: {\n                          options: [\n                            {\n                              title: '主要',\n                              value: 'primary',\n                            },\n                            {\n                              title: '次要',\n                              value: 'secondary',\n                            },\n                            {\n                              title: '普通',\n                              value: 'normal',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'behavior',\n                      title: '交互设置',\n                      display: 'block',\n                      condition: (target: IPublicModelSettingField) => {\n                        const action = target.parent.getPropValue('action');\n                        return !action || action === 'custom';\n                      },\n                      setter: {\n                        componentName: 'BehaviorSetter',\n                        props: (target: IPublicModelSettingField) => ({\n                          actions: ['onClick'],\n                          enableTooltipAction: true,\n                          enableMessageAction: true,\n                          extendedOptions: {\n                            tooltip: {\n                              id: target.parent.getPropValue('id'),\n                              defaultTriggerType: 'click',\n                            },\n                            message: {\n                              types: ['notice', 'success', 'loading', 'warning', 'error'],\n                              defaultType: 'notice',\n                              library: 'Next',\n                              component: 'Message',\n                            },\n                          },\n                        }),\n                      },\n                    },\n                    {\n                      name: 'onClick',\n                      display: 'inline',\n                      title: '点击事件',\n                      condition: hideProp,\n                      setter: 'FunctionSetter',\n                      extraProps: {\n                        supportVariable: true,\n                      },\n                    },\n                    {\n                      name: 'htmlType',\n                      condition: hideProp,\n                    },\n                    {\n                      name: '!autoSubmit',\n                      display: 'inline',\n                      virtual: true,\n                      title: '自动提交',\n                      setter: {\n                        componentName: 'BoolSetter',\n                      },\n                      extraProps: {\n                        setValue: (target: IPublicModelSettingField, value: any) => {\n                          target.parent.setPropValue('htmlType', value ? 'submit' : '');\n                        },\n                        getValue: (target: IPublicModelSettingField, value: any) => {\n                          return value === 'submit';\n                        },\n                      },\n                      condition: (target: IPublicModelSettingField) => {\n                        return target.parent.getPropValue('action') !== 'submit';\n                      },\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  content: '提交',\n                  action: 'submit',\n                  type: 'normal',\n                };\n              },\n            },\n          },\n        },\n      ],\n    },\n  },\n};\n\nexport const operationProps = [operationConfig, operations];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/date-picker/meta.ts",
    "content": "import { hideProp } from '../utils';\nimport { wrapFormItemProps } from '../utils/form-utils';\nimport { IComponentDescription } from '../types';\n\nconst meta: IComponentDescription = {\n  componentName: 'FormDatePicker',\n  isFormItemComponent: true,\n  title: '日期选择框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormDatePicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    supports: {\n      events: ['onChange', 'onOk'],\n    },\n    props: wrapFormItemProps([\n      {\n        name: 'label',\n        title: {\n          label: '标签',\n          tip: 'label|表单项内置标签',\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'state',\n        title: {\n          label: '状态',\n          tip: 'state|表单项状态',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['success', 'loading', 'error'],\n          },\n        },\n      },\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: 'placeholder|输入提示',\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'value',\n        title: {\n          label: 'value',\n          tip: 'value|日期值（受控）',\n        },\n        setter: 'DateSetter',\n        condition: hideProp,\n      },\n      {\n        name: 'format',\n        title: {\n          label: '格式',\n          tip: 'format|日期值的格式（用于限定用户输入和展示）',\n        },\n        setter: 'StringSetter',\n        defaultValue: 'YYYY-MM-DD',\n      },\n      {\n        name: 'size',\n        title: {\n          label: '尺寸',\n          tip: 'size|表单项尺寸',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'disabled',\n        title: {\n          label: '是否禁用',\n          tip: 'disabled|是否禁用',\n        },\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'hasClear',\n        title: {\n          label: '清除按钮',\n          tip: 'hasClear|是否显示清空按钮',\n        },\n        setter: 'BoolSetter',\n        defaultValue: true,\n      },\n      {\n        name: 'followTrigger',\n        setter: 'BoolSetter',\n        title: '跟随滚动',\n      },\n      {\n        name: 'defaultValue',\n        title: {\n          label: '默认值',\n          tip: 'defaultValue|初始日期值，moment 对象',\n        },\n        setter: 'DateSetter',\n      },\n      {\n        name: 'form',\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n    ]),\n  },\n  icon: '',\n  category: '内容',\n};\n\nexport default meta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/date-picker/snippets.js",
    "content": "module.exports = [\n  {\n    title: '日期选择框',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_date-picker.png',\n    schema: {\n      componentName: 'DatePicker',\n      props: {\n        prefix: 'next-',\n        format: 'YYYY-MM-DD',\n        size: 'medium',\n        hasClear: false,\n        popupTriggerType: 'click',\n        popupAlign: 'tl tl',\n        followTrigger: true,\n      },\n    },\n  },\n  {\n    title: '日期区间',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_date-picker.png',\n    schema: {\n      componentName: 'RangePicker',\n      props: {\n        prefix: 'next-',\n        format: 'YYYY-MM-DD',\n        size: 'medium',\n        type: 'date',\n        hasClear: false,\n        popupTriggerType: 'click',\n        popupAlign: 'tl tl',\n        followTrigger: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/donut-chart/meta.ts",
    "content": "import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';\nimport { actionConfigure } from '../common/chart-action';\nimport { plotConfigure } from '../common/chart-plot';\n\nconst DonutChartMeta: IPublicTypeComponentMetadata = {\n  componentName: 'DonutChart',\n  title: '环形图',\n  category: '图表',\n  group: '精选组件',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.3-beta.3',\n    exportName: 'DonutChart',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      // 图例\n      {\n        name: 'legend',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图例',\n        },\n        items: [\n          {\n            name: 'legend.position',\n            title: '位置',\n            setter: {\n              componentName: 'SelectSetter',\n              props: {\n                options: [\n                  { title: '左', value: 'left' },\n                  { title: '左上', value: 'left-top' },\n                  { title: '左下', value: 'left-bottom' },\n                  { title: '右', value: 'right' },\n                  { title: '右上', value: 'right-top' },\n                  { title: '右下', value: 'right-bottom' },\n                  { title: '上', value: 'top' },\n                  { title: '上左', value: 'top-left' },\n                  { title: '上右', value: 'top-right' },\n                  { title: '下', value: 'bottom' },\n                  { title: '下左', value: 'bottom-left' },\n                  { title: '下右', value: 'bottom-right' },\n                ],\n              },\n            },\n          },\n        ],\n      },\n      // 数据\n      {\n        name: 'data',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '数据',\n        },\n        items: [\n          {\n            name: 'data',\n            title: '图表数据',\n            setter: 'JsonSetter',\n          },\n          {\n            name: 'angleField',\n            title: {\n              label: '值字段名',\n              tip: '扇形切片大小（弧度）所对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'colorField',\n            title: {\n              label: '分类字段名',\n              tip: '扇形颜色映射对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      // 图形属性\n      {\n        name: '',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图形属性',\n        },\n        items: [\n          {\n            name: 'color',\n            title: '颜色',\n            setter: {\n              componentName: 'ArraySetter',\n              props: {\n                itemSetter: {\n                  componentName: 'ColorSetter',\n                  initialValue: '#0079f2',\n                },\n              },\n            },\n          },\n          {\n            name: 'label',\n            type: 'group',\n            display: 'accordion',\n            title: {\n              label: '标签',\n            },\n            items: [\n              {\n                name: 'label.visible',\n                title: '显示',\n                setter: 'BoolSetter',\n              },\n              {\n                name: 'label.type',\n                title: '位置',\n                setter: {\n                  componentName: 'SelectSetter',\n                  props: {\n                    options: [\n                      { title: '内部', value: 'inner' },\n                      { title: '外部', value: 'outer' },\n                      { title: '外部圆形排布', value: 'outer-center' },\n                      { title: '蜘蛛布局', value: 'spider' },\n                    ],\n                  },\n                },\n              },\n            ],\n          },\n        ],\n      },\n      ...plotConfigure,\n      ...actionConfigure,\n    ],\n  },\n};\nconst snippets: IPublicTypeSnippet[] = [\n  {\n    title: '环形图',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01pLbt7T1Mh0woqKEN1_!!6000000001465-55-tps-56-56.svg',\n    schema: {\n      componentName: 'DonutChart',\n      props: {\n        legend: {\n          position: 'top-left',\n        },\n        data: [\n          { year: '1991', value: 72345678 },\n          { year: '1992', value: 4321132 },\n          { year: '1993', value: 33121112.5 },\n          { year: '1994', value: 45227221 },\n          { year: '1995', value: 4321221.9 },\n          { year: '1996', value: 6322121 },\n          { year: '1997', value: 78312213 },\n          { year: '1998', value: 2192312 },\n          { year: '1999', value: 6212332 },\n          { year: '2000', value: 1192312 },\n        ],\n        angleField: 'value',\n        colorField: 'year',\n        label: {\n          visible: true,\n          type: 'spider',\n        },\n        color: ['#3BCBD1', '#47A4FE', '#EDBA42', '#F4704E', '#ED6899', '#7F62C3', '#6E7BC9'],\n      },\n    },\n  },\n];\n\nexport default {\n  ...DonutChartMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/edit-table/meta.ts",
    "content": "import { IComponentDescription } from '../types/index';\nimport { ProTableProps } from '../pro-table/pro-table-meta';\n\nfunction editTablePropsFilter(prop: any) {\n  const ignorePropNames: string[] = ['dataSource'];\n  return !ignorePropNames.includes(prop?.name);\n}\n\nconst EditTableProps = ProTableProps.filter(editTablePropsFilter).map((item) => {\n  if (item.name === 'advanced') {\n    return {\n      type: 'group',\n      title: '高级',\n      name: 'other',\n      extraProps: {\n        display: 'accordion',\n        defaultCollapsed: true,\n      },\n      items: [\n        {\n          name: 'addPosition',\n          title: '新增行位置',\n          defaultValue: 'end',\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  label: '上',\n                  value: 'start',\n                },\n                {\n                  label: '下',\n                  value: 'end',\n                },\n              ],\n            },\n          },\n        },\n        {\n          type: 'field',\n          name: '!选择模式',\n          title: '选择模式',\n          display: 'inline',\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: [\n                {\n                  title: '无',\n                  value: 'none',\n                  tip: 'none',\n                },\n                {\n                  title: '多选',\n                  value: 'multiple',\n                  tip: 'multiple',\n                },\n                {\n                  title: '单选',\n                  value: 'single',\n                  tip: 'single',\n                },\n              ],\n            },\n          },\n          defaultValue: 'none',\n          getValue: (target) => {\n            const rowSelection = target.parent.getPropValue('rowSelection');\n            if (!rowSelection) {\n              return 'none';\n            }\n            return rowSelection.mode === 'single' ? 'single' : 'multiple';\n          },\n          setValue: (field, value) => {\n            const { node } = field;\n            if (['single', 'multiple'].includes(value)) {\n              node.setPropValue('rowSelection', {\n                ...node.getPropValue('rowSelection'),\n                mode: value,\n              });\n            } else {\n              node.setPropValue('rowSelection', undefined);\n            }\n          },\n        },\n        {\n          type: 'field',\n          name: 'indexColumn',\n          title: '开启序号列',\n          extraProps: {\n            display: 'inline',\n            defaultValue: false,\n          },\n          setter: {\n            componentName: 'BoolSetter',\n          },\n        },\n        {\n          type: 'field',\n          name: 'settingButtons',\n          title: '开启设置按钮',\n          extraProps: {\n            display: 'inline',\n            defaultValue: false,\n          },\n          setter: {\n            componentName: 'BoolSetter',\n          },\n        },\n        {\n          type: 'field',\n          name: 'primaryKey',\n          title: {\n            label: '数据主键',\n            tip: '数据主键用于区分数据中不同的行，对行选择和行编辑功能非常重要，不同的行主键值不可重复，一般采用数据库中自增 ID 字段',\n          },\n          extraProps: {\n            display: 'inline',\n            defaultValue: 'id',\n            condition: () => false,\n          },\n        },\n        {\n          name: 'cellDefault',\n          title: {\n            label: '单元格缺省填充',\n            tip: '当单元格值为空时，显示内容',\n          },\n          setter: 'StringSetter',\n        },\n      ],\n    };\n  }\n  return { ...item };\n});\n\nexport const editTableMeta: IComponentDescription = {\n  componentName: 'EditTable',\n  title: '可编辑表格',\n  docUrl: '',\n  icon: 'https://img.alicdn.com/imgextra/i4/O1CN01dtjMvv1heoyqst9u5_!!6000000004303-55-tps-56-56.svg',\n  devMode: 'procode',\n  group: '精选组件',\n  category: '表格类',\n  tags: ['业务组件'],\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '1.0.24-21',\n    exportName: 'EditTable',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n\n  configure: {\n    props: EditTableProps,\n    component: {\n      isContainer: false,\n      nestingRule: {},\n    },\n    supports: {\n      events: ['onSave', 'onRemove'],\n    },\n  },\n  snippets: [\n    {\n      title: '可编辑表格',\n      screenshot:\n        'https://img.alicdn.com/imgextra/i4/O1CN01dtjMvv1heoyqst9u5_!!6000000004303-55-tps-56-56.svg',\n      schema: {\n        componentName: 'EditTable',\n        props: {\n          dataSource: [\n            {\n              id: 'id-2f5DdE2b-0',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n            },\n            {\n              id: 'id-2f5DdE2b-1',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n            },\n            {\n              id: 'id-2f5DdE2b-2',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n            },\n            {\n              id: 'id-2f5DdE2b-3',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n            },\n            {\n              id: 'id-2f5DdE2b-4',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n            },\n          ],\n          actionColumnButtons: {\n            text: true,\n            visibleButtonCount: 3,\n          },\n          actionBarButtons: {\n            dataSource: [\n              {\n                type: 'primary',\n                children: '操作一',\n              },\n              {\n                type: 'normal',\n                children: '操作二',\n              },\n            ],\n            visibleButtonCount: 3,\n          },\n          paginationProps: {\n            pageSize: 20,\n            current: 1,\n          },\n          settingButtons: true,\n          columns: [\n            {\n              title: '公司',\n              dataIndex: 'company',\n              width: 160,\n              formatType: 'link',\n              searchable: true,\n            },\n            {\n              title: '单据金额',\n              dataIndex: 'documentAmount',\n              formatType: 'money',\n            },\n            {\n              title: '币种',\n              dataIndex: 'currency',\n              formatType: 'currency',\n              filters: [\n                {\n                  label: 'CNY',\n                  value: 'CNY',\n                },\n                {\n                  label: 'USD',\n                  value: 'USD',\n                },\n                {\n                  label: 'JPY',\n                  value: 'JPY',\n                },\n                {\n                  label: 'HKD',\n                  value: 'HKD',\n                },\n              ],\n              filterMode: 'multiple',\n              explanation: '提示信息',\n              width: 110,\n            },\n            {\n              title: '完成进度',\n              dataIndex: 'percent',\n              formatType: 'progress',\n            },\n            {\n              title: '到账日期',\n              dataIndex: 'date',\n              formatType: 'date',\n            },\n          ],\n        },\n      },\n    },\n  ],\n};\n\nexport default editTableMeta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/expand-table/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@ali/lowcode-types';\nimport { proTableMeta } from '../pro-table/pro-table-meta';\nimport { mockProTableRow, mockId } from '../pro-table/utils';\nimport { isJSExpression } from '../utils';\n\nconst childProps = proTableMeta.configure.props.map((item) => {\n  if (item.name === 'dataSource') {\n    return {\n      type: 'field',\n      name: 'dataSource',\n      title: '表格数据源',\n      display: 'accordion',\n      setter: (target) => {\n        const dataSource = target.getProps().getPropValue('dataSource');\n        if (isJSExpression(dataSource)) {\n          return {\n            componentName: 'ExpressionSetter',\n          };\n        }\n        const current = dataSource[target.path[1]];\n        const columns = current?.childTableProps?.columns;\n        if (!columns || isJSExpression(columns)) {\n          return {\n            componentName: 'ExpressionSetter',\n          };\n        }\n        const mockRow = mockProTableRow(columns);\n        const primaryKey = target.getProps().getPropValue('primaryKey') || 'id';\n        return {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: columns.map((column, index) => {\n                          return {\n                            title: {\n                              label: {\n                                type: 'i18n',\n                                'en-US': column.dataIndex,\n                                'zh-CN': column.title,\n                              },\n                            },\n                            name: column.dataIndex,\n                            setter: {\n                              isRequired: index < 2,\n                              componentName: 'StringSetter',\n                            },\n                            defaultValue: mockRow[column.dataIndex],\n                          };\n                        }),\n                      },\n                    },\n                    initialValue: () => {\n                      return {\n                        ...mockRow,\n                        [primaryKey]: mockId(),\n                      };\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        };\n      },\n    };\n  }\n  return item;\n});\n\nconst props = proTableMeta.configure.props.map((item) => {\n  if (item.name === 'dataSource') {\n    return {\n      type: 'field',\n      name: 'dataSource',\n      title: '表格数据源',\n      display: 'accordion',\n      setter: (target) => {\n        const columns = target.getProps().getPropValue('columns');\n        if (!columns || isJSExpression(columns)) {\n          return {\n            componentName: 'ExpressionSetter',\n          };\n        }\n        const mockRow = mockProTableRow(columns);\n        const primaryKey = target.getProps().getPropValue('primaryKey') || 'id';\n        return {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          ...columns.map((column, index) => {\n                            return {\n                              title: {\n                                label: {\n                                  type: 'i18n',\n                                  'en-US': column.dataIndex,\n                                  'zh-CN': column.title,\n                                },\n                              },\n                              name: column.dataIndex,\n                              setter: {\n                                isRequired: index < 2,\n                                componentName: 'StringSetter',\n                              },\n                              defaultValue: mockRow[column.dataIndex],\n                            };\n                          }),\n                          {\n                            title: {\n                              label: { type: 'i18n', 'en-US': 'ChildTable', 'zh-CN': '子表格配置' },\n                            },\n                            display: 'accordion',\n                            name: 'childTableProps',\n                            setter: {\n                              componentName: 'ObjectSetter',\n                              props: {\n                                config: {\n                                  items: childProps,\n                                },\n                              },\n                            },\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: () => {\n                      return {\n                        ...mockRow,\n                        [primaryKey]: mockId(),\n                      };\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        };\n      },\n    };\n  }\n  return item;\n});\n\nconst ExpandTableMeta: ComponentMetadata = {\n  componentName: 'ExpandTable',\n  title: '母子表格',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i4/O1CN01N3gxxr1cjKnzi9iBU_!!6000000003636-55-tps-56-56.svg',\n  devMode: 'proCode',\n  group: '精选组件',\n  category: '表格类',\n  tags: ['业务组件'],\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.8',\n    exportName: 'ExpandTable',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props,\n    supports: {\n      className: true,\n      style: true,\n      events: [\n        {\n          name: 'onBodyScroll',\n          description: '在内容区域滚动的时候触发的函数',\n        },\n      ],\n    },\n    component: {},\n  },\n};\nconst snippets: Snippet[] = [\n  {\n    title: '母子表格',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN01N3gxxr1cjKnzi9iBU_!!6000000003636-55-tps-56-56.svg',\n    schema: {\n      componentName: 'ExpandTable',\n      props: {\n        dataSource: [\n          {\n            id: 'id-2f5DdE2b-0',\n            date: '2013-06-12',\n            percent: 1.862,\n            documentAmount: 2022,\n            currency: 'CNY',\n            company: '支付宝科技有限公司',\n            childTableProps: {\n              dataSource: [],\n              columns: [\n                {\n                  title: '公司',\n                  dataIndex: 'company',\n                  width: 160,\n                  formatType: 'link',\n                  searchable: true,\n                },\n                {\n                  title: '单据金额',\n                  dataIndex: 'documentAmount',\n                  formatType: 'money',\n                },\n                {\n                  title: '币种',\n                  dataIndex: 'currency',\n                  formatType: 'currency',\n                  filters: [\n                    {\n                      label: 'CNY',\n                      value: 'CNY',\n                    },\n                    {\n                      label: 'USD',\n                      value: 'USD',\n                    },\n                    {\n                      label: 'JPY',\n                      value: 'JPY',\n                    },\n                    {\n                      label: 'HKD',\n                      value: 'HKD',\n                    },\n                  ],\n                  filterMode: 'multiple',\n                  explanation: '提示信息',\n                  width: 110,\n                },\n                {\n                  title: '完成进度',\n                  dataIndex: 'percent',\n                  formatType: 'progress',\n                },\n                {\n                  title: '到账日期',\n                  dataIndex: 'date',\n                  formatType: 'date',\n                },\n              ],\n            },\n          },\n          {\n            id: 'id-2f5DdE2b-1',\n            date: '2013-06-12',\n            percent: 1.862,\n            documentAmount: 2022,\n            currency: 'CNY',\n            company: '支付宝科技有限公司',\n            childTableProps: {\n              dataSource: [],\n              columns: [\n                {\n                  title: '公司',\n                  dataIndex: 'company',\n                  width: 160,\n                  formatType: 'link',\n                  searchable: true,\n                },\n                {\n                  title: '单据金额',\n                  dataIndex: 'documentAmount',\n                  formatType: 'money',\n                },\n                {\n                  title: '币种',\n                  dataIndex: 'currency',\n                  formatType: 'currency',\n                  filters: [\n                    {\n                      label: 'CNY',\n                      value: 'CNY',\n                    },\n                    {\n                      label: 'USD',\n                      value: 'USD',\n                    },\n                    {\n                      label: 'JPY',\n                      value: 'JPY',\n                    },\n                    {\n                      label: 'HKD',\n                      value: 'HKD',\n                    },\n                  ],\n                  filterMode: 'multiple',\n                  explanation: '提示信息',\n                  width: 110,\n                },\n                {\n                  title: '完成进度',\n                  dataIndex: 'percent',\n                  formatType: 'progress',\n                },\n                {\n                  title: '到账日期',\n                  dataIndex: 'date',\n                  formatType: 'date',\n                },\n              ],\n            },\n          },\n          {\n            id: 'id-2f5DdE2b-2',\n            date: '2013-06-12',\n            percent: 1.862,\n            documentAmount: 2022,\n            currency: 'CNY',\n            company: '支付宝科技有限公司',\n            childTableProps: {\n              dataSource: [],\n              columns: [\n                {\n                  title: '公司',\n                  dataIndex: 'company',\n                  width: 160,\n                  formatType: 'link',\n                  searchable: true,\n                },\n                {\n                  title: '单据金额',\n                  dataIndex: 'documentAmount',\n                  formatType: 'money',\n                },\n                {\n                  title: '币种',\n                  dataIndex: 'currency',\n                  formatType: 'currency',\n                  filters: [\n                    {\n                      label: 'CNY',\n                      value: 'CNY',\n                    },\n                    {\n                      label: 'USD',\n                      value: 'USD',\n                    },\n                    {\n                      label: 'JPY',\n                      value: 'JPY',\n                    },\n                    {\n                      label: 'HKD',\n                      value: 'HKD',\n                    },\n                  ],\n                  filterMode: 'multiple',\n                  explanation: '提示信息',\n                  width: 110,\n                },\n                {\n                  title: '完成进度',\n                  dataIndex: 'percent',\n                  formatType: 'progress',\n                },\n                {\n                  title: '到账日期',\n                  dataIndex: 'date',\n                  formatType: 'date',\n                },\n              ],\n            },\n          },\n        ],\n        actionColumnButtons: {\n          dataSource: [\n            {\n              children: '查看',\n              type: 'primary',\n            },\n            {\n              children: '编辑',\n              type: 'primary',\n              disabled: true,\n            },\n            {\n              children: '删除',\n              type: 'primary',\n            },\n          ],\n          text: true,\n          visibleButtonCount: 3,\n        },\n        actionBarButtons: {\n          dataSource: [\n            {\n              type: 'primary',\n              children: '操作一',\n            },\n            {\n              type: 'normal',\n              children: '操作二',\n            },\n          ],\n          visibleButtonCount: 3,\n        },\n        paginationProps: {\n          pageSize: 20,\n          current: 1,\n        },\n        settingButtons: true,\n        columns: [\n          {\n            title: '公司',\n            dataIndex: 'company',\n            width: 160,\n            formatType: 'link',\n            searchable: true,\n          },\n          {\n            title: '单据金额',\n            dataIndex: 'documentAmount',\n            formatType: 'money',\n          },\n          {\n            title: '币种',\n            dataIndex: 'currency',\n            formatType: 'currency',\n            filters: [\n              {\n                label: 'CNY',\n                value: 'CNY',\n              },\n              {\n                label: 'USD',\n                value: 'USD',\n              },\n              {\n                label: 'JPY',\n                value: 'JPY',\n              },\n              {\n                label: 'HKD',\n                value: 'HKD',\n              },\n            ],\n            filterMode: 'multiple',\n            explanation: '提示信息',\n            width: 110,\n          },\n          {\n            title: '完成进度',\n            dataIndex: 'percent',\n            formatType: 'progress',\n          },\n          {\n            title: '到账日期',\n            dataIndex: 'date',\n            formatType: 'date',\n          },\n        ],\n      },\n    },\n  },\n];\n\nexport default {\n  ...ExpandTableMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/filter/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@ali/lowcode-types';\nimport { formItemsProps } from '../pro-form/common/form-base-props';\nimport { showWithLabelAlign } from '../utils';\nimport { operations } from '../common';\n\nconst operationConfig = {\n  name: 'operationConfig',\n  display: 'accordion',\n  title: '底部操作',\n  setter: {\n    componentName: 'ObjectSetter',\n    props: {\n      config: {\n        items: [\n          {\n            name: 'visibleButtonCount',\n            title: {\n              label: '可见数量',\n              tip: '超过会收起到”更多“菜单中',\n            },\n            extraProps: {\n              defaultValue: 3,\n            },\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                max: 6,\n                min: 1,\n              },\n            },\n          },\n        ],\n      },\n    },\n  },\n};\n\nconst FilterMeta: ComponentMetadata = {\n  componentName: 'Filter',\n  title: '查询筛选',\n  group: '精选组件',\n  category: '表格类',\n  tags: ['业务组件'],\n  docUrl: '',\n  icon: 'https://img.alicdn.com/imgextra/i1/O1CN01O4Oshp1RA6Z0sFZ6h_!!6000000002070-55-tps-56-56.svg',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.8',\n    exportName: 'Filter',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      {\n        name: 'globalConfig',\n        title: '全局配置',\n        type: 'group',\n        display: 'accordion',\n        items: [\n          {\n            name: 'enableFilterConfiguration',\n            title: '开启筛选项',\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'status',\n            title: '状态',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '只读态',\n                    value: 'readonly',\n                  },\n                  {\n                    title: '编辑态',\n                    value: 'editable',\n                  },\n                ],\n              },\n            },\n            getValue: (target) => {\n              const isPreview = target.getProps().getPropValue('isPreview');\n              return isPreview ? 'readonly' : 'editable';\n            },\n            setValue: (target, value) => {\n              target.getProps().setPropValue('isPreview', value === 'readonly');\n            },\n            defaultValue: 'editable',\n          },\n          {\n            name: 'isPreview',\n            condition: () => false,\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '预览态',\n                en_US: 'Preview Mode',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: isPreview | 说明: 是否开启预览态',\n                en_US: 'prop: isPreview | description: preview mode',\n              },\n            },\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'cols',\n            title: '布局',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '一列',\n                    value: 1,\n                  },\n                  {\n                    title: '二列',\n                    value: 2,\n                  },\n                  {\n                    title: '三列',\n                    value: 3,\n                  },\n                  {\n                    title: '四列',\n                    value: 4,\n                  },\n                ],\n              },\n            },\n            defaultValue: 4,\n          },\n          {\n            name: 'labelAlign',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '标签位置',\n                en_US: 'Label Align',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: labelAlign | 说明: 标签的位置\\n@enum desc 上, 左, 内',\n                en_US: 'prop: labelAlign | description: label align',\n              },\n            },\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '上',\n                    value: 'top',\n                  },\n                  {\n                    title: '左',\n                    value: 'left',\n                  },\n                  {\n                    title: '内',\n                    value: 'inset',\n                  },\n                ],\n              },\n            },\n            setValue: (target, value) => {\n              if (value === 'inset') {\n                target.getProps().setPropValue('labelCol', null);\n                target.getProps().setPropValue('wrapperCol', null);\n              } else if (value === 'left') {\n                target.getProps().setPropValue('labelCol', { fixedSpan: 4 });\n                target.getProps().setPropValue('wrapperCol', null);\n              }\n              return target.getProps().setPropValue('labelAlign', value);\n            },\n            defaultValue: 'top',\n          },\n          {\n            name: 'labelCol.fixedSpan',\n            title: '标题宽度',\n            condition: showWithLabelAlign,\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                min: 0,\n                max: 24,\n              },\n            },\n          },\n          {\n            name: 'labelCol.offset',\n            title: '标题偏移',\n            condition: showWithLabelAlign,\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                min: 0,\n                max: 24,\n              },\n            },\n          },\n          {\n            name: 'wrapperCol.span',\n            title: '内容宽度',\n            condition: showWithLabelAlign,\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                min: 0,\n                max: 24,\n              },\n            },\n          },\n          {\n            name: 'wrapperCol.offset',\n            title: '内容偏移',\n            condition: showWithLabelAlign,\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                min: 0,\n                max: 24,\n              },\n            },\n          },\n          {\n            name: 'labelTextAlign',\n            condition: showWithLabelAlign,\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '标签对齐',\n                en_US: 'Text Align',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: labelTextAlign | 说明: 标签的左右对齐方式\\n@enumdesc 左, 右',\n                en_US: 'prop: labelTextAlign | description: label text align',\n              },\n            },\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: ['left', 'right'],\n              },\n            },\n            defaultValue: 'right',\n          },\n        ],\n      },\n      formItemsProps,\n      operationConfig,\n      operations,\n    ],\n    supports: {\n      style: true,\n      className: true,\n      events: ['onExpand', 'onSearch', 'onReset'],\n    },\n    component: {\n      isMinimalRenderUnit: true,\n    },\n  },\n};\nconst snippets: Snippet[] = [\n  {\n    title: '查询筛选',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i1/O1CN01O4Oshp1RA6Z0sFZ6h_!!6000000002070-55-tps-56-56.svg',\n    schema: {\n      componentName: 'Filter',\n      id: 'node_ockt5mo4jj1',\n      props: {\n        labelAlign: 'top',\n      },\n      children: [...new Array(4).keys()].map((item) => ({\n        componentName: 'FormInput',\n        props: {\n          formItemProps: {\n            primaryKey: String(Math.floor(Math.random() * 10000) + item),\n            label: '表单项',\n            size: 'medium',\n            device: 'desktop',\n            fullWidth: true,\n          },\n          placeholder: '请输入',\n        },\n      })),\n    },\n  },\n];\n\nexport default {\n  ...FilterMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/filter-item/meta.ts",
    "content": "import { ComponentMetadata } from '@ali/lowcode-types';\n\nconst FilterItemMeta: ComponentMetadata = {\n  componentName: 'FilterItem',\n  title: 'FilterItem',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.8',\n    exportName: 'FilterItem',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'prefix',\n            'zh-CN': '样式前缀',\n          },\n          tip: 'prefix | 样式前缀',\n        },\n        name: 'prefix',\n        description: '样式前缀',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'label',\n            'zh-CN': 'label 标签的文',\n          },\n          tip: 'label | label 标签的文本',\n        },\n        name: 'label',\n        description: 'label 标签的文本',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'labelCol',\n            'zh-CN': 'label 标签布局',\n          },\n          tip: 'labelCol | label 标签布局，通 `<Col>` 组件，设置 span offset 值，如 {span: 8, offset: 16}，该项仅在垂直表单有效',\n        },\n        name: 'labelCol',\n        description:\n          'label 标签布局，通 `<Col>` 组件，设置 span offset 值，如 {span: 8, offset: 16}，该项仅在垂直表单有效',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'wrapperCol',\n            'zh-CN': '需要为输入控件设置布',\n          },\n          tip: 'wrapperCol | 需要为输入控件设置布局样式时，使用该属性，用法同 labelCol',\n        },\n        name: 'wrapperCol',\n        description: '需要为输入控件设置布局样式时，使用该属性，用法同 labelCol',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'help',\n            'zh-CN': '自定义提示信息，如不',\n          },\n          tip: 'help | 自定义提示信息，如不设置，则会根据校验规则自动生成.',\n        },\n        name: 'help',\n        description: '自定义提示信息，如不设置，则会根据校验规则自动生成.',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'extra',\n            'zh-CN': '额外的提示信息，和 ',\n          },\n          tip: 'extra | 额外的提示信息，和 help 类似，当需要错误信息和提示文案同时出现时，可以使用这个。 位于错误信息后面',\n        },\n        name: 'extra',\n        description:\n          '额外的提示信息，和 help 类似，当需要错误信息和提示文案同时出现时，可以使用这个。 位于错误信息后面',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'validateState',\n            'zh-CN': '校验状态，如不设置，',\n          },\n          tip: 'validateState | 校验状态，如不设置，则会根据校验规则自动生成',\n        },\n        name: 'validateState',\n        description: '校验状态，如不设置，则会根据校验规则自动生成',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'hasFeedback',\n            'zh-CN': '配合 validat',\n          },\n          tip: 'hasFeedback | 配合 validateState 属性使用，是否展示 success/loading 的校验状态图标, 目前只有Input支持',\n        },\n        name: 'hasFeedback',\n        description:\n          '配合 validateState 属性使用，是否展示 success/loading 的校验状态图标, 目前只有Input支持',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'children',\n            'zh-CN': 'node 或者 fu',\n          },\n          tip: 'children | node 或者 function(values)',\n        },\n        name: 'children',\n        description: 'node 或者 function(values)',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'size',\n            'zh-CN': '单个 Item 的 ',\n          },\n          tip: 'size | 单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。',\n        },\n        name: 'size',\n        description:\n          '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'labelAlign',\n            'zh-CN': '标签的位置',\n          },\n          tip: 'labelAlign | 标签的位置',\n        },\n        name: 'labelAlign',\n        description: '标签的位置',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'labelTextAlign',\n            'zh-CN': '标签的左右对齐方式',\n          },\n          tip: 'labelTextAlign | 标签的左右对齐方式',\n        },\n        name: 'labelTextAlign',\n        defaultValue: 'right',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'required',\n            'zh-CN': '[表单校验] 不能为',\n          },\n          tip: 'required | [表单校验] 不能为空',\n        },\n        name: 'required',\n        description: '[表单校验] 不能为空',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'asterisk',\n            'zh-CN': 'required 的',\n          },\n          tip: 'asterisk | required 的星号是否显示',\n        },\n        name: 'asterisk',\n        description: 'required 的星号是否显示',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'requiredMessage',\n            'zh-CN': 'required 自',\n          },\n          tip: 'requiredMessage | required 自定义错误信息',\n        },\n        name: 'requiredMessage',\n        description: 'required 自定义错误信息',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'requiredTrigger',\n            'zh-CN': 'required 自',\n          },\n          tip: 'requiredTrigger | required 自定义触发方式',\n        },\n        name: 'requiredTrigger',\n        description: 'required 自定义触发方式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'min',\n            'zh-CN': '[表单校验] 最小值',\n          },\n          tip: 'min | [表单校验] 最小值',\n        },\n        name: 'min',\n        description: '[表单校验] 最小值',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'max',\n            'zh-CN': '[表单校验] 最大值',\n          },\n          tip: 'max | [表单校验] 最大值',\n        },\n        name: 'max',\n        description: '[表单校验] 最大值',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'minmaxMessage',\n            'zh-CN': 'min/max 自定',\n          },\n          tip: 'minmaxMessage | min/max 自定义错误信息',\n        },\n        name: 'minmaxMessage',\n        description: 'min/max 自定义错误信息',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'minmaxTrigger',\n            'zh-CN': 'min/max 自定',\n          },\n          tip: 'minmaxTrigger | min/max 自定义触发方式',\n        },\n        name: 'minmaxTrigger',\n        description: 'min/max 自定义触发方式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'minLength',\n            'zh-CN': '[表单校验] 字符串',\n          },\n          tip: 'minLength | [表单校验] 字符串最小长度 / 数组最小个数',\n        },\n        name: 'minLength',\n        description: '[表单校验] 字符串最小长度 / 数组最小个数',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'maxLength',\n            'zh-CN': '[表单校验] 字符串',\n          },\n          tip: 'maxLength | [表单校验] 字符串最大长度 / 数组最大个数',\n        },\n        name: 'maxLength',\n        description: '[表单校验] 字符串最大长度 / 数组最大个数',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'minmaxLengthMessage',\n            'zh-CN': 'minLength/',\n          },\n          tip: 'minmaxLengthMessage | minLength/maxLength 自定义错误信息',\n        },\n        name: 'minmaxLengthMessage',\n        description: 'minLength/maxLength 自定义错误信息',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'minmaxLengthTrigger',\n            'zh-CN': 'minLength/',\n          },\n          tip: 'minmaxLengthTrigger | minLength/maxLength 自定义触发方式',\n        },\n        name: 'minmaxLengthTrigger',\n        description: 'minLength/maxLength 自定义触发方式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'length',\n            'zh-CN': '[表单校验] 字符串',\n          },\n          tip: 'length | [表单校验] 字符串精确长度 / 数组精确个数',\n        },\n        name: 'length',\n        description: '[表单校验] 字符串精确长度 / 数组精确个数',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'lengthMessage',\n            'zh-CN': 'length 自定义',\n          },\n          tip: 'lengthMessage | length 自定义错误信息',\n        },\n        name: 'lengthMessage',\n        description: 'length 自定义错误信息',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'lengthTrigger',\n            'zh-CN': 'length 自定义',\n          },\n          tip: 'lengthTrigger | length 自定义触发方式',\n        },\n        name: 'lengthTrigger',\n        description: 'length 自定义触发方式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'pattern',\n            'zh-CN': '正则校验',\n          },\n          tip: 'pattern | 正则校验',\n        },\n        name: 'pattern',\n        description: '正则校验',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'patternMessage',\n            'zh-CN': 'pattern 自定',\n          },\n          tip: 'patternMessage | pattern 自定义错误信息',\n        },\n        name: 'patternMessage',\n        description: 'pattern 自定义错误信息',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'patternTrigger',\n            'zh-CN': 'pattern 自定',\n          },\n          tip: 'patternTrigger | pattern 自定义触发方式',\n        },\n        name: 'patternTrigger',\n        description: 'pattern 自定义触发方式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'format',\n            'zh-CN': '[表单校验] 四种常',\n          },\n          tip: 'format | [表单校验] 四种常用的 pattern',\n        },\n        name: 'format',\n        description: '[表单校验] 四种常用的 pattern',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'formatMessage',\n            'zh-CN': 'format 自定义',\n          },\n          tip: 'formatMessage | format 自定义错误信息',\n        },\n        name: 'formatMessage',\n        description: 'format 自定义错误信息',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'formatTrigger',\n            'zh-CN': 'format 自定义',\n          },\n          tip: 'formatTrigger | format 自定义触发方式',\n        },\n        name: 'formatTrigger',\n        description: 'format 自定义触发方式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'validator',\n            'zh-CN': '[表单校验] 自定义',\n          },\n          tip: 'validator | [表单校验] 自定义校验函数',\n        },\n        name: 'validator',\n        description: '[表单校验] 自定义校验函数',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'validatorTrigger',\n            'zh-CN': 'validator ',\n          },\n          tip: 'validatorTrigger | validator 自定义触发方式',\n        },\n        name: 'validatorTrigger',\n        description: 'validator 自定义触发方式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'autoValidate',\n            'zh-CN': '是否修改数据时自动触',\n          },\n          tip: 'autoValidate | 是否修改数据时自动触发校验',\n        },\n        name: 'autoValidate',\n        description: '是否修改数据时自动触发校验',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'labelWidth',\n            'zh-CN': '在响应式布局下，且l',\n          },\n          tip: 'labelWidth | 在响应式布局下，且label在左边时，label的宽度是多少',\n        },\n        name: 'labelWidth',\n        description: '在响应式布局下，且label在左边时，label的宽度是多少',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'colSpan',\n            'zh-CN': '在响应式布局模式下，',\n          },\n          tip: 'colSpan | 在响应式布局模式下，表单项占多少列',\n        },\n        name: 'colSpan',\n        description: '在响应式布局模式下，表单项占多少列',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'isPreview',\n            'zh-CN': '是否开启预览态',\n          },\n          tip: 'isPreview | 是否开启预览态',\n        },\n        name: 'isPreview',\n        description: '是否开启预览态',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'renderPreview',\n            'zh-CN': '预览态模式下渲染的内',\n          },\n          tip: 'renderPreview | 预览态模式下渲染的内容',\n        },\n        name: 'renderPreview',\n        description: '预览态模式下渲染的内容',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'useLabelForErrorMessage',\n            'zh-CN': '是否使用 label',\n          },\n          tip: 'useLabelForErrorMessage | 是否使用 label 替换校验信息的 name 字段',\n        },\n        name: 'useLabelForErrorMessage',\n        description: '是否使用 label 替换校验信息的 name 字段',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'colon',\n            'zh-CN': '表示是否显示 lab',\n          },\n          tip: 'colon | 表示是否显示 label 后面的冒号',\n        },\n        name: 'colon',\n        description: '表示是否显示 label 后面的冒号',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'valueName',\n            'zh-CN': '子元素的 value',\n          },\n          tip: 'valueName | 子元素的 value 名称',\n        },\n        name: 'valueName',\n        description: '子元素的 value 名称',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'fullWidth',\n            'zh-CN': '单个 Item 中表',\n          },\n          tip: 'fullWidth | 单个 Item 中表单类组件宽度是否是 100%',\n        },\n        name: 'fullWidth',\n        description: '单个 Item 中表单类组件宽度是否是 100%',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'locale',\n            'zh-CN': '国际化文案对象，属性',\n          },\n          tip: 'locale | 国际化文案对象，属性为组件的 displayName',\n        },\n        name: 'locale',\n        description: '国际化文案对象，属性为组件的 displayName',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'pure',\n            'zh-CN': '是否开启 Pure ',\n          },\n          tip: 'pure | 是否开启 Pure Render 模式，会提高性能，但是也会带来副作用',\n        },\n        name: 'pure',\n        description: '是否开启 Pure Render 模式，会提高性能，但是也会带来副作用',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'warning',\n            'zh-CN': '是否在开发模式下显示',\n          },\n          tip: 'warning | 是否在开发模式下显示组件属性被废弃的 warning 提示',\n        },\n        name: 'warning',\n        description: '是否在开发模式下显示组件属性被废弃的 warning 提示',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'rtl',\n            'zh-CN': '是否开启 rtl 模',\n          },\n          tip: 'rtl | 是否开启 rtl 模式',\n        },\n        name: 'rtl',\n        description: '是否开启 rtl 模式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n    ],\n    supports: {\n      style: true,\n      className: true,\n    },\n    component: {},\n  },\n};\n\nexport default {\n  ...FilterItemMeta,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/group-table/meta.ts",
    "content": "import { mockProTableRow } from '../pro-table/utils';\nimport { IComponentDescription } from '../types/index';\nimport { actionColumnButtonField, actionColumnField } from '../pro-table/actionColumnFields';\nimport { isJSExpression } from '../utils';\nimport { columnsField } from '../pro-table/columns-field';\nimport { buttonGroupConfigureProp } from '../common/button-groups';\n\nconst dataSource = [\n  {\n    header: '头部文字',\n    footer: '尾部文字',\n    children: [\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n    ],\n  },\n  {\n    header: '头部文字2',\n    footer: '尾部文字2',\n    children: [\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n      {\n        company: '支付宝科技有限公司',\n        documentAmount: 2022,\n        currency: 'CNY',\n        percent: 1.862,\n        date: '2013-06-12',\n        id: 'id-2f5DdE2b-0',\n      },\n    ],\n  },\n];\n\nconst positiveIntegerSetter = {\n  componentName: 'NumberSetter',\n  props: {\n    max: 200,\n    min: 1,\n  },\n};\n\nconst groupTableMeta: IComponentDescription = {\n  componentName: 'GroupTable',\n  title: '分组表格',\n  docUrl: '',\n  icon: 'https://img.alicdn.com/imgextra/i4/O1CN01idASGC1tGLCY6bAUC_!!6000000005874-55-tps-56-56.svg',\n  devMode: 'proCode',\n  group: '精选组件',\n  category: '表格类',\n  tags: ['业务组件'],\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '1.0.24-21',\n    exportName: 'GroupTable',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n\n  configure: {\n    props: [\n      columnsField,\n      {\n        type: 'field',\n        name: 'id',\n        title: '节点 ID',\n        condition: () => false,\n        extraProps: {},\n        setter: 'NodeSetter',\n      },\n      actionColumnButtonField,\n      {\n        ...buttonGroupConfigureProp,\n        name: 'actionBarButtons',\n        title: '操作栏按钮',\n      },\n      actionColumnField,\n      {\n        name: 'dataSource',\n        title: '分组内容',\n        setter: {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      title: { label: { type: 'i18n', 'en-US': 'header', 'zh-CN': '头部文字' } },\n                      name: 'header',\n                      setter: {\n                        componentName: 'StringSetter',\n                        isRequired: true,\n                        initialValue: '',\n                      },\n                    },\n                    {\n                      title: { label: { type: 'i18n', 'en-US': 'label', 'zh-CN': '尾部文字' } },\n                      name: 'footer',\n                      setter: {\n                        componentName: 'StringSetter',\n                        isRequired: true,\n                        initialValue: '',\n                      },\n                    },\n                    {\n                      title: { label: { type: 'i18n', 'en-US': 'label', 'zh-CN': '数据源' } },\n                      name: 'children',\n                      setter: (target) => {\n                        const columns = target.getProps().getPropValue('columns');\n                        if (!columns || isJSExpression(columns)) {\n                          return {\n                            componentName: 'ExpressionSetter',\n                          };\n                        }\n                        const mockRow = mockProTableRow(columns);\n                        return {\n                          componentName: 'ArraySetter',\n                          props: {\n                            itemSetter: {\n                              componentName: 'ObjectSetter',\n                              props: {\n                                config: {\n                                  items: columns.map((column, index) => {\n                                    return {\n                                      title: {\n                                        label: {\n                                          type: 'i18n',\n                                          'en-US': column.dataIndex,\n                                          'zh-CN': column.title,\n                                        },\n                                      },\n                                      name: column.dataIndex,\n                                      setter: {\n                                        isRequired: index < 2,\n                                        componentName: 'StringSetter',\n                                      },\n                                      defaultValue: mockRow[column.dataIndex],\n                                    };\n                                  }),\n                                },\n                              },\n                              initialValue: mockRow,\n                            },\n                          },\n                        };\n                      },\n                    },\n                  ],\n                  extraSetter: { componentName: 'MixedSetter', isRequired: false, props: {} },\n                },\n              },\n              initialValue: {\n                header: '标题',\n                footer: '尾部',\n                children: [],\n              },\n            },\n          },\n          isRequired: true,\n          initialValue: [],\n        },\n      },\n      {\n        type: 'field',\n        name: 'paginationProps',\n        title: '分页器',\n        extraProps: {\n          display: 'accordion',\n          defaultCollapsed: true,\n        },\n        setter: {\n          componentName: 'ObjectSetter',\n          display: 'inline',\n          props: {\n            config: {\n              items: [\n                {\n                  type: 'field',\n                  name: 'hidden',\n                  title: '关闭分页',\n                  extraProps: {\n                    display: 'inline',\n                    defaultValue: false,\n                  },\n                  setter: 'BoolSetter',\n                },\n                {\n                  name: 'total',\n                  title: '总行数',\n                  setter: {\n                    componentName: 'NumberSetter',\n                    props: {\n                      min: 0,\n                    },\n                  },\n                  hidden() {\n                    console.log(\n                      'visiblevisiblevisiblevisible',\n                      this.parent.getParam('hidden').getValue(),\n                    );\n\n                    return !this.parent.getParam('hidden').getValue();\n                  },\n                },\n                {\n                  name: 'current',\n                  title: '当前页',\n                  setter: positiveIntegerSetter,\n                },\n                {\n                  name: 'pageSize',\n                  title: '每页行数',\n                  setter: [\n                    {\n                      componentName: 'SelectSetter',\n                      initialValue: 10,\n                      props: {\n                        options: [\n                          {\n                            title: '5',\n                            value: 5,\n                          },\n                          {\n                            title: '10',\n                            value: 10,\n                          },\n                          {\n                            title: '20',\n                            value: 20,\n                          },\n                          {\n                            title: '50',\n                            value: 50,\n                          },\n                        ],\n                      },\n                    },\n                    positiveIntegerSetter,\n                  ],\n                },\n              ],\n            },\n          },\n        },\n      },\n      {\n        type: 'field',\n        name: 'rowSelection',\n        condition: () => false,\n      },\n    ],\n    component: {\n      isContainer: false,\n      nestingRule: {},\n    },\n    supports: {},\n  },\n  snippets: [\n    {\n      title: '分组表格',\n      screenshot:\n        'https://img.alicdn.com/imgextra/i4/O1CN01idASGC1tGLCY6bAUC_!!6000000005874-55-tps-56-56.svg',\n      schema: {\n        componentName: 'GroupTable',\n        props: {\n          dataSource,\n          actionColumnButtons: {\n            dataSource: [\n              {\n                children: '查看',\n                type: 'primary',\n              },\n              {\n                children: '编辑',\n                type: 'primary',\n                disabled: true,\n              },\n              {\n                children: '删除',\n                type: 'primary',\n              },\n            ],\n            text: true,\n            visibleButtonCount: 3,\n          },\n          actionBarButtons: {\n            dataSource: [\n              {\n                type: 'primary',\n                children: '操作一',\n              },\n              {\n                type: 'normal',\n                children: '操作二',\n              },\n            ],\n            visibleButtonCount: 3,\n          },\n          paginationProps: {\n            pageSize: 20,\n            current: 1,\n          },\n          settingButtons: true,\n          columns: [\n            {\n              title: '公司',\n              dataIndex: 'company',\n              width: 160,\n              formatType: 'link',\n              searchable: true,\n            },\n            {\n              title: '单据金额',\n              dataIndex: 'documentAmount',\n              formatType: 'money',\n            },\n            {\n              title: '币种',\n              dataIndex: 'currency',\n              formatType: 'currency',\n              filters: [\n                {\n                  label: 'CNY',\n                  value: 'CNY',\n                },\n                {\n                  label: 'USD',\n                  value: 'USD',\n                },\n                {\n                  label: 'JPY',\n                  value: 'JPY',\n                },\n                {\n                  label: 'HKD',\n                  value: 'HKD',\n                },\n              ],\n              filterMode: 'multiple',\n              explanation: '提示信息',\n              width: 110,\n            },\n            {\n              title: '完成进度',\n              dataIndex: 'percent',\n              formatType: 'progress',\n            },\n            {\n              title: '到账日期',\n              dataIndex: 'date',\n              formatType: 'date',\n            },\n          ],\n        },\n      },\n    },\n  ],\n};\n\nexport default groupTableMeta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/input/meta.ts",
    "content": "import { IProps } from '../types';\nimport { wrapFormItemProps } from '../utils/form-utils';\n\nconst props: IProps[] = wrapFormItemProps([\n  {\n    name: 'label',\n    setter: 'StringSetter',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '标签文本',\n        en_US: 'Label',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: label | 说明: 标签文本内容',\n        en_US: 'prop: label | description: label content',\n      },\n    },\n  },\n  {\n    name: 'defaultValue',\n    title: {\n      label: '默认值',\n      tip: 'defaultValue|初始值',\n    },\n    setter: 'StringSetter',\n  },\n  {\n    name: 'placeholder',\n    defaultValue: '请输入',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '输入提示',\n        en_US: 'Placeholder',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: placeholder | 说明: 输入提示',\n        en_US: 'prop: placeholder | description: placeholder',\n      },\n    },\n    setter: 'StringSetter',\n  },\n  {\n    name: 'state',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '状态',\n        en_US: 'State',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: state | 说明: 状态\\n@enumdesc 错误, 校验中, 成功, 警告',\n        en_US: 'prop: state | description: input state',\n      },\n    },\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: [\n          {\n            value: 'error',\n            title: 'error',\n          },\n          {\n            value: 'loading',\n            title: 'loading',\n          },\n          {\n            value: 'success',\n            title: 'success',\n          },\n          {\n            value: 'warning',\n            title: 'warning',\n          },\n          {\n            value: '',\n            title: '默认',\n          },\n        ],\n      },\n    },\n  },\n  {\n    name: 'size',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '尺寸',\n        en_US: 'Size',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n        en_US: 'prop: size | description: size',\n      },\n    },\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: ['small', 'medium', 'large'],\n      },\n    },\n    defaultValue: 'medium',\n  },\n  {\n    name: 'maxLength',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '最大长度',\n        en_US: 'MaxLength',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: maxLength | 说明: 最大长度',\n        en_US: 'prop: maxLength | description: max length',\n      },\n    },\n    setter: 'NumberSetter',\n    description: '最大长度',\n  },\n  {\n    name: 'hasClear',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '显示清除',\n        en_US: 'Show Clear',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: hasClear | 说明: 是否出现清除按钮',\n        en_US: 'prop: hasClear | description: show clear icon',\n      },\n    },\n    setter: 'BoolSetter',\n    description: '是否出现清除按钮',\n  },\n  {\n    name: 'disabled',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否禁用',\n        en_US: 'Disabled',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: disabled | 说明: 是否被禁用',\n        en_US: 'prop: disabled | description: disabled',\n      },\n    },\n    setter: 'BoolSetter',\n    description: '是否禁用',\n  },\n  {\n    name: 'showLimitHint',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '展示限制',\n        en_US: 'ShowLimit',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: showLimitHint | 说明: 是否展现最大长度样式',\n        en_US: 'prop: showLimitHint | description: showLimitHint',\n      },\n    },\n    setter: 'BoolSetter',\n    description: '是否展现最大长度样式',\n  },\n  {\n    name: 'cutString',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否截断',\n        en_US: 'Cut Off',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: cutString | 说明: 是否截断超出字符串',\n        en_US: 'prop: cutString | description: whether cut off string',\n      },\n    },\n    setter: 'BoolSetter',\n    description: '是否截断超出字符串',\n  },\n  {\n    name: 'readOnly',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否只读',\n        en_US: 'ReadOnly',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: readOnly | 说明: 是否只读',\n        en_US: 'prop: readOnly | description: ReadOnly',\n      },\n    },\n    setter: 'BoolSetter',\n    description: '是否只读',\n  },\n  {\n    name: 'trim',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否 Trim',\n        en_US: 'Trim',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: trim | 说明: onChange返回会自动去除头尾空字符',\n        en_US: 'prop: trim | description: whether trim when onChange called',\n      },\n    },\n    setter: 'BoolSetter',\n  },\n  {\n    name: 'hasBorder',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '显示边框',\n        en_US: 'ShowBorder',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: hasBorder | 说明: 是否有边框',\n        en_US: 'prop: hasBorder | description: HasBorder',\n      },\n    },\n    setter: 'BoolSetter',\n  },\n  {\n    name: 'autoFocus',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '自动聚焦',\n        en_US: 'Auto Focus',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: autoFocus | 说明: 自动聚焦',\n        en_US: 'prop: autoFocus | description: autoFocus',\n      },\n    },\n    setter: 'BoolSetter',\n    description: '自动聚焦',\n  },\n  {\n    name: 'hint',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: 'Icon 水印',\n        en_US: 'IconHint',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: hint | 说明: Icon 水印',\n        en_US: 'prop: hint | description: Icon hint',\n      },\n    },\n    setter: {\n      componentName: 'IconSetter',\n    },\n  },\n  {\n    name: 'innerBefore',\n    display: 'block',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '文字前附加内容',\n        en_US: 'Inner Before',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: innerBefore | 说明: 文字前附加内容',\n        en_US: 'prop: innerBefore | description: innerBefore',\n      },\n    },\n    setter: 'StringSetter',\n  },\n  {\n    name: 'innerAfter',\n    display: 'block',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '文字后附加内容',\n        en_US: 'Inner After',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: innerAfter | 说明: 文字后附加内容',\n        en_US: 'prop: innerAfter | description: innerAfter',\n      },\n    },\n    setter: 'StringSetter',\n  },\n  {\n    name: 'addonBefore',\n    display: 'block',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '输入框前附加内容',\n        en_US: 'Addon Before',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: addonBefore | 说明: 输入框前附加内容',\n        en_US: 'prop: addonBefore | description: addonBefore',\n      },\n    },\n    setter: 'StringSetter',\n  },\n  {\n    name: 'addonAfter',\n    display: 'block',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '输入框后附加内容',\n        en_US: 'Addon After',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: addonAfter | 说明: 输入框后附加内容',\n        en_US: 'prop: addonAfter | description: addonAfter',\n      },\n    },\n    setter: 'StringSetter',\n  },\n  {\n    name: 'addonTextBefore',\n    display: 'block',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '输入框前附加文字',\n        en_US: 'Text Before',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: addonTextBefore | 说明: 输入框前附加文字',\n        en_US: 'prop: addonTextBefore | description: addonTextBefore',\n      },\n    },\n    setter: 'StringSetter',\n  },\n  {\n    name: 'addonTextAfter',\n    display: 'block',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '输入框后附加文字',\n        en_US: 'Text After',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: addonTextAfter | 说明: 输入框后附加文字',\n        en_US: 'prop: addonTextAfter | description: addonTextAfter',\n      },\n    },\n    setter: 'StringSetter',\n  },\n  {\n    type: 'group',\n    title: '高级',\n    display: 'block',\n    items: [\n      {\n        name: 'id',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '唯一标识',\n            en_US: 'ID',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: id | 说明: 唯一标识',\n            en_US: 'prop: id | description: switch id',\n          },\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'name',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '表单标识',\n            en_US: 'Name',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: name | 说明: 表单标识',\n            en_US: 'prop: name | description: switch name',\n          },\n        },\n        setter: 'StringSetter',\n      },\n    ],\n  },\n]);\n\nconst meta = {\n  componentName: 'FormInput',\n  isFormItemComponent: true,\n  title: '输入框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormInput',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props,\n    supports: {\n      style: true,\n      events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n\nexport default meta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/line-chart/meta.ts",
    "content": "import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';\nimport { actionConfigure } from '../common/chart-action';\nimport { plotConfigure } from '../common/chart-plot';\n\nconst LineChartMeta: IPublicTypeComponentMetadata = {\n  componentName: 'LineChart',\n  title: '折线图',\n  category: '图表',\n  group: '精选组件',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.3-beta.3',\n    exportName: 'LineChart',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      // 数据\n      {\n        name: 'data',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '数据',\n        },\n        items: [\n          {\n            name: 'data',\n            title: '图表数据',\n            setter: 'JsonSetter',\n          },\n          {\n            name: 'xField',\n            title: {\n              label: 'x轴字段名',\n              tip: 'x 方向映射对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'yField',\n            title: {\n              label: 'y轴字段名',\n              tip: 'y 方向映射所对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      // 图形属性\n      {\n        name: '',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图形属性',\n        },\n        items: [\n          {\n            name: 'color',\n            title: '颜色',\n            setter: 'ColorSetter',\n          },\n          {\n            name: 'lineSize',\n            title: '粗细',\n            setter: 'NumberSetter',\n          },\n          {\n            name: 'smooth',\n            title: '平滑',\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'point.visible',\n            title: '显示点',\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'label.visible',\n            title: '显示标签',\n            setter: 'BoolSetter',\n          },\n        ],\n      },\n      ...plotConfigure,\n      ...actionConfigure,\n    ],\n  },\n};\nconst snippets: IPublicTypeSnippet[] = [\n  {\n    title: '折线图',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i2/O1CN01ChN5mm1txOQnh6kTh_!!6000000005968-55-tps-56-56.svg',\n    schema: {\n      componentName: 'LineChart',\n      props: {\n        data: [\n          { year: '1991', value: 72345678 },\n          { year: '1992', value: 4321132 },\n          { year: '1993', value: 33121112.5 },\n          { year: '1994', value: 45227221 },\n          { year: '1995', value: 4321221.9 },\n          { year: '1996', value: 6322121 },\n          { year: '1997', value: 78312213 },\n          { year: '1998', value: 4192312 },\n          { year: '1999', value: 6212332 },\n          { year: '2000', value: 3192312 },\n        ],\n        xField: 'year',\n        yField: 'value',\n        color: '#0079f2',\n        label: {\n          visible: true,\n        },\n      },\n    },\n  },\n];\n\nexport default {\n  ...LineChartMeta,\n  snippets\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/month-picker/meta.js",
    "content": "export default {\n  componentName: 'MonthPicker',\n  title: 'MonthPicker',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/next',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: 'MonthPicker',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '表单项内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: '表单项状态',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'defaultVisibleYear',\n      propType: 'func',\n      description: '默认展现的年\\n@return {MomentObject} 返回包含指定年份的 moment 对象实例',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY-MM',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '表单项尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} type 触发弹层显示和隐藏的来源 calendarSelect 表示由日期表盘的选择触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式, 具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '弹层其他属性',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'inputProps',\n      propType: 'object',\n      description: '表单项其他属性',\n    },\n    {\n      name: 'monthCellRender',\n      propType: 'func',\n      description:\n        '自定义月份渲染函数\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@returns {ReactNode}',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'dateInputAriaLabel',\n      propType: 'string',\n      description: '日期表单项的 aria-label 属性',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {MomentObject} value 月份',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n    },\n    {\n      name: 'popupContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    props: [],\n  },\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/number-picker/meta.ts",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormNumberPicker',\n  isFormItemComponent: true,\n  title: '数字表单项',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormNumberPicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium'],\n      },\n      description: '大小',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'inline'],\n      },\n      description: '设置类型',\n      defaultValue: 'normal',\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '当前值',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'number',\n      description: '默认值',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'step',\n      propType: 'number',\n      description: '步长',\n      defaultValue: 1,\n    },\n    {\n      name: 'precision',\n      propType: 'number',\n      description: '保留小数点后位数',\n      defaultValue: 0,\n    },\n    {\n      name: 'editable',\n      propType: 'bool',\n      description: '用户是否可以输入',\n      defaultValue: true,\n    },\n    {\n      name: 'autoFocus',\n      propType: 'bool',\n      description: '自动焦点',\n    },\n    {\n      name: 'max',\n      propType: 'number',\n      description: '最大值',\n      defaultValue: null,\n    },\n    {\n      name: 'min',\n      propType: 'number',\n      description: '最小值',\n      defaultValue: null,\n    },\n    {\n      name: 'format',\n      propType: 'func',\n      description: '格式化当前值',\n    },\n    {\n      name: 'upBtnProps',\n      propType: 'object',\n      description: '增加按钮的props',\n    },\n    {\n      name: 'downBtnProps',\n      propType: 'object',\n      description: '减少按钮的props',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '内联 label',\n    },\n    {\n      name: 'innerAfter',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'icon'],\n      },\n      description: 'inner after',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '数值被改变的事件\\n@param {Number} value 数据\\n@param {Event} e DOM事件对象',\n    },\n    {\n      name: 'onKeyDown',\n      propType: 'func',\n      description: '键盘按下',\n    },\n    {\n      name: 'onFocus',\n      propType: 'func',\n      description: '焦点获得',\n    },\n    {\n      name: 'onBlur',\n      propType: 'func',\n      description: '焦点失去',\n    },\n    {\n      name: 'onCorrect',\n      propType: 'func',\n      description: '数值订正后的回调\\n@param {Object} obj {currentValue,oldValue:String}',\n    },\n    {\n      name: 'onDisabled',\n      propType: 'func',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n  ],\n  configure: {\n    props: wrapFormItemProps([\n      {\n        name: 'alwaysShowTrigger',\n        title: '展示操作',\n        setter: 'BoolSetter',\n        defaultValue: true,\n      },\n      {\n        name: 'value',\n        title: '当前值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'type',\n        title: '类型',\n        defaultValue: 'normal',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'RadioGroupSetter',\n                props: {\n                  options: [\n                    { title: '普通', value: 'normal' },\n                    { title: '内联', value: 'inline' },\n                  ],\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        name: 'innerAfter',\n        title: '单位',\n        setter: ['StringSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'step',\n        title: '步长',\n        defaultValue: 1,\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'precision',\n        title: '小数位数',\n        defaultValue: 0,\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'max',\n        title: '最大值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'min',\n        title: '最小值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'editable',\n        title: '可以输入',\n        defaultValue: true,\n        setter: ['BoolSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'format',\n        title: '格式化',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"format\",\n          //   defaultCode=`function format(value) {\n          //     return value;\n          //   }`,\n          // }\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      {\n        name: 'style',\n        setter: {\n          componentName: 'StyleSetter',\n        },\n      },\n    ]),\n    supports: {\n      events: ['onChange', 'onKeyDown', 'onFocus', 'onBlur', 'onCorrect'],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/page-header/common/props.ts",
    "content": "import { FieldConfig } from '@ali/lowcode-types';\n\nconst props: FieldConfig[] = [\n  {\n    name: 'title',\n    title: '标题',\n    setter: 'StringSetter',\n  },\n  {\n    name: 'subTitle',\n    title: '子标题',\n    setter: 'StringSetter',\n  },\n  {\n    name: 'backIcon',\n    title: '返回图标',\n    setter: {\n      componentName: 'IconSetter',\n    },\n  },\n  {\n    name: 'showAvatar',\n    title: '头像',\n    setValue: (target, value) => {\n      return target.getProps().setPropValue('avatar', value || null);\n    },\n    setter: {\n      componentName: 'BoolSetter',\n    },\n  },\n  {\n    name: 'showBreadcrumb',\n    title: '面包屑',\n    setValue: (target, value) => {\n      return target.getProps().setPropValue('breadcrumb', value ? ['首页', '列表'] : null);\n    },\n    defaultValue: true,\n    setter: {\n      componentName: 'BoolSetter',\n    },\n  },\n  {\n    name: 'showActions',\n    title: '操作区',\n    defaultValue: false,\n    setter: {\n      componentName: 'BoolSetter',\n    },\n  },\n  {\n    name: 'avatar',\n    type: 'group',\n    display: 'accordion',\n    condition: (target) => {\n      const _avatar = target.getProps().getPropValue('showAvatar');\n      return !!_avatar;\n    },\n    title: {\n      label: '头像',\n    },\n    items: [\n      {\n        name: 'avatar.icon',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '图标',\n            en_US: 'Icon',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: icon | 说明: 图标类型',\n            en_US: 'prop: icon | description: icon type',\n          },\n        },\n        setter: {\n          componentName: 'IconSetter',\n        },\n      },\n      {\n        name: 'avatar.children',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '文本内容',\n            en_US: 'Content',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: children | 说明: 文本内容',\n            en_US: 'prop: children | description: avatar content',\n          },\n        },\n        setter: 'StringSetter',\n      },\n      {\n        name: 'avatar.size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '头像尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 头像的大小',\n            en_US: 'prop: size | description: avatar size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'avatar.shape',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '头像形状',\n            en_US: 'Shape',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: shape | 说明: 头像的形状',\n            en_US: 'prop: shape | description: avatar shape',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['circle', 'square'],\n          },\n        },\n        defaultValue: 'circle',\n      },\n      {\n        name: 'avatar.src',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '头像地址',\n            en_US: 'Src',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: src | 说明: 图片类头像的资源地址',\n            en_US: 'prop: src | description: resource address',\n          },\n        },\n        setter: 'StringSetter',\n      },\n    ],\n  },\n  {\n    name: 'breadcrumb',\n    title: '面包屑',\n    condition: (target) => {\n      const _breadcrumbTarget = target.getProps().get('showBreadcrumb');\n      const _breadcrumbValue = _breadcrumbTarget.getValue();\n      const _breadcrumbDefaultValue = _breadcrumbTarget.getDefaultValue();\n      if (_breadcrumbValue === undefined && _breadcrumbDefaultValue) {\n        return _breadcrumbDefaultValue;\n      } else {\n        return !!_breadcrumbValue;\n      }\n    },\n    setter: {\n      componentName: 'ArraySetter',\n      props: {\n        itemSetter: {\n          componentName: 'StringSetter',\n          initialValue: '首页',\n        },\n      },\n    },\n  },\n];\n\nexport default props;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/page-header/meta.design.js",
    "content": "const props = require('./common/props');\n\nmodule.exports = {\n  componentName: 'PageHeader',\n  title: '设计态 PageHeader',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '1.0.0',\n    exportName: 'PageHeader',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'backIcon',\n      propType: 'node',\n    },\n    {\n      name: 'prefixCls',\n      propType: 'string',\n    },\n    {\n      name: 'title',\n      propType: 'node',\n    },\n    {\n      name: 'subTitle',\n      propType: 'node',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'breadcrumb',\n      propType: {\n        type: 'oneOfType',\n        value: ['object'],\n      },\n    },\n    {\n      name: 'breadcrumbRender',\n      propType: {\n        type: 'func',\n        params: [\n          {\n            name: 'props',\n            propType: {\n              type: 'shape',\n              value: [\n                {\n                  name: 'backIcon',\n                  propType: 'node',\n                },\n                {\n                  name: 'prefixCls',\n                  propType: 'string',\n                },\n                {\n                  name: 'title',\n                  propType: 'node',\n                },\n                {\n                  name: 'subTitle',\n                  propType: 'node',\n                },\n                {\n                  name: 'style',\n                  propType: 'object',\n                },\n                {\n                  name: 'breadcrumb',\n                  propType: {\n                    type: 'oneOfType',\n                    value: ['object'],\n                  },\n                },\n                {\n                  name: 'breadcrumbRender',\n                  propType: 'object',\n                },\n                {\n                  name: 'tags',\n                  propType: {\n                    type: 'oneOfType',\n                    value: [\n                      'object',\n                      {\n                        type: 'arrayOf',\n                        value: 'object',\n                      },\n                    ],\n                  },\n                },\n                {\n                  name: 'footer',\n                  propType: 'node',\n                },\n                {\n                  name: 'extra',\n                  propType: 'node',\n                },\n                {\n                  name: 'avatar',\n                  propType: 'object',\n                },\n                {\n                  name: 'onBack',\n                  propType: {\n                    type: 'func',\n                    params: [\n                      {\n                        name: 'e',\n                        propType: 'object',\n                      },\n                    ],\n                    raw: '(e?: MouseEvent<HTMLDivElement, MouseEvent>) => void',\n                  },\n                },\n                {\n                  name: 'className',\n                  propType: 'string',\n                },\n                {\n                  name: 'ghost',\n                  propType: 'bool',\n                },\n              ],\n            },\n          },\n          {\n            name: 'defaultDom',\n            propType: 'node',\n          },\n        ],\n        raw: '(props: PageHeaderProps, defaultDom: ReactNode) => ReactNode',\n      },\n    },\n    {\n      name: 'tags',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'object',\n          {\n            type: 'arrayOf',\n            value: 'object',\n          },\n        ],\n      },\n    },\n    {\n      name: 'footer',\n      propType: 'node',\n    },\n    {\n      name: 'extra',\n      propType: 'node',\n    },\n    {\n      name: 'avatar',\n      propType: 'object',\n    },\n    {\n      name: 'onBack',\n      propType: {\n        type: 'func',\n        params: [\n          {\n            name: 'e',\n            propType: 'object',\n          },\n        ],\n        raw: '(e?: MouseEvent<HTMLDivElement, MouseEvent>) => void',\n      },\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'ghost',\n      propType: 'bool',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: true,\n    },\n    props,\n  },\n  snippets: [\n    {\n      title: 'PageHeader',\n      screenshot:\n        'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_message.png',\n      schema: {\n        title: 'PageHeader',\n        componentName: 'PageHeader',\n        props: {\n          placeholderStyle: {\n            height: '38px',\n            color: '#0088FF',\n            background: '#d8d8d836',\n            border: 0,\n          },\n          placeholder: '',\n          title: 'This is a designer title',\n          subTitle: '',\n          breadcrumb: ['首页', '列表'],\n        },\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/page-header/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@ali/lowcode-types';\nimport { operations } from '../common';\nimport props from './common/props';\n\nconst PageHeaderMeta: ComponentMetadata = {\n  componentName: 'PageHeader',\n  category: '布局容器类',\n  group: '精选组件',\n  title: '页头',\n  docUrl: '',\n  icon: 'https://img.alicdn.com/imgextra/i2/O1CN01q3ZRHx24rrQ9ysyU8_!!6000000007445-55-tps-56-56.svg',\n  devMode: 'procode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '1.0.0',\n    exportName: 'PageHeader',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'backIcon',\n      propType: 'node',\n    },\n    {\n      name: 'prefixCls',\n      propType: 'string',\n    },\n    {\n      name: 'title',\n      propType: 'node',\n    },\n    {\n      name: 'subTitle',\n      propType: 'node',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'breadcrumb',\n      propType: {\n        type: 'oneOfType',\n        value: ['object'],\n      },\n    },\n    {\n      name: 'breadcrumbRender',\n      propType: {\n        type: 'func',\n        params: [\n          {\n            name: 'props',\n            propType: {\n              type: 'shape',\n              value: [\n                {\n                  name: 'backIcon',\n                  propType: 'node',\n                },\n                {\n                  name: 'prefixCls',\n                  propType: 'string',\n                },\n                {\n                  name: 'title',\n                  propType: 'node',\n                },\n                {\n                  name: 'subTitle',\n                  propType: 'node',\n                },\n                {\n                  name: 'style',\n                  propType: 'object',\n                },\n                {\n                  name: 'breadcrumb',\n                  propType: {\n                    type: 'oneOfType',\n                    value: ['object'],\n                  },\n                },\n                {\n                  name: 'breadcrumbRender',\n                  propType: 'object',\n                },\n                {\n                  name: 'tags',\n                  propType: {\n                    type: 'oneOfType',\n                    value: [\n                      'object',\n                      {\n                        type: 'arrayOf',\n                        value: 'object',\n                      },\n                    ],\n                  },\n                },\n                {\n                  name: 'footer',\n                  propType: 'node',\n                },\n                {\n                  name: 'extra',\n                  propType: 'node',\n                },\n                {\n                  name: 'avatar',\n                  propType: 'object',\n                },\n                {\n                  name: 'onBack',\n                  propType: {\n                    type: 'func',\n                    params: [\n                      {\n                        name: 'e',\n                        propType: 'object',\n                      },\n                    ],\n                    raw: '(e?: MouseEvent<HTMLDivElement, MouseEvent>) => void',\n                  },\n                },\n                {\n                  name: 'className',\n                  propType: 'string',\n                },\n                {\n                  name: 'ghost',\n                  propType: 'bool',\n                },\n              ],\n            },\n          },\n          {\n            name: 'defaultDom',\n            propType: 'node',\n          },\n        ],\n        raw: '(props: PageHeaderProps, defaultDom: ReactNode) => ReactNode',\n      },\n    },\n    {\n      name: 'tags',\n      propType: {\n        type: 'oneOfType',\n        value: [\n          'object',\n          {\n            type: 'arrayOf',\n            value: 'object',\n          },\n        ],\n      },\n    },\n    {\n      name: 'footer',\n      propType: 'node',\n    },\n    {\n      name: 'extra',\n      propType: 'node',\n    },\n    {\n      name: 'avatar',\n      propType: 'object',\n    },\n    {\n      name: 'onBack',\n      propType: {\n        type: 'func',\n        params: [\n          {\n            name: 'e',\n            propType: 'object',\n          },\n        ],\n        raw: '(e?: MouseEvent<HTMLDivElement, MouseEvent>) => void',\n      },\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'ghost',\n      propType: 'bool',\n    },\n  ],\n  configure: {\n    component: {\n      isContainer: false,\n    },\n    props: [\n      ...props,\n      Object.assign({}, operations, {\n        condition: (target) => {\n          const showAction = target.getProps().getPropValue('showActions');\n          return !!showAction;\n        },\n      }),\n    ],\n  },\n};\n\nconst snippets: Snippet[] = [\n  {\n    title: '页头',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i2/O1CN01q3ZRHx24rrQ9ysyU8_!!6000000007445-55-tps-56-56.svg',\n    schema: {\n      componentName: 'PageHeader',\n      title: '页头',\n      props: {\n        title: 'This is a designer title',\n        subTitle: '',\n        breadcrumb: ['首页', '列表'],\n        operations: [\n          {\n            content: '自定义',\n            action: 'custom',\n            type: 'secondary',\n          },\n          {\n            content: '自定义',\n            action: 'custom',\n            type: 'secondary',\n          },\n        ],\n      },\n    },\n  },\n];\n\nexport default {\n  ...PageHeaderMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pie-chart/meta.ts",
    "content": "import { IPublicTypeComponentMetadata, IPublicTypeConfigure } from '@alilc/lowcode-types';\nimport { actionConfigure } from '../common/chart-action';\nimport { plotConfigure } from '../common/chart-plot';\n\nconst pieChartMeta: IPublicTypeComponentMetadata = {\n  componentName: 'PieChart',\n  title: '饼图',\n  category: '图表',\n  group: '精选组件',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.3-beta.3',\n    exportName: 'PieChart',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      // 图例\n      {\n        name: 'legend',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图例',\n        },\n        items: [\n          {\n            name: 'legend.position',\n            title: '位置',\n            setter: {\n              componentName: 'SelectSetter',\n              props: {\n                options: [\n                  { title: '左', value: 'left' },\n                  { title: '左上', value: 'left-top' },\n                  { title: '左下', value: 'left-bottom' },\n                  { title: '右', value: 'right' },\n                  { title: '右上', value: 'right-top' },\n                  { title: '右下', value: 'right-bottom' },\n                  { title: '上', value: 'top' },\n                  { title: '上左', value: 'top-left' },\n                  { title: '上右', value: 'top-right' },\n                  { title: '下', value: 'bottom' },\n                  { title: '下左', value: 'bottom-left' },\n                  { title: '下右', value: 'bottom-right' },\n                ],\n              },\n            },\n          },\n        ],\n      },\n      // 数据\n      {\n        name: 'data',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '数据',\n        },\n        items: [\n          {\n            name: 'data',\n            title: '图表数据',\n            setter: 'JsonSetter',\n          },\n          {\n            name: 'angleField',\n            title: {\n              label: '值字段名',\n              tip: '扇形切片大小（弧度）所对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'colorField',\n            title: {\n              label: '分类字段名',\n              tip: '扇形颜色映射对应的数据字段名',\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n      // 图形属性\n      {\n        name: '',\n        type: 'group',\n        display: 'accordion',\n        title: {\n          label: '图形属性',\n        },\n        items: [\n          {\n            name: 'color',\n            title: '颜色',\n            setter: {\n              componentName: 'ArraySetter',\n              props: {\n                itemSetter: {\n                  componentName: 'ColorSetter',\n                  initialValue: '#0079f2',\n                },\n              },\n            },\n          },\n          {\n            name: 'label',\n            type: 'group',\n            display: 'accordion',\n            title: {\n              label: '标签',\n            },\n            items: [\n              {\n                name: 'label.visible',\n                title: '显示',\n                setter: 'BoolSetter',\n              },\n              {\n                name: 'label.type',\n                title: '位置',\n                setter: {\n                  componentName: 'SelectSetter',\n                  props: {\n                    options: [\n                      { title: '内部', value: 'inner' },\n                      { title: '外部', value: 'outer' },\n                      { title: '外部圆形排布', value: 'outer-center' },\n                      { title: '蜘蛛布局', value: 'spider' },\n                    ],\n                  },\n                },\n              },\n            ],\n          },\n          ...plotConfigure,\n          ...actionConfigure,\n        ],\n      },\n    ],\n  },\n};\n\nconst snippets = [\n  {\n    title: '饼图',\n    name: 'PieChart',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN018rBRGK24fx7hzkITN_!!6000000007419-55-tps-56-56.svg',\n    schema: {\n      componentName: 'PieChart',\n      title: '饼图',\n      props: {\n        legend: {\n          position: 'top-left',\n        },\n        data: [\n          { year: '1991', value: 72345678 },\n          { year: '1992', value: 4321132 },\n          { year: '1993', value: 33121112.5 },\n          { year: '1994', value: 45227221 },\n          { year: '1995', value: 4321221.9 },\n          { year: '1996', value: 6322121 },\n          { year: '1997', value: 78312213 },\n          { year: '1998', value: 2192312 },\n          { year: '1999', value: 6212332 },\n          { year: '2000', value: 1192312 },\n        ],\n        angleField: 'value',\n        colorField: 'year',\n        label: {\n          visible: true,\n          type: 'spider',\n        },\n        color: ['#3BCBD1', '#47A4FE', '#EDBA42', '#F4704E', '#ED6899', '#7F62C3', '#6E7BC9'],\n      },\n    },\n  },\n];\nexport default {\n  ...pieChartMeta,\n  snippets\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-dialog/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@ali/lowcode-types';\nimport { hideProp } from '../utils';\nimport { operationProps } from '../common';\n\nconst ProDialogMeta: ComponentMetadata = {\n  componentName: 'ProDialog',\n  title: '对话框',\n  group: '精选组件',\n  docUrl: '',\n  screenshot:\n    'https://img.alicdn.com/imgextra/i1/O1CN01n5JLZG1aBmYZlckSx_!!6000000003292-55-tps-56-56.svg',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.23',\n    exportName: 'ProDialog',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      rootSelector: 'div.next-dialog',\n      nestingRule: {\n        parentWhitelist: ['Page'],\n      },\n    },\n    props: [\n      {\n        name: 'ref',\n        condition: hideProp,\n        setter: (target) => {\n          if (!target?.getValue()) {\n            target?.setValue(`pro-dialog-${target?.id}`);\n          }\n          return 'StringSetter';\n        },\n      },\n      {\n        name: 'dialogType',\n        title: '弹窗类型',\n        defaultValue: 'normal',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '提示弹窗',\n                value: 'notice',\n              },\n              {\n                title: '普通弹窗',\n                value: 'normal',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'status',\n        title: '提示状态',\n        condition: (target) => {\n          return target.getProps().getPropValue('dialogType') === 'notice';\n        },\n        defaultValue: 'success',\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            options: [\n              {\n                title: '提醒',\n                value: 'notice',\n              },\n              {\n                title: '警告',\n                value: 'warning',\n              },\n              {\n                title: '确认',\n                value: 'help',\n              },\n              {\n                title: '成功',\n                value: 'success',\n              },\n              {\n                title: '失败',\n                value: 'error',\n              },\n              {\n                title: '加载中',\n                value: 'loading',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'title',\n        title: '标题',\n        setter: () => {\n          const hasTitleSetter = AliLowCodeEngine.setters.getSetter('TitleSetter');\n          return hasTitleSetter\n            ? {\n                componentName: 'TitleSetter',\n                props: {\n                  defaultChecked: true,\n                },\n              }\n            : 'StringSetter';\n        },\n        defaultValue: 'Title',\n      },\n      {\n        name: 'size',\n        title: '弹窗尺寸',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '大',\n                value: 'large',\n              },\n              {\n                title: '中',\n                value: 'medium',\n              },\n              {\n                title: '小',\n                value: 'small',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'visible',\n        title: '默认显示',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'hasTips',\n        title: '提示信息',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'iconType',\n        title: '提示图标',\n        setter: {\n          componentName: 'IconSetter',\n        },\n        condition: (target) => {\n          const showExplanation = target.getProps().getPropValue('hasTips');\n          return !!showExplanation;\n        },\n      },\n      {\n        name: 'explanation',\n        title: '解释文案',\n        setter: {\n          componentName: 'StringSetter',\n        },\n        condition: (target) => {\n          const showExplanation = target.getProps().getPropValue('hasTips');\n          return !!showExplanation;\n        },\n      },\n      {\n        name: 'hasMask',\n        title: '显示遮罩',\n        setter: 'BoolSetter',\n        defaultValue: true,\n      },\n      {\n        name: 'closeMode',\n        title: '关闭方式',\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            mode: 'tag',\n            options: [\n              {\n                title: '点击按钮',\n                value: 'close',\n              },\n              {\n                title: '点击遮罩',\n                value: 'mask',\n              },\n              {\n                title: 'ESC',\n                value: 'esc',\n              },\n            ],\n          },\n        },\n        defaultValue: ['close'],\n      },\n      {\n        name: 'autoFocus',\n        title: '自动聚焦',\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      ...operationProps,\n      {\n        name: 'buttons',\n        title: '底部按钮配置',\n        type: 'group',\n        condition: hideProp,\n        extraProps: {\n          display: 'block',\n        },\n        items: [\n          {\n            name: 'footer',\n            title: '是否显示',\n            setter: 'BoolSetter',\n            initialValue: true,\n          },\n          {\n            name: 'footerAlign',\n            title: '对齐方式',\n            initialValue: 'right',\n            condition: (target) => {\n              return target.getProps().getPropValue('footer');\n            },\n            setter: {\n              componentName: 'RadioGroupSetter',\n              initialValue: 'right',\n              props: {\n                options: [\n                  {\n                    title: 'left',\n                    value: 'left',\n                  },\n                  {\n                    title: 'center',\n                    value: 'center',\n                  },\n                  {\n                    title: 'right',\n                    value: 'right',\n                  },\n                ],\n              },\n            },\n          },\n          {\n            name: 'footerActions',\n            title: '排列方式',\n            initialValue: ['ok', 'cancel'],\n            condition: (target) => {\n              return target.getProps().getPropValue('footer');\n            },\n            setter: {\n              componentName: 'SelectSetter',\n              initialValue: ['ok', 'cancel'],\n              props: {\n                options: [\n                  {\n                    title: 'ok, cancel',\n                    value: ['ok', 'cancel'],\n                  },\n                  {\n                    title: 'cancel, ok',\n                    value: ['cancel', 'ok'],\n                  },\n                  {\n                    title: 'cancel',\n                    value: ['cancel'],\n                  },\n                  {\n                    title: 'ok',\n                    value: ['ok'],\n                  },\n                ],\n              },\n            },\n          },\n        ],\n      },\n    ],\n    supports: {\n      events: ['onOk', 'onCancel', 'onClose'],\n      style: true,\n    },\n    advanced: {\n      callbacks: {\n        // 与 next-page 的 onNodeAdd 一模一样\n        onNodeAdd: (dragment, currentNode) => {\n          // 拖入的组件为 P、Block、Slot（把NextPage拖入到面板里时，NextPage的Slot也会触发onNodeAdd事件） 时,不进行包裹\n          // 拖入的组件 isModal为true时（例如drawer dialog 这类有单独组件树结构的），不进行包裹\n          if (\n            !dragment ||\n            ['NextP', 'NextBlock', 'Slot'].includes(dragment.componentName) ||\n            (dragment.componentMeta.isModal && dragment.componentMeta.isModal())\n          ) {\n            console.log(\n              `[${dragment.componentName}] doesn \\\\'n need to wrap with NextBlock > NextBlockCell`,\n            );\n            return;\n          }\n\n          const NextPProps = {\n            wrap: false,\n            type: 'body2',\n            verAlign: 'middle',\n            textSpacing: true,\n            align: 'left',\n          };\n\n          if (\n            [\n              'Form',\n              'ResponsiveGrid',\n              'Box',\n              'Card',\n              'List',\n              'Message',\n              'Slider',\n              'NextTable',\n            ].includes(dragment.componentName) ||\n            dragment.getPropValue('isFillContainer')\n          ) {\n            NextPProps.full = true;\n          }\n          const layoutPSchema = {\n            componentName: 'NextP',\n            title: '段落',\n            props: NextPProps,\n            children: [dragment.exportSchema()],\n          };\n\n          // 为目标元素包裹一层 Block\n          const layoutBlockNode = (len) =>\n            currentNode.document.createNode({\n              componentName: 'NextBlock',\n              title: '区块',\n              props: {\n                childTotalColumns: len || 12,\n              },\n              children: [\n                {\n                  componentName: 'NextBlockCell',\n                  title: '子区块',\n                  props: {\n                    isAutoContainer: true,\n                    colSpan: 12,\n                    rowSpan: 1,\n                  },\n                  children: [layoutPSchema],\n                },\n              ],\n            });\n\n          const { dropLocation } = dragment.document.canvas;\n\n          if (!dropLocation) {\n            // 没有 dropLocation 一般是 slot, slot 元素不用特殊处理 不做任何包裹\n            return;\n          }\n          const dropTarget = dropLocation.target;\n          const dropTargetName = dropLocation.target.componentName || '';\n\n          // 找到要拖入进去的节点 ID\n          const targetId = (dropLocation && dropLocation.target.id) || '';\n          // 找到要拖入进去的节点\n          const slotTarget =\n            currentNode.slots.length > 0 && currentNode.slots.find((item) => item.id === targetId);\n\n          const layoutPNode = currentNode.document.createNode(layoutPSchema);\n\n          // 是否为 aside slot\n          const isAsideSlot = slotTarget && ['aside'].indexOf(slotTarget._slotFor.key) > -1;\n          // 是否为需要被 P 包裹的 Slot\n          const isNeedPSlot =\n            slotTarget && ['header', 'footer', 'nav'].indexOf(slotTarget._slotFor.key) > -1;\n\n          const wrapWithBlock = (curDragMent, node, curDropTargetName, blockLen) => {\n            setTimeout(() => {\n              console.log(\n                `[${curDragMent.componentName}] to [${curDropTargetName}] need to wrap with NextBlock > NextBlockCell > NextP [from NextPage2]`,\n              );\n              const newNode = node.document.createNode(layoutBlockNode(blockLen).exportSchema());\n              node.insertBefore(newNode, curDragMent, false);\n              curDragMent.remove(false);\n              newNode.children.get(0).children.get(0).children.get(0).select();\n            }, 1);\n          };\n\n          const wrapWithP = (curDragMent, node, curDropTargetName) => {\n            setTimeout(() => {\n              // const dragmentTarget = dropTarget;\n              // 要拖入的地方如果是 NextP 那就 不再自动包裹 P了\n              if (dropTargetName === 'NextP') {\n                console.log(\n                  `[${curDragMent.componentName}] to [${curDropTargetName}] does't need to wrap with NextP. [from NextPage3]`,\n                );\n                return;\n              }\n\n              console.log(\n                `[${curDragMent.componentName}] to [${dropTargetName}] need to wrap with NextP [from NextPage3]`,\n              );\n              const newNode = node.document.createNode(Object.assign(layoutPNode.exportSchema()));\n              node.insertBefore(newNode, curDragMent, false);\n              curDragMent.remove(false);\n              newNode.children.get(0).select();\n            }, 1);\n          };\n\n          // 需要包裹 Block BlockCell P 的情况：\n          // 1. 组件拖入到 NextPage，的直接子元素下(不包括slot), 此时Block宽度为12\n          if (['NextPage'].includes(dropTargetName) && currentNode.children.has(dragment)) {\n            wrapWithBlock(dragment, currentNode, dropTargetName, 12);\n\n            // 需要包裹 Block BlockCell P 的情况：\n            // 2. 组件拖入到 NextPage 的 aside slot, 的直接子元素下 （不包括slot下的进一步内容），此时Block宽度为1\n          } else if (isAsideSlot && slotTarget && slotTarget.children.has(dragment)) {\n            wrapWithBlock(dragment, slotTarget, dropTargetName, 1);\n\n            // 需要包裹 P 的情况：\n            // 1. 如果是处于，开启了自然布局模式的容器组件中 (或者Tab里)\n            // 这里的Tab主要是给纪元epoch使用的，因为他们用到了 @ali/vc-deep 的TabLayout组件，没办法在这个组件上再增加属性 isAutoContainer\n          } else if (dropTarget.getPropValue('isAutoContainer') || dropTargetName === 'Tab.Item') {\n            wrapWithP(dragment, dropTarget, dropTargetName);\n\n            // 需要包裹 P 的情况：\n            // 2. 如果是处于，Page 的 nav header footer 中\n          } else if (isNeedPSlot && slotTarget) {\n            wrapWithP(dragment, slotTarget, dropTargetName);\n          }\n\n          // 其他维持原状，不进行其他设置\n        },\n      },\n    },\n  },\n  icon: 'https://img.alicdn.com/imgextra/i1/O1CN01n5JLZG1aBmYZlckSx_!!6000000003292-55-tps-56-56.svg',\n  category: '布局容器类',\n};\nconst snippets: Snippet[] = [\n  {\n    title: '高级对话框',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i1/O1CN01n5JLZG1aBmYZlckSx_!!6000000003292-55-tps-56-56.svg',\n    schema: {\n      componentName: 'ProDialog',\n      props: {\n        status: 'success',\n        size: 'medium',\n        prefix: 'next-',\n        footerAlign: 'right',\n        title: 'Title',\n        closeMode: ['esc', 'close'],\n        hasMask: true,\n        align: 'cc cc',\n        minMargin: 40,\n        isAutoContainer: true,\n        visible: true,\n        iconType: 'prompt',\n        explanation: '提示文案',\n        operationConfig: {\n          align: 'right',\n        },\n        operations: [\n          {\n            action: 'ok',\n            type: 'primary',\n            content: '确认',\n          },\n          {\n            action: 'cancel',\n            type: 'normal',\n            content: '取消',\n          },\n        ],\n      },\n    },\n  },\n];\n\nexport default {\n  ...ProDialogMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-drawer/meta.ts",
    "content": "import { hideProp } from '../utils';\n\nimport { operationProps } from '../common';\n\nconst wrapWithBlock = (dragment, node, dropTargetName, blockLen, layoutBlockNode) => {\n  setTimeout(() => {\n    console.log(\n      `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextBlock > NextBlockCell > NextP [from NextPage2]`,\n    );\n    const newNode = node.document.createNode(layoutBlockNode(blockLen).exportSchema());\n    node.insertBefore(newNode, dragment, false);\n    dragment.remove(false);\n    newNode.children.get(0).children.get(0).children.get(0).select();\n  }, 1);\n};\n\nconst wrapWithP = (dragment, node, dropTargetName, layoutPNode) => {\n  setTimeout(() => {\n    // const dragmentTarget = dropTarget;\n    // 要拖入的地方如果是 NextP 那就 不再自动包裹 P了\n    if (dropTargetName === 'NextP') {\n      console.log(\n        `[${dragment.componentName}] to [${dropTargetName}] does't need to wrap with NextP. [from NextPage3]`,\n      );\n      return;\n    }\n\n    console.log(\n      `[${dragment.componentName}] to [${dropTargetName}] need to wrap with NextP [from NextPage3]`,\n    );\n    const newNode = node.document.createNode(Object.assign(layoutPNode.exportSchema()));\n    node.insertBefore(newNode, dragment, false);\n    dragment.remove(false);\n    newNode.children.get(0).select();\n  }, 1);\n};\n\nconst meta = {\n  componentName: 'Drawer',\n  title: '抽屉',\n  group: '精选组件',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.23',\n    exportName: 'ProDrawer',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    component: {\n      isContainer: true,\n      isModal: true,\n      rootSelector: '.next-drawer',\n      nestingRule: {\n        parentWhitelist: (testNode) => {\n          return testNode.componentName === 'Page';\n        },\n      },\n    },\n    props: [\n      {\n        name: 'ref',\n        condition: hideProp,\n        setter: (target) => {\n          if (!target?.getValue()) {\n            target?.setValue(`pro-drawer-${target?.id}`);\n          }\n          return 'StringSetter';\n        },\n      },\n      {\n        name: 'title',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标题',\n            en_US: 'Title',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: title | 说明: 标题',\n            en_US: 'prop: title | description: title',\n          },\n        },\n        setter: {\n          componentName: 'StringSetter',\n        },\n        description: '标题',\n      },\n      {\n        name: 'titleTip.enable',\n        title: '标题提示',\n        condition: (target) => {\n          console.log('title: ', target.getProps().getPropValue('title'));\n          return !!target.getProps().getPropValue('title');\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        name: 'titleTip.content',\n        condition: (target) => {\n          return target.getProps().getPropValue('titleTip.enable') === true;\n        },\n        title: '提示内容',\n        setter: {\n          componentName: 'StringSetter',\n        },\n      },\n      {\n        name: 'titleTip.icon',\n        condition: (target) => {\n          return target.getProps().getPropValue('titleTip.enable') === true;\n        },\n        title: '提示图标',\n        setter: {\n          componentName: 'IconSetter',\n        },\n      },\n      {\n        name: 'width',\n        condition: hideProp,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '宽度',\n            en_US: 'width',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: width | 说明: 宽度',\n            en_US: 'prop: width | description: 仅在 placement是 left right 的时候生效',\n          },\n        },\n        setter: {\n          componentName: 'NumberSetter',\n        },\n        description: '宽度，仅在 placement是 left right 的时候生效',\n      },\n      {\n        name: 'height',\n        condition: hideProp,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '高度',\n            en_US: 'height',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: height | 说明: 高度',\n            en_US: 'prop: height | description: 仅在 placement是 top bottom 的时候生效',\n          },\n        },\n        setter: {\n          componentName: 'NumberSetter',\n        },\n        description: '高度，仅在 placement是 top bottom 的时候生效',\n      },\n      {\n        name: 'placement',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '弹出位置',\n            en_US: 'height',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: placement | 说明: 位于页面的位置',\n            en_US: 'prop: placement | description: drawer placement',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '上',\n                value: 'top',\n              },\n              {\n                title: '右',\n                value: 'right',\n              },\n              {\n                title: '下',\n                value: 'bottom',\n              },\n              {\n                title: '左',\n                value: 'left',\n              },\n            ],\n          },\n        },\n        description: '位于页面的位置',\n        defaultValue: 'right',\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '大',\n                value: 'large',\n              },\n              {\n                title: '中',\n                value: 'medium',\n              },\n              {\n                title: '小',\n                value: 'small',\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'visible',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '默认显示',\n            en_US: 'visible',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: visible | 说明: 默认显示',\n            en_US: 'prop: visible | description: drawer visible',\n          },\n        },\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'hasMask',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '显示遮罩',\n            en_US: 'hasMask',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: hasMask | 说明: 是否显示遮罩',\n            en_US: 'prop: hasMask | description: drawer hasMask',\n          },\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n        description: '是否显示遮罩',\n        defaultValue: true,\n      },\n      {\n        name: 'closeMode',\n        title: '关闭方式',\n        setter: {\n          componentName: 'SelectSetter',\n          props: {\n            mode: 'multiple',\n            options: [\n              {\n                title: '点击按钮',\n                value: 'close',\n              },\n              {\n                title: '点击遮罩',\n                value: 'mask',\n              },\n              {\n                title: 'ESC',\n                value: 'esc',\n              },\n            ],\n          },\n        },\n        defaultValue: ['close'],\n      },\n      ...operationProps,\n    ],\n  },\n  advanced: {\n    callbacks: {\n      // 与 next-page 的 onNodeAdd 一模一样\n      onNodeAdd: (dragment, currentNode) => {\n        // 拖入的组件为 P、Block、Slot（把NextPage拖入到面板里时，NextPage的Slot也会触发onNodeAdd事件） 时,不进行包裹\n        // 拖入的组件 isModal为true时（例如drawer dialog 这类有单独组件树结构的），不进行包裹\n        if (\n          !dragment ||\n          ['NextP', 'NextBlock', 'Slot'].includes(dragment.componentName) ||\n          (dragment.componentMeta.isModal && dragment.componentMeta.isModal())\n        ) {\n          console.log(\n            `[${dragment.componentName}] does not need to wrap with NextBlock > NextBlockCell`,\n          );\n          return;\n        }\n\n        const NextPProps = {\n          wrap: false,\n          type: 'body2',\n          verAlign: 'middle',\n          textSpacing: true,\n          align: 'left',\n        };\n\n        if (\n          [\n            'Form',\n            'ResponsiveGrid',\n            'Box',\n            'Card',\n            'List',\n            'Message',\n            'Slider',\n            'NextTable',\n          ].includes(dragment.componentName) ||\n          dragment.getPropValue('isFillContainer')\n        ) {\n          NextPProps.full = true;\n        }\n        const layoutPSchema = {\n          componentName: 'NextP',\n          title: '段落',\n          props: NextPProps,\n          children: [dragment.exportSchema()],\n        };\n\n        // 为目标元素包裹一层 Block\n        const layoutBlockNode = (len) =>\n          currentNode.document.createNode({\n            componentName: 'NextBlock',\n            title: '区块',\n            props: {\n              childTotalColumns: len || 12,\n            },\n            children: [\n              {\n                componentName: 'NextBlockCell',\n                title: '子区块',\n                props: {\n                  isAutoContainer: true,\n                  colSpan: 12,\n                  rowSpan: 1,\n                },\n                children: [layoutPSchema],\n              },\n            ],\n          });\n\n        const { dropLocation } = dragment.document.canvas;\n\n        if (!dropLocation) {\n          // 没有 dropLocation 一般是 slot, slot 元素不用特殊处理 不做任何包裹\n          return;\n        }\n        const dropTarget = dropLocation.target;\n        const dropTargetName = dropLocation.target.componentName || '';\n\n        // 找到要拖入进去的节点 ID\n        const targetId = (dropLocation && dropLocation.target.id) || '';\n        // 找到要拖入进去的节点\n        const slotTarget =\n          currentNode.slots.length > 0 && currentNode.slots.find((item) => item.id === targetId);\n\n        const layoutPNode = currentNode.document.createNode(layoutPSchema);\n\n        // 是否为 aside slot\n        const isAsideSlot = slotTarget && ['aside'].indexOf(slotTarget._slotFor.key) > -1;\n        // 是否为需要被 P 包裹的 Slot\n        const isNeedPSlot =\n          slotTarget && ['header', 'footer', 'nav'].indexOf(slotTarget._slotFor.key) > -1;\n\n        // 需要包裹 Block BlockCell P 的情况：\n        // 1. 组件拖入到 NextPage，的直接子元素下(不包括slot), 此时Block宽度为12\n        if (['NextPage'].includes(dropTargetName) && currentNode.children.has(dragment)) {\n          wrapWithBlock(dragment, currentNode, dropTargetName, 12, layoutBlockNode);\n\n          // 需要包裹 Block BlockCell P 的情况：\n          // 2. 组件拖入到 NextPage 的 aside slot, 的直接子元素下 （不包括slot下的进一步内容），此时Block宽度为1\n        } else if (isAsideSlot && slotTarget && slotTarget.children.has(dragment)) {\n          wrapWithBlock(dragment, slotTarget, dropTargetName, 1, layoutBlockNode);\n\n          // 需要包裹 P 的情况：\n          // 1. 如果是处于，开启了自然布局模式的容器组件中 (或者Tab里)\n          // 这里的Tab主要是给纪元epoch使用的，因为他们用到了 @ali/vc-deep 的TabLayout组件，没办法在这个组件上再增加属性 isAutoContainer\n        } else if (dropTarget.getPropValue('isAutoContainer') || dropTargetName === 'Tab.Item') {\n          wrapWithP(dragment, dropTarget, dropTargetName, layoutPNode);\n\n          // 需要包裹 P 的情况：\n          // 2. 如果是处于，Page 的 nav header footer 中\n        } else if (isNeedPSlot && slotTarget) {\n          wrapWithP(dragment, slotTarget, dropTargetName, layoutPNode);\n        }\n\n        // 其他维持原状，不进行其他设置\n      },\n    },\n  },\n  icon: '',\n  category: '布局容器类',\n};\n\nconst snippets = [\n  {\n    title: '高级抽屉',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i3/O1CN01PIbHBa1dxMY8m44cf_!!6000000003802-55-tps-56-56.svg',\n    schema: {\n      componentName: 'Drawer',\n      props: {\n        prefix: 'next-',\n        title: '高级抽屉',\n        triggerType: 'click',\n        closeable: true,\n        placement: 'right',\n        hasMask: true,\n        isAutoContainer: true,\n        visible: true,\n        size: 'medium',\n        operationConfig: {\n          align: 'right',\n          fixed: true,\n        },\n        operations: [\n          {\n            action: 'ok',\n            type: 'primary',\n            content: '确认',\n          },\n          {\n            action: 'cancel',\n            type: 'normal',\n            content: '取消',\n          },\n        ],\n      },\n    },\n  },\n];\n\nexport default { ...meta, snippets };\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-form/common/form-base-props.ts",
    "content": "import { isEqual, throttle } from 'lodash';\nimport { IPublicModelSettingField } from '@alilc/lowcode-types';\nimport { material } from '@alilc/lowcode-engine'\n\nimport { IProps } from '../../types';\nimport { formItemShortcutProps as baseFormItemProps } from './form-item-props';\nimport { hideProp, showWithLabelAlign } from '../../utils';\n\nfunction getInitialPropsForFormItem(componentName, currentComponentProps) {\n  const component = material?.getAssets()?.components.filter((item) => item.componentName === componentName)[0];\n  const defaultProps = {};\n  const initials = component?.advanced?.initials;\n  if (initials && Array.isArray(initials) && initials.length) {\n    initials.forEach((initial) => {\n      if (initial && initial.name && initial.initial) {\n        defaultProps[initial.name] =\n          typeof initial.initial === 'function' ? initial.initial() : initial.initial;\n      }\n    });\n  }\n  const props = { ...currentComponentProps };\n\n  Object.keys(defaultProps).forEach((item) => {\n    const propValue = currentComponentProps[item];\n    if (!propValue && defaultProps[item]) {\n      props[item] = defaultProps[item];\n    }\n  });\n  return props;\n}\n\nconst itemSetValue = throttle((target: IPublicModelSettingField, value) => {\n  const { node } = target;\n  const mergedValueMap = {};\n  const mergedValues: any = [];\n  const map = {};\n  if (!Array.isArray(value)) {\n    value = [];\n  }\n  value.forEach((item) => {\n    if (item.primaryKey === undefined) return;\n    if (!mergedValueMap[item.primaryKey]) {\n      mergedValueMap[item.primaryKey] = item;\n      mergedValues.push(item);\n    }\n    const FormItem = Object.assign({}, item);\n    if (!FormItem.componentName) {\n      // 新增表单项时初始化\n      FormItem.componentName = 'FormInput';\n    }\n    map[item.primaryKey] = FormItem;\n  });\n  const children = node?.children?.filter((child) => {\n    if (!mergedValueMap[child.propsData?.['primaryKey']]) {\n      mergedValueMap[child.propsData?.['primaryKey']] = child.propsData;\n      mergedValues.push(child.propsData);\n    }\n    return true;\n  });\n  const preValue = children.map((child) => {\n    return child.propsData;\n  });\n  if (isEqual(preValue, value)) {\n    return;\n  }\n  node?.children?.mergeChildren(\n    (child) => {\n      const primaryKey =\n        child.getPropValue('formItemProps')?.primaryKey || child.getPropValue('primaryKey');\n      if (Object.hasOwnProperty.call(map, primaryKey)) {\n        const { componentName, componentProps, ...otherProps } = map[primaryKey];\n        const newComponentProps = getInitialPropsForFormItem(componentName, componentProps);\n        let newProps;\n        if (child.componentName === 'ProFormItem') {\n          const formItemProps = { ...(child.propsData || {}), ...otherProps };\n          delete formItemProps.componentProps;\n          delete formItemProps.componentName;\n          newProps = {\n            formItemProps,\n            ...newComponentProps,\n          };\n          delete newProps.componentName;\n        } else {\n          newProps = {\n            ...(child.propsData || {}),\n            ...newComponentProps,\n            formItemProps: otherProps,\n          };\n        }\n\n        node.replaceChild(child, {\n          componentName,\n          props: newProps,\n        });\n        delete map[primaryKey];\n        return false;\n      }\n      return true;\n    },\n    () => {\n      const items: any[] = [];\n      for (const primaryKey in map) {\n        if (Object.hasOwnProperty.call(map, primaryKey)) {\n          const { componentName, componentProps, ...otherProps } = map[primaryKey];\n          const newProps = {\n            formItemProps: otherProps,\n            ...componentProps,\n          };\n          items.push({\n            componentName,\n            props: newProps,\n          });\n        }\n      }\n      return items;\n    },\n    (child1, child2) => {\n      const a = mergedValues.findIndex(\n        (item) =>\n          String(item.primaryKey) ===\n          String(\n            child1.getPropValue('formItemProps')?.primaryKey || child1.getPropValue('primaryKey'),\n          ),\n      );\n      const b = mergedValues.findIndex(\n        (item) =>\n          String(item.primaryKey) ===\n          String(\n            child2.getPropValue('formItemProps')?.primaryKey || child2.getPropValue('primaryKey'),\n          ),\n      );\n      return a - b;\n    },\n  );\n});\n\nexport const formItemsProps = {\n  name: '!items',\n  title: '表单项',\n  display: 'accordion',\n  virtual: true,\n  setter: {\n    componentName: 'ArraySetter',\n    props: {\n      itemSetter: {\n        componentName: 'ObjectSetter',\n        props: {\n          config: {\n            items: [\n              {\n                name: 'componentName',\n                title: '表单项组件',\n                display: 'inline',\n                defaultValue: 'FormInput',\n                important: true,\n                setter: () => {\n                  return {\n                    componentName: 'SelectSetter',\n                    props: {\n                      options: AliLowCodeEngine.material\n                        .getAssets()\n                        .components.filter((item) => item.isFormItemComponent)\n                        .map((item) => {\n                          return {\n                            title: item.title || item.componentName,\n                            value: item.componentName,\n                          };\n                        }),\n                    },\n                  };\n                },\n              },\n              ...baseFormItemProps,\n            ],\n          },\n        },\n        initialValue: () => {\n          const mockProps = {};\n          baseFormItemProps.forEach((item) => {\n            if (item.defaultValue) {\n              if (typeof item.defaultValue === 'function') {\n                mockProps[item.name] = item.defaultValue();\n              } else {\n                mockProps[item.name] = item.defaultValue;\n              }\n            }\n          });\n          return {\n            componentName: 'FormInput',\n            ...mockProps,\n          };\n        },\n      },\n    },\n  },\n  getValue: (target: IPublicModelSettingField) => {\n    const hotValue = target.node?.children?.map((child) => {\n      const { propsData } = child;\n      // 兼容 FroFromItem -> Input 的数据结构\n      if (child.componentName === 'ProFormItem') {\n        const { componentProps, ...formItemProps } = propsData || {};\n        return {\n          ...formItemProps,\n          componentProps,\n        };\n      } else {\n        const { formItemProps, ...componentProps } = propsData || {};\n        return {\n          ...formItemProps,\n          componentName: child.componentName,\n          componentProps,\n        };\n      }\n    });\n    return hotValue;\n  },\n  setValue: itemSetValue,\n};\n\nconst props: IProps[] = [\n  {\n    name: 'ref',\n    condition: hideProp,\n    setter: (target) => {\n      if (!target?.getValue()) {\n        target?.setValue(`pro-form-${target?.id}`);\n      }\n      return 'StringSetter';\n    },\n  },\n  {\n    name: 'globalConfig',\n    title: '全局配置',\n    type: 'group',\n    display: 'accordion',\n    items: [\n      {\n        name: 'inline',\n        condition: hideProp,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '内联表单',\n            en_US: 'Inline',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: inline | 说明: 内联表单',\n            en_US: 'prop: inline | description: inline form',\n          },\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n        setValue: (target, value) => {\n          if (value === true) {\n            target.getProps().setPropValue('labelCol', null);\n            target.getProps().setPropValue('wrapperCol', null);\n          } else {\n            target.getProps().setPropValue('labelCol', { fixedSpan: 4 });\n            target.getProps().setPropValue('wrapperCol', null);\n          }\n          return target.getProps().setPropValue('inline', value);\n        },\n      },\n      {\n        name: 'fullWidth',\n        condition: hideProp,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '宽度占满',\n            en_US: 'FullWidth',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: fullWidth | 说明: 单个 Item 中表单类组件宽度是否是100%',\n            en_US: 'prop: fullWidth | description: full width',\n          },\n        },\n        setter: 'BoolSetter',\n      },\n      {\n        name: 'status',\n        virtual: true,\n        title: '状态',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '只读态',\n                value: 'readonly',\n              },\n              {\n                title: '编辑态',\n                value: 'editable',\n              },\n            ],\n          },\n        },\n        getValue: (target) => {\n          const isPreview = target.getProps().getPropValue('isPreview');\n          return isPreview ? 'readonly' : 'editable';\n        },\n        setValue: (target, value) => {\n          target.getProps().setPropValue('isPreview', value === 'readonly');\n        },\n        defaultValue: 'editable',\n      },\n      {\n        name: 'isPreview',\n        condition: () => false,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '预览态',\n            en_US: 'Preview Mode',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: isPreview | 说明: 是否开启预览态',\n            en_US: 'prop: isPreview | description: preview mode',\n          },\n        },\n        setter: 'BoolSetter',\n        description: '是否开启预览态',\n      },\n      {\n        name: 'columns',\n        title: '布局',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '一列',\n                value: 1,\n              },\n              {\n                title: '二列',\n                value: 2,\n              },\n              {\n                title: '三列',\n                value: 3,\n              },\n              {\n                title: '四列',\n                value: 4,\n              },\n            ],\n          },\n        },\n      },\n      {\n        name: 'labelAlign',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签位置',\n            en_US: 'Label Align',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: labelAlign | 说明: 标签的位置\\n@enumdesc 上, 左, 内',\n            en_US: 'prop: labelAlign | description: label align',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '上',\n                value: 'top',\n              },\n              {\n                title: '左',\n                value: 'left',\n              },\n              {\n                title: '内',\n                value: 'inset',\n              },\n            ],\n          },\n        },\n        extraProps: {\n          setValue: (target, value) => {\n            if (value === 'inset') {\n              target.getProps().setPropValue('labelCol.fixedSpan', 0);\n              target.getProps().setPropValue('wrapperCol', null);\n            } else if (value === 'left') {\n              target.getProps().setPropValue('labelCol.fixedSpan', 4);\n              target.getProps().setPropValue('wrapperCol', null);\n            }\n            return target.getProps().setPropValue('labelAlign', value);\n          },\n        },\n        defaultValue: 'top',\n      },\n      {\n        name: 'labelCol.fixedSpan',\n        title: '标题宽度',\n        condition: showWithLabelAlign,\n        setter: {\n          componentName: 'NumberSetter',\n          props: {\n            min: 0,\n            max: 24,\n          },\n        },\n      },\n      {\n        name: 'labelCol.offset',\n        title: '标题偏移',\n        condition: showWithLabelAlign,\n        setter: {\n          componentName: 'NumberSetter',\n          props: {\n            min: 0,\n            max: 24,\n          },\n        },\n      },\n      {\n        name: 'wrapperCol.span',\n        title: '内容宽度',\n        condition: showWithLabelAlign,\n        setter: {\n          componentName: 'NumberSetter',\n          props: {\n            min: 0,\n            max: 24,\n          },\n        },\n      },\n      {\n        name: 'wrapperCol.offset',\n        title: '内容偏移',\n        condition: showWithLabelAlign,\n        setter: {\n          componentName: 'NumberSetter',\n          props: {\n            min: 0,\n            max: 24,\n          },\n        },\n      },\n      {\n        name: 'labelTextAlign',\n        condition: showWithLabelAlign,\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '标签对齐',\n            en_US: 'Text Align',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: labelTextAlign | 说明: 标签的左右对齐方式\\n@enumdesc 左, 右',\n            en_US: 'prop: labelTextAlign | description: label text align',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['left', 'right'],\n          },\n        },\n        defaultValue: 'right',\n      },\n    ],\n  },\n  {\n    name: 'field',\n    condition: hideProp,\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: 'Field 实例',\n        en_US: 'Field',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: field | 说明: 传入 Field 实例',\n        en_US: 'prop: field | description: field instance',\n      },\n      docUrl:\n        'https://fusion.alibaba-inc.com/pc/component/basic/form#%E5%A4%8D%E6%9D%82%E5%8A%9F%E8%83%BD(Field)',\n    },\n    setter: {\n      componentName: 'ExpressionSetter',\n    },\n  },\n  {\n    name: 'value',\n    condition: hideProp,\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '表单值',\n        en_US: 'value',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: value | 说明: 表单值',\n        en_US: 'prop: value | description: value instance',\n      },\n    },\n    setter: {\n      componentName: 'MixedSetter',\n      props: {\n        setters: ['JsonSetter', 'ExpressionSetter'],\n      },\n    },\n  },\n  {\n    name: 'size',\n    condition: hideProp,\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '尺寸',\n        en_US: 'Size',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN:\n          '属性: size | 说明: 单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。\\n@enumdesc 大, 中, 小',\n        en_US: 'prop: size | description: size',\n      },\n    },\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: ['large', 'medium', 'small'],\n      },\n    },\n    defaultValue: 'medium',\n  },\n  {\n    name: 'device',\n    condition: hideProp,\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '设备',\n        en_US: 'Device',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: device | 说明: 预设屏幕宽度',\n        en_US: 'prop: device | description: device',\n      },\n    },\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: ['phone', 'tablet', 'desktop'],\n      },\n    },\n    defaultValue: 'desktop',\n  },\n  formItemsProps,\n];\n\nexport default props;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-form/common/form-item-props.ts",
    "content": "import React from 'react';\nimport { IProps } from '../../types';\n\nimport {\n  showWithLabelAlign,\n  showWithLabelAlignShortcut,\n  hideProp,\n  getParentValue,\n  mockId,\n} from '../../utils';\n\nconst primaryKeyConfig = {\n  name: 'primaryKey',\n  title: '编号',\n  display: 'none',\n  condition: hideProp,\n  defaultValue: (val: any) => {\n    if (val) return val;\n    return mockId();\n  },\n  setter: 'StringSetter',\n};\n\nconst columnSpanConfig = {\n  name: 'columnSpan',\n  title: '表单项宽度',\n  defaultValue: 1,\n  setter: (target) => {\n    const parentColumns = target.parent.getPropValue('columns');\n    const options = [\n      {\n        title: '一列',\n        value: 1,\n      },\n      {\n        title: '二列',\n        value: 2,\n      },\n      {\n        title: '三列',\n        value: 3,\n      },\n      {\n        title: '四列',\n        value: 4,\n      },\n    ].slice(0, parentColumns);\n    return {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options,\n      },\n    };\n  },\n};\n\nconst labelConfig = {\n  name: 'label',\n  title: '标题',\n  display: 'inline',\n  defaultValue: '表单项',\n  setter: 'StringSetter',\n  important: true,\n  supportVariable: true,\n};\n\nconst idConfig = {\n  name: 'id',\n  condition: hideProp,\n  title: {\n    label: {\n      type: 'i18n',\n      zh_CN: '唯一标识',\n      en_US: 'ID',\n    },\n    tip: {\n      type: 'i18n',\n      zh_CN: '属性: id | 说明: 唯一标识',\n      en_US: 'prop: id | description: switch id',\n    },\n  },\n  setter: 'StringSetter',\n};\n\nconst nameConfig = {\n  name: 'name',\n  title: {\n    label: {\n      type: 'i18n',\n      zh_CN: '表单标识',\n      en_US: 'Name',\n    },\n    tip: {\n      type: 'i18n',\n      zh_CN: '属性: name | 说明: 表单标识，用于表单校验',\n      en_US: 'prop: name | description: form item name',\n    },\n  },\n  setter: 'StringSetter',\n};\n\nconst helpConfig = {\n  name: 'help',\n  title: {\n    label: {\n      type: 'i18n',\n      zh_CN: '错误提示',\n      en_US: 'Help Info',\n    },\n    tip: {\n      type: 'i18n',\n      zh_CN: '属性: help | 说明: 自定义提示信息, 如不设置，则会根据校验规则自动生成.',\n      en_US: 'prop: help | description: help infomation',\n    },\n  },\n  setter: 'StringSetter',\n};\n\nconst extraConfig = {\n  name: 'extra',\n  title: {\n    label: {\n      type: 'i18n',\n      zh_CN: '帮助提示',\n      en_US: 'Extra Info',\n    },\n    tip: {\n      type: 'i18n',\n      zh_CN:\n        '属性: extra | 说明: 额外的提示信息, 和 help 类似，当需要错误信息和提示文案同时出现时，可以使用这个。 位于错误信息后面',\n      en_US: 'prop: extra | description: extra infomation',\n    },\n  },\n  setter: 'StringSetter',\n};\n\nconst validateStateConfig = {\n  name: 'validateState',\n  title: {\n    label: '校验状态',\n    tip: '如不设置，则会根据校验规则自动生成\\n@enumdesc 失败, 成功, 校验中, 警告',\n  },\n  setter: {\n    componentName: 'RadioGroupSetter',\n    props: {\n      options: ['error', 'success', 'loading', 'warning'],\n    },\n  },\n};\n\nconst sizeConfig = {\n  name: 'size',\n  title: {\n    label: '尺寸',\n    tip: '单个 Item 的 size 自定义，优先级高于 Form 的 size, 并且当组件与 Item 一起使用时，组件自身设置 size 属性无效。',\n  },\n  setter: {\n    componentName: 'RadioGroupSetter',\n    props: {\n      options: ['small', 'medium', 'large'],\n    },\n  },\n  defaultValue: 'medium',\n};\n\nconst labelAlignConfig = {\n  name: 'labelAlign',\n  title: {\n    label: '标签位置',\n    tip: '上, 左, 内',\n  },\n  condition: hideProp,\n  getValue: getParentValue,\n  setter: {\n    componentName: 'RadioGroupSetter',\n    props: {\n      options: [\n        {\n          title: '上',\n          value: 'top',\n        },\n        {\n          title: '左',\n          value: 'left',\n        },\n        {\n          title: '内',\n          value: 'inset',\n        },\n        {\n          title: '默认',\n          value: '',\n        },\n      ],\n    },\n  },\n};\n\nconst labelColFixedSpanConfig = {\n  name: 'labelCol.fixedSpan',\n  title: '标题宽度',\n  condition: showWithLabelAlign,\n  getValue: getParentValue,\n  setter: {\n    componentName: 'NumberSetter',\n    props: {\n      min: 0,\n      max: 24,\n    },\n  },\n};\n\nconst labelColOffsetConfig = {\n  name: 'labelCol.offset',\n  title: '标题偏移',\n  condition: showWithLabelAlign,\n  getValue: getParentValue,\n  setter: {\n    componentName: 'NumberSetter',\n    props: {\n      min: 0,\n      max: 24,\n    },\n  },\n};\n\nconst wrapperColSpanConfig = {\n  name: 'wrapperCol.span',\n  title: '内容宽度',\n  condition: showWithLabelAlign,\n  getValue: getParentValue,\n  setter: {\n    componentName: 'NumberSetter',\n    props: {\n      min: 0,\n      max: 24,\n    },\n  },\n};\n\nconst wrapperColOffsetConfig = {\n  name: 'wrapperCol.offset',\n  title: '内容偏移',\n  condition: showWithLabelAlign,\n  getValue: getParentValue,\n  setter: {\n    componentName: 'NumberSetter',\n    props: {\n      min: 0,\n      max: 24,\n    },\n  },\n};\n\nconst labelTipEnableConfig = {\n  name: 'labelTip.enable',\n  title: '标题提示',\n  condition: showWithLabelAlign,\n  setter: {\n    componentName: 'BoolSetter',\n  },\n};\n\nconst labelTipContentConfig = {\n  name: 'labelTip.content',\n  title: '提示内容',\n  condition: showWithLabelAlign,\n  setter: {\n    componentName: 'StringSetter',\n  },\n};\n\nconst labelTipIconConfig = {\n  name: 'labelTip.icon',\n  title: '提示图标',\n  condition: showWithLabelAlign,\n  setter: {\n    componentName: 'IconSetter',\n  },\n};\n\nconst labelTextAlignConfig = {\n  name: 'labelTextAlign',\n  condition: showWithLabelAlign,\n  title: {\n    label: '标签对齐',\n    tip: '左, 右',\n  },\n  setter: {\n    componentName: 'RadioGroupSetter',\n    props: {\n      options: [\n        {\n          title: '左',\n          value: 'left',\n        },\n        {\n          title: '右',\n          value: 'right',\n        },\n        {\n          title: '默认',\n          value: '',\n        },\n      ],\n    },\n  },\n  defaultValue: 'right',\n};\n\nconst deviceConfig = {\n  name: 'device',\n  title: {\n    label: '设备',\n  },\n  setter: {\n    componentName: 'RadioGroupSetter',\n    props: {\n      options: ['phone', 'tablet', 'desktop'],\n    },\n  },\n  defaultValue: 'desktop',\n};\n\nconst requiredConfig = {\n  name: 'required',\n  defaultValue: false,\n  title: {\n    label: '是否必填',\n    tip: 'required | 是否必填',\n  },\n  setter: {\n    componentName: 'BoolSetter',\n  },\n  extraProps: {\n    setValue: (target, value) => {\n      if (value === true) {\n        const name = target.parent.getPropValue('name');\n        if (!name) {\n          target.parent.setPropValue('name', mockId());\n        }\n      }\n      target.parent.setValue(target.parent.getValue());\n    },\n  },\n};\n\nconst fullWidthConfig = {\n  name: 'fullWidth',\n  defaultValue: true,\n  title: {\n    label: '宽度占满',\n    tip: '单个 Item 中表单类组件宽度是否是100%',\n  },\n  setter: {\n    componentName: 'BoolSetter',\n  },\n};\n\nconst isPreviewConfig = {\n  name: 'isPreview',\n  title: {\n    label: '预览态',\n    tip: '是否开启预览态',\n  },\n  setter: 'BoolSetter',\n};\n\nconst autoValidateConfig = {\n  name: 'autoValidate',\n  title: {\n    label: '自动校验',\n    tip: '是否修改数据时自动触发校验',\n  },\n  setter: 'BoolSetter',\n};\n\nconst validationConfig = {\n  type: 'group',\n  name: 'validation',\n  display: 'accordion',\n  defaultCollapsed: true,\n  title: '校验',\n  items: [\n    {\n      type: 'group',\n      name: 'notNullValidation',\n      display: 'popup',\n      title: '非空校验',\n      items: [\n        {\n          name: 'required',\n          title: {\n            label: '不能为空',\n            tip: '[表单校验] 不能为空',\n          },\n          setter: 'BoolSetter',\n        },\n        {\n          name: 'requiredMessage',\n          title: {\n            label: '错误信息',\n            tip: '[表单校验]为空时自定义错误信息',\n          },\n          setter: 'StringSetter',\n        },\n      ],\n    },\n    {\n      type: 'group',\n      name: 'maxValidation',\n      display: 'popup',\n      title: '最大/最小值校验',\n      items: [\n        {\n          name: 'min',\n          title: {\n            label: '最小值',\n            tip: '[表单校验] 最小值',\n          },\n          setter: 'NumberSetter',\n        },\n        {\n          name: 'max',\n          title: {\n            label: '最大值',\n            tip: '[表单校验] 最大值',\n          },\n          setter: 'NumberSetter',\n        },\n        {\n          name: 'minmaxMessage',\n          title: {\n            label: '错误信息',\n            tip: '[表单校验] min/max 自定义错误信息',\n          },\n          setter: 'StringSetter',\n        },\n      ],\n    },\n    {\n      type: 'group',\n      name: 'maxLenValidation',\n      display: 'popup',\n      title: '最大/最小长度校验',\n      items: [\n        {\n          name: 'minLength',\n          title: {\n            label: '最小长度',\n            tip: '[表单校验] 字符串最小长度 / 数组最小个数',\n          },\n          setter: 'NumberSetter',\n        },\n        {\n          name: 'maxLength',\n          title: {\n            label: '最大长度',\n            tip: '[表单校验] 字符串最大长度 / 数组最大个数',\n          },\n          setter: 'NumberSetter',\n        },\n        {\n          name: 'minmaxLengthMessage',\n          title: {\n            label: '错误信息',\n            tip: '[表单校验] minLength/maxLength 自定义错误信息',\n          },\n          setter: 'StringSetter',\n        },\n      ],\n    },\n    {\n      type: 'group',\n      name: 'lengthValidation',\n      display: 'popup',\n      title: '长度校验',\n      items: [\n        {\n          name: 'length',\n          title: {\n            label: '长度',\n            tip: '[表单校验] 字符串精确长度 / 数组精确个数',\n          },\n          setter: 'NumberSetter',\n        },\n        {\n          name: 'lengthMessage',\n          title: {\n            label: '错误信息',\n            tip: '[表单校验] minLength/maxLength 自定义错误信息',\n          },\n          setter: 'StringSetter',\n        },\n      ],\n    },\n    {\n      type: 'group',\n      name: 'regValidation',\n      display: 'popup',\n      title: '正则校验',\n      items: [\n        {\n          name: 'pattern',\n          title: {\n            label: '正则',\n            tip: '[表单校验] 正则校验',\n          },\n          setter: 'StringSetter',\n        },\n        {\n          name: 'patternMessage',\n          title: {\n            label: '错误信息',\n            tip: '[表单校验] pattern 自定义错误信息',\n          },\n          setter: 'StringSetter',\n        },\n      ],\n    },\n    {\n      type: 'group',\n      name: 'formatValidation',\n      display: 'popup',\n      title: '格式化校验',\n      items: [\n        {\n          name: 'format',\n          title: {\n            label: 'format',\n            tip: '[表单校验] 四种常用的 pattern',\n          },\n          setter: {\n            componentName: 'RadioGroupSetter',\n            props: {\n              options: ['number', 'email', 'url', 'tel'],\n            },\n          },\n        },\n        {\n          name: 'formatMessage',\n          title: {\n            label: '错误信息',\n            tip: '[表单校验] format 自定义错误信息',\n          },\n          setter: 'StringSetter',\n        },\n      ],\n    },\n    {\n      name: 'validator',\n      display: 'popup',\n      title: {\n        label: '自定义校验函数',\n      },\n      setter: 'FunctionSetter',\n    },\n  ],\n};\n\nconst childFormConfig = {\n  name: 'childForm',\n  title: '开启子表单',\n  setter: {\n    componentName: 'SlotSetter',\n    initialValue: {\n      type: 'JSSlot',\n      visible: false,\n      value: [\n        {\n          componentName: 'ChildForm',\n          props: {\n            primaryKey: String(Math.floor(Math.random() * 10000)),\n            placeholder: '请在右侧面板添加表单项+',\n            placeholderStyle: {\n              height: '38px',\n              color: '#0088FF',\n              background: '#d8d8d836',\n              border: 0,\n              gridArea: 'span 4 / span 4',\n            },\n            columns: 3,\n            labelCol: {\n              fixedSpan: 4,\n            },\n            labelAlign: 'top',\n            emptyContent: '添加表单项',\n          },\n          children: [...new Array(3).keys()].map((item) => ({\n            componentName: 'FormInput',\n            props: {\n              formItemProps: {\n                primaryKey: String(Math.floor(Math.random() * 10000) + item),\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n                fullWidth: true,\n              },\n              placeholder: '请输入',\n            },\n          })),\n        },\n      ],\n    },\n  },\n};\n\nexport const formItemProps = [\n  primaryKeyConfig,\n  idConfig,\n  nameConfig,\n  columnSpanConfig,\n  labelConfig,\n  childFormConfig,\n  helpConfig,\n  extraConfig,\n  validateStateConfig,\n  sizeConfig,\n  labelAlignConfig,\n  labelColFixedSpanConfig,\n  labelColOffsetConfig,\n  wrapperColSpanConfig,\n  wrapperColOffsetConfig,\n  labelTipEnableConfig,\n  labelTipIconConfig,\n  labelTipContentConfig,\n  labelTextAlignConfig,\n  deviceConfig,\n  requiredConfig,\n  fullWidthConfig,\n  isPreviewConfig,\n  autoValidateConfig,\n  validationConfig,\n];\n\nexport const formItemShortcutProps = [\n  primaryKeyConfig,\n  nameConfig,\n  labelConfig,\n  sizeConfig,\n  columnSpanConfig,\n  childFormConfig,\n  {\n    name: 'labelTip.enable',\n    title: '标题提示',\n    condition: showWithLabelAlignShortcut,\n    setter: {\n      componentName: 'BoolSetter',\n    },\n  },\n  {\n    name: 'labelTip.icon',\n    title: '提示图标',\n    condition: showWithLabelAlignShortcut,\n    setter: {\n      componentName: 'IconSetter',\n    },\n  },\n  {\n    name: 'labelTip.content',\n    title: '提示内容',\n    condition: showWithLabelAlignShortcut,\n    setter: {\n      componentName: 'StringSetter',\n    },\n  },\n  requiredConfig,\n  fullWidthConfig,\n  isPreviewConfig,\n  autoValidateConfig,\n  {\n    name: '!entry',\n    title: '组件详细配置',\n    display: 'block',\n    setter: (target) => {\n      return React.createElement(\n        Next.Button,\n        {\n          onClick: () => {\n            const { node } = target;\n            node.children.get(target.parent.key).select();\n          },\n        },\n        '点击配置',\n      );\n    },\n  },\n];\n\nconst props: IProps[] = [\n  {\n    name: 'formItemProps',\n    title: '表单项配置',\n    extraProps: {\n      display: 'accordion',\n      defaultCollapsed: true,\n    },\n    setter: {\n      componentName: 'ObjectSetter',\n      props: {\n        config: {\n          items: formItemProps,\n        },\n      },\n    },\n  },\n];\n\nexport default props;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-form/common/props.ts",
    "content": "import { IProps } from '../../types';\n\nimport { operationProps } from '../../common';\nimport FormItemProps from './form-item-props';\nimport FormBaseProps from './form-base-props';\n\nexport { FormItemProps, FormBaseProps };\n\nconst props: IProps[] = [...FormBaseProps, ...operationProps];\n\nexport default props;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-form/components/index.ts",
    "content": "import { default as PasswordMeta } from './password';\nimport { default as TextAreaMeta } from './text-area';\n\nexport default [PasswordMeta, TextAreaMeta];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-form/components/password.ts",
    "content": "import { IProps } from '../../types';\nimport { wrapFormItemProps } from '../../utils/form-utils';\n\nconst props: IProps[] = wrapFormItemProps([\n  {\n    name: 'rows',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '行数',\n        en_US: 'Rows',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN:\n          '属性: rows | 说明: 多行文本框高度 <br />(不要直接用height设置多行文本框的高度, ie9 10会有兼容性问题)',\n        en_US: 'prop: rows | description: row numbers',\n      },\n    },\n    setter: 'NumberSetter',\n    supportVariable: true,\n    defaultValue: 4,\n  },\n  {\n    name: 'maxLength',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '最大长度',\n        en_US: 'MaxLength',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: maxLength | 说明: 最大长度',\n        en_US: 'prop: maxLength | description: max length',\n      },\n    },\n    setter: 'NumberSetter',\n    supportVariable: true,\n    description: '最大长度',\n  },\n  {\n    name: 'placeholder',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '输入提示',\n        en_US: 'Placeholder',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: placeholder | 说明: 输入提示',\n        en_US: 'prop: placeholder | description: placeholder',\n      },\n    },\n    setter: 'StringSetter',\n    supportVariable: true,\n  },\n  {\n    name: 'state',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '状态',\n        en_US: 'State',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: state | 说明: 状态\\n@enumdesc 错误',\n        en_US: 'prop: state | description: input state',\n      },\n    },\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: ['error', 'warning'],\n      },\n    },\n  },\n  {\n    name: 'autoHeight',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '自动高度',\n        en_US: 'Auto Height',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: autoHeight | 说明: 自动高度 true / {minRows: 2, maxRows: 4}',\n        en_US: 'prop: autoHeight | description: auto height',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    defaultValue: false,\n  },\n  {\n    name: 'isPreview',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '预览态',\n        en_US: 'Preview',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: isPreview | 说明: 是否为预览态',\n        en_US: 'prop: isPreview | description: preview',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    defaultValue: false,\n  },\n  {\n    name: 'disabled',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否禁用',\n        en_US: 'Disabled',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: disabled | 说明: 是否被禁用',\n        en_US: 'prop: disabled | description: disabled',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否禁用',\n  },\n  {\n    name: 'hasLimitHint',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '展示限制',\n        en_US: 'ShowLimit',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: hasLimitHint | 说明: 是否展现最大长度样式',\n        en_US: 'prop: hasLimitHint | description: hasLimitHint',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否展现最大长度样式',\n  },\n  {\n    name: 'cutString',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否截断',\n        en_US: 'Cut Off',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: cutString | 说明: 是否截断超出字符串',\n        en_US: 'prop: cutString | description: whether cut off string',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否截断超出字符串',\n  },\n  {\n    name: 'readOnly',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否只读',\n        en_US: 'ReadOnly',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: readOnly | 说明: 是否只读',\n        en_US: 'prop: readOnly | description: ReadOnly',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否只读',\n  },\n  {\n    name: 'trim',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否 Trim',\n        en_US: 'Trim',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: trim | 说明: onChange返回会自动去除头尾空字符',\n        en_US: 'prop: trim | description: whether trim when onChange called',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n  },\n  {\n    name: 'hasBorder',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '显示边框',\n        en_US: 'ShowBorder',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: hasBorder | 说明: 是否有边框',\n        en_US: 'prop: hasBorder | description: HasBorder',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n  },\n  {\n    name: 'autoFocus',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '自动聚焦',\n        en_US: 'Auto Focus',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: autoFocus | 说明: 自动聚焦',\n        en_US: 'prop: autoFocus | description: autoFocus',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '自动聚焦',\n  },\n  {\n    type: 'group',\n    title: '高级',\n    display: 'block',\n    items: [\n      {\n        name: 'id',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '唯一标识',\n            en_US: 'ID',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: id | 说明: 唯一标识',\n            en_US: 'prop: id | description: switch id',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'name',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '表单标识',\n            en_US: 'Name',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: name | 说明: 表单标识',\n            en_US: 'prop: name | description: switch name',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n    ],\n  },\n]);\n\nconst meta = {\n  componentName: 'FormPassword',\n  isFormItemComponent: true,\n  title: '密码框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormPassword',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props,\n    supports: {\n      style: true,\n      events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n\nexport default meta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-form/components/text-area.ts",
    "content": "import { IProps } from '../../types';\nimport { wrapFormItemProps } from '../../utils/form-utils';\n\nconst props: IProps[] = wrapFormItemProps([\n  {\n    name: 'rows',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '行数',\n        en_US: 'Rows',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN:\n          '属性: rows | 说明: 多行文本框高度 <br />(不要直接用height设置多行文本框的高度, ie9 10会有兼容性问题)',\n        en_US: 'prop: rows | description: row numbers',\n      },\n    },\n    setter: 'NumberSetter',\n    supportVariable: true,\n    defaultValue: 4,\n  },\n  {\n    name: 'maxLength',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '最大长度',\n        en_US: 'MaxLength',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: maxLength | 说明: 最大长度',\n        en_US: 'prop: maxLength | description: max length',\n      },\n    },\n    setter: 'NumberSetter',\n    supportVariable: true,\n    description: '最大长度',\n  },\n  {\n    name: 'placeholder',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '输入提示',\n        en_US: 'Placeholder',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: placeholder | 说明: 输入提示',\n        en_US: 'prop: placeholder | description: placeholder',\n      },\n    },\n    setter: 'StringSetter',\n    supportVariable: true,\n  },\n  {\n    name: 'state',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '状态',\n        en_US: 'State',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: state | 说明: 状态\\n@enumdesc 错误',\n        en_US: 'prop: state | description: input state',\n      },\n    },\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: ['error', 'warning'],\n      },\n    },\n  },\n  {\n    name: 'autoHeight',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '自动高度',\n        en_US: 'Auto Height',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: autoHeight | 说明: 自动高度 true / {minRows: 2, maxRows: 4}',\n        en_US: 'prop: autoHeight | description: auto height',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    defaultValue: false,\n  },\n  {\n    name: 'isPreview',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '预览态',\n        en_US: 'Preview',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: isPreview | 说明: 是否为预览态',\n        en_US: 'prop: isPreview | description: preview',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    defaultValue: false,\n  },\n  {\n    name: 'disabled',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否禁用',\n        en_US: 'Disabled',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: disabled | 说明: 是否被禁用',\n        en_US: 'prop: disabled | description: disabled',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否禁用',\n  },\n  {\n    name: 'hasLimitHint',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '展示限制',\n        en_US: 'ShowLimit',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: hasLimitHint | 说明: 是否展现最大长度样式',\n        en_US: 'prop: hasLimitHint | description: hasLimitHint',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否展现最大长度样式',\n  },\n  {\n    name: 'cutString',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否截断',\n        en_US: 'Cut Off',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: cutString | 说明: 是否截断超出字符串',\n        en_US: 'prop: cutString | description: whether cut off string',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否截断超出字符串',\n  },\n  {\n    name: 'readOnly',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否只读',\n        en_US: 'ReadOnly',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: readOnly | 说明: 是否只读',\n        en_US: 'prop: readOnly | description: ReadOnly',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '是否只读',\n  },\n  {\n    name: 'trim',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '是否 Trim',\n        en_US: 'Trim',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: trim | 说明: onChange返回会自动去除头尾空字符',\n        en_US: 'prop: trim | description: whether trim when onChange called',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n  },\n  {\n    name: 'hasBorder',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '显示边框',\n        en_US: 'ShowBorder',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: hasBorder | 说明: 是否有边框',\n        en_US: 'prop: hasBorder | description: HasBorder',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n  },\n  {\n    name: 'autoFocus',\n    title: {\n      label: {\n        type: 'i18n',\n        zh_CN: '自动聚焦',\n        en_US: 'Auto Focus',\n      },\n      tip: {\n        type: 'i18n',\n        zh_CN: '属性: autoFocus | 说明: 自动聚焦',\n        en_US: 'prop: autoFocus | description: autoFocus',\n      },\n    },\n    setter: 'BoolSetter',\n    supportVariable: true,\n    description: '自动聚焦',\n  },\n  {\n    type: 'group',\n    title: '高级',\n    display: 'block',\n    items: [\n      {\n        name: 'id',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '唯一标识',\n            en_US: 'ID',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: id | 说明: 唯一标识',\n            en_US: 'prop: id | description: switch id',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n      {\n        name: 'name',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '表单标识',\n            en_US: 'Name',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: name | 说明: 表单标识',\n            en_US: 'prop: name | description: switch name',\n          },\n        },\n        setter: 'StringSetter',\n        supportVariable: true,\n      },\n    ],\n  },\n]);\n\nconst meta = {\n  componentName: 'FormTextArea',\n  isFormItemComponent: true,\n  title: '多行文本框',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormTextArea',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props,\n    supports: {\n      style: true,\n      events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n\nexport default meta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-form/meta.ts",
    "content": "import { IComponentDescription, ISnippet } from '../types';\nimport { default as props, FormItemProps } from './common/props';\n\nimport { default as ComponentsMeta } from './components';\n\nconst snippets: ISnippet[] = [\n  {\n    title: '高级表单',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i2/O1CN016gn5DQ1FeXUNKdK22_!!6000000000512-55-tps-50-36.svg',\n    schema: {\n      componentName: 'ProForm',\n      title: '高级表单',\n      props: {\n        placeholder: '请在右侧面板添加表单项+',\n        placeholderStyle: {\n          height: '38px',\n          color: '#0088FF',\n          background: '#d8d8d836',\n          border: 0,\n          gridArea: 'span 4 / span 4',\n        },\n        columns: 4,\n        labelCol: {\n          fixedSpan: 4,\n        },\n        labelAlign: 'top',\n        emptyContent: '添加表单项',\n      },\n      children: [...new Array(8).keys()].map((item) => ({\n        componentName: 'FormInput',\n        props: {\n          formItemProps: {\n            primaryKey: String(Math.floor(Math.random() * 10000) + item),\n            label: '表单项',\n            size: 'medium',\n            device: 'desktop',\n            fullWidth: true,\n          },\n          placeholder: '请输入',\n        },\n      })),\n    },\n  },\n];\n\nconst ProFormMeta: IComponentDescription[] = [\n  {\n    componentName: 'ProForm',\n    category: '表单类',\n    title: '高级表单',\n    group: '精选组件',\n    docUrl: '',\n    screenshot: '',\n    devMode: 'proCode',\n    npm: {\n      package: '@alifd/fusion-ui',\n      version: '0.1.4',\n      exportName: 'ProForm',\n      main: 'lib/index.js',\n      destructuring: true,\n      subName: '',\n    },\n    configure: {\n      component: {\n        isContainer: true,\n        isMinimalRenderUnit: true,\n        nestingRule: {\n          childWhitelist: new RegExp('form.*', 'i'),\n        },\n      },\n      supports: {\n        style: true,\n        events: ['saveField', 'onSubmit', 'onChange'],\n      },\n      props,\n    },\n    snippets,\n  },\n  {\n    componentName: 'ProFormItem',\n    title: '表单项',\n    docUrl: '',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i2/O1CN016gn5DQ1FeXUNKdK22_!!6000000000512-55-tps-50-36.svg',\n    icon: 'https://img.alicdn.com/imgextra/i2/O1CN016gn5DQ1FeXUNKdK22_!!6000000000512-55-tps-50-36.svg',\n    devMode: 'proCode',\n    npm: {\n      package: '@alifd/fusion-ui',\n      version: '0.1.4',\n      exportName: 'ProForm',\n      main: 'lib/index.js',\n      destructuring: true,\n      subName: 'Item',\n    },\n    configure: {\n      component: {\n        disableBehaviors: ['copy'],\n        nestingRule: {\n          parentWhitelist: ['ProForm'],\n        },\n      },\n      props: FormItemProps,\n      supports: {\n        style: true,\n        events: ['onPressEnter', 'onClear', 'onChange', 'onKeyDown', 'onFocus', 'onBlur'],\n      },\n      advanced: {\n        initialChildren: [\n          {\n            componentName: 'FormInput',\n            props: {\n              hasBorder: true,\n              size: 'medium',\n              autoComplete: 'off',\n            },\n          },\n        ],\n        callbacks: {\n          onNodeRemove: (removedNode, currentNode) => {\n            if (!removedNode || !currentNode) {\n              return;\n            }\n            const { children } = currentNode;\n            // 若无 children，则说明当前 P 组件内已为空，需要删除 FormItem 组件本身\n            if (children && children.isEmptyNode) {\n              currentNode.remove();\n            }\n          },\n        },\n      },\n    },\n  },\n];\n\nexport default [...ProFormMeta, ...ComponentsMeta];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-table/actionColumnFields.ts",
    "content": "import { IProps } from '../types/index';\nimport { buttonGroupConfigureProp } from '../common/button-groups';\n\nexport const actionColumnField: IProps = {\n  name: 'actionColumnProps',\n  title: '操作列',\n  extraProps: {\n    display: 'accordion',\n    defaultCollapsed: true,\n  },\n  setter: {\n    componentName: 'ObjectSetter',\n    props: {\n      display: 'drawer',\n      config: {\n        items: [\n          {\n            name: 'title',\n            title: '标题',\n            extraProps: {\n              display: 'inline',\n              defaultValue: '操作',\n            },\n            setter: {\n              componentName: 'StringSetter',\n            },\n          },\n          {\n            type: 'field',\n            name: 'width',\n            title: '宽度',\n            extraProps: {\n              display: 'inline',\n              defaultValue: 120,\n            },\n            setter: {\n              componentName: 'NumberSetter',\n              props: {\n                units: 'px',\n              },\n            },\n          },\n          {\n            name: 'lock',\n            title: '锁列',\n            display: 'inline',\n            initialValue: 'none',\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '左侧',\n                    value: 'left',\n                    tip: 'left',\n                  },\n                  {\n                    title: '不锁',\n                    value: 'none',\n                    tip: 'none',\n                  },\n                  {\n                    title: '右侧',\n                    value: 'right',\n                    tip: 'right',\n                  },\n                ],\n                compact: false,\n              },\n            },\n          },\n        ],\n      },\n    },\n  },\n};\nexport const actionColumnButtonField: IProps = {\n  ...buttonGroupConfigureProp,\n  name: 'actionColumnButtons',\n  title: '操作列按钮',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-table/columns-field.ts",
    "content": "import { uuid, mockProTableRow, mockId } from './utils';\nimport { IProps } from '../types/index';\nimport { hideProp, deepEqual, isJSExpression } from '../utils';\nimport debounce from 'lodash/debounce';\n\nexport const columnsField: IProps = {\n  type: 'field',\n  name: 'columns',\n  title: '数据列',\n  extraProps: {\n    display: 'accordion',\n  },\n  setValue: debounce((field, columns) => {\n    const _columns = isJSExpression(columns) ? columns.mock : columns;\n    if (!_columns || !Array.isArray(_columns) || !_columns.length) {\n      return;\n    }\n    const { node } = field;\n    const dataSource = node.getPropValue('dataSource') || [];\n    const _dataSource = isJSExpression(dataSource) ? dataSource.mock : dataSource;\n    if (!_dataSource || !Array.isArray(_dataSource) || !_dataSource.length) {\n      return;\n    }\n    const primaryKey = node.getPropValue('primaryKey') || 'id';\n    const mockRow = mockProTableRow(columns);\n    const newData = dataSource.map((item) => ({\n      [primaryKey]: mockId(),\n      ...mockRow,\n      ...item,\n    }));\n    if (!deepEqual(newData, dataSource)) {\n      node.setPropValue('dataSource', newData);\n    }\n  }),\n  setter: {\n    componentName: 'ArraySetter',\n    props: {\n      itemSetter: {\n        componentName: 'ObjectSetter',\n        props: {\n          config: {\n            items: [\n              {\n                name: 'title',\n                title: '标题',\n                display: 'inline',\n                initialValue: '姓名',\n                isRequired: true,\n                setter: 'StringSetter',\n              },\n              {\n                name: 'formatType',\n                title: '数据类型',\n                display: 'inline',\n                initialValue: 'text',\n                isRequired: true,\n                setter: {\n                  componentName: 'SelectSetter',\n                  props: {\n                    options: [\n                      { value: 'text', title: '文本' },\n                      { value: 'number', title: '数字' },\n                      { value: 'money', title: '金额' },\n                      { value: 'date', title: '日期' },\n                      { value: 'phone', title: '手机号' },\n                      // { value: 'currency', title: '币种' },\n                      // { value: 'ou', title: 'OU编码' },\n                      { value: 'percent', title: '百分比' },\n                      { value: 'progress', title: '进度条' },\n                      { value: 'link', title: '链接' },\n                      { value: 'dialog', title: '弹窗' },\n                      { value: 'tag', title: '标签' },\n                      // { value: 'textTag', title: '文字标签' },\n                      // { value: 'files', title: '附件' },\n                      // { value: 'bankCard', title: '银行卡号' },\n                      // { value: 'employee', title: '员工' },\n                    ],\n                  },\n                },\n              },\n              {\n                name: 'dataIndex',\n                title: '数据字段',\n                display: 'inline',\n                initialValue: (currentValue, defaultValue) =>\n                  currentValue || defaultValue || `data-${uuid()}`,\n                setter: 'StringSetter',\n              },\n              {\n                name: 'align',\n                title: '对齐方式',\n                display: 'inline',\n                initialValue: 'left',\n                setter: {\n                  componentName: 'RadioGroupSetter',\n                  props: {\n                    options: [\n                      {\n                        value: 'left',\n                        title: '居左',\n                      },\n                      {\n                        value: 'center',\n                        title: '居中',\n                      },\n                      {\n                        value: 'right',\n                        title: '居右',\n                      },\n                    ],\n                  },\n                },\n              },\n\n              {\n                name: 'lock',\n                title: '锁列',\n                display: 'inline',\n                initialValue: 'none',\n                setter: {\n                  componentName: 'RadioGroupSetter',\n                  props: {\n                    options: [\n                      {\n                        title: '左侧',\n                        value: 'left',\n                        tip: 'left',\n                      },\n                      {\n                        title: '不锁',\n                        value: 'none',\n                        tip: 'none',\n                      },\n                      {\n                        title: '右侧',\n                        value: 'right',\n                        tip: 'right',\n                      },\n                    ],\n                    compact: false,\n                  },\n                },\n              },\n\n              // 格式化参数\n              {\n                name: 'formatOptions',\n                title: '格式化参数',\n                setter: 'ArraySetter',\n                condition: hideProp,\n              },\n              {\n                name: '_format_options_date',\n                title: '时间格式',\n                display: 'inline',\n                defaultValue: 'YYYY-MM-DD HH:mm:ss',\n                condition: (target) => {\n                  return target.parent.getPropValue('formatType') === 'date';\n                },\n                getValue: (target) => {\n                  const formatOptions = target.getProps().getPropValue('formatOptions') || [];\n                  return formatOptions[0];\n                },\n                setValue: (target, value) => {\n                  target.parent.setPropValue('formatOptions', [value]);\n                },\n                setter: {\n                  componentName: 'SelectSetter',\n                  props: {\n                    options: [\n                      { value: 'YYYY-MM-DD HH:mm:ss', title: '年-月-日 时:分:秒' },\n                      { value: 'YYYY-MM-DD HH:mm', title: '年-月-日 时:分' },\n                      { value: 'YYYY-MM-DD', title: '年-月-日' },\n                      { value: 'YYYY-MM', title: '年-月' },\n                      { value: 'YYYY', title: '年' },\n                    ],\n                  },\n                },\n              },\n\n              // 高级设置\n              {\n                name: 'explanation',\n                title: '表头说明',\n                display: 'inline',\n                initialValue: '',\n                setter: 'StringSetter',\n              },\n\n              {\n                name: 'width',\n                title: '宽度',\n                display: 'inline',\n                setter: {\n                  componentName: 'NumberSetter',\n                  props: {\n                    units: [\n                      {\n                        type: 'px',\n                        list: true,\n                      },\n                      {\n                        type: '%',\n                        list: true,\n                      },\n                    ],\n                  },\n                },\n              },\n              // {\n              //   name: 'hidden',\n              //   title: '是否隐藏',\n              //   display: 'inline',\n              //   initialValue: false,\n              //   setter: 'BoolSetter',\n              // },\n              // {\n              //   name: 'maxChars',\n              //   title: '字数限定',\n              //   display: 'inline',\n              //   setter: 'NumberSetter',\n              //   hidden() {\n              //     return this.parent.getParam('formatType').toData() !== 'text';\n              //   },\n              // },\n\n              {\n                name: 'sortable',\n                title: '列排序',\n                display: 'inline',\n                initialValue: false,\n                setter: 'BoolSetter',\n              },\n              {\n                name: 'searchable',\n                title: '列搜索',\n                display: 'inline',\n                initialValue: false,\n                setter: 'BoolSetter',\n              },\n              {\n                name: 'onCellClick',\n                condition: hideProp,\n              },\n              {\n                name: 'behavior',\n                title: '交互设置',\n                display: 'block',\n                condition: (target) => {\n                  const formatType = target.parent.getPropValue('formatType');\n                  return formatType && ['dialog', 'link'].includes(formatType);\n                },\n                setter: {\n                  componentName: 'BehaviorSetter',\n                  props: (target) => {\n                    return {\n                      actions: ['onCellClick'],\n                      type: target.parent.getPropValue('formatType'),\n                    };\n                  },\n                },\n              },\n            ],\n          },\n        },\n        initialValue: () => {\n          return {\n            title: '列标题',\n            formatType: 'text',\n            dataIndex: 'dataIndex',\n          };\n        },\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-table/global-style.ts",
    "content": "export const globalStyleField = {\n  type: 'group',\n  title: '全局样式',\n  name: 'globalStyle',\n  extraProps: {\n    display: 'accordion',\n    defaultCollapsed: true,\n  },\n  items: [\n    {\n      name: 'hasBorder',\n      title: '列分隔线',\n      display: 'inline',\n      defaultValue: false,\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'isZebra',\n      title: '斑马线',\n      display: 'inline',\n      defaultValue: false,\n      setter: 'BoolSetter',\n    },\n    {\n      name: 'fixedHeader',\n      title: '固定表头',\n      display: 'inline',\n      defaultValue: false,\n      setter: 'BoolSetter',\n    },\n\n    {\n      name: 'size',\n      title: '密度',\n      display: 'inline',\n      defaultValue: 'medium',\n      setter: {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options: [\n            {\n              title: '紧凑',\n              value: 'small',\n              tip: 'small',\n            },\n            {\n              title: '正常',\n              value: 'medium',\n              tip: 'medium',\n            },\n          ],\n        },\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-table/meta.ts",
    "content": "import { IAssets } from '../types/index';\nimport { proTableMeta } from './pro-table-meta';\n\nconst meta: IAssets = {\n  components: [\n    proTableMeta,\n    {\n      componentName: 'ProTableSlot',\n      title: '表格槽位',\n      docUrl: '',\n      screenshot: '',\n      devMode: 'proCode',\n      npm: {\n        package: '@alifd/fusion-ui',\n        version: '1.0.24-21',\n        exportName: 'ProTableSlot',\n        main: 'lib/index.js',\n        destructuring: true,\n        subName: '',\n      },\n      props: [\n        {\n          name: 'position',\n          propType: {\n            type: 'oneOf',\n            isRequired: true,\n            value: [\n              'actionBarLeft',\n              'actionBarRight',\n              'actionBarBefore',\n              'actionBarAfter',\n              'table',\n            ],\n          },\n          description: '位置',\n        },\n      ],\n    },\n  ],\n};\n\nexport default meta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-table/pro-table-meta.ts",
    "content": "import { mockProTableRow, mockId, getDataSourceItemSetter } from './utils';\nimport { IComponentDescription } from '../types/index';\nimport { actionColumnButtonField, actionColumnField } from './actionColumnFields';\nimport { isJSExpression } from '../utils';\nimport { columnsField } from './columns-field';\nimport { buttonGroupConfigureProp } from '../common/button-groups';\nimport { globalStyleField } from './global-style';\n\nconst positiveIntegerSetter = {\n  componentName: 'NumberSetter',\n  props: {\n    max: 200,\n    min: 1,\n  },\n};\n\nexport const ProTableProps = [\n  columnsField,\n  {\n    type: 'field',\n    name: 'id',\n    title: '节点 ID',\n    condition: () => false,\n    extraProps: {},\n    setter: 'NodeSetter',\n  },\n  actionColumnField,\n  actionColumnButtonField,\n  {\n    ...buttonGroupConfigureProp,\n    name: 'actionBarButtons',\n    title: '操作栏按钮',\n  },\n  {\n    type: 'field',\n    name: 'dataSource',\n    title: '表格数据源',\n    display: 'accordion',\n    setter: (target) => {\n      const columns = target.getProps().getPropValue('columns');\n      if (!columns || isJSExpression(columns)) {\n        return {\n          componentName: 'ExpressionSetter',\n        };\n      }\n      const mockRow = mockProTableRow(columns);\n      const primaryKey = target.getProps().getPropValue('primaryKey') || 'id';\n\n      const items = columns.map((column, index) => {\n        return {\n          title: {\n            label: {\n              type: 'i18n',\n              'en-US': column.dataIndex,\n              'zh-CN': column.title,\n            },\n          },\n          name: column.dataIndex,\n          important: index < 2,\n          setter: getDataSourceItemSetter(column.formatType),\n          defaultValue: mockRow[column.dataIndex],\n        };\n      });\n      return {\n        componentName: 'MixedSetter',\n        props: {\n          setters: [\n            {\n              componentName: 'ArraySetter',\n              props: {\n                itemSetter: {\n                  componentName: 'ObjectSetter',\n                  props: {\n                    config: {\n                      items,\n                    },\n                  },\n                  initialValue: () => {\n                    return {\n                      ...mockRow,\n                      [primaryKey]: mockId(),\n                    };\n                  },\n                },\n              },\n            },\n            'ExpressionSetter',\n          ],\n        },\n      };\n    },\n  },\n  {\n    type: 'field',\n    name: 'paginationProps',\n    title: '分页器',\n    extraProps: {\n      display: 'accordion',\n      defaultCollapsed: true,\n    },\n    setter: {\n      componentName: 'ObjectSetter',\n      display: 'inline',\n      props: {\n        config: {\n          items: [\n            {\n              type: 'field',\n              name: 'hidden',\n              title: '关闭分页',\n              extraProps: {\n                display: 'inline',\n                defaultValue: false,\n              },\n              setter: 'BoolSetter',\n            },\n            {\n              name: 'total',\n              title: '总行数',\n              setter: {\n                componentName: 'NumberSetter',\n                props: {\n                  min: 0,\n                },\n              },\n              hidden() {\n                console.log(\n                  'visiblevisiblevisiblevisible',\n                  this.parent.getParam('hidden').getValue(),\n                );\n\n                return !this.parent.getParam('hidden').getValue();\n              },\n            },\n            {\n              name: 'current',\n              title: '当前页',\n              setter: positiveIntegerSetter,\n            },\n            {\n              name: 'pageSize',\n              title: '每页行数',\n              setter: [\n                {\n                  componentName: 'SelectSetter',\n                  initialValue: 10,\n                  props: {\n                    options: [\n                      {\n                        title: '5',\n                        value: 5,\n                      },\n                      {\n                        title: '10',\n                        value: 10,\n                      },\n                      {\n                        title: '20',\n                        value: 20,\n                      },\n                      {\n                        title: '50',\n                        value: 50,\n                      },\n                    ],\n                  },\n                },\n                positiveIntegerSetter,\n              ],\n            },\n          ],\n        },\n      },\n    },\n  },\n  {\n    type: 'field',\n    name: 'rowSelection',\n    condition: () => false,\n  },\n  {\n    type: 'group',\n    title: '高级',\n    name: 'advanced',\n    extraProps: {\n      display: 'accordion',\n      defaultCollapsed: true,\n    },\n    items: [\n      {\n        type: 'field',\n        name: '!选择模式',\n        title: '选择模式',\n        display: 'inline',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '无',\n                value: 'none',\n                tip: 'none',\n              },\n              {\n                title: '多选',\n                value: 'multiple',\n                tip: 'multiple',\n              },\n              {\n                title: '单选',\n                value: 'single',\n                tip: 'single',\n              },\n            ],\n          },\n        },\n        defaultValue: 'none',\n        getValue: (target) => {\n          const rowSelection = target.parent.getPropValue('rowSelection');\n          if (!rowSelection) {\n            return 'none';\n          }\n          return rowSelection.mode === 'single' ? 'single' : 'multiple';\n        },\n        setValue: (field, value) => {\n          const { node } = field;\n          if (['single', 'multiple'].includes(value)) {\n            node.setPropValue('rowSelection', {\n              ...node.getPropValue('rowSelection'),\n              mode: value,\n            });\n          } else {\n            node.setPropValue('rowSelection', undefined);\n          }\n        },\n      },\n      {\n        type: 'field',\n        name: 'indexColumn',\n        title: '开启序号列',\n        extraProps: {\n          display: 'inline',\n          defaultValue: false,\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        type: 'field',\n        name: 'settingButtons',\n        title: '开启设置按钮',\n        extraProps: {\n          display: 'inline',\n          defaultValue: false,\n        },\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        type: 'field',\n        name: 'primaryKey',\n        title: {\n          label: '数据主键',\n          tip: '数据主键用于区分数据中不同的行，对行选择和行编辑功能非常重要，不同的行主键值不可重复，一般采用数据库中自增 ID 字段',\n        },\n        extraProps: {\n          display: 'inline',\n          defaultValue: 'id',\n          condition: () => false,\n        },\n      },\n      {\n        name: 'cellDefault',\n        title: {\n          label: '单元格缺省填充',\n          tip: '当单元格值为空时，显示内容',\n        },\n        setter: 'StringSetter',\n      },\n    ],\n  },\n  globalStyleField,\n];\n\nexport const proTableMeta: IComponentDescription = {\n  componentName: 'ProTable',\n  title: '高级表格',\n  docUrl: '',\n  icon: 'https://img.alicdn.com/imgextra/i4/O1CN01z4HeA61OwhjktJNDW_!!6000000001770-55-tps-56-56.svg',\n  devMode: 'proCode',\n  group: '精选组件',\n  category: '表格类',\n  tags: ['业务组件'],\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '1.0.24-21',\n    exportName: 'ProTable',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n\n  configure: {\n    props: ProTableProps,\n    component: {\n      isContainer: false,\n      isMinimalRenderUnit: true,\n      nestingRule: {},\n    },\n    supports: {},\n  },\n  props: [],\n  snippets: [\n    {\n      title: '高级表格',\n      screenshot:\n        'https://img.alicdn.com/imgextra/i1/O1CN01R1OdLV1GgCXW0rjop_!!6000000000651-2-tps-112-112.png',\n      schema: {\n        componentName: 'ProTable',\n        props: {\n          dataSource: [\n            {\n              id: 'id-2f5DdE2b-0',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n            },\n            {\n              id: 'id-2f5DdE2b-1',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n            },\n          ],\n          actionColumnButtons: {\n            dataSource: [\n              {\n                children: '查看',\n                type: 'primary',\n              },\n              {\n                children: '编辑',\n                type: 'primary',\n                disabled: true,\n              },\n              {\n                children: '删除',\n                type: 'primary',\n              },\n            ],\n            text: true,\n            visibleButtonCount: 3,\n          },\n          actionBarButtons: {\n            dataSource: [\n              {\n                type: 'primary',\n                children: '操作一',\n              },\n              {\n                type: 'normal',\n                children: '操作二',\n              },\n            ],\n            visibleButtonCount: 3,\n          },\n          paginationProps: {\n            pageSize: 20,\n            current: 1,\n          },\n          settingButtons: true,\n          columns: [\n            {\n              title: '公司',\n              dataIndex: 'company',\n              width: 160,\n              formatType: 'link',\n              searchable: true,\n            },\n            {\n              title: '单据金额',\n              dataIndex: 'documentAmount',\n              formatType: 'money',\n            },\n            {\n              title: '币种',\n              dataIndex: 'currency',\n              formatType: 'currency',\n              filters: [\n                {\n                  label: 'CNY',\n                  value: 'CNY',\n                },\n                {\n                  label: 'USD',\n                  value: 'USD',\n                },\n                {\n                  label: 'JPY',\n                  value: 'JPY',\n                },\n                {\n                  label: 'HKD',\n                  value: 'HKD',\n                },\n              ],\n              filterMode: 'multiple',\n              explanation: '提示信息',\n              width: 110,\n            },\n            {\n              title: '完成进度',\n              dataIndex: 'percent',\n              formatType: 'progress',\n            },\n            {\n              title: '到账日期',\n              dataIndex: 'date',\n              formatType: 'date',\n            },\n          ],\n        },\n      },\n    },\n    {\n      title: '树状表格',\n      screenshot:\n        'https://img.alicdn.com/imgextra/i1/O1CN01m4IZ481VKPwFFbDhP_!!6000000002634-2-tps-112-112.png',\n      schema: {\n        componentName: 'ProTable',\n        props: {\n          isTree: true,\n          dataSource: [\n            {\n              id: 'id-2f5DdE2b-0',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n              children: [\n                {\n                  id: '2f5DdE2b-5Aee-c43c-e1db-0-0',\n                  date: '2013-06-12',\n                  percent: 1.862,\n                  documentAmount: 2022,\n                  currency: 'CNY',\n                  company: '支付宝科技有限公司',\n                },\n                {\n                  id: '2f5DdE2b-5Aee-c43c-e1db-0-1',\n                  date: '2013-06-12',\n                  percent: 1.862,\n                  documentAmount: 2022,\n                  currency: 'CNY',\n                  company: '支付宝科技有限公司',\n                },\n              ],\n            },\n            {\n              id: 'id-2f5DdE2b-1',\n              date: '2013-06-12',\n              percent: 1.862,\n              documentAmount: 2022,\n              currency: 'CNY',\n              company: '支付宝科技有限公司',\n              children: [\n                {\n                  id: '2f5DdE2b-5Aee-c43c-e1db-1-0',\n                  date: '2013-06-12',\n                  percent: 1.862,\n                  documentAmount: 2022,\n                  currency: 'CNY',\n                  company: '支付宝科技有限公司',\n                },\n                {\n                  id: '2f5DdE2b-5Aee-c43c-e1db-1-1',\n                  date: '2013-06-12',\n                  percent: 1.862,\n                  documentAmount: 2022,\n                  currency: 'CNY',\n                  company: '支付宝科技有限公司',\n                },\n              ],\n            },\n          ],\n          columns: [\n            {\n              title: '公司',\n              dataIndex: 'company',\n              width: 160,\n              formatType: 'link',\n              searchable: true,\n            },\n            {\n              title: '单据金额',\n              dataIndex: 'documentAmount',\n              formatType: 'money',\n            },\n            {\n              title: '币种',\n              dataIndex: 'currency',\n              formatType: 'currency',\n              filters: [\n                {\n                  label: 'CNY',\n                  value: 'CNY',\n                },\n                {\n                  label: 'USD',\n                  value: 'USD',\n                },\n                {\n                  label: 'JPY',\n                  value: 'JPY',\n                },\n                {\n                  label: 'HKD',\n                  value: 'HKD',\n                },\n              ],\n              filterMode: 'multiple',\n              explanation: '提示信息',\n              width: 110,\n            },\n            {\n              title: '完成进度',\n              dataIndex: 'percent',\n              formatType: 'progress',\n            },\n            {\n              title: '到账日期',\n              dataIndex: 'date',\n              formatType: 'date',\n            },\n          ],\n        },\n      },\n    },\n  ],\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-table/utils.ts",
    "content": "import is from '@sindresorhus/is';\n\nexport const uuid = () => Math.random().toString(36).substr(-6);\n\nexport const PRO_TABLE_COLUMN_MOCK_VALUES = {\n  text: '这是一个文本',\n  number: 1234561.231,\n  money: 123213.1232,\n  date: '2021-08-18 20:52:33',\n  phone: '+86 13888888888',\n  currency: 'CNY',\n  ou: '34',\n  percent: 0.64,\n  progress: 0.64,\n  link: '这是链接',\n  tag: '成功',\n  textTag: '进行中',\n  files: [],\n  bankCard: '6226123412341234',\n  employee: {\n    img: 'https://work.alibaba-inc.com/photo/256512.40x40.jpg',\n    staff_id: '256512',\n    nickname: '乔勇',\n    realname: '石强',\n  },\n};\nexport const mockProTableCell = (formatType) => PRO_TABLE_COLUMN_MOCK_VALUES[formatType];\n\nexport const mockId = () => `id-${uuid()}`;\nexport const columnMockValueKey = (formatType) => `_mock_value_${formatType}`;\nexport const mockProTableRow = (columns: any[]) => {\n  return columns\n    ?.filter?.((vo) => vo.formatType && vo.dataIndex)\n    ?.reduce?.((p, column) => {\n      const { formatType, dataIndex } = column;\n      const mockValue = column[columnMockValueKey(formatType)];\n      p[dataIndex] = is.nullOrUndefined(mockValue) ? mockProTableCell(formatType) : mockValue;\n      return p;\n    }, {});\n};\n\nexport const getDataSourceItemSetter = (formatType) => {\n  // console.log('formatType: ', formatType);\n  let setter;\n  switch (formatType) {\n    case 'text':\n    case 'phone':\n    case 'link':\n    case 'dialog':\n      setter = 'StringSetter';\n      break;\n    case 'number':\n    case 'money':\n    case 'percent':\n    case 'currency':\n    case 'progress':\n      setter = 'NumberSetter';\n      break;\n    case 'date':\n      setter = 'DateSetter';\n      break;\n    default:\n      setter = 'StringSetter';\n  }\n  return setter;\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/pro-table-slot/meta.ts",
    "content": "import { ComponentMetadata } from '@ali/lowcode-types';\n\nconst ProTableSlotMeta: ComponentMetadata = {\n  componentName: 'ProTableSlot',\n  title: 'ProTableSlot',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '0.1.6-beta.8',\n    exportName: 'ProTableSlot',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'position',\n            'zh-CN': '插入槽位',\n          },\n          tip: 'position | 插入槽位',\n        },\n        name: 'position',\n        description: '插入槽位',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n    ],\n    supports: {\n      style: true,\n    },\n    component: {},\n  },\n};\n\nexport default {\n  ...ProTableSlotMeta,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/radio-group/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormRadioGroup',\n  isFormItemComponent: true,\n  title: '单选框组',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormRadioGroup',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义类名',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内敛样式',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['large', 'medium', 'small'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['normal', 'button'],\n      },\n      description: '展示形态',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: '选中项的值',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'oneOfType',\n        value: ['string', 'number', 'bool'],\n      },\n      description: '默认值',\n    },\n    {\n      name: 'component',\n      propType: 'string',\n      description: '设置标签类型',\n      defaultValue: 'div',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否被禁用',\n    },\n    {\n      name: 'dataSource',\n      propType: 'object',\n      description: '可选项列表',\n    },\n    {\n      name: 'itemDirection',\n      propType: {\n        type: 'oneOf',\n        value: ['hoz', 'ver'],\n      },\n      description: '子项目的排列方式',\n      defaultValue: 'hoz',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '选中值改变时的事件\\n@param {String/Number} value 选中项的值\\n@param {Event} e Dom 事件对象',\n    },\n  ],\n  configure: {\n    props: wrapFormItemProps([\n      {\n        name: 'shape',\n        title: '展示形状',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '默认', value: 'normal' },\n              { title: '按钮', value: 'button' },\n            ],\n          },\n        },\n        defaultValue: 'normal',\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['BoolSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'itemDirection',\n        title: '排列方式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              { title: '水平排列', value: 'hoz' },\n              { title: '垂直排列', value: 'ver' },\n            ],\n          },\n        },\n        defaultValue: 'hoz',\n      },\n      {\n        name: 'isPreview',\n        title: '预览态',\n        setter: {\n          componentName: 'BoolSetter',\n        },\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        defaultValue: '',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: ['StringSetter', 'ExpressionSetter'],\n          },\n        },\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: '选项',\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          {\n                            name: 'label',\n                            title: 'label',\n                            setter: 'StringSetter',\n                          },\n                          {\n                            name: 'value',\n                            title: 'value',\n                            setter: 'StringSetter',\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: {\n                      label: '选项一',\n                      value: '1',\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n    ]),\n    supports: {\n      style: true,\n      events: ['onChange'],\n    },\n    advanced: {\n      initials: [\n        {\n          name: 'dataSource',\n          initial: () => {\n            return [\n              {\n                label: '选项一',\n                value: '1',\n              },\n              {\n                label: '选项二',\n                value: '2',\n              },\n              {\n                label: '选项三',\n                value: '3',\n              },\n            ];\n          },\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/range-picker/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormRangePicker',\n  isFormItemComponent: true,\n  title: '日期区段选择',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormRangePicker',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'type',\n      propType: {\n        type: 'oneOf',\n        value: ['date', 'month', 'year'],\n      },\n      description: '日期范围类型',\n      defaultValue: 'date',\n    },\n    {\n      name: 'defaultVisibleMonth',\n      propType: 'func',\n      description: '默认展示的起始月份\\n@return {MomentObject} 返回包含指定月份的 moment 对象实例',\n    },\n    {\n      name: 'onVisibleMonthChange',\n      propType: 'func',\n    },\n    {\n      name: 'value',\n      propType: 'array',\n      description: '日期范围值数组 [moment, moment]',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'array',\n      description: '初始的日期范围值数组 [moment, moment]',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期格式',\n      defaultValue: 'YYYY-MM-DD',\n    },\n    {\n      name: 'showTime',\n      propType: 'bool',\n      description: '是否使用时间控件，支持传入 TimePicker 的属性',\n      defaultValue: false,\n    },\n    {\n      name: 'resetTime',\n      propType: 'bool',\n      description: '每次选择是否重置时间（仅在 showTime 开启时有效）',\n      defaultValue: false,\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description:\n        '日期范围值改变时的回调 [ MomentObject|String, MomentObject|String ]\\n@param {Array<MomentObject|String>} value 日期值',\n    },\n    {\n      name: 'onOk',\n      propType: 'func',\n      description:\n        '点击确认按钮时的回调 返回开始时间和结束时间`[ MomentObject|String, MomentObject|String ]`\\n@return {Array} 日期范围',\n    },\n    {\n      name: 'label',\n      propType: 'string',\n      description: '表单项内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['error', 'loading', 'success'],\n      },\n      description: '表单项状态',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '表单项尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} type 触发弹层显示和隐藏的来源 okBtnClick 表示由确认按钮触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式, 具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'node',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'startDateInputAriaLabel',\n      propType: 'string',\n      description: '开始日期表单项的 aria-label 属性',\n    },\n    {\n      name: 'startTimeInputAriaLabel',\n      propType: 'string',\n      description: '开始时间表单项的 aria-label 属性',\n    },\n    {\n      name: 'endDateInputAriaLabel',\n      propType: 'string',\n      description: '结束日期表单项的 aria-label 属性',\n    },\n    {\n      name: 'endTimeInputAriaLabel',\n      propType: 'string',\n      description: '结束时间表单项的 aria-label 属性',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: 'string',\n    },\n    {\n      name: 'popupContent',\n      propType: 'node',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  configure: {\n    supports: {\n      style: true,\n      events: ['onVisibleMonthChange', 'onChange', 'onOk', 'onVisibleChange'],\n    },\n    props: wrapFormItemProps([\n      {\n        name: 'defaultValue',\n        title: {\n          label: '默认值',\n          tip: '初始的日期范围值数组 [moment, moment]',\n        },\n        setter: {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 0,\n                  title: '开始时间',\n                  setter: 'DateSetter',\n                },\n                {\n                  name: 1,\n                  title: '结束时间',\n                  setter: 'DateSetter',\n                },\n              ],\n            },\n          },\n        },\n      },\n      {\n        name: 'type',\n        title: '日期类型',\n        setter: {\n          setter: 'RadioGroupSetter',\n          props: { options: ['date', 'month', 'year'] },\n        },\n        description: '日期范围类型',\n        defaultValue: 'date',\n      },\n      {\n        name: 'label',\n        title: '内置标签',\n        setter: 'StringSetter',\n        description: '表单项内置标签',\n      },\n      {\n        name: 'state',\n        title: '输入状态',\n        setter: {\n          setter: 'RadioGroupSetter',\n          props: { options: ['error', 'loading', 'success'] },\n        },\n        description: '表单项状态',\n      },\n      {\n        name: 'size',\n        title: '尺寸',\n        setter: {\n          setter: 'RadioGroupSetter',\n          props: { options: ['small', 'medium', 'large'] },\n        },\n        description: '表单项尺寸',\n        defaultValue: 'medium',\n      },\n      {\n        name: 'disabled',\n        setter: 'BoolSetter',\n        title: '是否禁用',\n      },\n      {\n        name: 'hasClear',\n        setter: 'BoolSetter',\n        title: '清空按钮',\n        defaultValue: true,\n      },\n      {\n        name: 'defaultVisible',\n        setter: 'BoolSetter',\n        title: '显示弹层',\n        defaultValue: false,\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n    ]),\n  },\n  category: '内容',\n  icon: '',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/rating/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormRating',\n  isFormItemComponent: true,\n  title: '评分',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormRating',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'id',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: 'name',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'number',\n      description: '默认值',\n      defaultValue: 0,\n    },\n    {\n      name: 'value',\n      propType: 'number',\n      description: '值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'count',\n      propType: 'number',\n      description: '评分的总数',\n      defaultValue: 5,\n    },\n    {\n      name: 'showGrade',\n      propType: 'bool',\n      description: '是否显示 grade',\n      defaultValue: false,\n    },\n    {\n      name: 'allowHalf',\n      propType: 'bool',\n      description: '是否允许半星评分',\n      defaultValue: false,\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n      defaultValue: false,\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n      defaultValue: false,\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容',\n    },\n    {\n      name: 'readOnly',\n      propType: 'bool',\n      description: '是否为只读态，效果上同 disabeld',\n      defaultValue: false,\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '用户点击评分时触发的回调\\n@param {String} value 评分值',\n    },\n    {\n      name: 'onHoverChange',\n      propType: 'func',\n      description: '用户hover评分时触发的回调\\n@param {String} value 评分值',\n    },\n  ],\n  configure: {\n    props: wrapFormItemProps([\n      {\n        name: 'value',\n        title: '当前值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'size',\n        title: {\n          label: {\n            type: 'i18n',\n            zh_CN: '尺寸',\n            en_US: 'Size',\n          },\n          tip: {\n            type: 'i18n',\n            zh_CN: '属性: size | 说明: 尺寸\\n@enumdesc 小, 中, 大',\n            en_US: 'prop: size | description: size',\n          },\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['small', 'medium', 'large'],\n          },\n        },\n        defaultValue: 'medium',\n      },\n      {\n        name: 'count',\n        title: '评分总数',\n        setter: ['NumberSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'allowHalf',\n        title: '半星评分',\n        setter: ['BoolSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'showGrade',\n        title: '显示分数',\n        setter: ['BoolSetter', 'ExpressionSetter'],\n      },\n      {\n        name: 'readAs',\n        title: '评分文案生成方法',\n        display: 'block',\n        setter: {\n          componentName: 'FunctionSetter',\n          // props: {\n          //   defaultActionName=\"readAs\",\n          //   defaultCode=`function readAs(val) {\n          //     return val + 'source';\n          //   }`,\n          // }\n        },\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n    ]),\n    supports: {\n      style: true,\n      events: ['onChange', 'onHoverChange'],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/rating/snippets.js",
    "content": "module.exports = [\n  {\n    title: '评分',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_rating.png',\n    schema: {\n      componentName: 'Rating',\n      props: {\n        prefix: 'next-',\n        count: 5,\n        size: 'medium',\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/select/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormSelect',\n  isFormItemComponent: true,\n  title: '选择器',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormSelect',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: wrapFormItemProps([\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: '属性: placeholder',\n        },\n        defaultValue: '请选择', // 不生效\n        setter: 'StringSetter',\n      },\n      {\n        name: 'hasClear',\n        title: {\n          label: '清除按钮',\n          tip: '属性: hasClear',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'showSearch',\n        title: {\n          label: '可搜索',\n          tip: '属性: showSearch',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'dataSource',\n        display: 'block',\n        title: '选项',\n        tip: {\n          title: '数据格式',\n          url: '',\n        },\n        setter: {\n          componentName: 'MixedSetter',\n          props: {\n            setters: [\n              {\n                componentName: 'ArraySetter',\n                props: {\n                  itemSetter: {\n                    componentName: 'ObjectSetter',\n                    props: {\n                      config: {\n                        items: [\n                          {\n                            name: 'label',\n                            title: 'label',\n                            setter: 'StringSetter',\n                          },\n                          {\n                            name: 'value',\n                            title: 'value',\n                            setter: 'StringSetter',\n                          },\n                        ],\n                      },\n                    },\n                    initialValue: {\n                      title: 'Title',\n                    },\n                  },\n                },\n              },\n              'ExpressionSetter',\n            ],\n          },\n        },\n      },\n      {\n        name: 'mode',\n        title: {\n          label: '模式',\n          tip: '属性: mode',\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            defaultValue: 'single',\n            options: [\n              { value: 'single', title: '单选' },\n              { value: 'multiple', title: '多选' },\n              { value: 'tag', title: '标签' },\n            ],\n          },\n        },\n      },\n\n      {\n        type: 'group',\n        title: '其他配置',\n        display: 'block',\n        items: [\n          {\n            name: 'notFoundContent',\n            title: {\n              label: '空文案',\n              tip: 'notFoundContent|弹层内容为空的文案',\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'hasBorder',\n            title: {\n              label: '边框',\n              tip: '是否有边框',\n            },\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'autoWidth',\n            title: '下拉等宽',\n            setter: 'BoolSetter',\n          },\n          {\n            name: 'hasArrow',\n            title: '下拉箭头',\n            setter: 'BoolSetter',\n            defaultValue: true,\n          },\n        ],\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n    ]),\n    supports: {\n      style: true,\n      events: [\n        {\n          name: 'onChange',\n          propType: 'func',\n          description: '值发生变化',\n        },\n        {\n          name: 'onVisibleChange',\n          propType: 'func',\n          description: '弹层显示隐藏变化',\n        },\n        {\n          name: 'onRemove',\n          propType: 'func',\n          description: 'Tag 被删除',\n        },\n        {\n          name: 'onSearch',\n          propType: 'func',\n          description: '搜索',\n        },\n      ],\n    },\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/select/snippets.js",
    "content": "module.exports = [\n  {\n    title: '选择器',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_select.png',\n    schema: {\n      componentName: 'Select',\n      props: {\n        mode: 'single',\n        hasArrow: true,\n        cacheValue: true,\n        dataSource: [\n          {\n            value: '1',\n            label: '选项1',\n          },\n          {\n            value: '2',\n            label: '选项2',\n          },\n          {\n            value: '3',\n            label: '选项3',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/step-form/meta.ts",
    "content": "import { operationConfig } from '../common';\nimport { IComponentDescription, ISnippet } from '../types';\nimport { hideProp } from '../utils';\n\nimport stepProps, { operations } from './step-props';\n\nconst snippets: ISnippet[] = [\n  {\n    title: '步骤表单',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN01HFWZfM24k4gYve7im_!!6000000007428-55-tps-56-56.svg',\n    schema: {\n      componentName: 'StepForm',\n      props: {\n        current: 0,\n        operations: [\n          {\n            content: '上一步',\n            action: 'previous',\n            type: 'secondary',\n          },\n          {\n            content: '下一步',\n            action: 'next',\n            type: 'primary',\n          },\n        ],\n      },\n      children: [\n        {\n          componentName: 'ProForm',\n          props: {\n            stepItemProps: {\n              title: 'StepItem',\n            },\n          },\n          children: [...new Array(3).keys()].map((item) => ({\n            componentName: 'FormInput',\n            props: {\n              formItemProps: {\n                primaryKey: String(Math.floor(Math.random() * 10000) + item),\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n                fullWidth: true,\n              },\n              placeholder: '请输入',\n            },\n          })),\n        },\n        {\n          componentName: 'ProForm',\n          props: {\n            stepItemProps: {\n              title: 'StepItem',\n            },\n          },\n          children: [\n            {\n              componentName: 'ProFormItem',\n              props: {\n                primaryKey: String(Math.floor(Math.random() * 10000)),\n\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n              },\n            },\n            {\n              componentName: 'ProFormItem',\n              props: {\n                primaryKey: String(Math.floor(Math.random() * 10000)),\n\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n              },\n            },\n            {\n              componentName: 'ProFormItem',\n              props: {\n                primaryKey: String(Math.floor(Math.random() * 10000)),\n\n                label: '表单项',\n                size: 'medium',\n                device: 'desktop',\n              },\n            },\n          ],\n        },\n      ],\n    },\n  },\n];\n\nconst ProFormMeta: IComponentDescription[] = [\n  {\n    componentName: 'StepForm',\n    category: '表单类',\n    title: '步骤表单',\n    group: '精选组件',\n    docUrl: '',\n    screenshot: '',\n    devMode: 'procode',\n    npm: {\n      package: '@alifd/fusion-ui',\n      version: '0.1.4',\n      exportName: 'StepForm',\n      main: 'lib/index.js',\n      destructuring: true,\n      subName: '',\n    },\n    configure: {\n      component: {\n        isContainer: false,\n      },\n      supports: {\n        style: true,\n        events: ['saveField', 'onSubmit', 'onChange'],\n      },\n      props: [...stepProps, operationConfig, operations],\n    },\n    snippets,\n  },\n  {\n    componentName: 'Step.Item',\n    title: '步骤项',\n    docUrl: '',\n    screenshot: '',\n    npm: {\n      package: '@alifd/next',\n      version: '{{version}}',\n      exportName: 'Step',\n      main: '',\n      destructuring: true,\n      subName: 'Item',\n    },\n    props: [\n      {\n        name: 'icon',\n        propType: 'string',\n        description: '图标',\n      },\n      {\n        name: 'title',\n        propType: {\n          type: 'instanceOf',\n          value: 'node',\n        },\n        defaultValue: '步骤项',\n        description: '标题',\n      },\n      {\n        name: 'content',\n        title: {\n          label: '内容',\n          tip: 'content|内容填充, shape为 arrow 时无效',\n        },\n        propType: {\n          type: 'instanceOf',\n          value: 'node',\n        },\n        description: '内容填充, shape为 arrow 时无效',\n      },\n      {\n        name: 'status',\n        title: {\n          label: '状态',\n          tip: 'status|步骤的状态，如不传，会根据外层的 Step 的 current 属性生成，可选值为 `wait`, `process`, `finish`',\n        },\n        propType: {\n          type: 'oneOf',\n          value: ['wait', 'process', 'finish'],\n        },\n        description:\n          '步骤的状态，如不传，会根据外层的 Step 的 current 属性生成，可选值为 `wait`, `process`, `finish`',\n      },\n      {\n        name: 'percent',\n        propType: 'number',\n        description: '百分比',\n      },\n      {\n        name: 'disabled',\n        propType: 'bool',\n        description: '是否禁用',\n      },\n      {\n        name: 'onClick',\n        propType: 'func',\n        description: '点击步骤时的回调\\n@param {Number} index 节点索引',\n      },\n      {\n        name: 'className',\n        propType: 'string',\n        description: '自定义样式',\n      },\n      {\n        name: 'style',\n        propType: 'object',\n      },\n    ],\n    configure: {\n      props: {\n        isExtends: true,\n        override: [\n          {\n            name: 'icon',\n            title: {\n              label: '图标',\n              tip: 'icon|图标',\n            },\n            setter: {\n              componentName: 'IconSetter',\n            },\n          },\n          {\n            name: 'title',\n            setter: {\n              componentName: 'StringSetter',\n            },\n            defaultValue: '步骤项',\n            title: '标题',\n          },\n          {\n            name: 'content',\n            condition: hideProp,\n            title: {\n              label: '内容',\n              tip: 'content|内容',\n            },\n            setter: {\n              componentName: 'TextAreaSetter',\n            },\n          },\n          {\n            name: 'status',\n            title: {\n              label: '状态',\n              tip: 'status|状态',\n            },\n            setter: {\n              componentName: 'RadioGroupSetter',\n              props: {\n                options: [\n                  {\n                    title: '等待',\n                    value: 'wait',\n                  },\n                  {\n                    title: '进行中',\n                    value: 'process',\n                  },\n                  {\n                    title: '结束',\n                    value: 'finish',\n                  },\n                  {\n                    title: '默认',\n                    value: '',\n                  },\n                ],\n              },\n            },\n          },\n        ],\n      },\n    },\n    category: 'null',\n    icon: '',\n  },\n];\n\nexport default ProFormMeta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/step-form/step-props.ts",
    "content": "import { hideProp } from '../utils';\n\nexport default [\n  {\n    name: '!items',\n    title: '步骤项',\n    setter: {\n      componentName: 'ArraySetter',\n      props: {\n        itemSetter: {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 'icon',\n                  title: '图标',\n                  important: true,\n                  setter: 'IconSetter',\n                },\n                {\n                  name: 'title',\n                  title: '标题',\n                  important: true,\n                  setter: 'StringSetter',\n                },\n                {\n                  name: 'status',\n                  title: {\n                    label: '状态',\n                    tip: '步骤的状态，如不传，会根据外层的 Step 的 current 属性生成，可选值为 `wait`, `process`, `finish`',\n                  },\n                  setter: {\n                    componentName: 'RadioGroupSetter',\n                    props: { options: ['wait', 'process', 'finish'] },\n                  },\n                },\n                {\n                  name: 'content',\n                  title: {\n                    label: '内容',\n                    tip: 'content|内容填充, shape为 arrow 时无效',\n                  },\n                  condition: hideProp,\n                  setter: 'TextAreaSetter',\n                  description: '内容填充, shape为 arrow 时无效',\n                },\n                {\n                  name: 'percent',\n                  title: '百分比',\n                  setter: 'NumberSetter',\n                  description: '百分比',\n                },\n                {\n                  name: 'disabled',\n                  title: '是否禁用',\n                  setter: 'BoolSetter',\n                  description: '是否禁用',\n                },\n              ],\n            },\n          },\n          initialValue: () => {\n            return {\n              primaryKey: String(Math.floor(Math.random() * 10000)),\n              title: 'StepItem',\n            };\n          },\n        },\n      },\n    },\n    getValue(target) {\n      // const node = target.node;\n      // const children = node.children;\n      const map = target.node.children.map((child) => {\n        const stepItemProps = child.getPropValue('stepItemProps') || {};\n        const primaryKey = stepItemProps.primaryKey ? stepItemProps.primaryKey : child.id;\n        return {\n          ...stepItemProps,\n          primaryKey,\n        };\n      });\n      return map;\n    },\n    setValue(target, value) {\n      const { node } = target;\n      const map = {};\n      if (!Array.isArray(value)) {\n        value = [];\n      }\n      value.forEach((item) => {\n        const tabitem = Object.assign({}, item);\n        map[item.primaryKey] = tabitem;\n      });\n\n      node.children.mergeChildren(\n        (child) => {\n          const primaryKey = String(child.getPropValue('primaryKey'));\n          if (Object.hasOwnProperty.call(map, primaryKey)) {\n            child.setPropValue('stepItemProps', map[primaryKey]);\n            delete map[primaryKey];\n            return false;\n          }\n          return true;\n        },\n        () => {\n          const items = [];\n          for (const primaryKey in map) {\n            if (Object.hasOwnProperty.call(map, primaryKey)) {\n              items.push({\n                componentName: 'ProForm',\n                props: {\n                  columns: 1,\n                  primaryKey,\n                  stepItemProps: map[primaryKey],\n                },\n                children: [...new Array(3).keys()].map((item) => ({\n                  componentName: 'FormInput',\n                  props: {\n                    formItemProps: {\n                      primaryKey: String(Math.floor(Math.random() * 10000) + item),\n                      label: '表单项',\n                      size: 'medium',\n                      device: 'desktop',\n                      fullWidth: true,\n                    },\n                    placeholder: '请输入',\n                  },\n                })),\n              });\n            }\n          }\n          return items;\n        },\n        (child1, child2) => {\n          const a = value.findIndex(\n            (item) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n          );\n          const b = value.findIndex(\n            (item) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n          );\n          return a - b;\n        },\n      );\n    },\n  },\n  {\n    name: 'current',\n    setter: (target) => {\n      return {\n        componentName: 'MixedSetter',\n        props: {\n          setters: [\n            {\n              componentName: 'SelectSetter',\n              props: () => {\n                const items = target.getProps().getPropValue('!items') || [];\n                return {\n                  options: items.map((item, index: number) => {\n                    return {\n                      title: `第 ${index + 1} 步: ${item.title}`,\n                      value: `${index}`,\n                    };\n                  }),\n                };\n              },\n            },\n            'ExpressionSetter',\n          ],\n        },\n      };\n    },\n    setValue: (target, value) => {\n      target.parent.setPropValue('current', +value);\n    },\n    title: '当前步骤',\n    defaultValue: 0,\n  },\n  {\n    name: 'shape',\n    title: '类型',\n    setter: (target) => {\n      const options =\n        target.getProps().getPropValue('direction') === 'ver'\n          ? ['circle', 'dot']\n          : ['circle', 'arrow', 'dot'];\n      return {\n        componentName: 'RadioGroupSetter',\n        props: {\n          options,\n        },\n      };\n    },\n    defaultValue: 'circle',\n  },\n  {\n    name: 'direction',\n    condition: (target) => {\n      return target.getProps().getPropValue('shape') !== 'arrow';\n    },\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: [\n          { value: 'hoz', title: '横向' },\n          { value: 'ver', title: '纵向' },\n        ],\n      },\n    },\n    title: '展示方向',\n    defaultValue: 'hoz',\n  },\n  {\n    name: 'showAll',\n    condition: (target) => {\n      return target.getProps().getPropValue('direction') === 'ver';\n    },\n    title: '展示所有表单',\n    setter: {\n      componentName: 'BoolSetter',\n    },\n  },\n  {\n    name: 'labelPlacement',\n    condition: hideProp,\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: ['hoz', 'ver'],\n      },\n    },\n    title: '内容排列',\n    defaultValue: 'ver',\n  },\n  {\n    name: 'readOnly',\n    setter: 'BoolSetter',\n    title: '是否只读',\n  },\n  {\n    name: 'animation',\n    setter: 'BoolSetter',\n    title: '开启动效',\n    defaultValue: true,\n  },\n];\n\nexport const operations = {\n  name: 'operations',\n  display: 'block',\n  title: '操作项',\n  getValue: (target, value) => {\n    return value || [];\n  },\n  setter: {\n    componentName: 'MixedSetter',\n    props: {\n      setters: [\n        {\n          componentName: 'SlotSetter',\n          defaultValue: {\n            type: 'JSSlot',\n            value: [],\n          },\n        },\n        {\n          componentName: 'ArraySetter',\n          props: {\n            itemSetter: {\n              componentName: 'ObjectSetter',\n              props: {\n                config: {\n                  items: [\n                    {\n                      name: 'content',\n                      display: 'inline',\n                      title: '文本',\n                      setter: 'StringSetter',\n                      important: true,\n                      extraProps: {\n                        supportVariable: true,\n                      },\n                    },\n                    {\n                      name: 'action',\n                      display: 'inline',\n                      title: '操作',\n                      important: true,\n                      setValue: (target, value) => {\n                        const actionNameMap = {\n                          submit: '提交',\n                          reset: '重置',\n                          custom: '自定义',\n                        };\n                        const actionName = actionNameMap[value] || '自定义';\n                        target.parent.setPropValue('content', actionName);\n                      },\n                      setter: {\n                        componentName: 'SelectSetter',\n                        props: {\n                          options: [\n                            {\n                              title: '提交',\n                              value: 'submit',\n                              action: 'submit',\n                            },\n                            {\n                              title: '重置',\n                              value: 'reset',\n                              action: 'reset',\n                            },\n                            {\n                              title: '上一步',\n                              value: 'previous',\n                              action: 'previous',\n                            },\n                            {\n                              title: '下一步',\n                              value: 'next',\n                              action: 'next',\n                            },\n                            {\n                              title: '自定义',\n                              value: 'custom',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'type',\n                      display: 'inline',\n                      title: '样式',\n                      important: true,\n                      setter: {\n                        componentName: 'SelectSetter',\n                        props: {\n                          options: [\n                            {\n                              title: '主要',\n                              value: 'primary',\n                            },\n                            {\n                              title: '次要',\n                              value: 'secondary',\n                            },\n                            {\n                              title: '普通',\n                              value: 'normal',\n                            },\n                          ],\n                        },\n                      },\n                    },\n                    {\n                      name: 'behavior',\n                      title: '交互设置',\n                      display: 'block',\n                      condition: (target) => {\n                        const action = target.parent.getPropValue('action');\n                        return !action || action === 'custom';\n                      },\n                      setter: {\n                        componentName: 'BehaviorSetter',\n                        props: {\n                          actions: ['onClick'],\n                        },\n                      },\n                    },\n                    {\n                      name: 'onClick',\n                      display: 'inline',\n                      title: '点击事件',\n                      condition: hideProp,\n                      setter: 'FunctionSetter',\n                      extraProps: {\n                        supportVariable: true,\n                      },\n                    },\n                    {\n                      name: 'htmlType',\n                      condition: hideProp,\n                    },\n                    {\n                      name: '!autoSubmit',\n                      display: 'inline',\n                      virtual: true,\n                      title: '自动提交',\n                      setter: {\n                        componentName: 'BoolSetter',\n                      },\n                      extraProps: {\n                        setValue: (target, value) => {\n                          target.parent.setPropValue('htmlType', value ? 'submit' : '');\n                        },\n                        getValue: (target, value) => {\n                          return value === 'submit';\n                        },\n                      },\n                      condition: (target) => {\n                        return target.parent.getPropValue('action') !== 'submit';\n                      },\n                    },\n                  ],\n                },\n              },\n              initialValue: () => {\n                return {\n                  content: '提交',\n                  action: 'submit',\n                  type: 'secondary',\n                };\n              },\n            },\n          },\n        },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/story-placeholder/meta.ts",
    "content": "import { IPublicModelNode } from '@alilc/lowcode-types';\nimport { IComponentDescription, ISnippet } from '../types';\n\nconst snippets: ISnippet[] = [\n  {\n    title: '需求占位',\n    screenshot: 'https://img.alicdn.com/tfs/TB160cKkP39YK4jSZPcXXXrUFXa-112-64.png',\n    schema: {\n      title: '需求占位',\n      componentName: 'StoryPlaceholder',\n      props: {\n        title: '需求占位描述',\n        content: {\n          subject: '需求标题',\n          hideTitle: false,\n          description:\n            '<p><span>- 你可以在这里描述需求</span><br /><span>- 或者粘贴需求截图</span></p>',\n        },\n      },\n    },\n  },\n];\n\ninterface INode extends IPublicModelNode {\n  startRect: any;\n  beforeSpan: number;\n  parentRect: any;\n}\n\nconst meta: IComponentDescription = {\n  componentName: 'StoryPlaceholder',\n  title: '需求占位',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: 'latest',\n    exportName: 'StoryPlaceholder',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    supports: {\n      style: true,\n    },\n    props: [\n      {\n        name: 'maxHeight',\n        title: '最大高度',\n        propType: 'number',\n        setter: 'NumberSetter',\n        description: '最大高度',\n      },\n      {\n        name: 'content',\n        title: '需求关联',\n        display: 'inline',\n        supportVariable: true,\n        setter: {\n          componentName: 'EditSetter',\n          props: {\n            title: '编辑内容',\n          },\n        },\n      },\n    ],\n  },\n  advanced: {\n    getResizingHandlers: () => {\n      return ['e'];\n    },\n    callbacks: {\n      onResizeStart: (e, currentNode: INode) => {\n        const parent = currentNode.parent;\n        if (parent) {\n          const parentNode = parent.getDOMNode();\n          if (parentNode) {\n            currentNode.parentRect = parentNode.getBoundingClientRect();\n          }\n        }\n        currentNode.beforeSpan = currentNode.getPropValue('colSpan') || 12;\n        currentNode.startRect = currentNode.getRect();\n      },\n      onResize: (e, currentNode: INode) => {\n        const { deltaX } = e;\n        const startWidth = currentNode.startRect\n          ? currentNode.startRect.width\n          : currentNode.beforeSpan * (currentNode.parentRect.width / 12);\n        let width = startWidth + deltaX;\n        if (!currentNode.startRect) {\n          currentNode.startRect = {\n            width,\n          };\n        }\n        width = Math.max(0, width); // 不能小于0\n        width = Math.min(width, currentNode.parentRect.width); // 不能大于父容器宽度\n        currentNode.getDOMNode().style.width = `${Math.round(width)}px`;\n      },\n      onResizeEnd: (e, currentNode) => {\n        currentNode.setPropValue('style.width', currentNode.getDOMNode().style.width);\n      },\n    },\n  },\n  icon: 'https://img.alicdn.com/imgextra/i3/O1CN01G7Lc8e1pZL7p4cdKc_!!6000000005374-2-tps-112-112.png',\n  category: '基础元素',\n  group: '精选组件',\n  hidden: true,\n};\n\nexport default {\n  ...meta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/tab-container/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@ali/lowcode-types';\n\nimport props from './props';\n\nconst snippets: Snippet[] = [\n  {\n    title: '选项卡',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN01mh9LPG268B90t8DaA_!!6000000007616-55-tps-56-56.svg',\n    schema: {\n      componentName: 'TabContainer',\n      props: {\n        shape: 'pure',\n        size: 'medium',\n        excessMode: 'slide',\n      },\n      children: [\n        {\n          componentName: 'TabContainer.Item',\n          props: {\n            title: '标签项1',\n            primaryKey: 'tab-item-1',\n          },\n        },\n        {\n          componentName: 'TabContainer.Item',\n          props: {\n            title: '标签项2',\n            primaryKey: 'tab-item-2',\n          },\n        },\n      ],\n    },\n  },\n];\n\nconst tabItemMeta = {\n  componentName: 'TabContainer.Item',\n  title: '选项卡',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'TabContainer',\n    main: 'lib/index.js',\n    destructuring: true,\n    subName: 'Item',\n  },\n  configure: {\n    props: [\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'title',\n            'zh-CN': '选项卡标题',\n          },\n          tip: 'title | 选项卡标题',\n        },\n        name: 'title',\n        description: '选项卡标题',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'closeable',\n            'zh-CN': '单个选项卡是否可关闭',\n          },\n          tip: 'closeable | 单个选项卡是否可关闭',\n        },\n        name: 'closeable',\n        description: '单个选项卡是否可关闭',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'disabled',\n            'zh-CN': '选项卡是否被禁用',\n          },\n          tip: 'disabled | 选项卡是否被禁用',\n        },\n        name: 'disabled',\n        description: '选项卡是否被禁用',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'prefix',\n            'zh-CN': '样式类名的品牌前缀',\n          },\n          tip: 'prefix | 样式类名的品牌前缀',\n        },\n        name: 'prefix',\n        description: '样式类名的品牌前缀',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'locale',\n            'zh-CN': '国际化文案对象，属性',\n          },\n          tip: 'locale | 国际化文案对象，属性为组件的 displayName',\n        },\n        name: 'locale',\n        description: '国际化文案对象，属性为组件的 displayName',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'pure',\n            'zh-CN': '是否开启 Pure ',\n          },\n          tip: 'pure | 是否开启 Pure Render 模式，会提高性能，但是也会带来副作用',\n        },\n        name: 'pure',\n        description: '是否开启 Pure Render 模式，会提高性能，但是也会带来副作用',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'warning',\n            'zh-CN': '是否在开发模式下显示',\n          },\n          tip: 'warning | 是否在开发模式下显示组件属性被废弃的 warning 提示',\n        },\n        name: 'warning',\n        description: '是否在开发模式下显示组件属性被废弃的 warning 提示',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'rtl',\n            'zh-CN': '是否开启 rtl 模',\n          },\n          tip: 'rtl | 是否开启 rtl 模式',\n        },\n        name: 'rtl',\n        description: '是否开启 rtl 模式',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: false,\n          initialValue: '',\n        },\n      },\n    ],\n    supports: {\n      events: [\n        {\n          name: 'onClick',\n        },\n        {\n          name: 'onChange',\n        },\n      ],\n      style: true,\n    },\n    component: {\n      isContainer: true,\n      disableBehaviors: '*',\n    },\n    advanced: {\n      hideSelectTools: true,\n      callbacks: {\n        onMouseDownHook: () => false,\n        onClickHook: () => false,\n      },\n    },\n  },\n};\n\nconst TabContainerMeta: ComponentMetadata[] = [\n  {\n    componentName: 'TabContainer',\n    title: '选项卡',\n    category: '布局容器类',\n    group: '精选组件',\n    docUrl: '',\n    screenshot:\n      'https://img.alicdn.com/imgextra/i4/O1CN01mh9LPG268B90t8DaA_!!6000000007616-55-tps-56-56.svg',\n    devMode: 'proCode',\n    npm: {\n      package: '@alifd/fusion-ui',\n      version: '{{version}}',\n      exportName: 'TabContainer',\n      main: 'lib/index.js',\n      destructuring: true,\n      subName: '',\n    },\n    configure: {\n      component: {\n        isContainer: true,\n        nestingRule: {\n          childWhitelist: ['TabContainer.Item'],\n        },\n      },\n      props,\n      supports: {\n        style: true,\n      },\n    },\n    snippets,\n  },\n  tabItemMeta,\n  // compatible with the exsting json schema which has componentName: Tab.Item\n  {\n    ...tabItemMeta,\n    componentName: 'Tab.Item',\n  }\n];\n\nexport default TabContainerMeta;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/tab-container/props.ts",
    "content": "export default [\n  {\n    name: 'items',\n    title: '标签项',\n    setter: {\n      componentName: 'ArraySetter',\n      props: {\n        itemSetter: {\n          componentName: 'ObjectSetter',\n          props: {\n            config: {\n              items: [\n                {\n                  name: 'title',\n                  title: '名称',\n                  defaultValue: '标签项',\n                  important: true,\n                  setter: 'StringSetter',\n                },\n                {\n                  name: 'primaryKey',\n                  title: '项目编号',\n                  condition: () => false,\n                  setter: 'StringSetter',\n                },\n                {\n                  name: 'closeable',\n                  title: '可关闭',\n                  initialValue: false,\n                  setter: 'BoolSetter',\n                },\n                {\n                  name: 'disabled',\n                  title: '是否禁用',\n                  initialValue: false,\n                  setter: 'BoolSetter',\n                },\n              ],\n            },\n          },\n          initialValue: () => {\n            return {\n              primaryKey: String(Math.floor(Math.random() * 10000)),\n              title: '标签项',\n              closeable: false,\n              disabled: false,\n            };\n          },\n        },\n      },\n    },\n    extraProps: {\n      getValue(target) {\n        const map = target.node.children.map((child) => {\n          const primaryKey = child.getPropValue('primaryKey')\n            ? String(child.getPropValue('primaryKey'))\n            : child.id;\n          return {\n            primaryKey,\n            title: child.getPropValue('title') || '标签项',\n            closeable: child.getPropValue('closeable'),\n            disabled: child.getPropValue('disabled'),\n          };\n        });\n        return map;\n      },\n      setValue(target, value) {\n        const { node } = target;\n        const map = {};\n        if (!Array.isArray(value)) {\n          value = [];\n        }\n        value.forEach((item) => {\n          const tabitem = Object.assign({}, item);\n          map[item.primaryKey] = tabitem;\n        });\n\n        node.children.mergeChildren(\n          (child) => {\n            const primaryKey = String(child.getPropValue('primaryKey'));\n            if (Object.hasOwnProperty.call(map, primaryKey)) {\n              child.setPropValue('title', map[primaryKey].title);\n              child.setPropValue('closeable', map[primaryKey].closeable);\n              child.setPropValue('disabled', map[primaryKey].disabled);\n              delete map[primaryKey];\n              return false;\n            }\n            return true;\n          },\n          () => {\n            const items = [];\n            for (const primaryKey in map) {\n              if (Object.hasOwnProperty.call(map, primaryKey)) {\n                items.push({\n                  componentName: 'TabContainer.Item',\n                  props: map[primaryKey],\n                });\n              }\n            }\n            return items;\n          },\n          (child1, child2) => {\n            const a = value.findIndex(\n              (item) => String(item.primaryKey) === String(child1.getPropValue('primaryKey')),\n            );\n            const b = value.findIndex(\n              (item) => String(item.primaryKey) === String(child2.getPropValue('primaryKey')),\n            );\n            return a - b;\n          },\n        );\n      },\n    },\n  },\n  {\n    name: 'shape',\n    title: '形态',\n    defaultValue: 'pure',\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: [\n          { title: '普通型', value: 'pure' },\n          { title: '包裹型', value: 'wrapped' },\n          { title: '文本型', value: 'text' },\n          { title: '胶囊型', value: 'capsule' },\n        ],\n      },\n    },\n  },\n  {\n    name: 'size',\n    title: '尺寸',\n    defaultValue: 'medium',\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: [\n          { title: '小', value: 'small' },\n          { title: '中', value: 'medium' },\n        ],\n      },\n    },\n  },\n  {\n    name: 'excessMode',\n    title: '选项卡过多时的滑动模式',\n    defaultValue: 'slide',\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: [\n          { title: '滑动', value: 'slide' },\n          { title: '下拉', value: 'dropdown' },\n        ],\n      },\n    },\n  },\n  {\n    name: 'tabPosition',\n    title: {\n      label: '导航选项卡的位置',\n      tip: '只适用于包裹型（wrapped）选项卡',\n    },\n    condition: (target) => {\n      const shape = target.getProps().getPropValue('shape');\n      return shape === 'wrapped';\n    },\n    defaultValue: 'top',\n    setter: {\n      componentName: 'RadioGroupSetter',\n      props: {\n        options: [\n          {\n            title: '顶部',\n            value: 'top',\n          },\n          {\n            title: '底部',\n            value: 'bottom',\n          },\n          {\n            title: '左边',\n            value: 'left',\n          },\n          {\n            title: '右边',\n            value: 'right',\n          },\n        ],\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/tree-select/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormTreeSelect',\n  isFormItemComponent: true,\n  title: '树型选择控件',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormTreeSelect',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: wrapFormItemProps([\n      {\n        name: 'placeholder',\n        title: {\n          label: '占位提示',\n          tip: '属性: placeholder',\n        },\n        defaultValue: '请选择', // 不生效\n        setter: 'StringSetter',\n      },\n      {\n        name: 'hasClear',\n        title: {\n          label: '清除按钮',\n          tip: '属性: hasClear',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'showSearch',\n        title: {\n          label: '可搜索',\n          tip: '属性: showSearch',\n        },\n        setter: 'BoolSetter',\n        defaultValue: false,\n      },\n      {\n        name: 'label',\n        title: '内联文案',\n        setter: {\n          componentName: 'StringSetter',\n        },\n      },\n      {\n        name: 'dataSource',\n        title: {\n          label: '节点数据',\n          tip: '数据源',\n        },\n        setter: 'JsonSetter',\n      },\n    ]),\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/tree-select/snippets.js",
    "content": "module.exports = [\n  {\n    title: '树型选择控件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tree-select.png',\n    schema: {\n      componentName: 'TreeSelect',\n      props: {\n        prefix: 'next-',\n        size: 'medium',\n        hasArrow: true,\n        hasBorder: true,\n        autoWidth: true,\n        notFoundContent: 'Not Found',\n        treeCheckedStrategy: 'parent',\n      },\n    },\n  },\n  {\n    title: '树形控件',\n    screenshot:\n      'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_tree.png',\n    schema: {\n      componentName: 'Tree',\n      props: {\n        prefix: 'next-',\n        selectable: true,\n        checkedStrategy: 'all',\n        autoExpandParent: true,\n        animation: true,\n        focusable: true,\n      },\n    },\n  },\n];\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/types/index.ts",
    "content": "import { IPublicTypeComponentMetadata, IPublicTypeSnippet, IPublicTypeFieldConfig, IPublicModelSettingField } from '@alilc/lowcode-types';\n\nexport interface ISnippet extends IPublicTypeSnippet {\n  label?: string;\n  title?: string;\n}\n\nexport interface IComponentDescription extends IPublicTypeComponentMetadata {\n  snippets?: ISnippet[];\n}\n\nexport interface IProps extends IPublicTypeFieldConfig {\n  showInListSetter?: boolean;\n  initialValue?: Function | any;\n  editable?: boolean;\n  items?: IProps[] | IPublicTypeFieldConfig[];\n}\n\nexport interface SetterProps {\n  forceInline?: boolean;\n  key?: string;\n  prop?: IPublicModelSettingField;\n  selected?: any;\n  field?: IPublicModelSettingField;\n  value: any;\n  onChange: Function;\n  onInitial?: Function;\n\n  removeProp?: Function;\n}\n\nexport interface IAssets {\n  components?: IComponentDescription[];\n}\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/upload/meta.js",
    "content": "import { wrapFormItemProps } from '../utils/form-utils';\n\nexport default {\n  componentName: 'FormUpload',\n  isFormItemComponent: true,\n  title: '上传',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/fusion-ui',\n    version: '{{version}}',\n    exportName: 'FormUpload',\n    main: '',\n    destructuring: true,\n    subName: '',\n  },\n  props: [\n    {\n      name: 'action',\n      propType: 'string',\n      description: '上传的地址',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'Json',\n      },\n      description: '文件列表',\n    },\n    {\n      name: 'defaultValue',\n      propType: 'object',\n      description: '默认文件列表',\n    },\n    {\n      name: 'shape',\n      propType: {\n        type: 'oneOf',\n        value: ['card'],\n      },\n      description: '上传按钮形状',\n    },\n    {\n      name: 'listType',\n      propType: {\n        type: 'oneOf',\n        value: ['text', 'image', 'card'],\n      },\n      description: '上传列表的样式',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n      description: '文件名字段',\n    },\n    {\n      name: 'data',\n      propType: {\n        type: 'oneOfType',\n        value: ['object', 'func'],\n      },\n      description: '上传额外传参',\n    },\n    {\n      name: 'formatter',\n      propType: 'func',\n      title: {\n        label: '数据格式化函数',\n        tip: '数据格式化函数，配合自定义 action 使用，参数为服务器的响应数据，详见 [formatter](#formater)\\n@param {Object} response 返回\\n@param {File} file 文件对象',\n      },\n    },\n    {\n      name: 'limit',\n      propType: 'number',\n      description: '最大文件上传个数',\n      defaultValue: null,\n    },\n    {\n      name: 'timeout',\n      propType: 'number',\n      description: '设置上传超时,单位ms',\n    },\n    {\n      name: 'dragable',\n      propType: 'bool',\n      description: '可选参数，是否支持拖拽上传，`ie10+` 支持。',\n    },\n    {\n      name: 'useDataURL',\n      propType: 'bool',\n      description: '可选参数，是否本地预览',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '可选参数，是否禁用上传功能',\n    },\n    {\n      name: 'onSelect',\n      propType: 'func',\n      description: '选择文件回调',\n    },\n    {\n      name: 'onProgress',\n      propType: 'func',\n      description: '上传中',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '上传文件改变时的状态\\n@param {Object} info 文件事件对象',\n    },\n    {\n      name: 'onSuccess',\n      propType: 'func',\n      description:\n        '可选参数，上传成功回调函数，参数为请求下响应信息以及文件\\n@param {Object} file 文件\\n@param {Array<Object>} value 值',\n    },\n    {\n      name: 'afterSelect',\n      propType: 'func',\n      description:\n        '可选参数, 用于校验文件,afterSelect仅在 autoUpload=false 的时候生效,autoUpload=true时,可以使用beforeUpload完全可以替代该功能.\\n@param {Object} file\\n@returns {Boolean} 返回false会阻止上传,其他则表示正常',\n    },\n    {\n      name: 'onRemove',\n      propType: 'func',\n      description:\n        '移除文件回调函数\\n@param {Object} file 文件\\n@returns {Boolean|Promise} 返回 false、Promise.resolve(false)、 Promise.reject() 将阻止文件删除',\n    },\n    {\n      name: 'onError',\n      propType: 'func',\n      description:\n        '可选参数，上传失败回调函数，参数为上传失败的信息、响应信息以及文件\\n@param {Object} file 出错的文件\\n@param {Array} value 当前值',\n    },\n    {\n      name: 'beforeUpload',\n      propType: 'func',\n      title: {\n        label: '开始上传时回调',\n        tip: '可选参数, 详见 [beforeUpload](#beforeUpload)\\n@param {Object} file 所有文件\\n@param {Object} options 参数\\n@returns {Boolean|Object|Promise} 返回值作用见demo',\n      },\n    },\n    {\n      name: 'onDrop',\n      propType: 'func',\n      description: '放文件',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n      description: '自定义class',\n    },\n    {\n      name: 'style',\n      propType: 'object',\n      description: '自定义内联样式',\n    },\n    {\n      name: 'autoUpload',\n      propType: 'bool',\n      description: '自动上传',\n      defaultValue: true,\n    },\n    {\n      name: 'request',\n      propType: 'func',\n      description:\n        '自定义上传方法\\n@param {Object} option\\n@return {Object} object with abort method',\n    },\n    {\n      name: 'progressProps',\n      propType: 'object',\n      description: '透传给Progress props',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {number} value 评分值',\n    },\n  ],\n  configure: {\n    props: wrapFormItemProps([\n      {\n        name: 'defaultValue',\n        title: '默认值',\n        setter: {\n          componentName: 'JsonSetter',\n        },\n      },\n      {\n        name: 'shape',\n        title: '按钮形状',\n        defaultValue: '',\n        setValue: (target, value) => {\n          const { node } = target;\n          if (value === 'card') {\n            node.removeChild(node.children.get(0));\n          } else {\n            node.children?.importSchema({\n              componentName: 'Button',\n              props: {\n                children: '上传文件',\n                type: 'primary',\n              },\n            });\n          }\n        },\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: [\n              {\n                title: '默认',\n                value: '',\n              },\n              {\n                title: '卡片',\n                value: 'card',\n              },\n            ],\n          },\n        },\n        description: '上传按钮形状',\n      },\n      {\n        name: 'listType',\n        title: '列表样式',\n        setter: {\n          componentName: 'RadioGroupSetter',\n          props: {\n            options: ['text', 'image', 'card'],\n          },\n        },\n        defaultValue: 'text',\n        description: '上传列表的样式',\n      },\n      {\n        name: 'limit',\n        title: '数量限制',\n        setter: 'NumberSetter',\n      },\n      {\n        name: 'disabled',\n        title: '是否禁用',\n        setter: 'BoolSetter',\n      },\n      {\n        type: 'group',\n        title: '高级',\n        display: 'block',\n        items: [\n          {\n            name: 'id',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '唯一标识',\n                en_US: 'ID',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: id | 说明: 唯一标识',\n                en_US: 'prop: id | description: switch id',\n              },\n            },\n            setter: 'StringSetter',\n          },\n          {\n            name: 'name',\n            title: {\n              label: {\n                type: 'i18n',\n                zh_CN: '表单标识',\n                en_US: 'Name',\n              },\n              tip: {\n                type: 'i18n',\n                zh_CN: '属性: name | 说明: 表单标识',\n                en_US: 'prop: name | description: switch name',\n              },\n            },\n            setter: 'StringSetter',\n          },\n        ],\n      },\n    ]),\n  },\n  advanced: {\n    initialChildren: [\n      {\n        componentName: 'Button',\n        props: {\n          children: '上传文件',\n          type: 'primary',\n        },\n      },\n    ],\n    initials: [\n      {\n        name: 'shape',\n        initial: () => '',\n      },\n    ],\n  },\n  icon: '',\n  category: '内容',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/utils/form-utils.ts",
    "content": "import { IProps } from '../types';\n\nimport { default as formItemProps } from '../pro-form/common/form-item-props';\n\nexport const wrapFormItemProps = (props: IProps[]) => {\n  return [\n    ...formItemProps,\n    {\n      name: 'componentProps',\n      title: '组件配置',\n      extraProps: {\n        display: 'accordion',\n        defaultCollapsed: true,\n      },\n      type: 'group',\n      items: props.filter((item) => item.title !== '高级'),\n    },\n  ];\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/utils/index.ts",
    "content": "export const hideProp = () => false;\n\nexport function isJSExpression(data: any) {\n  return data && data.type === 'JSExpression';\n}\n\nexport const deepEqual = function (x, y) {\n  if (x === y) {\n    return true;\n  } else if (typeof x === 'object' && x != null && typeof y === 'object' && y !== null) {\n    if (Object.keys(x).length !== Object.keys(y).length) return false;\n\n    for (const prop in x) {\n      if (y.hasOwnProperty(prop)) {\n        if (!deepEqual(x[prop], y[prop])) return false;\n      } else return false;\n    }\n\n    return true;\n  } else return false;\n};\n\nexport const showWithLabelAlign = (target) => {\n  const parentLabelAlign = target && target.parent.node.parent.getPropValue('labelAlign');\n  const labelAlign = parentLabelAlign || (target && target.parent.getPropValue('labelAlign'));\n  if (labelAlign === 'top') {\n    const enableLabelTip = target.parent.getPropValue('labelTip.enable');\n    if (enableLabelTip) {\n      return target.name.startsWith('labelTip');\n    }\n    return target.name === 'labelTip.enable';\n  }\n  if (labelAlign === 'inset') {\n    return target.name.startsWith('wrapper');\n  }\n  if (labelAlign === 'left') {\n    return !target.name.startsWith('labelTip');\n  }\n  return true;\n};\n\nexport const showWithLabelAlignShortcut = (target) => {\n  const { labelAlign: parentLabelAlign } = target && target.parent.node.propsData;\n  const labelAlign = parentLabelAlign || (target && target.parent.getPropValue('labelAlign'));\n  if (labelAlign === 'top') {\n    const enableLabelTip = target.parent.getPropValue('labelTip.enable');\n    if (enableLabelTip) {\n      return target.name.startsWith('labelTip');\n    }\n    return target.name === 'labelTip.enable';\n  }\n  if (labelAlign === 'inset') {\n    return target.name.startsWith('wrapper');\n  }\n  if (labelAlign === 'left') {\n    return !target.name.startsWith('labelTip');\n  }\n  return true;\n};\n\nexport const showWithFormItemType = (target, type) => {\n  const formItemType = target && target.getProps().getPropValue('type');\n  return formItemType === type;\n};\n\nexport const propsFormWrapper = (props, formItemType) => {\n  return props.map((item) => {\n    item.condition = (target) => {\n      return showWithFormItemType(target, formItemType);\n    };\n    item.name = `componentPorps.${item.name}`;\n    return item;\n  });\n};\n\nexport const getParentValue = (target) => {\n  return target.getProps().node.parent.getPropValue(target.name);\n};\n\nexport const uuid = () => Math.random().toString(36).substr(-6);\nexport const mockId = () => `id-${uuid()}`;\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/utils/keybindingService.ts",
    "content": "interface cbFunc {\n  (node: any, e: KeyboardEvent): void;\n}\n\nexport interface IKeyBinding {\n  command: string;\n  keybinding: string | string[];\n  components: string | string[];\n  cb: cbFunc;\n  desc?: string;\n}\n\n/* example\nexport const KeybindingMap: IKeyBinding[] = [\n  {\n    command: 'updateColSpan',\n    keybinding: 's',\n    components: ['NextBlockCell'],\n    cb: (node) => {\n      updateColSpan({\n        parent: node.parent,\n        child: node,\n        type: 'split',\n      });\n    },\n  },\n];\n*/\n\nclass KeybindingService {\n  hotkey: any;\n  designer: any;\n  keybindingMap: IKeyBinding[];\n\n  constructor() {\n    const engine = (window.parent as any).AliLowCodeEngine;\n    this.hotkey = engine.hotkey;\n    this.designer = engine.designer;\n    this.keybindingMap = [];\n  }\n  bind(kb: IKeyBinding) {\n    if (kb.command && this.keybindingMap.find((k) => k.command === kb.command)) {\n      console.warn('KeybindingService Error[duplicated command]', kb.command);\n      return;\n    }\n\n    this.keybindingMap.push(kb);\n    this.hotkey.bind(kb.keybinding, (e: KeyboardEvent) => {\n      const node = this.getSelectedNode();\n      if (!node) {\n        console.warn(`No node select on keydown: ${kb.keybinding}`);\n        return;\n      }\n\n      if (!this.isValidNode(node, kb)) {\n        console.warn(`Not valid node for keydown target: ${kb.keybinding}`);\n        return;\n      }\n      kb.cb.apply(null, [node, e]);\n    });\n  }\n  // unbind, hotkey 暂时不支持\n  execCommand(command: string, node: any, ...rest: any[]) {\n    const targetKb = this.keybindingMap.find((kb) => kb.command === command);\n    if (!targetKb) {\n      console.warn(`No command founded from keybindingMap: ${command}`);\n      return;\n    }\n\n    if (!node || !this.isValidNode(node, targetKb)) {\n      console.warn(`Not valid node target for command: ${command} ${node}`);\n      return;\n    }\n\n    targetKb.cb.apply(null, [node, ...rest]);\n  }\n  private getSelectedNode() {\n    const selectedNodeId = this.designer.currentDocument.selection.selected[0];\n    return selectedNodeId ? this.designer.currentDocument.nodesMap.get(selectedNodeId) : null;\n  }\n  private isValidNode(node: any, kb: IKeyBinding) {\n    return kb.components.includes(node.componentName);\n  }\n}\n\nexport const keybindingService = new KeybindingService();\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/week-picker/meta.js",
    "content": "export default {\n  componentName: 'WeekPicker',\n  title: 'WeekPicker',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/next',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: 'WeekPicker',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '表单项内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: '表单项状态',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'defaultVisibleMonth',\n      propType: 'func',\n      description: '默认展现的月\\n@return {MomentObject} 返回包含指定月份的 moment 对象实例',\n    },\n    {\n      name: 'onVisibleMonthChange',\n      propType: 'func',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY-wo',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '表单项尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n      defaultValue: false,\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} type 触发弹层显示和隐藏的来源 calendarSelect 表示由日期表盘的选择触发； okBtnClick 表示由确认按钮触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式,具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '弹层其他属性',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'inputProps',\n      propType: 'object',\n      description: '表单项其他属性',\n    },\n    {\n      name: 'dateCellRender',\n      propType: 'func',\n      description:\n        '自定义日期渲染函数\\n@param {Object} value 日期值（moment对象）\\n@returns {ReactNode}',\n    },\n    {\n      name: 'monthCellRender',\n      propType: 'func',\n      description:\n        '自定义月份渲染函数\\n@param {Object} calendarDate 对应 Calendar 返回的自定义日期对象\\n@returns {ReactNode}',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {MomentObject} value 年份',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n    },\n    {\n      name: 'popupContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-ui/lowcode/year-picker/meta.js",
    "content": "export default {\n  componentName: 'YearPicker',\n  title: 'YearPicker',\n  docUrl: '',\n  screenshot: '',\n  npm: {\n    package: '@alifd/next',\n    version: '{{version}}',\n    exportName: 'DatePicker',\n    main: '',\n    destructuring: true,\n    subName: 'YearPicker',\n  },\n  props: [\n    {\n      name: 'prefix',\n      propType: 'string',\n      defaultValue: 'next-',\n    },\n    {\n      name: 'rtl',\n      propType: 'bool',\n      defaultValue: false,\n    },\n    {\n      name: 'label',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n      description: '表单项内置标签',\n    },\n    {\n      name: 'state',\n      propType: {\n        type: 'oneOf',\n        value: ['success', 'loading', 'error'],\n      },\n      description: '表单项状态',\n    },\n    {\n      name: 'placeholder',\n      propType: 'string',\n      description: '输入提示',\n    },\n    {\n      name: 'value',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '日期值（受控）moment 对象',\n    },\n    {\n      name: 'defaultValue',\n      propType: {\n        type: 'instanceOf',\n        value: 'custom',\n      },\n      description: '初始日期值，moment 对象',\n    },\n    {\n      name: 'format',\n      propType: 'string',\n      description: '日期值的格式（用于限定用户输入和展示）',\n      defaultValue: 'YYYY',\n    },\n    {\n      name: 'disabledDate',\n      propType: 'func',\n      description:\n        '禁用日期函数\\n@param {MomentObject} 日期值\\n@param {String} view 当前视图类型，year: 年， month: 月, date: 日\\n@return {Boolean} 是否禁用',\n    },\n    {\n      name: 'footerRender',\n      propType: 'func',\n      description: '自定义面板页脚\\n@return {Node} 自定义的面板页脚组件',\n    },\n    {\n      name: 'onChange',\n      propType: 'func',\n      description: '日期值改变时的回调\\n@param {MomentObject|String} value 日期值',\n    },\n    {\n      name: 'size',\n      propType: {\n        type: 'oneOf',\n        value: ['small', 'medium', 'large'],\n      },\n      description: '表单项尺寸',\n      defaultValue: 'medium',\n    },\n    {\n      name: 'disabled',\n      propType: 'bool',\n      description: '是否禁用',\n    },\n    {\n      name: 'hasClear',\n      propType: 'bool',\n      description: '是否显示清空按钮',\n      defaultValue: true,\n    },\n    {\n      name: 'visible',\n      propType: 'bool',\n      description: '弹层显示状态',\n    },\n    {\n      name: 'defaultVisible',\n      propType: 'bool',\n      description: '弹层默认是否显示',\n    },\n    {\n      name: 'onVisibleChange',\n      propType: 'func',\n      description:\n        '弹层展示状态变化时的回调\\n@param {Boolean} visible 弹层是否显示\\n@param {String} reason 触发弹层显示和隐藏的来源 calendarSelect 表示由日期表盘的选择触发； fromTrigger 表示由trigger的点击触发； docClick 表示由document的点击触发',\n    },\n    {\n      name: 'popupTriggerType',\n      propType: {\n        type: 'oneOf',\n        value: ['click', 'hover'],\n      },\n      description: '弹层触发方式',\n      defaultValue: 'click',\n    },\n    {\n      name: 'popupAlign',\n      propType: 'string',\n      description: '弹层对齐方式, 具体含义见 OverLay文档',\n      defaultValue: 'tl tl',\n    },\n    {\n      name: 'popupContainer',\n      propType: 'any',\n      description: '弹层容器\\n@param {Element} target 目标元素\\n@return {Element} 弹层的容器元素',\n    },\n    {\n      name: 'popupStyle',\n      propType: 'object',\n      description: '弹层自定义样式',\n    },\n    {\n      name: 'popupClassName',\n      propType: 'string',\n      description: '弹层自定义样式类',\n    },\n    {\n      name: 'popupProps',\n      propType: 'object',\n      description: '弹层其他属性',\n    },\n    {\n      name: 'followTrigger',\n      propType: 'bool',\n      description: '是否跟随滚动',\n    },\n    {\n      name: 'inputProps',\n      propType: 'object',\n      description: '表单项其他属性',\n    },\n    {\n      name: 'yearCellRender',\n      propType: 'func',\n    },\n    {\n      name: 'dateInputAriaLabel',\n      propType: 'string',\n      description: '日期表单项的 aria-label 属性',\n    },\n    {\n      name: 'isPreview',\n      propType: 'bool',\n      description: '是否为预览态',\n    },\n    {\n      name: 'renderPreview',\n      propType: 'func',\n      description: '预览态模式下渲染的内容\\n@param {MomentObject} value 年份',\n    },\n    {\n      name: 'locale',\n      propType: 'object',\n    },\n    {\n      name: 'className',\n      propType: 'string',\n    },\n    {\n      name: 'name',\n      propType: 'string',\n    },\n    {\n      name: 'popupComponent',\n      propType: {\n        type: 'instanceOf',\n        value: 'elementType',\n      },\n    },\n    {\n      name: 'popupContent',\n      propType: {\n        type: 'instanceOf',\n        value: 'node',\n      },\n    },\n    {\n      name: 'style',\n      propType: 'object',\n    },\n  ],\n  category: '基础',\n};\n"
  },
  {
    "path": "packages/fusion-ui/package.json",
    "content": "{\n  \"name\": \"@alifd/fusion-ui\",\n  \"version\": \"2.1.0\",\n  \"description\": \"A component library based on Fusion Next\",\n  \"files\": [\n    \"es/\",\n    \"lib/\",\n    \"build/\",\n    \"dist/\",\n    \"lowcode/\",\n    \"lowcode_lib/\",\n    \"lowcode_es/\"\n  ],\n  \"main\": \"lib/index.js\",\n  \"module\": \"es/index.js\",\n  \"lowcodeEditMain\": \"build/lowcode/view.js\",\n  \"stylePath\": \"style.js\",\n  \"scripts\": {\n    \"start\": \"npm run dumi\",\n    \"build\": \"build-scripts build\",\n    \"lowcode:dev\": \"build-scripts start --config ./build.lowcode.js\",\n    \"lowcode:build\": \"build-scripts build --config ./build.lowcode.js\",\n    \"test\": \"build-scripts test\",\n    \"lint\": \"f2elint scan\",\n    \"lint:fix\": \"f2elint fix\",\n    \"dumi\": \"cross-env APP_ROOT=docs dumi dev\",\n    \"dumi:build\": \"cross-env APP_ROOT=docs dumi build\",\n    \"prepublishOnly\": \"npm run build && npm run lowcode:build && npm run dumi:build\"\n  },\n  \"keywords\": [\n    \"react\",\n    \"component\"\n  ],\n  \"dependencies\": {\n    \"@alifd/layout\": \"^2.0.7\",\n    \"@alifd/next\": \"^1.25.18\",\n    \"@antv/data-set\": \"^0.11.8\",\n    \"@sindresorhus/is\": \"^4.0.1\",\n    \"ahooks\": \"^2.10.11\",\n    \"bizcharts\": \"^4.1.16\",\n    \"classnames\": \"^2.3.1\",\n    \"framer-motion\": \"^4.1.17\",\n    \"lodash\": \"^4.17.21\",\n    \"moment\": \"^2.29.4\",\n    \"numeral\": \"^2.0.6\",\n    \"numvert\": \"^0.2.2\",\n    \"prop-types\": \"^15.5.8\",\n    \"qs\": \"^6.10.1\",\n    \"rc-resize-observer\": \"^1.0.0\",\n    \"react-beautiful-dnd\": \"^13.1.0\",\n    \"react-sortablejs\": \"6.1.1\",\n    \"sortablejs\": \"^1.14.0\",\n    \"@babel/runtime\": \"^7.0.0\"\n  },\n  \"devDependencies\": {\n    \"@alifd/theme-2\": \"^0.4.4\",\n    \"node-sass\": \"^8.0.0\",\n    \"@umijs/plugin-sass\": \"^1.1.1\",\n    \"@alilc/lowcode-engine\": \"^1.0.0\",\n    \"@alib/build-scripts\": \"^0.1.3\",\n    \"@alifd/build-plugin-lowcode\": \"^0.4.0\",\n    \"@types/lodash\": \"^4.14.177\",\n    \"@types/react\": \"^16.14.15\",\n    \"@types/react-dom\": \"^16.9.4\",\n    \"build-plugin-component\": \"^1.12.0\",\n    \"build-plugin-fusion\": \"^0.1.0\",\n    \"build-plugin-load-assets\": \"^0.1.3\",\n    \"build-plugin-moment-locales\": \"^0.1.0\",\n    \"cross-env\": \"^7.0.3\",\n    \"dumi\": \"^1.1.49\",\n    \"enzyme\": \"^3.10.0\",\n    \"enzyme-adapter-react-16\": \"^1.14.0\",\n    \"eslint\": \"^6.0.1\",\n    \"f2elint\": \"^1.2.0\",\n    \"fs-extra\": \"^10.0.0\",\n    \"marked\": \"^2.1.3\",\n    \"prop-types\": \"^15.7.2\",\n    \"remark-codesandbox\": \"^0.10.0\",\n    \"reqwest\": \"^2.0.5\",\n    \"to-string-loader\": \"^1.1.6\"\n  },\n  \"peerDependencies\": {\n    \"@alifd/next\": \"1.x\",\n    \"react\": \"^16.9.0\",\n    \"react-dom\": \"^16.9.0\"\n  },\n  \"resolutions\": {\n    \"webpack\": \"4.x\"\n  },\n  \"license\": \"MIT\",\n  \"homepage\": \"https://unpkg.com/@alifd/fusion-ui@2.1.0/build/index.html\",\n  \"componentConfig\": {\n    \"name\": \"FusionUI\",\n    \"category\": \"精品物料库\",\n    \"isComponentLibrary\": true,\n    \"materialSchema\": \"https://alifd.alicdn.com/npm/@alifd/fusion-ui@2.1.0/build/lowcode/assets-prod.json\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"f2elint commit-file-scan\",\n      \"commit-msg\": \"f2elint commit-msg-scan\"\n    }\n  },\n  \"materialConfig\": {\n    \"fusion-site\": {\n      \"id\": 1,\n      \"name\": \"PC 官网\",\n      \"url\": \"https://fusion.design/api/v1/sites/1/materials\"\n    }\n  },\n  \"repository\": \"https://github.com/alibaba/lowcode-materials.git\",\n  \"exports\": {\n    \"./prototype\": {\n      \"require\": \"./lowcode_lib/meta.js\",\n      \"import\": \"./lowcode_es/meta.js\"\n    },\n    \"./prototypeView\": {\n      \"require\": \"./lowcode_lib/view.js\",\n      \"import\": \"./lowcode_es/view.js\"\n    },\n    \"./*\": \"./*\",\n    \".\": {\n      \"import\": \"./es/index.js\",\n      \"require\": \"./lib/index.js\"\n    }\n  },\n  \"lcMeta\": {\n    \"type\": \"component\"\n  }\n}"
  },
  {
    "path": "packages/fusion-ui/src/common/operations/index.scss",
    "content": "#{$biz-css-prefix}common-operations {\n  &.operation-container {\n    display: flex;\n    align-items: center;\n    padding-top: 15px;\n\n    & > * {\n      margin-left: 10px;\n    }\n\n    & > *:first-child {\n      margin-left: 0;\n    }\n\n    &-operation-item + &-operation-item {\n      margin-left: 10px;\n    }\n\n    &.operation-align-left {\n      justify-content: flex-start;\n    }\n\n    &.operation-align-center {\n      justify-content: center;\n    }\n\n    &.operation-align-right {\n      justify-content: flex-end;\n    }\n\n    &.operation-fixed {\n      width: calc(100vw - var(--sidebar-width, 0px));\n\n      position: fixed;\n      padding: 15px;\n      z-index: 999;\n      box-shadow: 0 -4px 10px 0 rgba(74, 91, 109, 0.1);\n      background-color: #fff;\n      bottom: 0;\n      left: var(--sidebar-width, 0);\n    }\n    &.operation-absolute {\n      width: 100%;\n      padding: 15px;\n      position: absolute;\n      background-color: #fff;\n      bottom: 0;\n      left: 0;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/common/operations/index.tsx",
    "content": "import * as React from 'react';\nimport moment from 'moment';\nimport classnames from 'classnames';\nimport { Icon, Form } from '@alifd/next';\n\nimport { bizCssPrefix } from '@/variables';\nimport { Button } from '@/components/button';\nimport { ButtonGroup, ButtonGroupProps } from '@/components/button-group';\n\nconst cssPrefix = `${bizCssPrefix}-common-operations`;\n\nexport interface OperationProps {\n  operations?: any;\n  operationConfig?: any;\n  lastSaveTime?: any;\n  renderDefaultBtns?: any;\n  cssPrefix?: any;\n}\n\nconst Operations: React.FC<OperationProps> = (props) => {\n  const {\n    cssPrefix: propCssPrefix,\n    operations,\n    operationConfig = {},\n    lastSaveTime,\n    renderDefaultBtns,\n  } = props;\n  const operationRef = React.useRef();\n\n  const operationCssPrefix = 'operation-container';\n  let classNames = classnames(\n    propCssPrefix || cssPrefix,\n    operationCssPrefix,\n    operationConfig.align ? `operation-align-${operationConfig.align}` : 'operation-align-center',\n  );\n\n  if (operationConfig.fixed) {\n    classNames = classnames(classNames, 'operation-fixed');\n  }\n  const saveTime = operationConfig.showSaveTime ? (\n    <Button text>\n      <Icon type=\"success\" style={{ color: '#1DC11D' }} />\n      {moment(lastSaveTime).fromNow()}\n    </Button>\n  ) : null;\n\n  const buttonGroupProps: ButtonGroupProps = {};\n  if (operationConfig.moreMenuButtonProps) {\n    buttonGroupProps.moreMenuButtonProps = operationConfig.moreMenuButtonProps;\n  }\n\n  if (operationConfig.visibleButtonCount) {\n    buttonGroupProps.visibleButtonCount = operationConfig.visibleButtonCount;\n  }\n\n  const defaultBtns =\n    renderDefaultBtns && typeof renderDefaultBtns === 'function' ? renderDefaultBtns() : [];\n\n  if ((!defaultBtns || !defaultBtns.length) && !operations) {\n    return null;\n  }\n\n  if (!operations) {\n    return (\n      <div ref={operationRef} className={classNames}>\n        <ButtonGroup {...buttonGroupProps}>{defaultBtns}</ButtonGroup>\n        {saveTime}\n      </div>\n    );\n  }\n\n  const operationsView = (\n    operations.type?.displayName === 'Slot' ? operations.props?.children || [] : operations\n  ).map((operation: any, index: number) => {\n    if (React.isValidElement(operation)) {\n      return operation;\n    }\n    const { content, action, onActionClick, ...otherOperationProps } = operation;\n    let BtnComp;\n    if (action === 'submit') {\n      BtnComp = Form.Submit;\n      otherOperationProps.validate = true;\n      otherOperationProps.htmlType = 'submit';\n    } else if (action === 'reset') {\n      BtnComp = Form.Reset;\n    } else {\n      BtnComp = Button;\n    }\n    if (onActionClick) {\n      otherOperationProps.onClick = onActionClick;\n    }\n    return (\n      <BtnComp {...otherOperationProps} key={`operation-${index}`}>\n        {operation.content}\n      </BtnComp>\n    );\n  });\n  if ((!defaultBtns || !defaultBtns.length) && (!operationsView || !operationsView.length)) {\n    return null;\n  }\n  const isLowcodePlaceHolder = operationsView.some((item) => item?.type === 'div');\n  return (\n    <div ref={operationRef} className={classNames}>\n      <ButtonGroup {...buttonGroupProps}>\n        {defaultBtns}\n        {isLowcodePlaceHolder ? null : operationsView}\n      </ButtonGroup>\n      {isLowcodePlaceHolder ? operationsView : null}\n      {saveTime}\n    </div>\n  );\n};\n\nexport default Operations;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/components/HozAnchor/index.scss",
    "content": "#{$biz-css-prefix}anchor-hoz-affix {\n  z-index: 99;\n}\n\n#{$biz-css-prefix}anchor-hoz {\n  padding: var(--s-4 $s-5, $s-4 $s-5);\n  margin-bottom: var(--s-5, $s-5);\n  background: var(--color-white, $color-white);\n  border-radius: var(--corner-2, $corner-2);\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/components/HozAnchor/index.tsx",
    "content": "import * as React from 'react';\nimport cx from 'classnames';\nimport { Affix } from '@alifd/next';\nimport { Segment } from '@/components/segment';\nimport { AnchorProps } from '../../index';\nimport { startListen, removeListen, jumpToNode } from '../../util';\n\nexport class HozAnchor extends React.Component<Omit<AnchorProps, 'direction'>> {\n  state = {\n    currentValue: '',\n    container: null,\n  };\n\n  affixRef = React.createRef();\n\n  componentDidMount() {\n    const { dataSource, container, offsetY } = this.props;\n    const _container = container();\n    startListen(dataSource, () => _container, this.updateCurrentValue, {\n      offsetY,\n    });\n    this.setState({\n      container: _container,\n    });\n  }\n\n  componentWillUnmount() {\n    const { dataSource } = this.props;\n    const { container } = this.state;\n    removeListen(dataSource, () => container);\n  }\n\n  updateCurrentValue = (newValue) => {\n    if (newValue === this.state.currentValue) {\n      return;\n    }\n    this.setState({\n      currentValue: newValue,\n    });\n  };\n\n  onChange = (newValue) => {\n    const { onChange } = this.props;\n    const status = onChange && onChange(newValue);\n    if (status !== false) {\n      this.setState({\n        currentValue: newValue,\n      });\n      jumpToNode(newValue);\n    }\n  };\n\n  render() {\n    const { dataSource, className, style, hasAffix, affixProps, containerRef, offsetY } = this.props;\n    const { container } = this.state;\n    const { currentValue } = this.state;\n\n    const classes = cx({\n      'fusion-ui-anchor-hoz': true,\n      [className]: !!className,\n    });\n\n    const segmentDataSource = dataSource.map((item) => ({\n      label: item.label,\n      value: item.htmlId,\n    }));\n\n    const anchorEl = (\n      <div ref={containerRef} style={style} className={classes}>\n        <Segment\n          size=\"large\"\n          type=\"primary\"\n          value={currentValue}\n          dataSource={segmentDataSource}\n          onChange={this.onChange}\n        />\n      </div>\n    );\n\n    if (hasAffix) {\n      const self = this.affixRef?.current?.getInstance?.();\n      // FIXME: 为了解决一个页面多个 affix 会导致除最后一个 affix 外其余 affix 失效的问题，需要手动重新设置监听事件，\n      // 但调用了 affix 的内部方法，如果 affix 新版本的这个内部方法有变动，则需要加上兼容逻辑\n      const func = self?._setEventHandlerForContainer;\n      if (typeof func === 'function') {\n        func.call(self, () => container);\n      }\n      removeListen(dataSource, () => container)\n      startListen(dataSource, () => container, this.updateCurrentValue, {\n        offsetY,\n      });\n\n\n      return (\n        <Affix ref={this.affixRef} className=\"fusion-ui-anchor-hoz-affix\" container={() => container} {...affixProps}>\n          {anchorEl}\n        </Affix>\n      );\n    }\n\n    return anchorEl;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/components/VerAnchor/AnchorList/AnchorLink.tsx",
    "content": "import React from 'react';\nimport classNames from 'classnames';\nimport { Ellipsis } from '@/components/ellipsis/index';\n\nexport interface AnchorLinkProps {\n  isFocus: boolean;\n  label: string;\n  htmlId: string;\n  level: number;\n  onSelect: (htmlId: string) => void;\n}\n\nexport class AnchorLink extends React.Component<AnchorLinkProps> {\n  static displayName = 'AnchorLink';\n\n  static defaultProps = {\n    onSelect: () => {},\n  };\n\n  render() {\n    const { label, htmlId, isFocus, level, onSelect } = this.props;\n\n    const cls = classNames({\n      'fusion-ui-anchor-item': true,\n      [`fusion-ui-anchor-item-level-${level}`]: true,\n      'fusion-ui-anchor-item-active': !!isFocus,\n    });\n\n    return (\n      <div key={htmlId} className={cls} onClick={() => onSelect(htmlId)}>\n        <Ellipsis>{label}</Ellipsis>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/components/VerAnchor/AnchorList/index.scss",
    "content": "#{$biz-css-prefix}anchor-ver-menu {\n  padding: var(--s-4, $s-4);\n  background: var(--color-white, $color-white);\n  box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.1);\n  width: 160px;\n\n  &-header {\n    position: absolute;\n    display: none;\n    top: var(--s-4, $s-4);\n    left: 14px;\n    width: var(--s-1, $s-1);\n    height: var(--s-3, $s-3);\n    border-radius: 2px;\n    background: var(--color-brand1-6, $color-brand1-6);\n    transition: top 0.3s ease;\n  }\n\n  &-footer {\n    border-left: 1px solid $color-line1-2;\n    #{$biz-css-prefix}anchor-item {\n      font-weight: var(--font-weight-medium, $font-weight-medium);\n      font-size: var(--font-size-body-1, $font-size-body-1);\n      color: var(--color-text1-4, $color-text1-4);\n\n      &:hover {\n        cursor: pointer;\n      }\n\n      &:not(:last-child) {\n        margin-bottom: var(--s-4, $s-4);\n      }\n\n      &-active,\n      &:hover {\n        color: var(--color-brand1-6, $color-brand1-6);\n      }\n\n      &-level-1 {\n        padding-left: var(--s-3, $s-3);\n      }\n\n      &-level-2 {\n        padding-left: var(--s-5, $s-5);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/components/VerAnchor/AnchorList/index.tsx",
    "content": "import React from 'react';\nimport { AnchorLink, AnchorLinkProps } from './AnchorLink';\nimport { LinkItemData } from '../../../index';\n\ninterface AnchorListProps {\n  value: string;\n  dataSource: LinkItemData[];\n  onSelect: (htmlId) => void;\n}\n\ninterface AnchorTocState {\n  menuList: AnchorLinkProps[];\n}\n\n/**\n * 将原本的嵌套 dataSource 转换为扁平\n * 并直接将 focus 状态等计算好附加上\n * @param menuList 目标扁平列表，直接做修改\n * @param props 组件属性\n * @param level 锚点嵌套等级\n */\nconst renderMenu = (menuList, props, level: number) => {\n  const { onSelect, dataSource, value } = props;\n  dataSource.forEach((item) => {\n    const isFocus = value === item.htmlId;\n    menuList.push({\n      level,\n      label: item.label,\n      htmlId: item.htmlId,\n      isFocus,\n      onSelect,\n    });\n\n    if (Array.isArray(item.children)) {\n      renderMenu(menuList, { ...props, dataSource: item.children }, level + 1);\n    }\n  });\n};\n\nexport class AnchorList extends React.Component<AnchorListProps, AnchorTocState> {\n  static displayName = 'AnchorList';\n\n  static defaultProps = {\n    dataSource: [],\n  };\n\n  static getDerivedStateFromProps = (nextProps) => {\n    const menuList = [];\n    renderMenu(menuList, nextProps, 1);\n    return {\n      menuList,\n    };\n  };\n\n  constructor(props) {\n    super(props);\n    const initialMenuList = [];\n    renderMenu(initialMenuList, props, 1);\n    this.state = {\n      menuList: initialMenuList,\n    };\n  }\n\n  render() {\n    const { menuList } = this.state;\n    const firstFocusIdx = menuList.findIndex((item) => item.isFocus);\n    return (\n      <div className=\"fusion-ui-anchor-ver-menu\">\n        <div\n          className=\"fusion-ui-anchor-ver-menu-header\"\n          style={{\n            top: firstFocusIdx * 2 * 16 + 16,\n            display: firstFocusIdx === -1 ? 'none' : 'block',\n          }}\n        />\n        <div className=\"fusion-ui-anchor-ver-menu-footer\">\n          {menuList.map((item) => (\n            <AnchorLink key={`${item.label}-${item.htmlId}`} {...item} />\n          ))}\n        </div>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/components/VerAnchor/index.scss",
    "content": "$fusion-ui-anchor-ver-prefix: '.fusion-ui-anchor-ver';\n\n$anchor-menu-spacing: var(--s-2, $s-2);\n\n#{$fusion-ui-anchor-ver-prefix} {\n  position: fixed;\n  z-index: 100;\n  top: 120px;\n  right: 40px;\n\n  &-expand {\n    #{$fusion-ui-anchor-ver-prefix}-header {\n      padding-left: var(--anchor-menu-spacing, $anchor-menu-spacing);\n      width: 42px + $anchor-menu-spacing;\n    }\n    #{$fusion-ui-anchor-ver-prefix}-footer {\n      margin-left: var(--anchor-menu-spacing, $anchor-menu-spacing);\n    }\n    #{$fusion-ui-anchor-ver-prefix}-body {\n      opacity: 1;\n    }\n    #{$fusion-ui-anchor-ver-prefix}-mask {\n      height: 42px;\n      width: 20px;\n      position: fixed;\n      z-index: 101;\n      top: 120px;\n      right: 80px;\n      background-color: var(--color-white, $color-white);\n    }\n  }\n\n  &-button {\n    height: 42px;\n    width: 42px;\n    color: var(--color-line1-4, $color-line1-4);\n    background-color: var(--color-white, $color-white);\n    border-radius: var(--corner-2, $corner-2);\n    box-shadow: 0 0 $s-3 0 rgba(0, 0, 0, 0.1);\n    z-index: 10;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    &:hover {\n      cursor: pointer;\n    }\n  }\n\n  &-header {\n    transition: padding 0.3s ease-in-out;\n  }\n\n  &-body {\n    position: absolute;\n    top: 0;\n    right: 42px + $anchor-menu-spacing;\n    opacity: 0;\n    transition: opacity 0.3s ease-in-out;\n  }\n\n  &-footer {\n    margin-top: var(--s-2, $s-2);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/components/VerAnchor/index.tsx",
    "content": "import * as React from 'react';\nimport cx from 'classnames';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport { AnchorProps } from '../../index';\nimport { startListen, removeListen, jumpToNode } from '../../util';\nimport { AnchorList } from './AnchorList';\n\nexport class VerAnchor extends React.Component<Omit<AnchorProps, 'direction'>> {\n  static displayName = 'Anchor';\n\n  static defaultProps = {\n    defaultVisible: true,\n  };\n\n  state = {\n    currentValue: '',\n    visible: this.props.defaultVisible,\n    container: null,\n  };\n\n  prefix = 'fusion-ui-anchor-ver';\n\n  componentDidMount() {\n    const { dataSource, container, offsetY } = this.props;\n    const _container = container();\n    startListen(dataSource, () => _container, this.updateCurrentValue, {\n      offsetY,\n    });\n    this.setState({\n      container: _container,\n    });\n  }\n\n  componentWillUnmount() {\n    const { dataSource } = this.props;\n    const { container } = this.state;\n    removeListen(dataSource, () => container);\n  }\n\n  changeMenuStatus = () => {\n    const { visible } = this.state;\n    this.setState({\n      visible: !visible,\n    });\n  };\n\n  updateCurrentValue = (newValue) => {\n    this.setState({\n      currentValue: newValue,\n    });\n  };\n\n  handleScrollTop = () => {\n    document.documentElement.scrollTop = 0;\n    document.body.scrollTop = 0;\n  };\n\n  onChange = (newValue) => {\n    const { onChange } = this.props;\n    const status = onChange && onChange(newValue);\n    if (status !== false) {\n      this.setState({\n        currentValue: newValue,\n      });\n      jumpToNode(newValue);\n    }\n  };\n\n  render() {\n    const { className, style, dataSource, scrollTop } = this.props;\n    const { currentValue, visible } = this.state;\n    const classes = cx({\n      [this.prefix]: true,\n      [`${this.prefix}-expand`]: visible,\n      [className]: !!className,\n    });\n\n    return (\n      <div className={classes} style={style}>\n        <div\n          className={`${this.prefix}-header ${this.prefix}-button`}\n          onClick={this.changeMenuStatus}\n        >\n          <CustomIcon type=\"ic_bullet\" />\n        </div>\n        <div className={`${this.prefix}-body`}>\n          <div className={`${this.prefix}-mask`} />\n          <AnchorList dataSource={dataSource} value={currentValue} onSelect={this.onChange} />\n        </div>\n        <div className={`${this.prefix}-footer ${this.prefix}-button`}>\n          <a onClick={scrollTop}>\n            <CustomIcon type=\"up\" className=\"anchor-up\" />\n          </a>\n        </div>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/index.scss",
    "content": "@import './theme-dark.scss';\n@import './components/HozAnchor/index.scss';\n@import './components/VerAnchor/index.scss';\n@import './components/VerAnchor/AnchorList/index.scss';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/index.tsx",
    "content": "import * as React from 'react';\n\nimport { VerAnchor } from './components/VerAnchor';\nimport { HozAnchor } from './components/HozAnchor';\nimport { AffixProps as NextAffixProps } from '@alifd/next/types/affix';\n\nexport interface LinkItemData {\n  // 跳转的 htmlId\n  htmlId: string;\n  // 链接文案\n  label: string;\n  /**\n   * 嵌套层级\n   * 仅在 direction=\"ver\" 生效，且最大层级不超过二级\n   */\n  children?: LinkItemData[];\n}\n\nexport interface AnchorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n  /**\n   * 自定义样式名\n   */\n  className?: string;\n  /**\n   * 自定义样式\n   */\n  style?: React.CSSProperties;\n  /**\n   * 锚点方向\n   * 水平方向 dataSource 不支持属性\n   */\n  direction?: 'ver' | 'hoz';\n  /**\n   * 锚点列表数据源\n   */\n  dataSource: LinkItemData[];\n  /**\n   * 设置是否为财鲸页面的锚点\n   * 设置后会修改 container 为 () => document.querySelector('#fusion-ui-page > div.fusion-ui-page-content-wrapper');\n   */\n  isWhalePageAnchor?: boolean;\n  /**\n   * 容器，默认是 window\n   */\n  container?: () => React.ReactElement<any, string | React.JSXElementConstructor<any>> | Element;\n  /**\n   * direction=\"hoz\" 生效\n   * 开启可在滚动超出屏幕后固定在屏幕\n   */\n  hasAffix?: boolean;\n  /**\n   * hasAffix={true} 后使用\n   * 用于覆盖 Affix 的属性值\n   */\n  affixProps?: NextAffixProps;\n  /**\n   * 点击不同锚点时的自定义触发函数\n   * 默认跳转到对应 htmlId 节点\n   * 可返回布尔值，如返回 false，则阻止默认跳转操作\n   */\n  onChange?: (htmlId: string) => boolean;\n  /**\n   * 垂直跳转偏移量\n   */\n  offsetY?: number;\n  /**\n   * [方向垂直可用]\n   * 用于设定悬浮锚点的菜单是否默认展开\n   * @default true\n   */\n  defaultVisible?: boolean;\n  /**\n   * 自定义滚动到页首的方法\n   */\n  scrollTop?: () => void;\n\n  containerRef?: any;\n}\n\nfunction getScrollElement(element: HTMLElement) {\n  if (!element) return element;\n  if (elementCanScroll(element)) {\n    return element;\n  }\n  return getScrollElement(element.parentElement);\n}\n\nfunction elementCanScroll(element: any) {\n  if (!element || !(element instanceof HTMLElement)) {\n    console.log('invalid element');\n    return false;\n  }\n  if (element.scrollTop > 0) {\n    return true;\n  } else {\n    element.scrollTop++;\n    const top = element.scrollTop;\n    top && (element.scrollTop = 0);\n    return top > 0;\n  }\n}\n\nexport class Anchor extends React.Component<AnchorProps> {\n  static displayName = 'Anchor';\n  static defaultProps = {\n    direction: 'ver',\n    isWhalePageAnchor: false,\n    offsetY: 0,\n    scrollTop: () => {\n      const container =\n        getScrollElement(document.querySelector('[class^=\"fusion-ui-anchor\"]')) ||\n        document.documentElement;\n      if (container) {\n        container.scrollIntoView({ behavior: 'smooth' });\n      }\n    },\n  };\n\n  ref = React.createRef();\n\n  render() {\n    const { direction, isWhalePageAnchor, ...otherProps } = this.props;\n\n    otherProps.container = otherProps.container\n      ? otherProps.container\n      : () => {\n\n          let container = getScrollElement(this.ref?.current || document.querySelector('[class^=\"fusion-ui-anchor\"]'));\n          if (!container || container === document.documentElement) {\n            container = window;\n          }\n          return container;\n        };\n\n    if (direction === 'hoz') {\n      return <HozAnchor containerRef={this.ref} {...otherProps} />;\n    }\n\n    return <VerAnchor containerRef={this.ref} {...otherProps} />;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/theme-dark.scss",
    "content": "body.dark {\n  #{$biz-css-prefix}anchor {\n    &-hoz,\n    &-ver-button,\n    &-ver-menu,\n    &-ver-mask {\n      background-color: var(--color-fill1-1, $color-fill1-1);\n    }\n    &-ver-button {\n      color: inherit;\n      &:hover {\n        color: var(--color-brand1-6, $color-brand1-6);\n        a {\n          color: var(--color-brand1-6, $color-brand1-6);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/anchor/util.ts",
    "content": "import { events } from '@/utils/util';\nimport debounce from 'lodash/debounce';\n\nlet timeout: number;\n/**\n * 用于监听当前页面到达哪一个锚点\n * @param dataSource 数据源\n * @param container 函数，返回监听容器\n * @param cb 锚点改变时触发\n * @param external 放置额外参数，例如 offsetY\n */\nexport const startListen = (dataSource, container, cb, external: { offsetY: number }, doNotUpdate=false) => {\n  if (!doNotUpdate) {\n    updateNodePosition(dataSource, container, cb, external);\n  }\n  timeout = window.setTimeout(() => {\n    setEventHandlerForContainer(dataSource, container, cb, external);\n  });\n};\nexport const setEventHandlerForContainer = (dataSource, container, cb, external) => {\n  const affixContainer = container();\n  if (affixContainer) {\n    events.on(\n      affixContainer,\n      'scroll',\n      updateNodePosition.bind(null, dataSource, container, cb, external),\n      false,\n    );\n    events.on(\n      affixContainer,\n      'resize',\n      updateNodePosition.bind(null, dataSource, container, cb, external),\n      false,\n    );\n  }\n};\n\n/**\n * 解除 startListen 带来的监听功能\n */\nexport const removeListen = (dataSource, container) => {\n  if (timeout) {\n    clearTimeout(timeout);\n    timeout = null;\n  }\n  removeEventHandlerForContainer(dataSource, container);\n};\nconst removeEventHandlerForContainer = (dataSource, container) => {\n  const affixContainer = container();\n  if (affixContainer) {\n    events.off(affixContainer, 'scroll', updateNodePosition.bind(null, dataSource, container));\n    events.off(affixContainer, 'resize', updateNodePosition.bind(null, dataSource, container));\n  }\n};\n\n/**\n * 获取节点已经滚动的距离\n */\nexport function getScroll(node, isVertical) {\n  if (typeof window === 'undefined') {\n    return 0;\n  }\n  const windowProp = isVertical ? 'pageYOffset' : 'pageXOffset';\n  const elementProp = isVertical ? 'scrollTop' : 'scrollLeft';\n  return node === window ? node[windowProp] : node[elementProp];\n}\n\n/**\n * 滚动时触发，判断所有在页面中的节点中的”第一个“，并通过 cb 返回此 htmlId\n */\nexport const updateNodePosition = debounce((dataSource, container, cb?, external?) => {\n  const { offsetY } = external || {};\n  const affixContainer = container();\n\n  if (affixContainer) {\n    const containerScrollTop = getScroll(affixContainer, true); // 容器在垂直位置上的滚动 offset\n    let findEl;\n    const predicateItem = (item) => {\n      const el = item?.htmlId && document.getElementById(item.htmlId);\n      if (el) {\n        if (el.offsetTop >= containerScrollTop + offsetY) {\n          findEl = item.htmlId;\n          return true;\n        }\n      }\n      return false;\n    };\n    dataSource.some((item) => {\n      const status = predicateItem(item);\n      if (!status && Array.isArray(item.children)) {\n        item.children.some((subItem) => {\n          const subStatus = predicateItem(subItem);\n          return subStatus;\n        });\n      }\n\n      return !!findEl;\n    });\n    if (findEl) {\n      cb && cb(findEl);\n    }\n  }\n}, 100);\n\n/**\n * 用于在特定容器内跳转到对应的锚点位置\n * 增加 offsetY，用于跳转的偏移，防止部分元素 fixed 遮挡锚点\n */\nexport const jumpToNode = (htmlId) => {\n  const el = htmlId && document.getElementById(htmlId);\n  el.scrollIntoView({ behavior: 'smooth' });\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/area-chart/index.tsx",
    "content": "import React from 'react';\nimport { AreaChart as BizAreaChart } from 'bizcharts';\n\ntype Iprops = React.ComponentProps<typeof BizAreaChart>;\n\nfunction AreaChart(props:Iprops) {\n  return (\n    <BizAreaChart\n      tooltip={{\n        visible: true,\n      }}\n      padding=\"auto\"\n      interactions={[{ type: 'element-active' }]}\n      {...props}\n    />\n  );\n}\n\nexport default AreaChart;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/bar-chart/index.tsx",
    "content": "import React from 'react';\nimport { BarChart as BizBarChart } from 'bizcharts';\n\ntype Iprops = React.ComponentProps<typeof BizBarChart>;\n\nfunction BarChart(props:Iprops) {\n  return (\n    <BizBarChart\n      tooltip={{\n        visible: true,\n      }}\n      padding=\"auto\"\n      interactions={[\n        { type: 'active-region' },\n      ]}\n      {...props}\n    />\n  );\n}\n\nexport default BarChart;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/button/Button.tsx",
    "content": "import * as React from 'react';\nimport { Button as NextButton, Badge as NextBadge, Balloon } from '@alifd/next';\nimport { BadgeProps } from '@alifd/next/types/badge';\nimport { ButtonProps as NextButtonProps } from '@alifd/next/types/button';\n\nexport interface ButtonProps extends NextButtonProps {\n  /**\n   * 徽标相关属性\n   */\n  badgeProps?: BadgeProps;\n  tooltipProps?: TooltipProps;\n}\n\nexport interface TooltipProps {\n  showTooltip: boolean;\n  tooltipMessage: string;\n  triggerType: 'click' | 'hover';\n}\nexport interface ButtonState {\n  showTooltip: boolean;\n  tooltipMessage: string;\n  triggerType: 'click' | 'hover';\n}\n\nexport class Button extends React.Component<ButtonProps, ButtonState> {\n  static displayName = 'Button';\n\n  static getDerivedStateFromProps = (\n    nextProps: ButtonProps,\n    prevState: ButtonState = {\n      showTooltip: false,\n      tooltipMessage: '',\n      triggerType: 'click',\n    },\n  ) => {\n    const { tooltipProps = {} } = nextProps;\n    return {\n      ...prevState,\n      ...tooltipProps,\n    };\n  };\n\n  constructor(props: ButtonProps) {\n    super(props);\n    const { tooltipProps = {} } = props;\n    this.state = {\n      showTooltip: false,\n      tooltipMessage: '',\n      triggerType: 'click',\n      ...tooltipProps,\n    };\n  }\n\n  /**\n   * @deprecated\n   * @param message\n   * @param triggerType\n   */\n  toggleTip = (message: string, triggerType: 'click' | 'hover') => {\n    const { triggerType: stateTriggerType } = this.state;\n    this.setState({\n      showTooltip: true,\n      tooltipMessage: message,\n      triggerType: triggerType || stateTriggerType || 'click',\n    });\n  };\n\n  enableTooltip = (triggerType: 'click' | 'hover' = 'click', message: string) => {\n    const { triggerType: stateTriggerType } = this.state;\n    this.setState({\n      showTooltip: true,\n      tooltipMessage: message,\n      triggerType: triggerType || stateTriggerType || 'click',\n    });\n  };\n\n  render() {\n    const { showTooltip, tooltipMessage, triggerType } = this.state;\n    const { badgeProps, id, ...otherProps } = this.props;\n    const buttonComp = <NextButton {...otherProps} />;\n    let finalComp = buttonComp;\n    if (badgeProps) {\n      finalComp = <NextBadge {...badgeProps}>{buttonComp}</NextBadge>;\n    }\n\n    if (showTooltip) {\n      finalComp = (\n        <Balloon trigger={finalComp} defaultVisible triggerType={triggerType}>\n          {tooltipMessage}\n        </Balloon>\n      );\n    }\n\n    return <div id={id}>{finalComp}</div>;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/button/index.tsx",
    "content": "export * from './Button';\n\n"
  },
  {
    "path": "packages/fusion-ui/src/components/button-group/ButtonGroup.tsx",
    "content": "import * as React from 'react';\nimport omit from 'lodash/omit';\nimport cx from 'classnames';\nimport { Button, ButtonProps } from '@/components/button';\nimport { MenuButton, MenuButtonProps } from '@/components/menu-button';\nimport { Space, SpaceProps } from '@/components/container';\nimport checkComName from '@/utils/checkComName';\n\nexport interface ButtonGroupProps extends SpaceProps {\n  /**\n   * 自定义样式\n   */\n  style?: React.CSSProperties;\n  /**\n   * 自定义样式名\n   */\n  className?: string;\n  /**\n   * 是否设定按钮为文字模式\n   */\n  text?: boolean;\n  /**\n   * 可见按钮数量，超过会收起到”更多“菜单中\n   */\n  visibleButtonCount?: number | false;\n  /**\n   * 数据源驱动，如传入 children，则以 children 优先\n   */\n  dataSource?: ButtonProps[];\n  /**\n   * \"更多\" 按钮的额外配置\n   */\n  moreMenuButtonProps?: Partial<MenuButtonProps>;\n  /**\n   * 国际化文案\n   */\n  i18nBundle?: any;\n}\n\nexport class ButtonGroup extends React.Component<ButtonGroupProps> {\n  static defaultProps = {\n    visibleButtonCount: 3,\n    moreMenuButtonProps: {},\n  };\n\n  static displayName = 'ButtonGroup';\n\n  /**\n   * 将 dataSource 和 children 处理成真正的 dataSource\n   */\n  getDataSource = () => {\n    const { dataSource, children, text } = this.props;\n\n    let externalProps: Partial<ButtonProps> = {};\n    if (text) {\n      externalProps = {\n        type: 'primary',\n        text: true,\n      };\n    }\n\n    const realDataSource: object[] = [];\n\n    if (children) {\n      React.Children.forEach(children, (child) => {\n        if (checkComName(child, Button)) {\n          realDataSource.push({\n            ...externalProps,\n            ...child.props,\n          });\n        } else if (\n          // 表单操作按钮逻辑兼容\n          checkComName(child, null, [\n            'SubmitButton',\n            'ResetButton',\n            'Submit',\n            'Reset',\n            'Form.Submit',\n            'Form.Reset',\n            'Config(Button)',\n          ])\n        ) {\n          realDataSource.push(child);\n        }\n      });\n    } else if (Array.isArray(dataSource)) {\n      dataSource.forEach((dataSourceItem) => {\n        realDataSource.push({\n          ...externalProps,\n          ...dataSourceItem,\n        });\n      });\n    }\n\n    return realDataSource;\n  };\n\n  /**\n   * 获取可展示的 dataSource & 折叠的 dataSource\n   */\n  getVisibleDataSourceAndCollapseDataSource = (dataSource) => {\n    const { visibleButtonCount } = this.props;\n    if (visibleButtonCount === false) {\n      return {\n        visible: dataSource,\n        collapse: [],\n      };\n    }\n\n    const visibleDataSource = [];\n    const collapseDataSource = [];\n\n    dataSource.forEach((dataSourceItem, idx) => {\n      if (idx >= visibleButtonCount) {\n        collapseDataSource.push(dataSourceItem);\n      } else {\n        visibleDataSource.push(dataSourceItem);\n      }\n    });\n\n    return {\n      visible: visibleDataSource,\n      collapse: collapseDataSource,\n    };\n  };\n\n  /**\n   * 渲染可展示的 dataSource\n   */\n  renderVisible(dataSource) {\n    const buttonList = [];\n    dataSource.forEach((dataSourceItem, idx) => {\n      if (React.isValidElement(dataSourceItem)) {\n        buttonList.push(dataSourceItem);\n      } else {\n        buttonList.push(<Button key={idx} {...dataSourceItem} />);\n      }\n    });\n\n    return buttonList;\n  }\n\n  /**\n   * 渲染折叠的 dataSource\n   */\n  renderCollapse(dataSource) {\n    const { i18nBundle, moreMenuButtonProps, text } = this.props;\n\n    const menuDataSource = dataSource.map((dataSourceItem) => {\n      if (typeof dataSourceItem.props === 'object') {\n        return omit(dataSourceItem.props, ['type', 'text']);\n      }\n      return omit(dataSourceItem, ['type', 'text']);\n    });\n    if (dataSource.length > 0) {\n      return (\n        <MenuButton\n          popupProps={{ align: 'tr br' }}\n          label={i18nBundle.more}\n          text={text}\n          type={text ? 'primary' : 'normal'}\n          {...moreMenuButtonProps}\n          dataSource={menuDataSource}\n        />\n      );\n    }\n  }\n\n  render() {\n    const {\n      style,\n      className,\n      // otherProps\n      text,\n      visibleButtonCount,\n      dataSource,\n      moreMenuButtonProps,\n      i18nBundle,\n      ...otherProps\n    } = this.props;\n\n    const classes = cx('fusion-ui-button-group', className);\n\n    const realDataSource = this.getDataSource();\n    const { visible, collapse } = this.getVisibleDataSourceAndCollapseDataSource(realDataSource);\n\n    return (\n      <Space className={classes} style={style} {...otherProps}>\n        {this.renderVisible(visible)}\n        {this.renderCollapse(collapse)}\n      </Space>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/button-group/i18n.ts",
    "content": "/**\n * 组件内置的多语言文案\n */\n\nconst bundles = {\n  'zh-CN': {\n    more: '更多',\n  },\n  'en-US': {\n    more: 'More',\n  },\n};\n\nexport default bundles;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/button-group/index.tsx",
    "content": "import { withGlobal } from '@/provider';\nimport { ButtonGroup as PureButtonGroup, ButtonGroupProps } from './ButtonGroup';\n\nexport const ButtonGroup = withGlobal(PureButtonGroup, {\n  i18nBundleName: 'ButtonGroup',\n});\nexport { ButtonGroupProps };\n"
  },
  {
    "path": "packages/fusion-ui/src/components/column-chart/index.tsx",
    "content": "import React from 'react';\nimport { ColumnChart as BizColumnChart } from 'bizcharts';\n\ntype Iprops = React.ComponentProps<typeof BizColumnChart>;\n\nfunction ColumnChart(props: Iprops) {\n  const { meta, ...others } = props;\n\n  return (\n    <BizColumnChart\n      tooltip={{\n        visible: true,\n      }}\n      padding=\"auto\"\n      interactions={[{ type: 'active-region' }]}\n      {...others}\n    />\n  );\n}\n\nexport default ColumnChart;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/container/Grid.tsx",
    "content": "import React, { useState, useRef, useEffect, cloneElement } from 'react';\nimport cn from 'classnames';\nimport compact from 'lodash/compact';\n\nexport interface GridProps {\n  /**\n   * 自定义样式名\n   */\n  className?: string;\n  /**\n   * 插槽区\n   */\n  splot?: React.ReactNode;\n  /**\n   * 子元素分几列展示，如果不设置就会自动开启响应式模式\n   */\n  cols?: number;\n  /**\n   * 快速描述子元素布局\n   */\n  area?: number[] | Array<[number, number]> | Array<number | [number, number]>;\n  /**\n   * 列间距\n   * @default 20\n   */\n  columnGap?: number;\n  /**\n   * 行间距\n   * @default 20\n   */\n  rowGap?: number;\n  /**\n   * 是否开启响应式模式\n   */\n  responsive?: boolean;\n  /**\n   * 响应式导致列发生改变的时候的回调\n   */\n  onColumnChange?: (column) => void;\n  /**\n   * 容器的样式\n   */\n  style?: React.CSSProperties;\n  /**\n   * 子元素的样式控制\n   */\n  gridItemStyle?: React.CSSProperties;\n}\n\nconst DEFAULT_COLS = 4;\nconst Grid: React.FC<GridProps> = ({\n  style,\n  gridItemStyle,\n  columnGap,\n  rowGap,\n  splot,\n  cols: propsCols,\n  area,\n  className,\n  children,\n  responsive: propResponsive,\n  onColumnChange,\n}) => {\n  const responsive = !propsCols ? true : propResponsive;\n  const [cols, setCols] = useState(propsCols);\n  const gridRef = useRef();\n  useEffect(() => {\n    if (responsive) {\n      new ResizeObserver((enties) => {\n        for (const oGrid of enties) {\n          const width = oGrid.target.clientWidth;\n          let targetCols = DEFAULT_COLS;\n\n          if (width <= 602) {\n            targetCols = 1;\n          } else if (width >= 603 && width <= 894) {\n            targetCols = 2;\n          } else if (width >= 895 && width <= 1187) {\n            targetCols = 3;\n          } else if (width >= 1188) {\n            targetCols = 4;\n          }\n          if (targetCols !== cols) {\n            onColumnChange(targetCols);\n          }\n          setCols(targetCols);\n        }\n      }).observe(gridRef.current);\n    }\n  }, [responsive]);\n\n  return (\n    <div\n      data-name=\"Grid\"\n      style={{\n        gridTemplateColumns: `repeat(${responsive ? cols : propsCols}, minmax(0, 1fr) [col-start])`,\n        gridColumnGap: columnGap,\n        gridRowGap: rowGap,\n        ...style,\n        visibility: cols === undefined ? 'hidden' : 'visible',\n      }}\n      ref={gridRef}\n      className={cn('fusion-ui-grid', className, responsive && 'responsive')}\n    >\n      {React.Children.map(\n        compact(React.Children.toArray(children)),\n        (item: React.ReactElement, index) => {\n          const { colSpan, rowSpan, hidden } = item.props;\n          const areaIndexData = [].concat(area?.[index]);\n          const gridItemRow = rowSpan || areaIndexData?.[1] || 1;\n          const gridItemColumn = colSpan || areaIndexData?.[0] || 1;\n\n          return cloneElement(item, {\n            style: {\n              ...(item.props.style || {}),\n              ...gridItemStyle,\n              display: hidden ? 'none' : item.props.style?.display || null,\n              gridRow: `span ${gridItemRow}`,\n              gridColumn: `span ${gridItemColumn === 'full' ? cols : gridItemColumn}`,\n            },\n          });\n        },\n      )}\n      {splot}\n    </div>\n  );\n};\n\nGrid.defaultProps = {\n  columnGap: 20,\n  rowGap: 20,\n  responsive: false,\n  onColumnChange: () => {},\n};\n\nGrid.displayName = 'Grid';\n\nexport { Grid };\n"
  },
  {
    "path": "packages/fusion-ui/src/components/container/Space.tsx",
    "content": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Divider, Box } from '@alifd/next';\nimport { BoxProps } from '@alifd/next/types/box';\n\ntype Direction = 'ver' | 'hoz' | 'hoz-reverse';\nexport interface SpaceProps extends Omit<BoxProps, 'direction'> {\n  /**\n   * 子元素是否需要分割线\n   */\n  split?: boolean;\n  /**\n   * 子元素摆放方向\n   */\n  direction?: Direction;\n}\n// Box 组件本身的 `direction` api value 不符合语意规范\nconst directionMap = {\n  ver: 'column',\n  hoz: 'row',\n  'hoz-reverse': 'row-reverse',\n};\nclass Space extends React.Component<SpaceProps> {\n  static displayName = 'Space';\n  static propTypes = {\n    ...Box.propTypes,\n    split: PropTypes.bool,\n    direction: PropTypes.oneOf(['hoz', 'ver', 'hoz-reverse']),\n  };\n  static defaultProps = {\n    ...Box.defaultProps,\n    spacing: 8,\n    direction: 'hoz',\n    split: false,\n  };\n  /**\n   * 在子元素之间插入分隔符\n   * @param {ReactNode} children Space组件子元素\n   * @param {string} direction divider 方向\n   * @returns React.Children\n   */\n  insertDividerIntoChildren = (children: React.ReactNode, direction: Direction) => {\n    const withDividerChildren = [];\n    const originalChildren = React.Children.toArray(children);\n    originalChildren.forEach((item, index) => {\n      withDividerChildren.push(item);\n      if (index !== originalChildren.length - 1) {\n        withDividerChildren.push(\n          // Divider direction 跟 space 的 direction 是相反的\n          <Divider\n            key={index}\n            direction={direction === 'ver' ? 'hoz' : 'ver'}\n            style={{ opacity: 0.5, top: 0 }}\n          />,\n        );\n      }\n    });\n    return withDividerChildren;\n  };\n  render() {\n    const { split, direction, align, children, ...others } = this.props;\n    return (\n      <Box\n        data-name=\"Space\"\n        {...others}\n        align={align || (direction === 'ver' ? 'start' : 'center')}\n        direction={directionMap[direction] as 'row' | 'column' | 'row-reverse'}\n      >\n        {split ? this.insertDividerIntoChildren(children, direction) : children}\n      </Box>\n    );\n  }\n}\n\nexport { Space };\n"
  },
  {
    "path": "packages/fusion-ui/src/components/container/i18n.ts",
    "content": "export default {\n  'zh-CN': {\n    expand: '展开',\n    hidden: '收起',\n    primaryBtnText: '查询',\n    secondaryBtnText: '重置',\n  },\n  en: {\n    expand: 'More',\n    hidden: 'Hide',\n    primaryBtnText: 'Query',\n    secondaryBtnText: 'Reset',\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/container/index.tsx",
    "content": "export * from './Grid';\nexport * from './Space';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/donut-chart/index.tsx",
    "content": "import React from 'react';\nimport { DonutChart as MyChart } from 'bizcharts';\nimport DataSet from '@antv/data-set';\nimport numeral from 'numeral';\n\nconst { DataView } = DataSet;\nconst dv = new DataView();\n\nconst processStatistic = (statistic: string | object) => {\n  return typeof statistic === 'string'\n    ? {\n        title: false,\n        content: {\n          style: {\n            whiteSpace: 'pre-wrap',\n            overflow: 'hidden',\n            textOverflow: 'ellipsis',\n            fontSize: '20',\n            lineHeight: 1.2,\n          },\n          formatter: () => statistic,\n        },\n      }\n    : statistic;\n};\n\ntype Iprops = React.ComponentProps<typeof MyChart>;\n\n\nfunction DonutChart(props: Iprops) {\n  const { data, statistic, ...others } = props || {};\n\n  dv.source(data);\n  // 求百分比\n  dv.transform({\n    type: 'percent',\n    field: props?.angleField, // 统计字段\n    dimension: props?.colorField, // 该字段的占比\n    as: 'percent', // 结果存储在该字段\n  });\n\n  return (\n    <MyChart\n      autoFit\n      radius={0.8}\n      innerRadius={0.5}\n      padding=\"auto\"\n      interactions={[\n        { type: 'element-selected' },\n        // { type: 'element-active' }\n      ]}\n      data={dv.rows}\n      label={{\n        offset: 20,\n        formatter: (angleField) => {\n          const percent =\n            typeof angleField?.percent === 'number'\n              ? numeral(angleField?.percent).format('0.00%')\n              : angleField?.percent;\n          return [`${angleField?.[props?.colorField]} ${percent}`];\n        },\n      }}\n      statistic={processStatistic(statistic)}\n      {...others}\n    />\n  );\n}\n\nexport default DonutChart;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/ellipsis/index.scss",
    "content": "@import './theme-dark.scss';\n\n/* 这里写你漂亮的样式 */\n.fusion-ui-ellipsis {\n  white-space: nowrap;\n  display: flex;\n  &-header {\n    flex: 1 1 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n  &-footer {\n    flex-shrink: 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n}\n\n.fusion-ui-text-clip {\n  display: inline-flex;\n  &-inner {\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/ellipsis/index.tsx",
    "content": "import cx from 'classnames';\nimport * as React from 'react';\nimport { Balloon } from '@alifd/next';\n\nconst { Tooltip } = Balloon;\nexport interface FusionEllipsisProps {\n  style?: React.CSSProperties;\n  className?: string;\n  /**\n   * 用于决定省略号出现的位置\n   */\n  ellipsisPosition?: 'middle' | 'end';\n  /**\n   * 在 ellipsisPosition=\"middle\" 生效\n   * 决定出现在末尾的字符串的数量\n   */\n  endCharCount?: number;\n  /**\n   * 是否有 tooltip\n   */\n  hasTooltip?: boolean;\n  /**\n   * tooltip 属性覆盖\n   */\n  tooltipProps?: any;\n}\n\ninterface FusionEllipsisState {\n  isOverflow: boolean;\n}\n\nexport class Ellipsis extends React.Component<FusionEllipsisProps, FusionEllipsisState> {\n  static displayName = 'Ellipsis';\n\n  static defaultProps = {\n    ellipsisPosition: 'end',\n    endCharCount: 8,\n    hasTooltip: true,\n  };\n\n  private textRef;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isOverflow: false,\n    };\n  }\n\n  componentDidMount() {\n    if (this.props.ellipsisPosition === 'middle') {\n      if (this.textRef && this.textRef.scrollWidth > this.textRef.offsetWidth) {\n        this.setState({\n          isOverflow: true,\n        });\n      }\n    }\n  }\n\n  onMouseEnter = () => {\n    if (this.textRef && this.textRef.scrollWidth > this.textRef.offsetWidth) {\n      this.setState({\n        isOverflow: true,\n      });\n    } else {\n      this.setState({\n        isOverflow: false,\n      });\n    }\n  };\n\n  saveTextRef = (ref) => {\n    this.textRef = ref;\n  };\n\n  render() {\n    const { isOverflow } = this.state;\n    const {\n      children,\n      className,\n      ellipsisPosition,\n      endCharCount,\n      hasTooltip,\n      tooltipProps,\n      ...otherProps\n    } = this.props;\n\n    const classes = cx({\n      'fusion-ui-ellipsis': true,\n      [className]: !!className,\n    });\n\n    // 默认\n    let trigger = (\n      <div onMouseEnter={this.onMouseEnter} className={classes} {...otherProps}>\n        <div ref={this.saveTextRef} className=\"fusion-ui-ellipsis-header\">\n          {children}\n        </div>\n      </div>\n    );\n\n    // 省略号出现在中间\n    if (isOverflow && ellipsisPosition === 'middle') {\n      const startChildren = children.substr(0, children.length - endCharCount);\n      const endChildren = children.substr(-endCharCount);\n      trigger = (\n        <div className={classes} {...otherProps}>\n          <div ref={this.saveTextRef} className=\"fusion-ui-ellipsis-header\">\n            {startChildren}\n          </div>\n          <div className=\"fusion-ui-ellipsis-footer\">{endChildren}</div>\n        </div>\n      );\n    }\n\n    // 出现 Balloon\n    if (isOverflow && hasTooltip) {\n      return (\n        <Tooltip trigger={trigger} {...tooltipProps}>\n          {<>{children}</>}\n        </Tooltip>\n      );\n    }\n\n    return trigger;\n  }\n}\n\nexport interface TextClipProps {\n  style?: React.CSSProperties;\n  className?: string;\n  /**\n   * 待展示的文本\n   */\n  children: React.ReactNode;\n  /**\n   * 最多展示几行文本\n   */\n  line?: number;\n}\n\nexport const TextClip: React.FC<TextClipProps> = ({ children, style, line, className }) => {\n  return (\n    <div className=\"fusion-ui-text-clip\">\n      <div\n        className={cx([className, 'fusion-ui-text-clip-inner'])}\n        style={{ ...style, WebkitLineClamp: line }}\n        title={children as string}\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n\nTextClip.defaultProps = {\n  line: 2,\n};\n\nTextClip.displayName = 'TextClip';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/ellipsis/theme-dark.scss",
    "content": "body.dark {\n  /* 这里写暗色覆盖主题 */\n  .fusion-ui-ellipsis {\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/expand-table/index.scss",
    "content": ".fusion-ui-expand-table-child {\n  padding: var(--s-3, $s-3);\n  background: var(--color-fill1-1, $color-fill1-1);\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/expand-table/index.tsx",
    "content": "import * as React from 'react';\nimport { AsyncDataSource } from '@/types';\nimport { ProTable } from '@/components/pro-table';\nimport { ProTableProps } from '../pro-table/types';\n\nexport interface ExpandTableDataProps {\n  childTableProps: AsyncDataSource;\n}\n\nexport interface ExpandTableProps extends ProTableProps {\n  /**\n   * 表格数据源\n   */\n  dataSource?: ExpandTableDataProps[];\n}\n\n/**\n * 子母表\n */\nexport class ExpandTable extends React.Component<ExpandTableProps> {\n  static displayName = 'ExpandTable';\n\n  static defaultProps = {\n    showActionBar: true,\n    settingButtons: false,\n  };\n\n  render() {\n    const { dataSource, children, ...otherProps } = this.props;\n    const { primaryKey } = otherProps;\n    if (!dataSource) return null;\n    const parsedDataSource = dataSource.map((item) => {\n      return item;\n    });\n    const expandedRowRender = (record: any) => {\n      const { childTableProps } = record;\n\n      return (\n        <div className=\"fusion-ui-expand-table-child\">\n          <ProTable {...childTableProps} key={record[primaryKey || 'id']} size=\"small\" />\n        </div>\n      );\n    };\n\n    return (\n      <ProTable expandedRowRender={expandedRowRender} dataSource={parsedDataSource} {...otherProps}>\n        {children}\n      </ProTable>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/filter/index.scss",
    "content": "@import './theme-dark.scss';\n\n#{$biz-css-prefix}filter {\n  display: grid;\n  &-buttons {\n    display: flex;\n    justify-content: flex-end;\n    align-items: flex-end;\n    padding-top: var(--s-4, $s-4);\n    #{$biz-css-prefix}common-operations.operation-container {\n      padding-top: 0;\n    }\n    .btns {\n      display: inline-flex;\n      button {\n        margin-right: var(--s-2, $s-2);\n        &:last-child {\n          margin-right: 0;\n        }\n      }\n    }\n    &.left {\n      padding-top: 0;\n      justify-content: flex-start;\n    }\n    .inside-button {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      margin-right: 0;\n      i:before {\n        transform: scale(0.84);\n      }\n    }\n  }\n  &-configurator {\n    background-color: var(--color-white, $color-white);\n    box-shadow: var(--shadow-2, $shadow-2);\n    margin-top: 4px;\n    min-width: 200px;\n    max-width: 300px;\n    border-radius: 4px;\n    &-title {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding: 8px 12px;\n      border-bottom: 1px solid $color-line1-1;\n      span {\n        font-size: 14px;\n        font-weight: bold;\n      }\n      i {\n        color: var(--color-line1-3, $color-line1-3);\n        font-weight: 200;\n        padding: 0 1px;\n        border-radius: 2px;\n        transition: background-color 0.3s;\n        &:hover {\n          cursor: pointer;\n          color: var(--color-line1-4, $color-line1-4);\n        }\n      }\n    }\n    &-body {\n      padding: 4px;\n      max-height: 400px;\n      overflow: auto;\n      &.dragover {\n        #{$biz-css-prefix}icon-drag {\n          display: none !important;\n        }\n        #{$biz-css-prefix}filter-configurator-item:not(.dragging) {\n          background-color: transparent !important;\n        }\n      }\n    }\n    &-item {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      border-radius: 4px;\n      padding: 0 8px 0 12px;\n      height: 32px;\n      user-select: none;\n      &.dragging {\n        background-color: #f4f5f8;\n      }\n      &:hover {\n        background-color: var(--color-fill1-1 !important, $color-fill1-1 !important);\n        #{$biz-css-prefix}icon-drag {\n          display: block;\n        }\n      }\n      #{$biz-css-prefix}icon-drag {\n        color: var(--color-line1-4, $color-line1-4);\n        display: none;\n        &:hover {\n          padding: 2px 0;\n          background-color: var(--color-fill1-3, $color-fill1-3);\n          border-radius: 2px;\n        }\n        // padding: 1px;\n        // background-color: var(--color-fill1-1, $color-fill1-1);\n      }\n      #{$biz-css-prefix}checkbox-label {\n        margin-left: 8px;\n      }\n    }\n  }\n  #{$biz-css-prefix}form-item {\n    margin-bottom: 0;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/filter/index.tsx",
    "content": "import * as React from 'react';\nimport { Button, Checkbox, Overlay, Form } from '@alifd/next';\nimport cn from 'classnames';\nimport { Space, Grid, GridProps } from '@/components/container';\nimport compact from 'lodash/compact';\nimport { useI18nBundle } from '@/provider';\nimport { FormProps, Item } from '@alifd/next/types/form';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport { ToggleIcon, CustomIcon } from '@/components/toggle-icon';\nimport { formatFormItems } from '@/components/pro-form/layouts/pro-form';\nimport Operations from '@/common/operations';\n\nconst { useState, useEffect, useRef, cloneElement } = React;\nexport const FilterItem: typeof Item = Form.Item;\n\ninterface IFilterConfig {\n  key: string;\n  visible: boolean;\n  index: number;\n}\nexport interface FilterProps extends GridProps {\n  /**\n   * 是否展开，受控\n   */\n  expand?: boolean;\n  /**\n   * 是否默认展开，非受控\n   */\n  defaultExpand?: boolean;\n  /**\n   * 最多显示几行元素，超出部分将会提供「展开/收起」按钮\n   */\n  visibleRowCount?: number;\n  /**\n   * 是否开启配置筛选项\n   */\n  enableFilterConfiguration?: boolean;\n  /**\n   * 配置保存在本地 localStorage 中的 key，请确定为全局唯一\n   * 建议命名方法为：业务域_产品_页面\n   */\n  configStorageKey?: string;\n  /**\n   * 展开收起回调\n   */\n  onExpand?: (expand: boolean) => void;\n  /**\n   * 是否显示「展开/收起」按钮\n   * @default false\n   */\n  hideExpandButton?: boolean;\n  /**\n   * 是否显示默认的「查询/重置」按钮\n   * @default false\n   */\n  hideDefaultButtons?: boolean;\n  /**\n   * 是否开启表单能力，开启后会使用 fusion Form 组件进行子元素管理\n   */\n  enableForm?: boolean;\n  /**\n   * fusion form 的 api\n   * @see {@link https://fusion.alibaba-inc.com/pc/component/form?themeid=2#API}\n   */\n  formProps?: FormProps;\n  /**\n   * 按钮漕位渲染\n   */\n  buttons?: {\n    /**\n     * 点击主按钮回调\n     * @deprecated 请使用 props.onSearch\n     */\n    onSearch?: (val: string) => void;\n    /**\n     * 点击次按钮回调\n     * @deprecated 请使用 props.onReset\n     */\n    onReset?: () => void;\n    /**\n     * 自定义渲染\n     * @deprecated 请使用 props.buttonRender\n     */\n    render?: () => React.ReactNode;\n  };\n  /**\n   * 点击主按钮回调\n   */\n  onSearch?: (val: string) => void;\n  /**\n   * 点击次按钮回调\n   */\n  onReset?: () => void;\n  /**\n   * 右下角操作区槽位自定义渲染\n   */\n  buttonRender?: () => React.ReactNode;\n  operations?: object[];\n  operationConfig?: object;\n}\n\nconst Filter: React.FC<FilterProps> = ({\n  expand: propsExpand,\n  defaultExpand,\n  hideExpandButton,\n  buttons,\n  onExpand,\n  hideDefaultButtons,\n  visibleRowCount,\n  enableFilterConfiguration,\n  configStorageKey = window.location?.pathname,\n  children,\n  enableForm,\n  operations,\n  operationConfig,\n  ...others\n}) => {\n  const { cols: propsCols } = others;\n  const [cols, setCols] = useState(propsCols);\n  const onSearch = others.onSearch || buttons.onSearch;\n  const onReset = others.onReset || buttons.onReset;\n  const buttonRender = others.buttonRender || buttons.render;\n  const visibleItemCount = cols * visibleRowCount;\n  const i18nBundle = useI18nBundle('Filter');\n  const overlayRef = useRef();\n  const [overlayVisible, setOverlayVisible] = useState(false);\n  const [expand, setExpand] = useState(defaultExpand);\n  // 对子元素重排\n  const rearrange = (c: any) => {\n    const iChildren = React.Children.toArray(c);\n    if (!enableFilterConfiguration) return { c: iChildren, meta: null };\n    const configs: IFilterConfig[] = JSON.parse(localStorage.getItem(configStorageKey) || '[]');\n    const foundItems: any[] = [];\n    const notFoundItems: ConcatArray<any> = [];\n    // config 的 item 包含三个属性 key、visible\n    iChildren.forEach((element) => {\n      const key =\n        element?.props?.formItemProps?.primaryKey || element?.props?.title || element?.props?.label;\n      let indexInConfig;\n      const itemInConfigs = configs.find((item, i) => {\n        if (item.key === key) {\n          indexInConfig = i;\n          return true;\n        }\n        return false;\n      });\n      if (itemInConfigs) {\n        foundItems[indexInConfig] =\n          itemInConfigs.visible === false\n            ? cloneElement(element, {\n                invisible: true,\n              })\n            : element;\n      } else {\n        notFoundItems.push(element);\n      }\n    });\n    const newChildren = foundItems.concat(notFoundItems);\n    return {\n      c: newChildren,\n      meta: newChildren.map((element) => {\n        const key =\n          element?.props?.formItemProps?.primaryKey ||\n          element?.props?.title ||\n          element?.props?.label;\n        const label =\n          element?.props?.formItemProps?.label || element?.props?.title || element?.props?.label;\n        const config = configs.find((item) => item.key === key);\n        return {\n          key,\n          label,\n          visible: config?.visible === undefined ? true : config.visible,\n        };\n      }),\n    };\n  };\n  const [fieldsMeta, setFieldsMeta] = useState(compact(rearrange(children).meta));\n  const { c, meta } = rearrange(children);\n  useEffect(() => {\n    setFieldsMeta(compact(rearrange(children).meta));\n  }, [children]);\n  // expand 受控模式\n  useEffect(() => {\n    if (propsExpand !== undefined) {\n      setExpand(propsExpand);\n    }\n  }, [propsExpand]);\n  // 展开收起切换\n  const onToggleExpand = () => {\n    onExpand(!expand);\n    setExpand(!expand);\n  };\n  const getItemStyle = (isDragging: any, draggableStyle: any) => ({\n    boxShadow: isDragging ? '0 1px 3px rgba(0, 0, 0, .1)' : 'none',\n    ...draggableStyle,\n  });\n  // 拖拽配置项结束\n  const onConfiguratorDragEnd = (result: {\n    destination: { index: number };\n    source: { index: number };\n  }) => {\n    if (!result.destination) {\n      return;\n    }\n    const iMeta = Array.from(fieldsMeta);\n    const [removed] = iMeta.splice(result.source.index, 1);\n    iMeta.splice(result.destination.index, 0, removed);\n\n    if (enableFilterConfiguration) {\n      localStorage.setItem(configStorageKey, JSON.stringify(iMeta));\n    }\n    setFieldsMeta(iMeta);\n  };\n  /**\n   * 控制过滤项是否可见\n   * @param key 过滤条件\n   * @param visible 是否可见\n   */\n  const onFilterItemVisibleChange = (key: string, visible: boolean) => {\n    const iMeta = Array.from(fieldsMeta);\n    iMeta.find((item) => {\n      if (item.key === key) {\n        item.visible = visible;\n        return true;\n      }\n      return false;\n    });\n    if (enableFilterConfiguration) {\n      localStorage.setItem(configStorageKey, JSON.stringify(iMeta));\n    }\n    setFieldsMeta(iMeta);\n  };\n  // 渲染操作「主」、「次」按钮\n  const renderDefaultBtns = () => {\n    const submitBtn = (\n      <Form.Submit type=\"primary\" validate onClick={onSearch}>\n        {i18nBundle.primaryBtnText}\n      </Form.Submit>\n    );\n    const resetBtn = <Form.Reset onClick={onReset}>{i18nBundle.secondaryBtnText}</Form.Reset>;\n    return [submitBtn, resetBtn];\n  };\n  // 渲染配置筛选项弹窗\n  const renderConfigurator = () => {\n    return (\n      <div>\n        <ToggleIcon\n          onClick={() => setOverlayVisible((vo) => !vo)}\n          active={overlayVisible}\n          type=\"table-setting\"\n          ref={overlayRef}\n        />\n        <Overlay\n          visible={overlayVisible}\n          target={() => overlayRef.current}\n          safeNode={() => overlayRef.current}\n          onRequestClose={() => setOverlayVisible(false)}\n        >\n          <div className=\"fusion-ui-filter-configurator\">\n            <div className=\"fusion-ui-filter-configurator-title\">\n              <span>切换显示与排序</span>\n              <CustomIcon type=\"close\" size=\"small\" onClick={() => setOverlayVisible(false)} />\n            </div>\n            <DragDropContext onDragEnd={onConfiguratorDragEnd}>\n              <Droppable droppableId=\"droppable\">\n                {(\n                  provided: { droppableProps: any; innerRef: any; placeholder: any },\n                  snapshot: { isDraggingOver: any },\n                ) => (\n                  <div\n                    {...provided.droppableProps}\n                    ref={provided.innerRef}\n                    className={cn(\n                      'fusion-ui-filter-configurator-body',\n                      snapshot.isDraggingOver && 'dragover',\n                    )}\n                  >\n                    {meta.map((field, i) => (\n                      <Draggable key={field.key} draggableId={field.key} index={i}>\n                        {(\n                          draggableProvided: {\n                            innerRef: any;\n                            draggableProps: { style: any };\n                            dragHandleProps: any;\n                          },\n                          iSnapshot: { isDragging: any },\n                        ) => (\n                          <div\n                            className={cn(\n                              'fusion-ui-filter-configurator-item',\n                              iSnapshot.isDragging && 'dragging',\n                            )}\n                            ref={draggableProvided.innerRef}\n                            {...draggableProvided.draggableProps}\n                            style={getItemStyle(\n                              iSnapshot.isDragging,\n                              draggableProvided.draggableProps.style,\n                            )}\n                          >\n                            <Checkbox\n                              checked={field.visible}\n                              onChange={(checked) => onFilterItemVisibleChange(field.key, checked)}\n                            >\n                              {field.label}\n                            </Checkbox>\n                            <span {...draggableProvided.dragHandleProps}>\n                              <CustomIcon type=\"drag\" size=\"small\" />\n                            </span>\n                          </div>\n                        )}\n                      </Draggable>\n                    ))}\n                    {provided.placeholder}\n                  </div>\n                )}\n              </Droppable>\n            </DragDropContext>\n          </div>\n        </Overlay>\n      </div>\n    );\n  };\n  const renderChildren = () => {\n    return compact(\n      c.map((item, index) => {\n        const exceedVisibleItemCount: boolean = index > visibleItemCount - 1;\n        // 子元素不可见\n        const itemInvisible = exceedVisibleItemCount && !expand;\n        if (itemInvisible || item?.props?.invisible) return null;\n        return item;\n      }),\n    );\n  };\n  // 渲染操作按钮\n  const renderOperator = () => {\n    const childrenCount = compact(c.map((item) => (item.props.invisible ? null : item))).length;\n    const alignLeft = childrenCount <= cols - 1;\n    const expandBtnVisible = !hideExpandButton && childrenCount > visibleItemCount;\n    const operationsProps = { operations, operationConfig, renderDefaultBtns };\n    return (\n      <div\n        className={cn('fusion-ui-filter-buttons', {\n          left: alignLeft,\n          'has-more': expandBtnVisible,\n        })}\n        style={{ gridColumnEnd: alignLeft ? 'auto' : '-1' }}\n      >\n        <Space split>\n          {/* 配置筛选项 */}\n          {enableFilterConfiguration && renderConfigurator()}\n          {/* 用户自定义的 button render */}\n          {buttonRender ? (\n            <Space className=\"btns\">\n              {hideDefaultButtons ? (\n                buttonRender()\n              ) : (\n                <>\n                  {buttonRender()}\n                  <Operations {...operationsProps} />\n                </>\n              )}\n            </Space>\n          ) : (\n            <div className=\"btns\">\n              <Operations {...operationsProps} />\n            </div>\n          )}\n          {/* 展开收起 */}\n          {expandBtnVisible && (\n            <Button\n              text\n              className=\"inside-button\"\n              onClick={onToggleExpand}\n              type={expand ? 'normal' : 'primary'}\n            >\n              <span>{expand ? i18nBundle.hidden : i18nBundle.expand}</span>\n              <CustomIcon\n                type={expand ? 'triangle-up' : 'triangle-down'}\n                size=\"xs\"\n                style={{ marginLeft: 2 }}\n              />\n            </Button>\n          )}\n        </Space>\n      </div>\n    );\n  };\n\n  const _children = renderChildren();\n\n  const content = (\n    <Grid\n      splot={renderOperator()}\n      {...others}\n      className=\"fusion-ui-filter\"\n      onColumnChange={setCols}\n      cols={propsCols}\n      responsive={false}\n      rowGap={0}\n      columnGap={16}\n    >\n      {formatFormItems(_children, {\n        columns: propsCols,\n        ...others,\n      })}\n    </Grid>\n  );\n\n  return <Form {...others}>{content}</Form>;\n};\n\nFilter.defaultProps = {\n  buttons: {},\n  defaultExpand: false,\n  expand: undefined,\n  cols: 4,\n  visibleRowCount: 1,\n  rowGap: 12,\n  enableFilterConfiguration: false,\n  onExpand: () => {},\n  formProps: {},\n  responsive: false,\n  hideDefaultButtons: false,\n  hideExpandButton: false,\n  enableForm: false,\n};\n\nexport { Filter };\n"
  },
  {
    "path": "packages/fusion-ui/src/components/filter/theme-dark.scss",
    "content": ".dark {\n  .fusion-ui-filter-configurator {\n    background-color: var(--color-fill1-1, $color-fill1-1);\n    .fusion-ui-filter-configurator-item.dragging {\n      background-color: var(--color-fill1-4 !important, $color-fill1-4 !important);\n    }\n    .fusion-ui-icon-close {\n      color: var(--color-text1-2, $color-text1-2);\n    }\n    &-title {\n      border-bottom-color: var(--color-line1-4, $color-line1-4);\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/line-chart/index.tsx",
    "content": "import React from 'react';\nimport { LineChart as BizLineChart } from 'bizcharts';\n\ntype Iprops = React.ComponentProps<typeof BizLineChart>;\n\nfunction LineChart(props: Iprops) {\n  return (\n    <BizLineChart\n      tooltip={{\n        visible: true,\n      }}\n      padding=\"auto\"\n      interactions={[{ type: 'element-active' }]}\n      {...props}\n    />\n  );\n}\n\nexport default LineChart;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu/Menu.tsx",
    "content": "import * as React from 'react';\nimport omit from 'lodash/omit';\nimport cx from 'classnames';\nimport { Menu as NextMenu, Loading as NextLoading, Icon } from '@alifd/next';\nimport { MenuProps as NextMenuProps } from '@alifd/next/types/menu';\n\nimport { SelectableItem as MenuItem } from './MenuItem';\n\nconst {\n  PopupItem: MenuPopupItem,\n  CheckboxItem: MenuCheckboxItem,\n  RadioItem: MenuRadioItem,\n  SubMenu,\n  Group,\n  Divider,\n} = NextMenu;\n\nexport interface MenuItemProps {\n  /**\n   * 菜单值\n   */\n  key?: string;\n  /**\n   * 类型\n   * @default item\n   */\n  type?: 'item' | 'popupItem' | 'checkboxItem' | 'radioItem' | 'divider' | 'group' | 'subMenu';\n  /**\n   * 展示标签\n   */\n  label?: string;\n  /**\n   * 是否处于禁用状态\n   */\n  disabled?: boolean;\n  /**\n   * 自定义 label 展示\n   */\n  children?: React.ReactNode;\n  /**\n   * 帮助文本\n   */\n  helper?: React.ReactNode;\n}\n\nexport interface MenuProps extends Omit<NextMenuProps, 'hasSelectedIcon' | 'isSelectIconRight'> {\n  /**\n   * 是否处于加载状态\n   */\n  loading?: boolean;\n  /**\n   * 是否出错\n   */\n  error?: boolean | string;\n  /**\n   * 数据源\n   */\n  dataSource?: MenuItemProps[];\n  /**\n   * 国际化文案\n   */\n  i18nBundle?: Record<string, string>;\n}\n\nexport class Menu extends React.Component<MenuProps> {\n  static displayName = 'Menu';\n\n  renderChildren(dataSource) {\n    const menuItemList: React.ReactElement[] = [];\n    Array.isArray(dataSource) &&\n      dataSource.forEach((dataItem) => {\n        if (!dataItem.type || dataItem.type?.toLowerCase() === 'item') {\n          menuItemList.push(<MenuItem {...omit(dataItem, ['type'])} />);\n        }\n        if (dataItem.type?.toLowerCase() === 'popupitem') {\n          menuItemList.push(<MenuPopupItem {...omit(dataItem, ['type'])} />);\n        }\n        if (dataItem.type?.toLowerCase() === 'checkboxitem') {\n          const children = dataItem.children || dataItem.label;\n          menuItemList.push(\n            <MenuCheckboxItem {...omit(dataItem, ['type', 'label', 'children'])}>\n              {children}\n            </MenuCheckboxItem>,\n          );\n        }\n        if (dataItem.type?.toLowerCase() === 'radioitem') {\n          const children = dataItem.children || dataItem.label;\n          menuItemList.push(\n            <MenuRadioItem {...omit(dataItem, ['type', 'label', 'children'])}>\n              {children}\n            </MenuRadioItem>,\n          );\n        }\n        if (dataItem.type?.toLowerCase() === 'divider') {\n          menuItemList.push(<Divider {...omit(dataItem, ['type'])} />);\n        }\n        if (dataItem.type?.toLowerCase() === 'group') {\n          menuItemList.push(\n            <Group {...omit(dataItem, ['type', 'children'])}>\n              {this.renderChildren(dataItem.children)}\n            </Group>,\n          );\n        }\n        if (dataItem.type?.toLowerCase() === 'submenu') {\n          menuItemList.push(\n            <SubMenu {...omit(dataItem, ['type', 'children'])}>\n              {this.renderChildren(dataItem.children)}\n            </SubMenu>,\n          );\n        }\n      });\n    return menuItemList;\n  }\n\n  renderLoadingContent() {\n    return <NextLoading className=\"fusion-ui-menu-loading\" />;\n  }\n\n  renderErrorContent() {\n    const { error, i18nBundle } = this.props;\n    const errorText = typeof error === 'boolean' ? i18nBundle.error : error;\n\n    return (\n      <div className=\"fusion-ui-menu-error\">\n        <div className=\"fusion-ui-menu-error-content\">\n          <Icon type=\"ic_cry\" size=\"small\" />\n          <div className=\"fusion-ui-menu-error-content-text\">{errorText}</div>\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    const { className, dataSource, loading, error, i18nBundle, ...otherProps } = this.props;\n\n    const classes = cx({\n      'fusion-ui-menu': true,\n      [className]: !!className,\n    });\n\n    let children;\n\n    if (loading) {\n      children = this.renderLoadingContent();\n    } else if (error) {\n      children = this.renderErrorContent();\n    } else {\n      children = this.renderChildren(dataSource);\n    }\n\n    const menuProps = {\n      className: classes,\n      ...otherProps,\n    };\n    return <NextMenu {...menuProps}> {children} </NextMenu>;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu/MenuItem.tsx",
    "content": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\nimport { Checkbox, Icon } from '@alifd/next';\nimport { func, obj, KEYCODE } from '@/utils/util';\nimport Item from '@alifd/next/lib/menu/view/item';\nimport { CheckboxProps } from '@alifd/next/types/checkbox';\n\nimport { MenuItemText } from './MenuItemText';\n\nconst { bindCtx } = func;\nconst { pickOthers } = obj;\n\nexport interface SelectableItemProps {\n  /**\n   * 用于显示标签文字\n   */\n  label?: string;\n  /**\n   * 自定义样式名\n   */\n  className?: string;\n  /**\n   * 是否禁用\n   */\n  disabled?: boolean;\n  /**\n   * 帮助文本\n   */\n  helper?: React.ReactNode;\n  /**\n   * 是否缩进\n   */\n  needIndent?: boolean;\n  /**\n   * 是否处于加载状态\n   */\n  loading?: boolean;\n  /**\n   * 是否有展开功能\n   */\n  hasExpand?: boolean;\n  /**\n   * 受控值，显示是否展开\n   */\n  expanded?: boolean;\n  /**\n   * 当 hasExpand={true} 时，展开触发\n   */\n  onExpand?: () => void;\n  /**\n   * 用于覆盖 checkbox 的属性\n   */\n  checkboxProps?: Partial<CheckboxProps>;\n  /**\n   * 自定义渲染标签文字,传入则 label 失效\n   */\n  children?: React.ReactNode;\n  _key?: string;\n  root?: any;\n}\n\nexport class SelectableItem extends React.Component<SelectableItemProps> {\n  static menuChildType = 'item';\n\n  static propTypes = {\n    _key: PropTypes.string,\n    root: PropTypes.object,\n    selected: PropTypes.bool,\n    onSelect: PropTypes.func,\n    inlineIndent: PropTypes.number,\n    /**\n     * 是否禁用\n     */\n    disabled: PropTypes.bool,\n    /**\n     * 帮助文本\n     */\n    helper: PropTypes.node,\n    /**\n     * 菜单项标签内容\n     */\n    children: PropTypes.node,\n    className: PropTypes.string,\n    onKeyDown: PropTypes.func,\n    onClick: PropTypes.func,\n    needIndent: PropTypes.bool,\n  };\n\n  static defaultProps = {\n    disabled: false,\n    needIndent: true,\n  };\n\n  constructor(props) {\n    super(props);\n\n    bindCtx(this, ['handleKeyDown', 'handleClick']);\n  }\n\n  getSelected() {\n    const { _key, root, selected } = this.props;\n    const { selectMode } = root.props;\n    const { selectedKeys } = root.state;\n    return selected || (!!selectMode && selectedKeys.indexOf(_key) > -1);\n  }\n\n  handleSelect(e) {\n    const { _key, root, onSelect } = this.props;\n    if (onSelect) {\n      onSelect(!this.getSelected(), this, e);\n    } else {\n      root.handleSelect(_key, !this.getSelected(), this);\n    }\n  }\n\n  handleKeyDown(e) {\n    if (e.keyCode === KEYCODE.SPACE && !this.props.disabled) {\n      this.handleSelect(e);\n    }\n\n    this.props.onKeyDown && this.props.onKeyDown(e);\n  }\n\n  handleClick(e) {\n    this.handleSelect(e);\n\n    this.props.onClick && this.props.onClick(e);\n  }\n\n  render() {\n    const {\n      _key,\n      root,\n      className,\n      disabled,\n      helper,\n      label,\n      children,\n      needIndent,\n      loading,\n      // 展开状态\n      hasExpand,\n      onExpand,\n      expanded,\n      checkboxProps,\n    } = this.props;\n    const { prefix, selectMode } = root.props;\n    const others = pickOthers(Object.keys(SelectableItem.propTypes), this.props);\n    const selected = this.getSelected();\n\n    const newProps = {\n      _key,\n      root,\n      disabled,\n      type: 'item',\n      className: cx({\n        'fusion-ui-menu-item': true,\n        [`${prefix}selected`]: selected,\n        [className]: !!className,\n      }),\n      onKeyDown: this.handleKeyDown,\n      onClick: !disabled ? this.handleClick : this.props.onClick,\n      needIndent,\n      ...others,\n    };\n\n    const textProps = {};\n\n    if ('selectMode' in root.props) {\n      textProps['aria-selected'] = selected;\n    }\n\n    let innerText = (\n      <MenuItemText className={`${prefix}menu-item-text`} {...textProps}>\n        {label}\n      </MenuItemText>\n    );\n    if (children) {\n      innerText = (\n        <div className={`${prefix}menu-item-text`} {...textProps}>\n          {children}\n        </div>\n      );\n    }\n\n    const checkProps = {\n      disabled,\n      checked: selected,\n      ...checkboxProps,\n    };\n\n    let innerRightIcon;\n    if (loading) {\n      innerRightIcon = <Icon className=\"fusion-ui-menu-icon-right\" type=\"loading\" size=\"xs\" />;\n    }\n\n    // 对于可展开模式，选中状态及选中函数进行特殊处理\n    if (hasExpand) {\n      checkProps.onChange = this.handleClick;\n      newProps.onClick = !disabled && onExpand;\n      newProps.className = cx({\n        'fusion-ui-menu-item': true,\n        [`${prefix}selected`]: expanded,\n        [className]: !!className,\n      });\n      if (!innerRightIcon) {\n        innerRightIcon = (\n          <Icon className=\"fusion-ui-menu-icon-right\" type=\"arrow-right\" size=\"xs\" />\n        );\n      }\n    }\n\n    return (\n      <Item {...newProps}>\n        <div className=\"fusion-ui-menu-item-header\">\n          {selectMode === 'multiple' && <Checkbox {...checkProps} />}\n          {innerText}\n        </div>\n        <div className=\"fusion-ui-menu-item-footer\">\n          {helper ? <div className={`${prefix}menu-item-helper`}>{helper}</div> : null}\n          {innerRightIcon}\n        </div>\n      </Item>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu/MenuItemText.tsx",
    "content": "import * as React from 'react';\nimport { Balloon } from '@alifd/next';\n\nexport type MenuItemTextProps = React.HTMLAttributes<HTMLElement>;\n\nexport class MenuItemText extends React.Component<MenuItemTextProps> {\n  ref = React.createRef();\n\n  state = {\n    isOverflow: false,\n  };\n\n  componentDidMount() {\n    if (this.ref.current && this.ref.current.scrollWidth > this.ref.current.offsetWidth) {\n      this.setState({\n        isOverflow: true,\n      });\n    }\n  }\n\n  render() {\n    const { isOverflow } = this.state;\n    const { children, ...otherProps } = this.props;\n\n    const trigger = (\n      <div ref={this.ref} {...otherProps}>\n        {children}\n      </div>\n    );\n\n    if (isOverflow) {\n      return (\n        <Balloon.Tooltip trigger={trigger} triggerType=\"hover\">\n          {children}\n        </Balloon.Tooltip>\n      );\n    }\n\n    return trigger;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu/i18n.ts",
    "content": "export default {\n  'zh-CN': {\n    error: '出错了',\n  },\n  'en-US': {\n    error: 'Error',\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu/index.scss",
    "content": "@import './theme-dark.scss';\n\n$fusion-ui-prefix: '.fusion-ui-menu';\n\n/* 这里写你漂亮的样式 */\n#{$fusion-ui-prefix} {\n  &.fusion-ui-ver {\n    padding: var(--s-2 $s-1, $s-2 $s-1);\n  }\n  #{$fusion-ui-prefix}-content {\n    position: relative;\n    padding: 0 !important;\n    margin: 0 !important;\n    list-style: none;\n  }\n  #{$fusion-ui-prefix}-item.fusion-ui-menu-item {\n    border-radius: var(--s-1, $s-1);\n    // 反选 hover 背景色覆盖\n    &.fusion-ui-selected {\n      background-color: var(--color-brand1-1, $color-brand1-1);\n\n      &:focus {\n        background-color: var(--color-brand1-1, $color-brand1-1);\n      }\n    }\n\n    .next-menu-item-inner {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      font-size: var(--menu-font-size, 12px);\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      word-wrap: normal;\n      line-height: var(--menu-line-height, 32px);\n\n      #{$fusion-ui-prefix}-item-header {\n        flex: 1 1 0;\n        display: flex;\n        align-items: center;\n        // 多选状态下设置为 flex，为放置左侧 icon\n        .next-checkbox {\n          margin-right: 8px;\n        }\n        // 文本超出显示为省略号\n        .next-menu-item-text {\n          overflow: hidden;\n          text-overflow: ellipsis;\n        }\n      }\n      #{$fusion-ui-prefix}-item-footer {\n        #{$fusion-ui-prefix}-icon-right {\n          color: var(--color-line1-4, $color-line1-4);\n        }\n      }\n    }\n  }\n\n  &-loading {\n    height: 160px;\n    width: 100%;\n  }\n\n  &-error {\n    height: 160px;\n    width: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    &-content {\n      text-align: center;\n\n      &-text {\n        font-size: var(--font-size-body-1, $font-size-body-1);\n        line-height: 1.5;\n        color: var(--color-text1-3, $color-text1-3);\n        margin-bottom: 8px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu/index.tsx",
    "content": "import { withGlobal } from '@/provider';\nimport { Menu as PureMenu } from './Menu';\n\nexport const Menu = withGlobal(PureMenu, {\n  i18nBundleName: 'Menu',\n});\nexport { MenuProps, MenuItemProps } from './Menu';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu/theme-dark.scss",
    "content": "body.dark {\n  /* 这里写暗色覆盖主题 */\n  .fusion-ui-menu {\n    .fusion-ui-menu-item.fusion-ui-menu-item {\n      &.fusion-ui-selected {\n        background-color: var(--color-brand1-6, $color-brand1-6);\n        &:not(.fusion-ui-disabled) {\n          &:hover,\n          &.fusion-ui-focused {\n            background-color: var(--color-brand1-6, $color-brand1-6);\n          }\n        }\n      }\n    }\n    .fusion-ui-error-content {\n      color: var(--color-text1-3);\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu-button/index.scss",
    "content": "@import '~@alifd/next/lib/core/style/_global.scss';\n@import '~@alifd/next/lib/core/style/_motion.scss';\n@import 'scss/variable';\n\n#{$menu-btn-prefix} {\n  display: inline-block;\n  box-shadow: none;\n\n  &-spacing-tb {\n    margin: var(--popup-spacing-tb 0, $popup-spacing-tb 0);\n  }\n\n  &-popup {\n    box-shadow: 0 $s-1 $s-4 0 rgba(0, 0, 0, 0.1);\n    border-radius: var(--corner-1, $corner-1);\n\n    .fusion-ui-menu.fusion-ui-ver {\n      border: none;\n      max-height: 272px;\n      overflow: auto;\n\n      &::-webkit-scrollbar {\n        width: var(--s-2, $s-2);\n      }\n\n      &::-webkit-scrollbar-thumb {\n        border: 2px solid transparent;\n        background-clip: padding-box;\n        border-radius: 9999px;\n        background-color: var(--color-fill1-1, $color-fill1-1);\n      }\n\n      &::-webkit-scrollbar-track {\n        background: transparent;\n      }\n    }\n  }\n\n  .fusion-ui-icon {\n    transition: transform $motion-duration-immediately $motion-linear;\n  }\n\n  .fusion-ui-menu-btn-arrow::before {\n    content: var(--menu-btn-fold-icon-content, $menu-btn-fold-icon-content);\n  }\n\n  &.fusion-ui-expand .fusion-ui-btn-icon.fusion-ui-menu-btn-arrow {\n    transform: rotate(180deg);\n  }\n  // --------- this is for config platform\n  &-symbol-unfold::before {\n    content: var(--menu-btn-unfold-icon-content, $menu-btn-unfold-icon-content);\n  }\n  // --------- this is for config platform\n\n  &.fusion-ui-btn-normal {\n    .fusion-ui-menu-btn-arrow {\n      color: var(--menu-btn-pure-text-normal-icon-color, $menu-btn-pure-text-normal-icon-color);\n    }\n    &:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-pure-normal-color-hover, $btn-pure-normal-color-hover);\n    }\n  }\n\n  &.fusion-ui-btn-secondary {\n    .fusion-ui-menu-btn-arrow {\n      color: var(\n        --menu-btn-pure-text-secondary-icon-color,\n        $menu-btn-pure-text-secondary-icon-color\n      );\n    }\n    &:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-pure-secondary-color-hover, $btn-pure-secondary-color-hover);\n    }\n    &.fusion-ui-btn-text:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-text-secondary-color-hover, $btn-text-secondary-color-hover);\n    }\n  }\n\n  &.fusion-ui-btn-primary {\n    .fusion-ui-menu-btn-arrow {\n      color: var(--menu-btn-pure-text-primary-icon-color, $menu-btn-pure-text-primary-icon-color);\n    }\n    &:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-pure-primary-color-hover, $btn-pure-primary-color-hover);\n    }\n  }\n\n  &.fusion-ui-btn-text.fusion-ui-btn-normal {\n    .fusion-ui-menu-btn-arrow {\n      color: var(--menu-btn-text-text-normal-icon-color, $menu-btn-text-text-normal-icon-color);\n    }\n    &:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-text-normal-color-hover, $btn-text-normal-color-hover);\n    }\n  }\n\n  &.fusion-ui-btn-text.fusion-ui-btn-primary {\n    .fusion-ui-menu-btn-arrow {\n      color: var(--menu-btn-text-text-primary-icon-color, $menu-btn-text-text-primary-icon-color);\n    }\n    &:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-text-primary-color-hover, $btn-text-primary-color-hover);\n    }\n  }\n\n  &.fusion-ui-btn-ghost.fusion-ui-btn-light {\n    .fusion-ui-menu-btn-arrow {\n      color: var(--menu-btn-ghost-light-icon-color, $menu-btn-ghost-light-icon-color);\n    }\n    &:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-ghost-light-color-hover, $btn-ghost-light-color-hover);\n    }\n  }\n\n  &.fusion-ui-btn-ghost.fusion-ui-btn-dark {\n    .fusion-ui-menu-btn-arrow {\n      color: var(--menu-btn-ghost-dark-icon-color, $menu-btn-ghost-dark-icon-color);\n    }\n    &:hover .fusion-ui-menu-btn-arrow {\n      color: var(--btn-ghost-dark-color-hover, $btn-ghost-dark-color-hover);\n    }\n  }\n\n  &.disabled .fusion-ui-menu-btn-arrow,\n  &[disabled] .fusion-ui-menu-btn-arrow {\n    color: var(--menu-btn-disabled-icon-color, $menu-btn-disabled-icon-color);\n  }\n\n  &.fusion-ui-btn-text.disabled .fusion-ui-menu-btn-arrow,\n  &.fusion-ui-btn-text[disabled] .fusion-ui-menu-btn-arrow {\n    color: var(--menu-btn-disabled-icon-color, $menu-btn-disabled-icon-color);\n  }\n\n  &[disabled].fusion-ui-btn-ghost.fusion-ui-btn-dark .fusion-ui-menu-btn-arrow {\n    color: var(--menu-btn-ghost-dark-disabled-icon-color, $menu-btn-ghost-dark-disabled-icon-color);\n  }\n\n  &[disabled].fusion-ui-btn-ghost.fusion-ui-btn-light .fusion-ui-menu-btn-arrow {\n    color: var(\n      --menu-btn-ghost-light-disabled-icon-color,\n      $menu-btn-ghost-light-disabled-icon-color\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu-button/index.tsx",
    "content": "import React from 'react';\nimport classnames from 'classnames';\nimport { Menu, MenuProps } from '@/components/menu';\nimport { Overlay, Icon, Button } from '@alifd/next';\nimport { func } from '@/utils/util';\nimport { MenuButtonProps as NextMenuButtonProps } from '@alifd/next/types/menu-button';\n\nconst { Popup } = Overlay;\n\nexport interface MenuButtonProps extends NextMenuButtonProps {\n  /**\n   * 下拉菜单数据源\n   */\n  dataSource?: MenuProps['dataSource'];\n}\n\nexport interface MenuButtonState {\n  visible?: boolean;\n  selectedKeys?: string[];\n}\n\n/**\n * MenuButton\n */\nexport class MenuButton extends React.Component<MenuButtonProps, MenuButtonState> {\n  static displayName = 'MenuButton';\n\n  static defaultProps = {\n    prefix: 'fusion-ui-',\n    autoWidth: true,\n    popupTriggerType: 'click',\n    onVisibleChange: func.noop,\n    onItemClick: func.noop,\n    onSelect: func.noop,\n    defaultSelectedKeys: [],\n    menuProps: {},\n    dataSource: [],\n  };\n\n  static getDerivedStateFromProps(props) {\n    const st: Partial<MenuButtonState> = {};\n\n    if ('visible' in props) {\n      st.visible = props.visible;\n    }\n\n    if ('selectedKeys' in props) {\n      st.selectedKeys = props.selectedKeys;\n    }\n\n    return st;\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      selectedKeys: props.defaultSelectedKeys,\n      visible: props.defaultVisible,\n    };\n  }\n\n  clickMenuItem = (key, ...others) => {\n    const { selectMode } = this.props;\n\n    this.props.onItemClick(key, ...others);\n\n    if (selectMode === 'multiple') {\n      return;\n    }\n\n    this.onPopupVisibleChange(false, 'menuSelect');\n  };\n\n  selectMenu = (keys, ...others) => {\n    if (!('selectedKeys' in this.props)) {\n      this.setState({\n        selectedKeys: keys,\n      });\n    }\n    this.props.onSelect(keys, ...others);\n  };\n\n  onPopupOpen = () => {\n    const button = this.node;\n    if (this.props.autoWidth && button && this.menu && this.menu.style) {\n      this.menu.style.width = `${button.offsetWidth}px`;\n    }\n  };\n\n  onPopupVisibleChange = (visible, type) => {\n    if (!('visible' in this.props)) {\n      this.setState({\n        visible,\n      });\n    }\n    this.props.onVisibleChange(visible, type);\n  };\n\n  _menuRefHandler = (ref) => {\n    this.menu = ref;\n\n    const refFn = this.props.menuProps.ref;\n    if (typeof refFn === 'function') {\n      refFn(ref);\n    }\n  };\n\n  render() {\n    const {\n      prefix,\n      style,\n      className,\n      label,\n      popupTriggerType,\n      popupContainer,\n      popupStyle,\n      popupClassName,\n      popupProps,\n      followTrigger,\n      selectMode,\n      menuProps,\n      dataSource,\n      children,\n      // 未用到的 props\n      onSelect,\n      defaultSelectedKeys,\n      onVisibleChange,\n      autoWidth,\n      onItemClick,\n      ...others\n    } = this.props;\n\n    const { visible, selectedKeys } = this.state;\n\n    const classNames = classnames(\n      {\n        [`${prefix}menu-btn`]: true,\n        [`${prefix}expand`]: visible,\n        opened: visible,\n      },\n      className,\n    );\n\n    const popupClassNames = classnames({\n      [popupClassName]: !!popupClassName,\n      [`${prefix}menu-btn-popup`]: true,\n    });\n\n    const trigger = (\n      <Button style={style} className={classNames} {...others}>\n        {label} <Icon type=\"arrow-down\" className={`${prefix}menu-btn-arrow`} />\n      </Button>\n    );\n\n    return (\n      <Popup\n        followTrigger={followTrigger}\n        visible={visible}\n        onVisibleChange={this.onPopupVisibleChange}\n        trigger={trigger}\n        triggerType={popupTriggerType}\n        container={popupContainer}\n        onOpen={this.onPopupOpen}\n        ref={(node) => {\n          this.node = node;\n        }}\n        style={popupStyle}\n        className={popupClassNames}\n        {...popupProps}\n      >\n        <div className={`${prefix}menu-btn-spacing-tb`}>\n          <Menu\n            {...menuProps}\n            ref={this._menuRefHandler}\n            selectedKeys={selectedKeys}\n            selectMode={selectMode}\n            onSelect={this.selectMenu}\n            onItemClick={this.clickMenuItem}\n            dataSource={dataSource}\n          />\n        </div>\n      </Popup>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/menu-button/scss/variable.scss",
    "content": "////\n/// @module menu-button: 菜单按钮\n/// @tag MenuButton\n/// @category component\n/// @family general\n/// @varPrefix $menu-btn-\n/// @classPrefix {prefix}-menu-btn\n////\n\n// menu-button variables\n// --------------------------------------------------\n\n// prefix\n$menu-btn-prefix: '.fusion-ui-menu-btn';\n\n/// icon\n/// @namespace statement/disabled\n$menu-btn-disabled-icon-color: var(--color-text1-1, $color-text1-1) !default;\n\n/// ghost icon\n$menu-btn-ghost-light-disabled-icon-color: var(\n  --btn-ghost-light-color-disabled,\n  $btn-ghost-light-color-disabled\n) !default;\n\n/// ghost icon\n$menu-btn-ghost-dark-disabled-icon-color: var(\n  --btn-ghost-dark-color-disabled,\n  $btn-ghost-dark-color-disabled\n) !default;\n\n/// icon\n/// @namespace statement/normal\n$menu-btn-pure-text-normal-icon-color: var(--color-text1-2, $color-text1-2) !default;\n\n/// icon\n/// @namespace statement/normal\n$menu-btn-pure-text-primary-icon-color: var(--color-white, $color-white) !default;\n\n/// icon\n/// @namespace statement/normal\n$menu-btn-pure-text-secondary-icon-color: var(--color-brand1-6, $color-brand1-6) !default;\n\n/// icon\n/// @namespace statement/normal\n$menu-btn-text-text-normal-icon-color: var(--color-text1-4, $color-text1-4) !default;\n\n/// icon\n/// @namespace statement/primary\n$menu-btn-text-text-primary-icon-color: var(--color-link-1, $color-link-1) !default;\n\n/// icon\n/// @namespace statement/light\n$menu-btn-ghost-light-icon-color: var(--color-text1-4, $color-text1-4) !default;\n\n/// icon\n/// @namespace statement/dark\n$menu-btn-ghost-dark-icon-color: var(--color-white, $color-white) !default;\n\n/// fold icon\n/// @namespace statement/normal\n/// @type icon\n$menu-btn-fold-icon-content: var(--icon-content-arrow-down, $icon-content-arrow-down) !default;\n\n/// unfold icon\n/// @namespace statement/normal\n/// @type icon\n$menu-btn-unfold-icon-content: var(--icon-reset, $icon-reset) !default;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/page-header/index.scss",
    "content": "#{$biz-css-prefix}page-header {\n  position: relative;\n  padding: 0;\n\n  .next-breadcrumb .next-breadcrumb-text {\n    font-size: 14px;\n  }\n\n  &-ghost {\n  }\n\n  &.has-breadcrumb {\n    padding-top: 0;\n  }\n\n  &.has-footer {\n    padding-bottom: 0;\n  }\n\n  &-back {\n    margin-right: 16px;\n    font-size: 16px;\n    line-height: 1;\n\n    &-button {\n      border: none !important;\n      cursor: pointer;\n    }\n  }\n\n  .fusion-ui-divider-vertical {\n    height: 14px;\n    vertical-align: middle;\n  }\n\n  .fusion-ui-breadcrumb + &-heading {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n    color: #000000d9;\n    font-variant: tabular-nums;\n    line-height: 1.5715;\n    list-style: none;\n    font-feature-settings: 'tnum';\n    color: #00000073;\n    font-size: 14px;\n  }\n\n  @mixin text-overflow-ellipsis() {\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n  }\n\n  &-heading {\n    display: flex;\n    justify-content: space-between;\n    margin-top: 8px;\n\n    &-left {\n      display: flex;\n      align-items: center;\n      overflow: hidden;\n    }\n\n    &-title {\n      margin-right: 12px;\n      margin-bottom: 0;\n      color: #000000d9;\n      font-weight: 600;\n      font-size: 20px;\n      line-height: 32px;\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n\n    &-avatar {\n      margin-right: 12px;\n    }\n\n    &-sub-title {\n      margin-right: 12px;\n      color: #00000073;\n      font-size: 14px;\n      line-height: 1.5715;\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n    }\n\n    &-extra {\n      white-space: nowrap;\n\n      > * {\n        white-space: unset;\n      }\n      > *:first-child {\n        margin-left: 0;\n      }\n    }\n  }\n\n  &-content {\n    padding-top: 16px;\n  }\n  &-actions {\n    float: right;\n  }\n  &-footer {\n    .fusion-ui-tabs {\n      > .fusion-ui-tabs-nav {\n        margin: 0;\n        &::before {\n          border: none;\n        }\n      }\n\n      .fusion-ui-tabs-tab {\n      }\n    }\n  }\n\n  &-compact &-heading {\n    flex-wrap: wrap;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/page-header/index.tsx",
    "content": "import * as React from 'react';\nimport classNames from 'classnames';\nimport ResizeObserver from 'rc-resize-observer';\nimport { Icon, Breadcrumb, Avatar, Button } from '@alifd/next';\nimport { bizCssPrefix } from '../../variables';\nimport Operations from '@/common/operations';\n\nconst TransButton = Button;\n\nexport interface PageHeaderProps {\n  backIcon?: string | React.ReactNode;\n  prefixCls?: string;\n  title?: React.ReactNode;\n  subTitle?: React.ReactNode;\n  style?: React.CSSProperties;\n  showBreadcrumb?: boolean;\n  breadcrumb?: any[] | React.ReactElement<typeof Breadcrumb>;\n  breadcrumbRender?: (props: PageHeaderProps, defaultDom: React.ReactNode) => React.ReactNode;\n  tags?: React.ReactElement | React.ReactElement[];\n  footer?: React.ReactNode;\n  extra?: React.ReactNode;\n  showAvatar?: boolean;\n  showActions?: boolean;\n  avatar?: object;\n  onBack?: (e?: React.MouseEvent<HTMLDivElement>) => void;\n  className?: string;\n  ghost?: boolean;\n  direction?: string;\n  pageHeader?: any;\n  operations?: any[];\n  operationConfig?: Record<string, any>;\n}\n\nconst renderBack = (\n  prefixCls: string,\n  backIcon?: string | React.ReactNode,\n  onBack?: (e?: React.MouseEvent<HTMLDivElement>) => void,\n) => {\n  if (!backIcon) {\n    return null;\n  }\n  return (\n    <div className={`${prefixCls}-back`}>\n      <TransButton\n        text\n        onClick={(e?: React.MouseEvent<HTMLDivElement>) => {\n          onBack?.(e);\n        }}\n        className={`${prefixCls}-back-button`}\n      >\n        <Icon type={backIcon} />\n      </TransButton>\n    </div>\n  );\n};\n\nconst renderBreadcrumb = (breadcrumb: any[]) => {\n  if (!breadcrumb) return null;\n  if (!Array.isArray(breadcrumb)) {\n    return breadcrumb;\n  }\n  if (!breadcrumb.length) {\n    return null;\n  }\n  return (\n    <Breadcrumb>\n      {breadcrumb.map((item) => {\n        return <Breadcrumb.Item>{item}</Breadcrumb.Item>;\n      })}\n    </Breadcrumb>\n  );\n};\n\nconst getBackIcon = (props: PageHeaderProps, direction = '') => {\n  if (props.backIcon !== undefined) {\n    return props.backIcon;\n  } else if (direction) {\n    return direction === 'rtl' ? 'arrow-right' : 'arrow-left';\n  } else {\n    return null;\n  }\n};\n\nconst renderOperations = (\n  prefixCls: string,\n  operations: any[],\n  operationConfig = { align: 'right' },\n) => {\n  const operationsProps = { operations, operationConfig };\n  let content;\n  if (!operations || !operations.length) {\n    content = null;\n  } else {\n    content = <Operations {...operationsProps} />;\n  }\n  return <div className={`${prefixCls}-actions`}>{content}</div>;\n};\nconst renderTitle = (\n  prefixCls: string,\n  props: PageHeaderProps,\n  direction = '',\n  operations: any[],\n  operationConfig: { align: 'right' },\n) => {\n  const { title, showAvatar, avatar, showActions, subTitle, tags, extra, onBack } = props;\n  const headingPrefixCls = `${prefixCls}-heading`;\n  const hasHeading = title || subTitle || tags || extra;\n  // If there is nothing, return a null\n  if (!hasHeading) {\n    return null;\n  }\n  const backIcon = getBackIcon(props, direction);\n  const backIconDom = renderBack(prefixCls, backIcon, onBack);\n  const hasTitle = backIconDom || avatar || hasHeading;\n  return (\n    <div className={headingPrefixCls}>\n      {hasTitle && (\n        <div className={`${headingPrefixCls}-left`}>\n          {backIconDom}\n          {showAvatar && avatar && <Avatar className={`${headingPrefixCls}-avatar`} {...avatar} />}\n          {title && (\n            <span\n              className={`${headingPrefixCls}-title`}\n              title={typeof title === 'string' ? title : undefined}\n            >\n              {title}\n            </span>\n          )}\n          {subTitle && (\n            <span\n              className={`${headingPrefixCls}-sub-title`}\n              title={typeof subTitle === 'string' ? subTitle : undefined}\n            >\n              {subTitle}\n            </span>\n          )}\n          {tags && <span className={`${headingPrefixCls}-tags`}>{tags}</span>}\n        </div>\n      )}\n      {extra && <span className={`${headingPrefixCls}-extra`}>{extra}</span>}\n      {showActions && operations && renderOperations(prefixCls, operations, operationConfig)}\n    </div>\n  );\n};\n\nconst renderFooter = (prefixCls: string, footer: React.ReactNode) => {\n  if (footer) {\n    return <div className={`${prefixCls}-footer`}>{footer}</div>;\n  }\n  return null;\n};\n\nconst renderChildren = (prefixCls: string, children: React.ReactNode) => (\n  <div className={`${prefixCls}-content`}>{children}</div>\n);\n\nconst PageHeader: React.FC<PageHeaderProps> = (props: PageHeaderProps) => {\n  const [compact, updateCompact] = React.useState(false);\n  const onResize = ({ width }: { width: number }) => {\n    updateCompact(width < 768);\n  };\n  const {\n    prefixCls = `${bizCssPrefix}-page-header`,\n    style,\n    footer,\n    children,\n    breadcrumb,\n    breadcrumbRender,\n    showBreadcrumb,\n    className: customizeClassName,\n    direction,\n    pageHeader,\n    operations,\n    operationConfig,\n  } = props;\n  let ghost: undefined | boolean = true;\n  // Use `ghost` from `props` or from `ConfigProvider` instead.\n  if ('ghost' in props) {\n    ghost = props.ghost;\n  } else if (pageHeader && 'ghost' in pageHeader) {\n    ghost = pageHeader.ghost;\n  }\n\n  const getDefaultBreadcrumbDom = () => {\n    if (breadcrumb as any[]) {\n      return renderBreadcrumb(breadcrumb as any[]);\n    }\n    return null;\n  };\n\n  const defaultBreadcrumbDom = getDefaultBreadcrumbDom();\n\n  const isBreadcrumbComponent = breadcrumb && 'props' in breadcrumb;\n  //  support breadcrumbRender function\n  const breadcrumbRenderDomFromProps =\n    breadcrumbRender?.(props, defaultBreadcrumbDom) || defaultBreadcrumbDom;\n\n  const breadcrumbDom = isBreadcrumbComponent ? breadcrumb : breadcrumbRenderDomFromProps;\n\n  const className = classNames(prefixCls, customizeClassName, {\n    'has-breadcrumb': !!breadcrumbDom && breadcrumbDom,\n    'has-footer': !!footer,\n    [`${prefixCls}-ghost`]: ghost,\n    [`${prefixCls}-rtl`]: direction === 'rtl',\n    [`${prefixCls}-compact`]: compact,\n  });\n\n  return (\n    <ResizeObserver onResize={onResize}>\n      <div className={className} style={style}>\n        {showBreadcrumb && breadcrumbDom}\n        {renderTitle(prefixCls, props, direction, operations, operationConfig)}\n        {children && renderChildren(prefixCls, children)}\n        {renderFooter(prefixCls, footer)}\n      </div>\n    </ResizeObserver>\n  );\n};\n\nPageHeader.defaultProps = {\n  showBreadcrumb: true,\n  showAvatar: false,\n  showOperation: true,\n  showActions: false,\n};\n\nexport { PageHeader };\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pie-chart/index.tsx",
    "content": "import React from 'react';\nimport { PieChart as MyPie } from 'bizcharts';\nimport numeral from 'numeral';\nimport DataSet from '@antv/data-set';\n\nconst { DataView } = DataSet;\nconst dv = new DataView();\n\ntype IProps = React.ComponentProps<typeof MyPie>;\n\nfunction PieChart(props: IProps) {\n  const { data, ...others } = props || {};\n\n  dv.source(data);\n  // 求百分比\n  dv.transform({\n    type: 'percent',\n    field: props?.angleField, // 统计字段\n    dimension: props?.colorField, // 该字段的占比\n    as: 'percent', // 结果存储在该字段\n  });\n\n  return (\n    <MyPie\n      isMaterial\n      data={dv.rows}\n      radius={0.8}\n      label={{\n        offset: 20,\n        formatter: (angleField) => {\n          const percent =\n            typeof angleField?.percent === 'number'\n              ? numeral(angleField?.percent).format('0.00%')\n              : angleField?.percent;\n          return `${angleField?.[props?.colorField]} ${percent}`;\n        },\n      }}\n      interactions={[\n        { type: 'element-selected' },\n      ]}\n      {...others as IProps}\n    />\n  );\n}\n\nexport default PieChart;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/button-group/index.tsx",
    "content": "import * as React from 'react';\nimport { Button } from '@alifd/next';\n\nexport interface ButtonDataSource {\n  label?: string;\n  onClick?: (e: React.MouseEvent<Element>) => unknown;\n}\nexport interface CardButtonGroupProps {\n  dataSource?: ButtonDataSource[];\n  text?: boolean;\n}\n\nexport const CardButtonGroup: React.FC<CardButtonGroupProps> = ({ dataSource, text }) => {\n  return (\n    <>\n      {dataSource.map(({ label, onClick, ...rest }) => {\n        return (\n          <Button text={text} type=\"primary\" onClick={onClick} {...rest}>\n            {label}\n          </Button>\n        );\n      })}\n    </>\n  );\n};\n\nCardButtonGroup.defaultProps = {\n  dataSource: [],\n};\n\nexport default CardButtonGroup;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card/index.scss",
    "content": "@import '../../../../variables.scss';\n\n$fusion-ui-card-padding: var(--s-5, $s-5);\n$fusion-ui-card-padding-s: var(--s-3, $s-3);\n\n.fusion-ui-card {\n  position: relative;\n  box-sizing: border-box;\n  width: 100%;\n  background-color: var(--color-white, $color-white);\n  // border-radius: 0;\n  display: flex;\n  flex-direction: column;\n\n  &-body {\n    flex: 1 1 auto;\n    &__panel {\n      padding: var(--fusion-ui-card-padding, $fusion-ui-card-padding);\n      padding-bottom: 0;\n    }\n    &__nopadding {\n      padding: 0;\n    }\n\n    // .fusion-ui-card-header + & {\n    //   .fusion-ui-card-body__panel {\n    //     padding-top: 0;\n    //   }\n    // }\n  }\n\n  &--dialog {\n    padding: 0;\n    border-radius: 0;\n    box-shadow: none;\n  }\n}\n\n.fusion-ui-card-footer-actions {\n  padding-bottom: var(--fusion-ui-card-padding, $fusion-ui-card-padding);\n}\n.fusion-ui-pro-card-operation-container {\n  padding: var(\n    --fusion-ui-card-padding $fusion-ui-card-padding 0,\n    $fusion-ui-card-padding $fusion-ui-card-padding 0\n  );\n}\n\n.fusion-ui-pro-card-operation-fixed {\n  position: fixed;\n  width: 100%;\n  box-shadow: 0 -4px 10px 0 rgba(74, 91, 109, 0.1);\n  background-color: #fff;\n  bottom: 0;\n  left: 0;\n  padding-bottom: var(--fusion-ui-card-padding, $fusion-ui-card-padding);\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card/index.tsx",
    "content": "import * as React from 'react';\nimport { Loading } from '@alifd/next';\nimport classnames from 'classnames';\nimport { CardHeader, CardTagProps } from '../card-header';\nimport { CardButtonGroupProps } from '../button-group';\nimport { useFiledState } from '@/utils/hooks/useFiledState';\nimport { TooltipProps } from '@alifd/next/lib/balloon';\nimport Operations from '@/common/operations';\n\nexport interface IOperationConfig {\n  fixed?: boolean; // 是否固定\n  showSaveTime?: boolean;\n  align?: 'center' | 'flex-start' | 'flex-end';\n}\n\nexport interface IOperationItem {\n  label?: string;\n  type?: 'primary' | 'secondary' | 'normal';\n  onClick?: () => void;\n}\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n  /**\n   * 卡片标题\n   */\n  title?: React.ReactNode;\n  description?: React.ReactNode;\n  visibleButtonCount?: number;\n  /**\n   * 帮助信息，仅在 title 展示时生效\n   */\n  explanation?: string;\n  bodyPadding?: boolean;\n  /**\n   * 帮助信息气泡配置\n   */\n  explanationTooltipProps?: TooltipProps;\n  /**\n   * 卡片顶部操作区域自定义渲染\n   */\n  actionBar?: React.ReactNode;\n  actionButtons?: CardButtonGroupProps;\n  tagGroup?: CardTagProps[];\n  /**\n   * 段落分割线; 如果为 true 时，默认最后一个段落没有分割线。\n   * @default false\n   */\n  segmentLine?: boolean;\n  /**\n   * 是否 loading\n   */\n  loading?: boolean;\n  /**\n   * 受控控制 Card 展开收起状态\n   */\n  isCollapse?: boolean;\n  /**\n   * 是否开启 Card 显示展开收起\n   */\n  hasCollapse?: boolean;\n  /**\n   * 默认收起\n   */\n  defaultCollapse?: boolean;\n  /**\n   * 展开收起状态切换后的回调函数\n   */\n  setCollapse?: (collapseState: boolean) => void;\n\n  /**\n   * 是否为弹窗卡片\n   */\n  isDialogCard?: boolean;\n  hasDivider?: boolean;\n  operations?: IOperationItem[];\n  operationConfig?: IOperationConfig;\n  lastSaveTime?: number;\n  text?: boolean;\n}\n\nexport const Card: React.FC<CardProps> = (props) => {\n  const {\n    title,\n    description,\n    visibleButtonCount,\n    className,\n    actionBar,\n    actionButtons,\n    loading,\n    tagGroup,\n    style,\n    hasCollapse,\n    isDialogCard,\n    explanation,\n    explanationTooltipProps,\n    children,\n    segmentLine,\n    defaultCollapse,\n    setCollapse,\n    isCollapse,\n    hasDivider,\n    operations,\n    operationConfig,\n    lastSaveTime,\n    bodyPadding,\n    text,\n    ...otherProps\n  } = props;\n  const [collapsed, onCollapse] = useFiledState(\n    {\n      value: isCollapse,\n      defaultValue: defaultCollapse,\n      onChange: setCollapse,\n    },\n    'isCollapse' in props,\n  );\n\n  const cardBody = children;\n  const layout = 'flow';\n  const content = (\n    <>\n      {(title || hasCollapse || actionBar || actionButtons || tagGroup) && (\n        <CardHeader\n          text={text}\n          title={title}\n          description={description}\n          visibleButtonCount={visibleButtonCount}\n          hasCollapse={hasCollapse}\n          actionBar={actionBar}\n          actionButtons={actionButtons}\n          tagGroup={tagGroup}\n          collapsed={collapsed}\n          onCollapse={() => onCollapse(!collapsed)}\n          explanation={explanation}\n          explanationTooltipProps={explanationTooltipProps}\n          hasDivider={hasDivider}\n        />\n      )}\n      <div className={classnames('fusion-ui-card-body', {})}>\n        {!collapsed && (\n          <div\n            className={classnames(\n              'fusion-ui-card-body__panel',\n              `fusion-ui-card-body__panel--${layout}`,\n              {\n                [`fusion-ui-card-body__nopadding`]: bodyPadding,\n              },\n            )}\n          >\n            {cardBody}\n          </div>\n        )}\n      </div>\n      {!collapsed && (\n        <div className={classnames('fusion-ui-card-footer-actions', {})}>\n          <Operations\n            operations={operations}\n            operationConfig={operationConfig}\n            lastSaveTime={lastSaveTime}\n          />\n        </div>\n      )}\n    </>\n  );\n  return (\n    <div\n      className={classnames('fusion-ui-card', {\n        'fusion-ui-card--dialog': isDialogCard,\n        [className]: className,\n      })}\n      style={style || {}}\n      {...otherProps}\n      data-name=\"Card\"\n    >\n      {loading ? (\n        <Loading visible inline={false} size=\"medium\">\n          {content}\n        </Loading>\n      ) : (\n        content\n      )}\n    </div>\n  );\n};\n\nCard.defaultProps = {\n  segmentLine: false,\n  loading: false,\n  isDialogCard: false,\n  hasCollapse: false,\n  defaultCollapse: false,\n};\n\nCard.displayName = 'Card';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card-collapse/index.scss",
    "content": ".fusion-ui-card-collapse {\n  transition: height 0.3s;\n  overflow: hidden;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card-collapse/index.tsx",
    "content": "import * as React from 'react';\nimport { useLayoutEffect } from 'react';\n\nexport const CardCollapse: React.FC<{\n  collapsed: boolean;\n}> = ({ collapsed, children }) => {\n  const ref = React.useRef<HTMLDivElement>();\n  const contentRef = React.useRef<HTMLDivElement>();\n  useLayoutEffect(() => {\n    if (!ref.current) {\n      return () => {};\n    }\n    // 折叠\n    if (collapsed) {\n      // 解决折叠第一次也会进行动画问题\n      if (ref.current.style.height === 'auto') {\n        ref.current.style.height = `${contentRef.current.offsetHeight}px`;\n      }\n      const index = setTimeout(() => {\n        ref.current.style.height = '0px';\n      }, 0);\n      return () => clearTimeout(index);\n    }\n    // 当前已经展开，不进行动画\n    if (ref.current.style.height === 'auto') {\n      return () => {};\n    }\n    // 展开\n    ref.current.style.height = `${contentRef.current.offsetHeight}px`;\n    const index = setTimeout(() => {\n      ref.current.style.height = 'auto';\n    }, 400);\n    return () => clearTimeout(index);\n  }, [collapsed]);\n\n  return (\n    <div className=\"fusion-ui-card-collapse\" ref={ref}>\n      <div ref={contentRef}>{children}</div>\n    </div>\n  );\n};\n\nCardCollapse.displayName = 'CardCollapse';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card-header/index.scss",
    "content": "@import '../../../../variables.scss';\n\n$fusion-ui-card-header-padding: var(--s-4 $s-5, $s-4 $s-5);\n\n.fusion-ui-card-header-padding {\n  padding-bottom: var(--s-4, $s-4);\n}\n\n.fusion-ui-card-header {\n  &__content {\n    box-sizing: border-box;\n    position: relative;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    overflow: hidden;\n    padding: var(--fusion-ui-card-header-padding, $fusion-ui-card-header-padding);\n    padding-bottom: 0;\n    // border-left: var(--s-1 transparent solid, $size-base transparent solid);\n    border-radius: var(--corner-2, $corner-2);\n  }\n\n  &--collapsed {\n    cursor: pointer;\n    border-color: var(--color-brand1-1, $color-brand1-1);\n    &:hover {\n      background-color: var(--color-fill1-2, $color-fill1-2);\n    }\n    .fusion-ui-card-header__action-bar {\n      display: none;\n    }\n  }\n\n  &__hd {\n    display: flex;\n    box-sizing: border-box;\n    align-items: center;\n    gap: var(--s-2, $s-2);\n  }\n\n  &__ft {\n    flex: 1;\n    display: flex;\n    gap: var(--s-2, $s-2);\n    justify-content: flex-end;\n    align-items: center;\n  }\n\n  &__desc {\n    padding: 0 $fusion-ui-card-header-padding $s-4 $fusion-ui-card-header-padding;\n  }\n\n  &__title {\n    display: flex;\n    box-sizing: border-box;\n    align-items: center;\n\n    font-size: var(--font-size-subhead, $font-size-subhead);\n    font-weight: var(--font-weight-semi-bold, $font-weight-semi-bold);\n    color: var(--color-text1-4, $color-text1-4);\n  }\n  &__tooltip {\n    color: var(--color-text1-1, $color-text1-1);\n  }\n\n  &__action-bar {\n    display: flex;\n    gap: var(--s-2, $s-2);\n    justify-content: flex-end;\n  }\n  &__collapse-btn {\n    user-select: none;\n    & > .fusion-ui-icon {\n      transition: transform 0.1s ease-in-out;\n      color: var(--color-line1-4 !important, $color-line1-4 !important);\n    }\n    &--collapsed {\n      & > .fusion-ui-icon {\n        color: var(--color-brand1-6 !important, $color-brand1-6 !important);\n        transform-origin: center;\n        transform: rotate(-180deg) !important;\n      }\n    }\n    &:hover {\n      & > .fusion-ui-icon {\n        color: var(--color-brand1-6 !important, $color-brand1-6 !important);\n      }\n    }\n  }\n}\n\n.fusion-ui-card-header__divider {\n  height: 1px;\n  border-bottom: 1px solid $color-line1-1;\n  margin-top: var(--s-4, $s-4);\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card-header/index.tsx",
    "content": "import * as React from 'react';\nimport { Button, Balloon, Tag } from '@alifd/next';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport { ButtonGroup } from '@/components/button-group';\nimport { CardButtonGroupProps } from '../button-group';\nimport classnames from 'classnames';\nimport { TooltipProps } from '@alifd/next/lib/balloon';\n\nconst Tooltip = Balloon;\n\nfunction formatActionButtons(actionButtons) {\n  if (actionButtons && Array.isArray(actionButtons)) {\n    return actionButtons.map((item) => {\n      if (item.label && !item.children) {\n        item.children = item.label;\n      }\n      return item;\n    });\n  }\n  return [];\n}\nexport interface CardTagProps {\n  label?: string;\n  color?: string;\n}\n\nexport interface CardHeaderProps {\n  /**\n   * 卡片标题\n   */\n  title?: React.ReactNode;\n  description?: React.ReactNode;\n  /**\n   * 卡片顶部操作区域自定义渲染\n   */\n  actionBar?: React.ReactNode;\n  actionButtons?: CardButtonGroupProps;\n  text?: boolean;\n  visibleButtonCount?: number;\n  tagGroup?: CardTagProps[];\n  /**\n   * 受控控制 Card 展开收起状态\n   */\n  isCollapse?: boolean;\n  /**\n   * 是否开启 Card 显示展开收起\n   */\n  hasCollapse?: boolean;\n\n  collapsed?: boolean;\n  onCollapse?: () => void;\n\n  /**\n   * 帮助信息，仅在 title 展示时生效\n   */\n  explanation?: string;\n  /**\n   * 帮助信息气泡配置\n   */\n  explanationTooltipProps?: TooltipProps;\n  hasDivider?: boolean;\n}\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({\n  title,\n  description,\n  hasCollapse,\n  actionBar,\n  collapsed,\n  onCollapse,\n  explanation,\n  explanationTooltipProps,\n  hasDivider,\n  tagGroup,\n  actionButtons,\n  text,\n  visibleButtonCount,\n}) => {\n  return (\n    <div\n      className={classnames('fusion-ui-card-header', {\n        'fusion-ui-card-header--collapsed': collapsed,\n      })}\n      onClick={collapsed ? onCollapse : undefined}\n    >\n      <div className=\"fusion-ui-card-header__content\">\n        <div className=\"fusion-ui-card-header__hd\">\n          {title && <div className=\"fusion-ui-card-header__title\">{title}</div>}\n          {title && explanation && (\n            <div className=\"fusion-ui-card-header__tooltip\">\n              <Tooltip\n                trigger={<CustomIcon type=\"ic_error2\" size=\"xs\" />}\n                {...explanationTooltipProps}\n              >\n                {explanation}\n              </Tooltip>\n            </div>\n          )}\n          {tagGroup.map((item) => {\n            let label: any = item;\n            let color: any = 'blue';\n            if (typeof item === 'object') {\n              label = item.label;\n              if (item.color) {\n                color = item.color;\n              }\n            }\n            return (\n              <Tag color={color} size=\"medium\">\n                {label}\n              </Tag>\n            );\n          })}\n        </div>\n        <div className=\"fusion-ui-card-header__ft\">\n          {actionBar && <div className=\"fusion-ui-card-header__action-bar\">{actionBar}</div>}\n          <ButtonGroup\n            dataSource={formatActionButtons(actionButtons)}\n            text={text}\n            visibleButtonCount={visibleButtonCount}\n          />\n          {hasCollapse && (\n            <Button\n              className={classnames('fusion-ui-card-header__collapse-btn', {\n                'fusion-ui-card-header__collapse-btn--collapsed': collapsed,\n              })}\n              text\n              onClick={onCollapse}\n              type={'primary'}\n            >\n              {collapsed ? (\n                <>\n                  <span>展开&nbsp;</span>\n                  <CustomIcon size=\"xs\" type=\"triangle-down\" />\n                </>\n              ) : (\n                <>\n                  <span>收起&nbsp;</span>\n                  <CustomIcon size=\"xs\" type=\"triangle-up\" />\n                </>\n              )}\n            </Button>\n          )}\n        </div>\n      </div>\n      {description ? <div className=\"fusion-ui-card-header__desc\">{description}</div> : null}\n      {hasDivider && !collapsed && <div className={classnames('fusion-ui-card-header__divider')} />}\n    </div>\n  );\n};\nCardHeader.defaultProps = {\n  onCollapse: () => {},\n  hasDivider: true,\n  tagGroup: [],\n};\n\nCardHeader.displayName = 'CardHeader';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card-section/index.scss",
    "content": "$fusion-ui-card-padding: var(--s-1 * 5, $size-base * 5);\n$fusion-ui-card-header-padding: var(--fusion-ui-card-padding, $fusion-ui-card-padding);\n$fusion-ui-card-section-padding: var(--fusion-ui-card-padding, $fusion-ui-card-padding);\n\n.fusion-ui-card-section {\n  // padding-bottom: var(--fusion-ui-card-section-padding, $fusion-ui-card-section-padding);\n  box-sizing: border-box;\n  border: 0 solid $color-line1-1;\n  align-self: stretch;\n}\n\n.fusion-ui-card-section-header__divider {\n  height: 1px;\n  border-bottom: 1px solid $color-line1-1;\n}\n.fusion-ui-card-section-header + .fusion-ui-card-section-header__divider {\n  margin-top: var(--s-4, $s-4);\n}\n\n.fusion-ui-card-section-footer__divider {\n  height: 1px;\n  border-bottom: 1px solid $color-line1-1;\n  margin-top: var(--s-5, $s-5);\n}\n\n.fusion-ui-section-divider-indent {\n  margin-left: var(--s-5, $s-5);\n  margin-right: var(--s-5, $s-5);\n}\n\n.fusion-ui-card-section-header {\n  box-sizing: border-box;\n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  overflow: hidden;\n  padding: 5px 0;\n  padding-bottom: 0;\n\n  &__hd {\n    display: flex;\n    box-sizing: border-box;\n    align-items: center;\n    gap: var(--s-1 * 2, $size-base * 2);\n  }\n\n  &__ft {\n    flex: 1;\n    display: flex;\n    gap: var(--s-1 * 2, $size-base * 2);\n    justify-content: flex-end;\n    align-items: center;\n  }\n\n  &__title {\n    display: flex;\n    box-sizing: border-box;\n    align-items: center;\n\n    font-size: var(--font-size-body-2, $font-size-body-2);\n    font-weight: var(--font-weight-semi-bold, $font-weight-semi-bold);\n    color: var(--color-text1-3, $color-text1-3);\n\n    &::before {\n      content: '';\n      display: inline-block;\n      height: 13px;\n      width: 3px;\n      opacity: 0.8;\n      background: #034dfa;\n      border-radius: 2px;\n      margin-right: 8px;\n    }\n    &.fusion-ui-card-section-header-noBullet::before {\n      display: none;\n    }\n  }\n  &__tooltip {\n    color: var(--color-text1-1, $color-text1-1);\n  }\n\n  &__action-bar {\n    display: flex;\n    gap: var(--s-1 * 2, $size-base * 2);\n    justify-content: flex-end;\n  }\n}\n\n.fusion-ui-card-section-body {\n  padding: var(--fusion-ui-card-section-padding 0, $fusion-ui-card-section-padding 0);\n}\n\n.fusion-ui-card-body__panel--flow > .fusion-ui-card-section,\n.fusion-ui-card-body__panel--flow\n  > .fusion-ui-row-col-container\n  > .fusion-ui-row\n  > .fusion-ui-col\n  > .fusion-ui-card-section {\n  // margin: 0 ($fusion-ui-card-padding * -1);\n\n  &--segment-line {\n    &:first-child {\n      border-top: none;\n    }\n  }\n  &:first-child {\n    padding-top: 0;\n  }\n  &:last-child {\n    padding-bottom: 0;\n  }\n}\n\n.fusion-ui-card-body__panel--grid > .fusion-ui-grid {\n  margin: 0 ($fusion-ui-card-padding * -1 - 1px) ($fusion-ui-card-padding * -1)\n    ($fusion-ui-card-padding * -1);\n  & > .fusion-ui-card-section {\n    &--segment-line {\n      border-right-width: 1px;\n    }\n    .fusion-ui-card-section-header__title::before {\n      display: none;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/components/card-section/index.tsx",
    "content": "import * as React from 'react';\nimport { Loading, Balloon, Tag } from '@alifd/next';\nimport classnames from 'classnames';\nimport { CardTagProps } from '../card-header';\nimport { TooltipProps } from '@alifd/next/lib/balloon';\nimport { CustomIcon } from '@/components/toggle-icon';\n\nconst { Tooltip } = Balloon;\n\nexport interface CardSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n  /**\n   * 段落标题\n   */\n  title?: React.ReactNode;\n  /**\n   * 帮助信息，仅在 title 展示时生效\n   */\n  explanation?: string;\n  /**\n   * 帮助信息气泡配置\n   */\n  explanationTooltipProps?: TooltipProps;\n  /**\n   * 子卡片顶部操作区域自定义渲染\n   */\n  actionBar?: React.ReactNode;\n  /**\n   * 是否启用分割线\n   * @default false\n   */\n  segmentLine?: boolean;\n  /**\n   * 是否 loading\n   * @default false\n   */\n  loading?: boolean;\n  className?: string;\n  style?: React.CSSProperties;\n  tagGroup?: CardTagProps[];\n  headerDivider?: boolean;\n  footerDivider?: boolean;\n  hasDividerIndent?: boolean;\n  noBullet?: boolean;\n}\n\n/**\n * 子卡片\n */\nexport const CardSection: React.FC<CardSectionProps> = ({\n  children,\n  title,\n  className,\n  loading,\n  segmentLine,\n  actionBar,\n  explanation,\n  explanationTooltipProps,\n  tagGroup,\n  id,\n  headerDivider,\n  footerDivider,\n  hasDividerIndent,\n  noBullet,\n  style,\n}) => {\n  // 获取 loading 状态\n  const loadingStatus = loading;\n  const content = (\n    <>\n      {(title || actionBar) && (\n        <div className=\"fusion-ui-card-section-header\">\n          {title && (\n            <div className=\"fusion-ui-card-section-header__hd\">\n              <div\n                className={classnames('fusion-ui-card-section-header__title', {\n                  'fusion-ui-card-section-header-noBullet': noBullet,\n                })}\n              >\n                {title}\n              </div>\n              <div className=\"fusion-ui-card-section-header__tooltip\">\n                {explanation && (\n                  <Tooltip\n                    trigger={<CustomIcon type=\"ic_error2\" size=\"xs\" />}\n                    {...explanationTooltipProps}\n                  >\n                    {explanation}\n                  </Tooltip>\n                )}\n              </div>\n              {tagGroup.map((item) => {\n                let label: any = item;\n                let color: any = 'blue';\n                if (typeof item === 'object') {\n                  label = item.label;\n                  if (item.color) {\n                    color = item.color;\n                  }\n                }\n                return (\n                  <Tag color={color} size=\"small\">\n                    {label}\n                  </Tag>\n                );\n              })}\n            </div>\n          )}\n          <div className=\"fusion-ui-card-section-header__hd\">\n            {actionBar && (\n              <div className=\"fusion-ui-card-section-header__action-bar\">{actionBar}</div>\n            )}\n          </div>\n        </div>\n      )}\n      {headerDivider && (\n        <div\n          className={classnames('fusion-ui-card-section-header__divider', {\n            'fusion-ui-section-divider-indent': hasDividerIndent,\n          })}\n        />\n      )}\n      <div className=\"fusion-ui-card-section-body\">{children}</div>\n      {footerDivider && (\n        <div\n          className={classnames('fusion-ui-card-section-footer__divider', {\n            'fusion-ui-section-divider-indent': hasDividerIndent,\n          })}\n        />\n      )}\n    </>\n  );\n  // 一般情况\n  return (\n    <div\n      id={id}\n      className={classnames('fusion-ui-card-section', {\n        'fusion-ui-card-section--segment-line': segmentLine,\n        [className]: className,\n      })}\n      style={style}\n    >\n      {loadingStatus ? (\n        <Loading inline={false} visible={loadingStatus} size=\"medium\">\n          {content}\n        </Loading>\n      ) : (\n        content\n      )}\n    </div>\n  );\n};\n\nCardSection.displayName = 'CardSection';\nCardSection.defaultProps = {\n  title: null,\n  segmentLine: false,\n  loading: false,\n  tagGroup: [],\n  noBullet: false,\n  headerDivider: true,\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/index.scss",
    "content": "@import './theme-dark.scss';\n@import './components/card/index.scss';\n@import './components/card-collapse/index.scss';\n@import './components/card-header/index.scss';\n@import './components/card-section/index.scss';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/index.tsx",
    "content": "import { Card as ProCard, CardProps } from './components/card';\nimport { CardSection, CardSectionProps } from './components/card-section';\n\nProCard.CardSection = CardSection;\n\nexport { CardProps, CardSectionProps };\nexport default ProCard;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-card/theme-dark.scss",
    "content": "body.dark {\n  .fusion-ui-card {\n    background-color: var(--color-fill1-1, $color-fill1-1);\n    &-header {\n      &__title {\n        color: var(--color-text1-4, $color-text1-4);\n      }\n    }\n    &-body {\n      color: var(--color-text1-3, $color-text1-3);\n    }\n    &-header {\n      &--collapsed {\n        border-color: var(--color-brand1-6, $color-brand1-6);\n        &:hover {\n          background-color: var(--color-fill1-1, $color-fill1-1);\n        }\n      }\n    }\n    .fusion-ui-card-grid > .fusion-ui-card-section {\n      background-color: var(--color-fill1-1, $color-fill1-1);\n    }\n    .fusion-ui-card-section-header__title::before {\n      background: var(--color-brand1-6, $color-brand1-6);\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-dialog/dialog.tsx",
    "content": "import * as React from 'react';\nimport cx from 'classnames';\nimport { Dialog as NextDialog, Message, Balloon, Icon } from '@alifd/next';\nimport { DialogProps as NextDialogProps } from '@alifd/next/types/dialog';\n\nimport Operations, { OperationProps } from '@/common/operations';\nimport { isEditorEnv } from '@/utils';\n\nconst { Tooltip } = Balloon;\nconst noop = () => {};\nconst isValidFunction = (func: any) => typeof func === 'function';\nconst ACTION_MAP: Record<string | number, any> = {\n  ok: noop,\n  cancel: noop,\n};\n\nfunction getAction(action: string | number) {\n  return ACTION_MAP[action] || noop;\n}\n\nexport interface DialogProps extends NextDialogProps {\n  /**\n   * 弹窗大小\n   */\n  size?: 'small' | 'medium' | 'large' | 'autoLarge';\n  operations?: object[];\n  operationConfig?: object;\n  status?: string;\n  dialogType?: string;\n  explanation?: string;\n  iconType?: string;\n  hasTips?: boolean;\n}\n\nexport interface DialogOperationsProps extends OperationProps {\n  onOk?: any;\n  onCancel?: any;\n}\n\nexport interface DialogState {\n  visible?: boolean;\n}\n\nconst DialogOperations = (props: DialogOperationsProps) => {\n  const { operations, operationConfig, onOk = noop, onCancel = noop, renderDefaultBtns } = props;\n  if (!operations || !operations.length) {\n    return null;\n  }\n\n  const baseOperations = operations.map((operation: any) => {\n    let onClick = getAction(operation.action).bind(this);\n    if (operation.action) {\n      if (operation.action === 'ok' && onOk && typeof onOk === 'function') {\n        onClick = onOk;\n      } else if (operation.action === 'cancel' && onCancel && typeof onCancel === 'function') {\n        onClick = onCancel;\n      }\n    }\n    return {\n      onClick,\n      ...operation,\n    };\n  });\n\n  const operationProps = {\n    operations: baseOperations,\n    operationConfig,\n    renderDefaultBtns,\n  };\n\n  return <Operations {...operationProps} />;\n};\n\nfunction Dialog(props: DialogProps) {\n  const {\n    size,\n    className,\n    onOk,\n    onCancel,\n    children,\n    operations,\n    footer,\n    operationConfig,\n    status,\n    messageProps,\n    dialogType,\n    explanationTooltipProps,\n    hasTips,\n    explanation,\n    iconType,\n    rtl,\n    title,\n    width,\n    ...otherProps\n  } = props;\n  let footerElement = footer;\n  if (operations && operations.length) {\n    const operationsProps = {\n      operations,\n      operationConfig,\n      onOk,\n      onCancel,\n      renderDefaultBtns: () => footer || [],\n    };\n    footerElement = <DialogOperations {...operationsProps} />;\n  }\n\n  if (typeof width !== 'undefined') {\n    otherProps.width = width;\n  }\n\n  // class 处理\n  const classes = cx({\n    'fusion-ui-dialog': true,\n    [`fusion-ui-dialog-${size}`]: typeof width === 'undefined',\n    [className]: !!className,\n  });\n\n  // 如果指定了 width ，则 size 不生效；\n\n  const titleElement =\n    dialogType === 'notice' && status ? (\n      <Message\n        style={{ padding: 0 }}\n        size=\"large\"\n        shape=\"addon\"\n        type={status}\n        {...messageProps}\n        title={title}\n        rtl={rtl}\n      />\n    ) : (\n      <div>\n        {title}\n        {hasTips ? (\n          <div className=\"fusion-ui-dialog__tooltip\">\n            <Tooltip trigger={<Icon type={iconType} size=\"small\" />} {...explanationTooltipProps}>\n              {explanation}\n            </Tooltip>\n          </div>\n        ) : (\n          ''\n        )}\n      </div>\n    );\n\n  return (\n    <NextDialog v2 title={titleElement} footer={footerElement} className={classes} {...otherProps}>\n      {children}\n    </NextDialog>\n  );\n}\n\nexport class InnerProDialog extends React.Component {\n  static displayName: 'ProDialog';\n\n  static propTypes: DialogProps;\n\n  constructor(props: DialogProps) {\n    super(props);\n    const { visible } = props;\n    this.state = {\n      visible: visible || false,\n    };\n  }\n\n  onOk = (event: Object) => {\n    const { onOk } = this.props;\n    if (isValidFunction(onOk)) {\n      onOk(event);\n    }\n\n    if (!('visible' in this.props)) {\n      this.setState({ visible: false });\n    }\n  };\n\n  onCancel = (event: Object) => {\n    const { onCancel } = this.props;\n    if (isValidFunction(onCancel)) {\n      onCancel(event);\n    }\n\n    this.setState({ visible: false });\n  };\n\n  onClose = (trigger: String, event: Object) => {\n    const { onClose } = this.props;\n    if (isValidFunction(onClose)) {\n      onClose(trigger, event);\n    }\n\n    this.setState({ visible: false });\n  };\n\n  show = () => {\n    this.setState({\n      visible: true,\n    });\n  };\n\n  open = () => {\n    this.setState({\n      visible: true,\n    });\n  };\n\n  hide = () => {\n    this.setState({\n      visible: false,\n    });\n  };\n\n  close = () => {\n    this.setState({\n      visible: false,\n    });\n  };\n\n  render() {\n    const { children, ...otherProps } = this.props;\n    const { visible } = this.state;\n    const realVisible = isEditorEnv(this.props) ? true : visible;\n    const dialogProps = {\n      ...otherProps,\n      visible: realVisible,\n      onOk: this.onOk,\n      onCancel: this.onCancel,\n      onClose: this.onClose,\n    };\n\n    return <Dialog {...dialogProps}>{children}</Dialog>;\n  }\n}\n\nexport const ProDialog = Object.assign(InnerProDialog, NextDialog);\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-dialog/index.scss",
    "content": ".fusion-ui-dialog {\n  top: 50%;\n  left: 50%;\n  translate: -50% -50%;\n  &-small {\n    width: calc(var(--s-1, 4) * 100) !important;\n  }\n  &-medium {\n    width: calc(var(--s-1, 4) * 175) !important;\n  }\n  &-large {\n    width: calc(var(--s-1, 4) * 250) !important;\n  }\n  &-autoLarge {\n    width: 90vw !important;\n    min-width: 900px;\n  }\n  &__tooltip {\n    color: var(--color-text1-1, $color-text1-1);\n    display: inline-block;\n    margin-left: 8px;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-dialog/index.tsx",
    "content": "export * from './dialog';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-drawer/drawer.tsx",
    "content": "import * as React from 'react';\nimport { Drawer as NextDrawer, Balloon, Icon } from '@alifd/next';\nimport { DrawerProps as NextDrawerProps } from '@alifd/next/types/Drawer';\n\nimport { isEditorEnv } from '@/utils';\nimport { bizCssPrefix } from '@/variables';\nimport { Space } from '@/components/container';\nimport Operations, { OperationProps } from '@/common/operations';\n\nconst cssPrefix = `${bizCssPrefix}-pro-drawer`;\n\nconst noop = () => {};\nconst isValidFunction = (func: any) => typeof func === 'function';\nconst ACTION_MAP: Record<string | number, any> = {\n  ok: noop,\n  cancel: noop,\n};\n\nfunction getAction(action: string | number) {\n  return ACTION_MAP[action] || noop;\n}\nexport interface DrawerProps extends NextDrawerProps {\n  /**\n   * 弹窗大小\n   */\n  size?: 'small' | 'medium' | 'large' | 'autoLarge';\n  operations?: object[];\n  operationConfig?: object;\n  onOk?: any;\n  onCancel?: any;\n  footer?: any;\n  titleTip?: any;\n}\n\nexport interface DrawerOperationsProps extends OperationProps {\n  onOk?: any;\n  onCancel?: any;\n}\n\nconst DrawerOperations = (props: DrawerOperationsProps) => {\n  const { operations, operationConfig, onOk = noop, onCancel = noop, renderDefaultBtns } = props;\n  if (!operations || !operations.length) {\n    return null;\n  }\n\n  const baseOperations = operations.map((operation: any) => {\n    let onClick = getAction(operation.action).bind(this);\n    if (operation.action) {\n      if (operation.action === 'ok' && onOk && typeof onOk === 'function') {\n        onClick = onOk;\n      } else if (operation.action === 'cancel' && onCancel && typeof onCancel === 'function') {\n        onClick = onCancel;\n      }\n    }\n    return {\n      onClick,\n      ...operation,\n    };\n  });\n\n  const operationProps = {\n    operations: baseOperations,\n    operationConfig,\n    renderDefaultBtns,\n  };\n\n  return <Operations cssPrefix={cssPrefix} {...operationProps} />;\n};\n\nconst sizeMap: Record<string, Record<string, string>> = {\n  small: {\n    hoz: '20vw',\n    ver: '20vh',\n  },\n  medium: {\n    hoz: '40vw',\n    ver: '40vh',\n  },\n  large: {\n    hoz: '60vw',\n    ver: '60vh',\n  },\n};\n\nfunction Drawer(props: DrawerProps) {\n  const {\n    size,\n    children,\n    operations,\n    placement,\n    onOk,\n    onCancel,\n    footer,\n    operationConfig = {},\n    title,\n    titleTip,\n    className,\n    width,\n    height,\n    ...otherProps\n  } = props;\n\n  let footerElement = footer;\n  if (operations && operations.length) {\n    const operationsProps = {\n      operations,\n      operationConfig,\n      onOk,\n      onCancel,\n      renderDefaultBtns: () => footer || [],\n    };\n    footerElement = <DrawerOperations {...operationsProps} />;\n  }\n  let _width = width;\n  let _height = height;\n  let align;\n  if (size) {\n    // ver\n    if (['top', 'bottom'].includes(placement)) {\n      align = 'ver';\n      if (!_height) {\n        _height = sizeMap[size].ver;\n      }\n    } else if (['left', 'right'].includes(placement)) {\n      align = 'hoz';\n      if (!_width) {\n        _width = sizeMap[size].hoz;\n      }\n    }\n  }\n\n  const _titleTip =\n    titleTip && titleTip.enable\n      ? Object.assign(\n          {\n            content: title,\n            icon: 'help',\n          },\n          titleTip,\n        )\n      : null;\n  const titleElement = title ? (\n    <Space className={`${cssPrefix}-title`}>\n      {title}\n      {_titleTip ? (\n        <Balloon\n          trigger={\n            <Icon\n              type={_titleTip.icon || 'help'}\n              size=\"xs\"\n              style={{ marginLeft: 4, maxHeight: 28 }}\n            />\n          }\n          alignEdge\n          closable={false}\n        >\n          <p>{_titleTip.content || title}</p>\n        </Balloon>\n      ) : null}\n    </Space>\n  ) : null;\n\n  return (\n    <NextDrawer\n      className={cssPrefix}\n      placement={placement}\n      width={align === 'hoz' ? _width : null}\n      height={align === 'ver' ? _height : null}\n      title={titleElement}\n      {...otherProps}\n    >\n      <div className={`${cssPrefix}-content`}>{children}</div>\n\n      <div className={`${cssPrefix}-footer`}>{footerElement}</div>\n    </NextDrawer>\n  );\n}\n\nexport class InnerProDrawer extends React.Component<DrawerProps> {\n  static displayName: 'ProDrawer';\n\n  static propTypes: DrawerProps;\n\n  constructor(props: DrawerProps) {\n    super(props);\n    const { visible } = props;\n    this.state = {\n      visible: visible || false,\n    };\n  }\n\n  onOk = (event: Object) => {\n    const { onOk } = this.props;\n    if (isValidFunction(onOk)) {\n      onOk(event);\n    }\n\n    if (!('visible' in this.props)) {\n      this.setState({ visible: false });\n    }\n  };\n\n  onCancel = (event: Object) => {\n    const { onCancel } = this.props;\n    if (isValidFunction(onCancel)) {\n      onCancel(event);\n    }\n\n    this.setState({ visible: false });\n  };\n\n  onClose = (trigger: String, event: Object) => {\n    const { onClose } = this.props;\n    if (isValidFunction(onClose)) {\n      onClose(trigger, event);\n    }\n\n    this.setState({ visible: false });\n  };\n\n  show = () => {\n    this.setState({\n      visible: true,\n    });\n  };\n\n  open = () => {\n    this.setState({\n      visible: true,\n    });\n  };\n\n  hide = () => {\n    this.setState({\n      visible: false,\n    });\n  };\n\n  close = () => {\n    this.setState({\n      visible: false,\n    });\n  };\n\n  render() {\n    const { children, ...otherProps } = this.props;\n    const { visible } = this.state;\n    const realVisible = isEditorEnv(this.props) ? true : visible;\n    const DrawerProps = {\n      ...otherProps,\n      visible: realVisible,\n      onOk: this.onOk,\n      onCancel: this.onCancel,\n      onClose: this.onClose,\n    };\n\n    return <Drawer {...DrawerProps}>{children}</Drawer>;\n  }\n}\n\nexport const ProDrawer = Object.assign(InnerProDrawer, NextDrawer);\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-drawer/index.scss",
    "content": "#{$biz-css-prefix}pro-drawer {\n  &-small {\n    width: calc(var(--s-1, 4) * 100);\n  }\n  &-medium {\n    width: calc(var(--s-1, 4) * 175);\n  }\n  &-large {\n    width: calc(var(--s-1, 4) * 250);\n  }\n  &-autoLarge {\n    width: 90vw;\n    min-width: 900px;\n  }\n  &-title {\n    font-size: var(--s-4, $s-4);\n    letter-spacing: 0;\n    line-height: var(--s-5, $s-5);\n  }\n  &.operation-container {\n    display: flex;\n    padding: 15px;\n    align-items: center;\n\n    & > * {\n      margin-left: 10px;\n    }\n\n    & > *:first-child {\n      margin-left: 0;\n    }\n\n    &-operation-item + &-operation-item {\n      margin-left: 10px;\n    }\n\n    &.operation-align-left {\n      justify-content: flex-start;\n    }\n\n    &.operation-align-center {\n      justify-content: center;\n    }\n\n    &.operation-align-right {\n      justify-content: flex-end;\n    }\n\n    &.operation-fixed {\n      width: 100%;\n      position: absolute;\n      background-color: #fff;\n      bottom: 0;\n      left: 0;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-drawer/index.tsx",
    "content": "export * from './drawer';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/components/Input.tsx",
    "content": "import * as React from 'react';\n\nimport { Input } from '@alifd/next';\n\nimport FormItem from './form-item';\n\nconst FormInput = (props: any) => {\n  const { formItemProps = {}, ...componentProps } = props;\n  return (\n    <FormItem {...formItemProps}>\n      <Input {...componentProps} />\n    </FormItem>\n  );\n};\n\nFormInput.displayName = 'FormInput';\n\nexport default FormInput;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/components/form-item/index.scss",
    "content": "#{$biz-css-prefix}form-item-bubble {\n  position: relative;\n  padding-top: 8px;\n\n  &::before {\n    content: '';\n    width: 0;\n    height: 0;\n    border-bottom: 7px solid #f4f5f8;\n    border-bottom: 7px solid var(--color-fill1-2, #f4f5f8);\n    border-right: 7px solid transparent;\n    border-left: 7px solid transparent;\n    position: absolute;\n    top: 1px;\n    left: 20px;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/components/form-item/index.tsx",
    "content": "import * as React from 'react';\nimport * as Next from '@alifd/next';\nimport { ItemProps } from '@alifd/next/types/form';\n\nconst { Balloon, Icon, Form } = Next;\nconst { Item } = Form;\n\nexport enum FormItemTypes {\n  Input = 'Input',\n  NumberPicker = 'NumberPicker',\n  DatePicker = 'DatePicker',\n}\n\nexport interface ProFormItemProps extends ItemProps {\n  labelTip?: Record<string, any>;\n  componentProps?: Record<string, any>;\n  __designMode?: string;\n  childForm?: any;\n}\n\nconst ProFormItem: React.ForwardRefRenderFunction<any, ProFormItemProps> = (\n  props: ProFormItemProps,\n  ref,\n) => {\n  const {\n    labelTip,\n    label,\n    __designMode,\n    children,\n    labelAlign,\n    labelCol,\n    childForm,\n    ...otherProps\n  } = props;\n  const _labelTip =\n    labelTip && labelTip.enable\n      ? Object.assign(\n          {\n            content: label,\n            icon: 'help',\n          },\n          labelTip,\n        )\n      : null;\n\n  return (\n    <Item\n      labelAlign={labelAlign}\n      labelCol={labelCol}\n      label={\n        <>\n          {label}\n          {_labelTip ? (\n            <Balloon\n              trigger={\n                <Icon\n                  type={_labelTip.icon || 'help'}\n                  size=\"xs\"\n                  style={{ marginLeft: 4, maxHeight: 28 }}\n                />\n              }\n              alignEdge\n              closable={false}\n            >\n              <p>{_labelTip.content || label}</p>\n            </Balloon>\n          ) : null}\n        </>\n      }\n      {...otherProps}\n      ref={ref}\n    >\n      {React.Children.map(children, (child) => {\n        if (!child) return null;\n        const _props = Object.assign({}, child.props || {});\n        const { defaultValue, value, ...otherComponentProps } = _props;\n        const finalValue =\n          (__designMode || otherComponentProps.__designMode) === 'design' ? defaultValue : value;\n        if (finalValue) {\n          otherComponentProps.value = finalValue;\n        }\n        otherComponentProps.renderPreview = (curValue) => {\n          if (otherProps.isPreview && !curValue) {\n            return '—';\n          }\n          if (!curValue) {\n            return curValue;\n          }\n          switch (typeof curValue) {\n            case 'boolean':\n              return curValue;\n            case 'object':\n              if (Array.isArray(curValue)) {\n                return curValue.length\n                  ? curValue.map((item, index) => (\n                      <span key={`${index}-checkbox`} style={{ marginRight: 10 }}>\n                        {item?.label || '—'}\n                      </span>\n                    ))\n                  : null;\n              }\n              return curValue.label ? (\n                <span style={{ marginRight: 10 }}>{curValue.label}</span>\n              ) : null;\n            default:\n              return curValue;\n          }\n        };\n        if (otherProps.name) {\n          _props.name = otherProps.name;\n        }\n        if (child) {\n          return React.cloneElement(child, Object.assign(_props, otherComponentProps));\n        }\n        return child;\n      })}\n      {childForm ? <div className=\"fusion-ui-form-item-bubble\">{childForm}</div> : null}\n    </Item>\n  );\n};\n\nconst RefProFormItem = React.forwardRef(ProFormItem);\nRefProFormItem.displayName = 'ProFormItem';\nRefProFormItem.defaultProps = {};\nRefProFormItem.propTypes = {};\n\nexport default RefProFormItem;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/components/next-wrapper.tsx",
    "content": "import * as React from 'react';\nimport {\n  CascaderSelect,\n  Checkbox,\n  DatePicker,\n  Input,\n  NumberPicker,\n  Radio,\n  Rating,\n  Select,\n  TreeSelect,\n  Upload,\n} from '@alifd/next';\n\nimport FormItem from './form-item';\n\nconst RadioGroup = Radio.Group;\nconst CheckboxGroup = Checkbox.Group;\nconst { RangePicker } = DatePicker;\nconst { TextArea, Password } = Input;\n\nconst FormCascaderSelect = wrapper(CascaderSelect, 'FormCascaderSelect');\nconst FormCheckboxGroup = wrapper(CheckboxGroup, 'FormCheckboxGroup');\nconst FormDatePicker = wrapper(DatePicker, 'FormDatePicker');\nconst FormInput = wrapper(Input, 'FormInput');\nconst FormNumberPicker = wrapper(NumberPicker, 'FormNumberPicker');\nconst FormRadioGroup = wrapper(RadioGroup, 'FormRadioGroup');\nconst FormRangePicker = wrapper(RangePicker, 'FormRangePicker');\nconst FormRating = wrapper(Rating, 'FormRating');\nconst FormSelect = wrapper(Select, 'FormSelect');\nconst FormTreeSelect = wrapper(TreeSelect, 'FormTreeSelect');\nconst FormUpload = wrapper(Upload, 'FormUpload');\nconst FormTextArea = wrapper(TextArea, 'FormTextArea');\nconst FormPassword = wrapper(Password, 'FormPassword');\n\nfunction wrapper(NextFormComponent: any, displayName: string) {\n  const WrappedComponent = (props: any) => {\n    const { formItemProps = {}, ...componentProps } = props;\n    return (\n      <FormItem {...formItemProps}>\n        <NextFormComponent {...componentProps} />\n      </FormItem>\n    );\n  };\n  WrappedComponent.displayName = displayName;\n  return WrappedComponent;\n}\n\nexport {\n  FormCascaderSelect,\n  FormCheckboxGroup,\n  FormDatePicker,\n  FormInput,\n  FormNumberPicker,\n  FormRadioGroup,\n  FormRangePicker,\n  FormRating,\n  FormSelect,\n  FormTreeSelect,\n  FormUpload,\n  FormTextArea,\n  FormPassword,\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/index.scss",
    "content": "@import './layouts/anchor-form/index.scss';\n@import './layouts/child-form/index.scss';\n@import './layouts/pro-form/index.scss';\n@import './layouts/step-form/index.scss';\n@import './components/form-item/index.scss';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/index.tsx",
    "content": "import ProForm from './layouts/pro-form';\nimport StepForm from './layouts/step-form';\nimport AnchorForm from './layouts/anchor-form';\nimport ChildForm from './layouts/child-form';\n\nexport * from './components/form-item';\nexport * from './components/next-wrapper';\n\nexport { StepForm, ProForm, AnchorForm, ChildForm };\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/anchor-form/container.tsx",
    "content": "import React from 'react';\n\nfunction AnchorContainer() {\n  return <div>Container</div>;\n}\n\nexport default AnchorContainer;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/anchor-form/index.scss",
    "content": "#{$biz-css-prefix}anchor-form {\n  &.forms {\n    margin-bottom: var(--s-5, $s-5);\n    background-color: var(--color-white, $color-white);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/anchor-form/index.tsx",
    "content": "import * as React from 'react';\nimport { useRef, useImperativeHandle, forwardRef } from 'react';\nimport { Form, Card } from '@alifd/next';\nimport { Space } from '@/components/container';\nimport { Anchor, AnchorProps, LinkItemData } from '@/components/anchor';\nimport Operations from '@/common/operations';\nimport { getId } from '@/utils';\n\nexport interface AnchorFormProps {\n  children?: React.ReactElement;\n  /**\n   * 可以这样写属性描述\n   * @description   是否展示锚点\n   * @description.zh-CN 还支持不同的 locale 后缀来实现多语言描述，使用 description 兜底\n   * @default     false\n   */\n  showAnchor?: boolean;\n  formMapRef?: any;\n  operations?: any;\n  operationConfig?: any;\n  lastSaveTime?: any;\n  anchorProps?: AnchorProps;\n  enableRandomHtmlId?: boolean;\n}\n\nexport type AnchorFormItemProps = LinkItemData;\n\nfunction renderAnchor(props: AnchorFormProps, formArray: Map<string, AnchorFormItemProps>) {\n  const dataSource: AnchorFormItemProps[] = Array.from(formArray.keys()).map((item) => {\n    const anchorItemProps = formArray.get(item);\n    const { label = '', htmlId = getId(), ...otherProps } = anchorItemProps || {};\n    return {\n      ...otherProps,\n      label,\n      htmlId,\n    };\n  });\n  return <>{dataSource && <Anchor dataSource={dataSource} {...props} />}</>;\n}\n\nfunction renderForm(\n  props: AnchorFormProps,\n  formArrayRef: React.MutableRefObject<any[]>,\n  formArray: Map<string, AnchorFormItemProps>,\n) {\n  const { children } = props;\n  return (\n    <>\n      {React.Children.map(children, (child, index) => {\n        const anchorItemProps = formArray.get(`${index}`);\n        const { mode = 'independent', cardProps = {}, ...otherProps } = child.props;\n        const { label = '', htmlId = getId() } = anchorItemProps;\n        return (\n          <Card title={label}  id={htmlId} className=\"fusion-ui-anchor-form forms\" {...cardProps}>\n            {React.cloneElement(child, {\n              ref: (node) => {\n                // Keep your own reference\n                formArrayRef.current[index] = node;\n                // Call the original ref, if any\n                const { ref } = child;\n                if (typeof ref === 'function') {\n                  ref(node);\n                }\n              },\n              ...otherProps,\n              mode,\n            })}\n          </Card>\n        );\n      })}\n    </>\n  );\n}\n\nfunction AnchorForm(props: AnchorFormProps, ref: any) {\n  const {\n    children,\n    formMapRef: propsFormMapRef,\n    operations,\n    operationConfig,\n    lastSaveTime,\n    anchorProps = {},\n    showAnchor = false,\n    enableRandomHtmlId,\n    ...otherProps\n  } = props;\n  const formArrayRef = useRef<Array<React.MutableRefObject<any | undefined>>>([]);\n  useImperativeHandle(propsFormMapRef, () => formArrayRef.current);\n  if (!children) {\n    return (\n      <Space ref={ref} full align=\"center\" verAlign=\"middle\" style={{ minHeight: 50 }}>\n        <span>内容为空</span>\n      </Space>\n    );\n  }\n\n  const formArray = new Map<string, AnchorFormItemProps>();\n  React.Children.map(children, (child, index) => {\n    const { anchorItemProps } = child.props;\n    const name = `${index}`;\n    const data = { ...anchorItemProps };\n    if (enableRandomHtmlId) {\n      data.htmlId = getId();\n    }\n    formArray.set(name, data);\n  });\n\n  const operationsProps = {\n    operations,\n    operationConfig,\n    lastSaveTime,\n  };\n  const formContent = renderForm(props, formArrayRef, formArray);\n  return (\n    <div ref={ref}>\n      {showAnchor ? renderAnchor(anchorProps, formArray) : null}\n      <Form {...otherProps}>\n        {formContent}\n        <Operations {...operationsProps} />\n      </Form>\n    </div>\n  );\n}\n\nexport default forwardRef(AnchorForm);\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/child-form/index.scss",
    "content": "#{$biz-css-prefix}subForm-child-form {\n  &.one-column {\n    max-width: 600px;\n    margin: 0 auto;\n  }\n  background: #f5f5f5;\n  border-radius: 6px;\n  background-color: #f5f5f5;\n  padding: var(--s-4 $s-4 0 $s-4, $s-4 $s-4 0 $s-4);\n  margin-bottom: var(--s-4, $s-4);\n  &.empty-content {\n    display: flex;\n    justify-content: center;\n    align-content: center;\n  }\n}\n\n#{$biz-css-prefix}independent-child-form {\n  &.one-column {\n    max-width: 600px;\n    margin: 0 auto;\n  }\n\n  .next-number-picker {\n    .next-input-control {\n      padding-right: 0 !important;\n    }\n  }\n\n  .next-form-item-label label[required]:before {\n    margin-right: 0;\n    content: '';\n  }\n  .next-form-item-label label[required]:after {\n    margin-left: 4px;\n    content: '*';\n    color: #ff3000;\n  }\n  &.empty-content {\n    display: flex;\n    justify-content: center;\n    align-content: center;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/child-form/index.tsx",
    "content": "import * as React from 'react';\nimport { formatFormItems, ProFormProps } from '../pro-form';\nimport { ResponsiveGrid } from '@alifd/next';\nimport { bizCssPrefix } from '@/variables';\n\nexport interface ChildFormProps extends ProFormProps {\n  mode?: string;\n}\n\nconst ChildForm = (props: ChildFormProps, ref) => {\n  const { children, columns, mode, spacing = 16, emptyContent, ...otherProps } = props;\n  const cssPrefix = `${bizCssPrefix}-${mode || 'subForm'}`;\n  return (\n    <div className={`${cssPrefix}-child-form`} ref={ref}>\n      {children ? (\n        <ResponsiveGrid style={otherProps.style} gap={spacing} columns={columns}>\n          {formatFormItems(\n            children,\n            {\n              columns,\n              ...otherProps,\n            },\n            true,\n          )}\n        </ResponsiveGrid>\n      ) : (\n        <div className=\"empty-content\">{emptyContent}</div>\n      )}\n    </div>\n  );\n};\n\nconst RefChildForm = React.forwardRef(ChildForm);\n\nRefChildForm.displayName = 'ChildForm';\n\nexport default RefChildForm;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/pro-form/index.scss",
    "content": "#{$biz-css-prefix}pro-form {\n  &.one-column {\n    max-width: 600px;\n    margin: 0 auto;\n  }\n\n  .next-number-picker {\n    .next-input-control {\n      padding-right: 0 !important;\n    }\n  }\n\n  .next-form-item-label label[required]:before {\n    margin-right: 0;\n    content: '';\n  }\n  .next-form-item-label label[required]:after {\n    margin-left: 4px;\n    content: '*';\n    color: #ff3000;\n  }\n  &.empty-content {\n    display: flex;\n    justify-content: center;\n    align-content: center;\n  }\n}\n\n.next-form-item-control > .next-input,\n.next-form-item-control > .next-input-group,\n.next-form-item-fullwidth .next-form-item-control > .next-date-picker,\n.next-form-item-fullwidth\n  .next-form-item-control\n  > .next-date-picker\n  > .next-date-picker-trigger\n  > .next-input,\n.next-form-item-fullwidth .next-form-item-control > .next-input,\n.next-form-item-fullwidth .next-form-item-control > .next-input-group,\n.next-form-item-fullwidth .next-form-item-control > .next-month-picker,\n.next-form-item-fullwidth .next-form-item-control > .next-range-picker,\n.next-form-item-fullwidth .next-form-item-control > .next-select,\n.next-form-item-fullwidth .next-form-item-control > .next-time-picker,\n.next-form-item-fullwidth .next-form-item-control > .next-year-picker,\n.next-form-item-fullwidth .next-form-item-control > .next-number-picker {\n  width: 100%;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/pro-form/index.tsx",
    "content": "import moment from 'moment';\nimport * as React from 'react';\nimport classnames from 'classnames';\nimport { FormProps } from '@alifd/next/lib/form';\nimport { ResponsiveGrid, Form } from '@alifd/next';\n\nimport { ObjUtils } from '@/utils';\nimport { bizCssPrefix } from '@/variables';\nimport Operations from '@/common/operations';\nimport ProFormItem from '@/components/pro-form/components/form-item';\n\nmoment.locale('zh-cn');\nconst cssPrefix = `${bizCssPrefix}-pro-form`;\n\nfunction getVisibleChildren(children: any[]) {\n  return children.filter((child: any) => {\n    return !child?.props?.invisible;\n  });\n}\n\nexport interface ProFormProps extends FormProps {\n  columns: number;\n  children: React.ReactChild;\n  emptyContent: React.ReactNode | string;\n  spacing: number;\n  operations?: React.ReactNode | object[];\n  operationConfig?: object;\n  lastSaveTime?: number;\n  device?: string;\n}\n\nexport const calculateLastRows: Function = (children: any[], gridColumns: number) => {\n  const rows: any[] = [];\n  const childrenLength = children.length;\n  for (let i = 0; i < childrenLength; ) {\n    const subRows = [];\n    let index = i;\n    let sum = 0;\n    let childColumnSpan =\n      children[index].props.columnSpan || children[index].props.formItemProps?.columnSpan || 1;\n    if (childColumnSpan >= gridColumns) {\n      subRows.push(children[index].key);\n    } else {\n      while (index < childrenLength) {\n        childColumnSpan =\n          children[index].props.columnSpan || children[index].props.formItemProps?.columnSpan || 1;\n        sum += childColumnSpan;\n        if (sum > gridColumns) {\n          index--;\n          break;\n        }\n        subRows.push(children[index++].key);\n      }\n    }\n    i = ++index;\n    rows.push(subRows);\n  }\n  return rows;\n};\n\nexport const formatFormItems: Function = (\n  children: React.ReactChild,\n  props: ProFormProps,\n  isChildForm: boolean,\n) => {\n  const {\n    columns: gridColumns,\n    size,\n    device,\n    labelAlign,\n    labelTextAlign,\n    labelCol,\n    wrapperCol,\n    colon,\n    isPreview,\n  } = props;\n\n  let _children;\n\n  if (!children) {\n    return null;\n  } else if (Array.isArray(children)) {\n    _children = children.filter(\n      (child: React.ReactElement) =>\n        child && ['function', 'object', 'string'].indexOf(typeof child.type) > -1,\n    );\n  } else {\n    _children = [children];\n  }\n\n  _children = getVisibleChildren(_children);\n\n  const rows: any = calculateLastRows(_children, gridColumns);\n\n  return React.Children.map(_children, (child: React.ReactElement<any, any>) => {\n    if (ObjUtils.isReactFragment(child)) {\n      return formatFormItems(child.props.children, props);\n    }\n    if (child && ['function', 'object'].indexOf(typeof child.type) > -1) {\n      const _labelAlign = device === 'phone' ? 'top' : labelAlign;\n      const childrenProps: any = {\n        labelCol: child.props.labelCol ? child.props.labelCol : labelCol,\n        wrapperCol: child.props.wrapperCol ? child.props.wrapperCol : wrapperCol,\n        labelAlign: child.props.labelAlign ? child.props.labelAlign : _labelAlign,\n        labelTextAlign: child.props.labelTextAlign ? child.props.labelTextAlign : labelTextAlign,\n        colon: 'colon' in child.props ? child.props.colon : colon,\n        size: child.props.size ? child.props.size : size,\n        isPreview: child.props.isPreview ? child.props.isPreview : isPreview,\n      };\n      const { formItemProps = {}, ...componentProps } = child.props || {};\n      let { columnSpan = 1 } = formItemProps;\n      if (!isChildForm && rows[rows.length - 1]?.includes(child.key)) {\n        childrenProps.style = { marginBottom: '0px' };\n      }\n      if (\n        ['ProFormItem', 'ChildForm'].includes(child.type.displayName) ||\n        child.type?.displayName?.startsWith('Form')\n      ) {\n        if (child.type.displayName === 'ChildForm') {\n          columnSpan = gridColumns;\n        }\n        return (\n          <ResponsiveGrid.Cell colSpan={columnSpan}>\n            {React.cloneElement(child, {\n              formItemProps: {\n                ...ObjUtils.pickDefined(childrenProps),\n                ...formItemProps,\n              },\n            })}\n          </ResponsiveGrid.Cell>\n        );\n      }\n\n      return (\n        <ResponsiveGrid.Cell colSpan={columnSpan}>\n          <ProFormItem {...childrenProps} {...formItemProps}>\n            {React.cloneElement(child, componentProps)}\n          </ProFormItem>\n        </ResponsiveGrid.Cell>\n      );\n    }\n    return child;\n  });\n};\n\nconst ProForm: React.ForwardRefRenderFunction<any, ProFormProps> = (props: ProFormProps, ref) => {\n  const {\n    children,\n    columns,\n    spacing = [0, 16, 16, 0],\n    operations,\n    operationConfig,\n    emptyContent,\n    lastSaveTime,\n    ...otherProps\n  } = props;\n\n  const { isPreview } = otherProps || {};\n\n  const operationProps = { operations, operationConfig, lastSaveTime };\n  return (\n    <>\n      <Form className={cssPrefix} {...otherProps} ref={ref}>\n        {children ? (\n          <ResponsiveGrid\n            className={classnames(cssPrefix, +columns === 1 ? 'one-column' : '')}\n            gap={spacing}\n            columns={columns}\n          >\n            {formatFormItems(children, {\n              columns,\n              ...otherProps,\n            })}\n          </ResponsiveGrid>\n        ) : (\n          <div className=\"empty-content\">{emptyContent}</div>\n        )}\n        {isPreview ? null : <Operations {...operationProps} />}\n      </Form>\n    </>\n  );\n};\n\nconst RefProForm: React.ForwardRefExoticComponent<ProFormProps> & {\n  Item?: typeof ProFormItem;\n} = React.forwardRef(ProForm);\nRefProForm.displayName = 'ProForm';\nRefProForm.defaultProps = {};\nRefProForm.propTypes = {};\nRefProForm.Item = ProFormItem;\n\nexport default RefProForm;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/step-form/index.scss",
    "content": "#{$biz-css-prefix}step-form {\n  &.steps {\n    margin-bottom: var(--s-5, $s-5);\n  }\n\n  &.forms {\n    margin-left: 0;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-form/layouts/step-form/index.tsx",
    "content": "import * as React from 'react';\nimport { useRef, useImperativeHandle, useEffect, useState, forwardRef } from 'react';\nimport { Step, Box } from '@alifd/next';\nimport { StepProps, ItemProps } from '@alifd/next/lib/step';\nimport Operations from '@/common/operations';\n\nexport interface StepFormProps extends StepProps {\n  children?: React.ReactElement;\n  onPrevious?: Function;\n  onNext?: Function;\n  formRef?: React.MutableRefObject<any | undefined>;\n  formMapRef?: React.MutableRefObject<any | undefined>;\n  operations?: any[];\n  operationConfig?: Record<string, any>;\n  lastSaveTime?: Number;\n}\nexport interface StepFormItemProps extends ItemProps {\n  stepItemProps?: React.ReactNode;\n}\n\nconst ACTION_MAP = {\n  previous: (step, setStep) => {\n    setStep(Math.max(0, --step));\n  },\n  next: (step, setStep, stepLength) => {\n    setStep(Math.min(stepLength - 1, ++step));\n  },\n};\n\nconst noop = () => {};\n\nfunction getAction(action: string | number) {\n  return ACTION_MAP[action] || noop;\n}\n\nfunction renderStep(\n  props: StepFormProps,\n  formArray: Map<string, StepFormItemProps>,\n  step: number,\n  formArrayRef,\n) {\n  const { direction = 'hoz', children, showAll, ...others } = props;\n  if (direction === 'hoz') {\n    return (\n      <div className=\"fusion-ui-step-form steps\">\n        {formArray && (\n          <Step direction={direction} {...others} current={step}>\n            {Array.from(formArray.keys()).map((item) => {\n              const { stepItemProps } = formArray.get(item);\n              return <Step.Item key={item} {...stepItemProps} />;\n            })}\n          </Step>\n        )}\n      </div>\n    );\n  }\n  return (\n    <div className=\"fusion-ui-step-form steps\">\n      <Step direction={direction} {...others} current={step}>\n        {React.Children.map(children, (child: React.ReactElement, index) => {\n          const { stepItemProps } = formArray.get(`${index}`);\n          const content = (\n            <div\n              className=\"fusion-ui-step-form forms\"\n              style={{ display: showAll || step === index ? 'block' : 'none' }}\n            >\n              {React.cloneElement(child, {\n                ref: (node) => {\n                  // Keep your own reference\n                  formArrayRef.current[index] = node;\n                  // Call the original ref, if any\n                  const { ref } = child;\n                  if (typeof ref === 'function') {\n                    ref(node);\n                  }\n                },\n              })}\n            </div>\n          );\n          return <Step.Item content={content} key={index} {...stepItemProps} />;\n        })}\n      </Step>\n    </div>\n  );\n}\n\nfunction renderForm(\n  props: StepFormProps,\n  step: number,\n  formArrayRef: React.MutableRefObject<Array<React.MutableRefObject<any>>>,\n) {\n  const { children } = props;\n  return (\n    <>\n      {React.Children.map(children, (child: React.ReactElement, index) => {\n        return (\n          <div\n            className=\"fusion-ui-step-form forms\"\n            style={{ display: step === index ? 'block' : 'none' }}\n          >\n            {React.cloneElement(child, {\n              ref: (node) => {\n                // Keep your own reference\n                formArrayRef.current[index] = node;\n                // Call the original ref, if any\n                const { ref } = child;\n                if (typeof ref === 'function') {\n                  ref(node);\n                }\n              },\n            })}\n          </div>\n        );\n      })}\n    </>\n  );\n}\n\nconst renderOperations = ({\n  operations,\n  operationConfig = {},\n  lastSaveTime,\n  onPrevious,\n  onNext,\n  step,\n  setStep,\n  stepLength,\n}) => {\n  if (!operations || !operations.length) {\n    return null;\n  }\n\n  const baseOperations = operations.map((operation: any) => {\n    let onClick = getAction(operation.action).bind(this, step, setStep, stepLength);\n    if (operation.action) {\n      if (operation.action === 'next') {\n        operation.disabled = step === stepLength - 1;\n        if (onNext && typeof onNext === 'function') {\n          onClick = onNext;\n        }\n      } else if (operation.action === 'previous') {\n        operation.disabled = step === 0;\n        if (onPrevious && typeof onPrevious === 'function') {\n          onClick = onPrevious;\n        }\n      }\n    }\n    return {\n      onClick,\n      ...operation,\n    };\n  });\n  const operationsProps = {\n    operations: baseOperations,\n    operationConfig,\n    lastSaveTime,\n  };\n\n  return <Operations {...operationsProps} />;\n};\n\nfunction StepForm(props: StepFormProps, ref) {\n  const {\n    children,\n    onPrevious,\n    onNext,\n    formRef,\n    formMapRef: propsFormMapRef,\n    operations,\n    operationConfig,\n    lastSaveTime,\n    direction = 'hoz',\n  } = props;\n\n  const [step, setStep] = useState(props.current);\n\n  const formArrayRef = useRef<Array<React.MutableRefObject<any | undefined>>>([]);\n  useImperativeHandle(propsFormMapRef, () => formArrayRef.current);\n  const currentFormRef = formArrayRef.current[step || 0]?.current;\n  useImperativeHandle(formRef, () => currentFormRef);\n  const formArray = new Map<string, StepFormItemProps>();\n  React.Children.map(children, (child, index) => {\n    const itemProps = child.props as StepFormItemProps;\n    const name = `${index}`;\n    formArray.set(name, itemProps);\n  });\n  useEffect(() => {\n    setStep(props.current);\n  }, [props.current]);\n\n  if (!children) {\n    return (\n      <Box ref={ref} align=\"center\" justify=\"center\" style={{ minHeight: 50 }}>\n        <span>内容为空</span>\n      </Box>\n    );\n  }\n  return (\n    <div ref={ref}>\n      <>{renderStep(props, formArray, step, formArrayRef)}</>\n      <>{direction === 'hoz' ? renderForm(props, step, formArrayRef) : null}</>\n      {renderOperations({\n        operations,\n        operationConfig,\n        lastSaveTime,\n        onPrevious,\n        onNext,\n        step,\n        setStep,\n        stepLength: formArray.size,\n      })}\n    </div>\n  );\n}\n\nexport default forwardRef(StepForm);\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/edit-table/index.scss",
    "content": ".fusion-ui-pro-table {\n  .row-add {\n    height: 37px;\n    background: #f6f8fb;\n    border: 1px dashed #c8d6fa;\n    background-color: #f6f8fb;\n  }\n  .next-table-cell-wrapper .next-select,\n  .next-table-cell-wrapper .next-input {\n    width: 100% !important;\n    min-width: 100% !important;\n  }\n}"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/edit-table/index.tsx",
    "content": "import * as React from 'react';\nimport { Button } from '@alifd/next';\n\nimport { ProTable, ProTableProps } from '../../index';\nimport { Space } from '@/components/container';\n\nexport interface EditTableProps extends ProTableProps {\n  addPosition?: 'end' | 'start';\n  onSave?: (rowIndex: number, record: Record<string, any>, dataSource: any[]) => void;\n  onRemove?: (rowIndex: number, record: Record<string, any>, dataSource: any[]) => void;\n  onCancel?: (rowIndex: number, record: Record<string, any>, dataSource: any[]) => void;\n}\n\nexport const EditTable = function (props: EditTableProps) {\n  const {\n    primaryKey = 'id',\n    dataSource: propDataSource,\n    actionColumnButtons: propActionColumnButtons = { dataSource: [] },\n    onSave,\n    onRemove,\n    onCancel,\n    addPosition = 'end',\n    ...otherProps\n  } = props;\n  const [dataSource, setDataSource] = React.useState(propDataSource);\n  const dataSourceRef = React.useRef(dataSource);\n  const [actionColumnButtons, setActionColumnButtons] = React.useState(propActionColumnButtons);\n  function actionColumnButtonsHidden(showInEdit) {\n    return ({ rowRecord }) => {\n      return showInEdit ? !!rowRecord.editMode : !rowRecord.editMode;\n    };\n  }\n  const defaultActionColumnButtons = [\n    {\n      children: '编辑',\n      type: 'primary',\n      onClick(e, payload) {\n        const { rowKey, rowRecord } = payload;\n        const _data = dataSourceRef.current.map((item) => {\n          if (item[primaryKey] === rowKey) {\n            return Object.assign(item, rowRecord, { editMode: true });\n          }\n          return item;\n        });\n        setDataSource(_data);\n      },\n      hidden: actionColumnButtonsHidden(true),\n    },\n    {\n      children: '保存',\n      type: 'primary',\n      onClick(e, payload) {\n        const { rowIndex, rowKey, rowRecord } = payload;\n        const _data = dataSourceRef.current.map((item) => {\n          if (item[primaryKey] === rowKey) {\n            return Object.assign(item, rowRecord, { editMode: false });\n          }\n          return item;\n        });\n        onSave && onSave(rowIndex, rowRecord, _data);\n        setDataSource(_data);\n      },\n      hidden: actionColumnButtonsHidden(false),\n    },\n    {\n      children: '取消',\n      type: 'primary',\n      onClick(e, payload) {\n        const { rowIndex, rowKey, rowRecord } = payload;\n        const _data = dataSourceRef.current.map((item) => {\n          if (item[primaryKey] === rowKey) {\n            const keys = Object.keys(item);\n            const originKeys = keys.filter((key) => key.startsWith('origin-'));\n            originKeys.forEach((originKey) => {\n              item[originKey.replace('origin-', '')] = item[originKey];\n            });\n            return Object.assign(item, { editMode: false });\n          }\n          return item;\n        });\n        onCancel && onCancel(rowIndex, rowRecord, _data);\n        setDataSource(_data);\n      },\n      hidden: actionColumnButtonsHidden(false),\n    },\n    {\n      children: '删除',\n      type: 'primary',\n      onClick(e, payload) {\n        const { rowKey, rowIndex, rowRecord } = payload;\n        dataSourceRef.current = dataSourceRef.current.filter((item) => item[primaryKey] !== rowKey);\n        setDataSource(dataSourceRef.current);\n        onRemove && onRemove(rowIndex, rowRecord, dataSourceRef.current);\n      },\n    },\n  ];\n  React.useEffect(() => {\n    const { dataSource: actionColumnDataSource = [] } = propActionColumnButtons;\n    const _actionColumnButtons = {\n      ...actionColumnButtons,\n      dataSource: defaultActionColumnButtons.concat(actionColumnDataSource),\n    };\n    setActionColumnButtons(_actionColumnButtons);\n  }, [propActionColumnButtons, dataSource]);\n  const tableAfter = (\n    <Space className=\"row-add\" align=\"center\" justify=\"center\">\n      <Button\n        text\n        type=\"primary\"\n        onClick={() => {\n          let _data;\n          if (addPosition && addPosition === 'start') {\n            _data = [\n              {\n                [primaryKey]: `id-${Math.random().toString(36).substr(-6)}`,\n                editMode: true,\n              },\n            ].concat(dataSource);\n          } else {\n            _data = dataSource.concat([\n              {\n                [primaryKey]: `id-${Math.random().toString(36).substr(-6)}`,\n                editMode: true,\n              },\n            ]);\n          }\n          dataSourceRef.current = _data;\n          setDataSource(_data);\n        }}\n      >\n        +新增一行\n      </Button>\n    </Space>\n  );\n  return (\n    <>\n      <ProTable\n        className=\"fusion-ui-edit-table\"\n        tableAfter={tableAfter}\n        dataSource={dataSource}\n        actionColumnButtons={actionColumnButtons}\n        {...otherProps}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/group-table/index.tsx",
    "content": "import * as React from 'react';\nimport { ProTableProps } from '../../types';\nimport { ProTable } from '../pro-table';\n\nexport const GroupTable: React.FC<ProTableProps> = (props) => {\n  const { groupHeader: propGroupHeader, groupFooter: propGroupFooter, ...otherProps } = props;\n  const groupHeader = propGroupHeader || {\n    cell: (record) => record?.header,\n  };\n  const groupFooter = propGroupFooter || {\n    cell: (record) => record?.footer,\n  };\n  return <ProTable groupHeader={groupHeader} groupFooter={groupFooter} {...otherProps} />;\n};\n\nGroupTable.defaultProps = {\n  settingButtons: false,\n  defaultColumnsSetting: {},\n  columnKey: 'key',\n  primaryKey: 'id',\n  stickyLock: true,\n  resizable: true,\n  emptyContent: <div type=\"card\" status=\"DATA_EMPTY\" />,\n  hasBorder: false,\n  size: 'medium',\n  isZebra: false,\n  cellDefault: '',\n  cellTooltipMode: 'none',\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table/index.scss",
    "content": ".fusion-ui-pro-table {\n  .fusion-ui-pagination {\n    padding: var(--s-4 0 0, $s-4 0 0);\n    display: flex;\n    justify-content: flex-end;\n  }\n  &.fullscreen {\n    padding: var(--s-5 $s-5 0, $s-5 $s-5 0);\n    background: var(--color-white, $color-white);\n    overflow-y: auto;\n    .fusion-ui-pagination {\n      box-sizing: border-box;\n      position: sticky;\n      bottom: 0;\n      background-color: var(--color-white, $color-white);\n      border-radius: var(--corner-2, $corner-2);\n      z-index: 9;\n    }\n  }\n  &-expanded-child {\n    padding: var(--s-5 $s-5 $s-2 $s-5, $s-5 $s-5 $s-2 $s-5);\n    background-color: var(--color-fill1-2, $color-fill1-2);\n  }\n}\n\n.fusion-ui-pro-table-body {\n  display: flex;\n  flex-direction: column;\n  gap: var(--s-4, $s-4);\n  .fusion-ui-pro-table-action-bar {\n    margin: 0;\n  }\n}\n\n.fusion-ui-pro-table-content {\n  position: relative;\n  .next-loading.next-open.next-loading-inline.next-table-loading-content{\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    top: 0;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table/index.tsx",
    "content": "import * as React from 'react';\nimport { Space } from '@/components/container';\nimport { Box, Pagination } from '@alifd/next';\nimport { ProTableProps, ProTableSettingButtonType } from '../../types';\nimport { ProTableCompactButton } from '../pro-table-compact-button';\nimport { ProTableZebraButton } from '../pro-table-zebra-button';\nimport { ProTableFullscreenButton } from '../pro-table-fullscreen-button';\nimport { ProTableSettingButton } from '../pro-table-setting-button';\nimport { useProTableSlots } from '../pro-table-slot';\nimport {\n  ProTableContext,\n  useProTableValue,\n} from '@/components/pro-table/contexts/pro-table-context';\nimport {\n  ProTableColumnsSettingContext,\n  useColumnsSettingValue,\n} from '@/components/pro-table/contexts/pro-table-columns-setting-context';\nimport {\n  ProTableColumnsFilterContext,\n  useColumnsFilterValue,\n} from '@/components/pro-table/contexts/pro-table-columns-filters-context';\nimport { ProTableBase } from '../pro-table-base/index';\n// import { Result } from '@/result';\nimport {\n  ProTableSettingContext,\n  useProTableSettingValue,\n} from '@/components/pro-table/contexts/pro-table-setting-context';\nimport is from '@sindresorhus/is';\nimport { ToggleIconGroup } from '@/components/toggle-icon';\nimport {\n  ProTableColumnsContext,\n  useProTableColumnsValue,\n} from '@/components/pro-table/contexts/pro-table-columns-context';\nimport cns from 'classnames';\n// import { Pagination } from '../../../pagination/index';\nimport { ProTableActionBarButtonGroup } from '../pro-table-action-bar-buttons';\nimport {\n  useProTableRowSelectionValue,\n  ProTableRowSelectionContext,\n} from '../../contexts/pro-table-row-selection-context';\n\nexport const ProTable: React.FC<ProTableProps> = (props: ProTableProps) => {\n  const slots = useProTableSlots(props);\n  const columnsFiltersCtxValue = useColumnsFilterValue(props);\n  const columnsSettingCtxValue = useColumnsSettingValue(props);\n  const proTableSettingCtxValue = useProTableSettingValue(props);\n  const { paginationProps, settingButtons } = props;\n  const proTableContainer = React.useRef<HTMLDivElement>();\n  const tableBeforeContainer = React.useRef<HTMLDivElement>();\n\n  const proTableCtxValue = useProTableValue({\n    pageSize: paginationProps?.pageSize,\n    total: paginationProps?.total,\n    tableBeforeContainer,\n    proTableContainer,\n  });\n  const proTableColumnsCtxValue = useProTableColumnsValue(props);\n\n  const proTableRowSelectionCtxValue = useProTableRowSelectionValue(props);\n  const buttons = React.useMemo<ProTableSettingButtonType[]>(() => {\n    if (settingButtons === false) {\n      return [];\n    }\n    if (is.array(settingButtons)) {\n      return settingButtons;\n    }\n    return ['compact', 'zebra', 'fullscreen', 'setting'];\n  }, [settingButtons]);\n  const loading = React.useMemo(\n    () => !columnsFiltersCtxValue.filterPanelVisible && props.loading,\n    [columnsFiltersCtxValue.filterPanelVisible, props.loading],\n  );\n  const hasActionBarButtons = props.actionBarButtons?.dataSource?.length > 0;\n  return (\n    <ProTableSettingContext.Provider value={proTableSettingCtxValue}>\n      <ProTableColumnsSettingContext.Provider value={columnsSettingCtxValue}>\n        <ProTableColumnsFilterContext.Provider value={columnsFiltersCtxValue}>\n          <ProTableContext.Provider value={proTableCtxValue}>\n            <ProTableColumnsContext.Provider value={proTableColumnsCtxValue}>\n              <ProTableRowSelectionContext.Provider value={proTableRowSelectionCtxValue}>\n                <div\n                  className={cns('fusion-ui-pro-table', {\n                    'fusion-ui-pro-table-expanded-child': props.isExpandedChild,\n                  })}\n                  ref={proTableContainer}\n                >\n                  <div className=\"fusion-ui-pro-table-body\">\n                    {slots.actionBarBefore}\n                    {(buttons.length > 0 ||\n                      hasActionBarButtons ||\n                      slots.actionBarLeft ||\n                      slots.actionBarRight) && (\n                      <div className=\"fusion-ui-pro-table-action-bar\">\n                        <Space spacing={8}>\n                          {hasActionBarButtons && (\n                            <ProTableActionBarButtonGroup {...props.actionBarButtons} />\n                          )}\n                          {slots.actionBarLeft}\n                        </Space>\n                        <Space spacing={8}>\n                          {slots.actionBarRight}\n                          {buttons.length > 0 && (\n                            <ToggleIconGroup>\n                              {buttons.includes('compact') && <ProTableCompactButton />}\n                              {buttons.includes('zebra') && <ProTableZebraButton />}\n                              {buttons.includes('fullscreen') && (\n                                <ProTableFullscreenButton\n                                  onFullscreenStateChange={props.onFullscreenStateChange}\n                                />\n                              )}\n                              {buttons.includes('setting') && <ProTableSettingButton />}\n                            </ToggleIconGroup>\n                          )}\n                        </Space>\n                      </div>\n                    )}\n                    {slots.actionBarAfter}\n                    <div className=\"fusion-ui-pro-table-content\">\n                      <div ref={tableBeforeContainer} />\n                      <ProTableBase {...props} loading={loading}>\n                        {slots.table}\n                      </ProTableBase>\n                      {slots.tableAfter}\n                    </div>\n                  </div>\n                  {paginationProps && !paginationProps.hidden && (\n                    <Pagination\n                      className=\"fusion-ui-pagination\"\n                      {...paginationProps}\n                      popupProps={{\n                        container: proTableContainer.current,\n                        ...paginationProps.popupProps,\n                      }}\n                    />\n                  )}\n                </div>\n              </ProTableRowSelectionContext.Provider>\n            </ProTableColumnsContext.Provider>\n          </ProTableContext.Provider>\n        </ProTableColumnsFilterContext.Provider>\n      </ProTableColumnsSettingContext.Provider>\n    </ProTableSettingContext.Provider>\n  );\n};\n\nProTable.defaultProps = {\n  settingButtons: false,\n  defaultColumnsSetting: {},\n  columnKey: 'key',\n  primaryKey: 'id',\n  stickyLock: true,\n  resizable: true,\n  emptyContent: (\n    <Box direction=\"column\" align=\"center\" justify=\"center\">\n      <img\n        style={{ height: 100, width: 150 }}\n        src=\"https://img.alicdn.com/imgextra/i2/O1CN01rie9sh1CmpqL3fSKD_!!6000000000124-2-tps-300-206.png\"\n      />\n      暂无内容\n    </Box>\n  ),\n  hasBorder: false,\n  size: 'medium',\n  isZebra: false,\n  cellDefault: '',\n  cellTooltipMode: 'none',\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-action-bar-buttons.tsx",
    "content": "import React, { useContext, useMemo } from 'react';\nimport { ProTableButtonGroup } from './pro-table-button-group/index';\nimport { ProTableActionBarButtons } from '../types';\nimport { ProTableRowSelectionContext } from '../contexts/pro-table-row-selection-context';\n\nexport const ProTableActionBarButtonGroup: React.FC<ProTableActionBarButtons> = (props) => {\n  const rowSelection = useContext(ProTableRowSelectionContext);\n  const payload = useMemo(\n    () => ({\n      rowSelection,\n    }),\n    [rowSelection],\n  );\n  return <ProTableButtonGroup payload={payload} {...props} />;\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-base/columns/useActionColumn.tsx",
    "content": "import { ColumnProps } from '@alifd/next/types/table';\nimport * as React from 'react';\nimport is from '@sindresorhus/is';\nimport {\n  ProTableBaseProps,\n  ProTableRowRecord,\n  ProTableProps,\n  ProTableActionColumnButtons,\n  ProTableRowPayload,\n} from '../../../types';\nimport { useI18nBundle } from '@/provider';\nimport { emptyFn } from '@/utils/constants';\nimport { usePersistFn } from 'ahooks';\nimport get from 'lodash/get';\nimport { ProTableButtonGroup, ProTableButtonGroupProps } from '../../pro-table-button-group/index';\n\ntype ActionColumnProps = Pick<\n  ProTableBaseProps,\n  | 'actionColumn'\n  | 'actionButtonGroupProps'\n  | 'actionColumnButtons'\n  | 'actionColumnProps'\n  | 'actionColumnPredication'\n  | 'onActionColumnClick'\n  | 'primaryKey'\n>;\n\nconst calcButtonWidth = (str: React.ReactNode) => {\n  if (is.string(str)) {\n    return str.length * 12 + 12;\n  }\n  return 50;\n};\n/**\n * 操作列\n */\nexport const useActionColumn = ({\n  actionColumn,\n  actionColumnProps,\n  actionColumnPredication,\n  actionButtonGroupProps,\n  actionColumnButtons,\n  onActionColumnClick,\n  primaryKey,\n}: ActionColumnProps): ColumnProps => {\n  const i18nBundle = useI18nBundle('ProTable');\n  const handleActionColumnClick = usePersistFn(onActionColumnClick || emptyFn);\n  const buttonGroupProps = {\n    dataSource: actionColumn,\n    ...(actionColumnButtons || actionButtonGroupProps),\n  };\n\n  if (!is.array(buttonGroupProps.dataSource) || buttonGroupProps.dataSource.length === 0) {\n    return undefined;\n  }\n\n  const width =\n    actionColumnProps?.width ||\n    buttonGroupProps.dataSource\n      .slice(0, 3)\n      .map((vo) => calcButtonWidth(vo.children))\n      .reduce((p, vo) => p + vo, buttonGroupProps.dataSource.length > 3 ? 65 : 30);\n\n  return {\n    width,\n    lock: 'right',\n    title: i18nBundle.operation,\n    cell: (value, rowIndex, rowRecord) => (\n      <ActionColumnButtonGroup\n        rowIndex={rowIndex}\n        rowRecord={rowRecord}\n        primaryKey={primaryKey}\n        actionColumnPredication={actionColumnPredication}\n        onActionColumnClick={handleActionColumnClick}\n        buttonGroupProps={buttonGroupProps as any}\n      />\n    ),\n    ...actionColumnProps,\n  };\n};\n\ninterface ActionColumnButtonGroupProps {\n  rowIndex: number;\n  rowRecord: ProTableRowRecord;\n  actionColumnPredication?: ProTableProps['actionColumnPredication'];\n  onActionColumnClick?: ProTableProps['onActionColumnClick'];\n  primaryKey: ProTableProps['primaryKey'];\n  buttonGroupProps: ProTableActionColumnButtons;\n}\nconst ActionColumnButtonGroup: React.FC<ActionColumnButtonGroupProps> = ({\n  rowIndex,\n  rowRecord,\n  actionColumnPredication,\n  onActionColumnClick,\n  primaryKey,\n  buttonGroupProps,\n}) => {\n  const payload = React.useMemo<ProTableRowPayload>(\n    () => ({\n      rowKey: rowRecord[primaryKey],\n      rowIndex,\n      rowRecord,\n    }),\n    [rowIndex, primaryKey, rowRecord],\n  );\n  const { dataSource, ...otherProps } = buttonGroupProps;\n  const realDataSource = React.useMemo<ProTableButtonGroupProps['dataSource']>(() => {\n    const buttons = is.function_(actionColumnPredication)\n      ? actionColumnPredication({\n          actionColumn: dataSource,\n          index: payload.rowIndex,\n          record: payload.rowRecord,\n        })\n      : dataSource;\n    return is.array(buttons)\n      ? buttons.map((vo) => ({\n          onClick: () => {\n            onActionColumnClick({\n              currentActionKey: vo.key,\n              selectedRowKey: payload.rowKey,\n              record: payload.rowRecord,\n            });\n          },\n          ...vo,\n          hidden: is.string(vo.hidden)\n            ? () => !!get(payload.rowRecord, vo.hidden as string)\n            : vo.hidden,\n          disabled: is.string(vo.disabled)\n            ? () => !!get(payload.rowRecord, vo.disabled as string)\n            : vo.disabled,\n        }))\n      : [];\n  }, [actionColumnPredication, dataSource, onActionColumnClick, payload]);\n  return <ProTableButtonGroup text payload={payload} {...otherProps} dataSource={realDataSource} />;\n};\n\nActionColumnButtonGroup.defaultProps = {\n  onActionColumnClick: emptyFn,\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-base/columns/useIndexColumn.tsx",
    "content": "import { useI18nBundle } from '@/provider';\nimport { ColumnProps } from '@alifd/next/types/table';\nimport * as React from 'react';\nimport { ProTableBaseProps } from '../../../types';\n\ntype IndexColumnProps = Pick<ProTableBaseProps, 'indexColumn' | 'indexColumnProps'>;\n/**\n * 序号列\n */\nexport const useIndexColumn = ({\n  indexColumn,\n  indexColumnProps,\n}: IndexColumnProps): ColumnProps => {\n  const i18nBundle = useI18nBundle('ProTable');\n  if (!indexColumn) {\n    return undefined;\n  }\n  return {\n    width: 70,\n    lock: 'left',\n    title: i18nBundle.indexColumnTitle,\n    cell: (value: any, index: number) => (\n      <div className=\"fusion-ui-tablex-serial-number\">{index + 1}</div>\n    ),\n    align: 'center',\n    ...indexColumnProps,\n  };\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-base/columns/useRowSelection.tsx",
    "content": "import * as React from 'react';\nimport { Checkbox } from '@alifd/next';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport { MenuButton } from '@/components/menu-button';\nimport {\n  ProTableBaseProps,\n  ProTableRowKey,\n  ProTableRowRecord,\n  ProTableRowSelectionType,\n} from '../../../types';\nimport numvert from 'numvert';\nimport is from '@sindresorhus/is';\nimport { emptyFn } from '@/utils/constants';\nimport { ProTableContext } from '../../../contexts/pro-table-context';\nimport ReactDOM from 'react-dom';\nimport { ProTableRowSelectionContext } from '../../../contexts/pro-table-row-selection-context';\n\nexport const isSelectedAllPages = (selectedRowKeys: ProTableRowKey[], reverseSelection: boolean) =>\n  reverseSelection && selectedRowKeys.length === 0;\n\nexport const hasSelectedRows = (selectedRowKeys: ProTableRowKey[], reverseSelection: boolean) =>\n  reverseSelection || selectedRowKeys.length > 0;\n\n/**\n * 行选择逻辑\n * - 支持选择当前页所有行\n * - 支持跨页选择\n * - 支持选择所有页\n */\nexport const useRowSelection = (\n  originRowSelection: ProTableBaseProps['rowSelection'],\n  dataSource: any[] = [],\n) => {\n  const hasRowSelection = !!originRowSelection;\n  const rowSelection = hasRowSelection ? originRowSelection : {};\n  const { tableBeforeContainer } = React.useContext(ProTableContext);\n  const instance = React.useContext(ProTableRowSelectionContext);\n  const tooltip = useProTableSelectionTooltip(\n    rowSelection.crossPageSelection === false\n      ? instance.currentPageSelectedRowKeys.length\n      : instance.selectedRowKeys.length,\n    instance.reverseSelection,\n  );\n  if (!hasRowSelection) {\n    return undefined;\n  }\n\n  if (rowSelection.ref) {\n    rowSelection.ref.current = instance;\n  }\n\n  const {\n    selectAllPages,\n    selectCurrentPage,\n    currentPageSelectedRowKeys,\n    reverseSelection,\n    selectRows,\n    selectedRowKeys,\n    getRowKeyByRecord,\n    currentPageRowKeys,\n  } = instance;\n  const {\n    onSelect = emptyFn,\n    onSelectAll = emptyFn,\n    selections = ['SELECTION_ALL', 'SELECTION_NONE'],\n    titleProps,\n  } = rowSelection;\n  const isMultiple = rowSelection.mode !== 'single';\n  const hasMenu = isMultiple && is.array(selections) && selections.length > 0;\n\n  return {\n    mode: rowSelection.mode,\n    getProps: rowSelection.getProps,\n    selectedRowKeys: currentPageSelectedRowKeys,\n    onSelect: (selected: boolean, record: ProTableRowRecord, records: ProTableRowRecord[]) => {\n      selectRows(selected, [getRowKeyByRecord(record)]);\n      onSelect(selected, record, records);\n    },\n    columnProps: () => ({\n      align: 'left',\n      width: hasMenu ? 70 : 50,\n    }),\n    titleProps: () => ({\n      style: {\n        display: 'none',\n      },\n    }),\n    titleAddons: !isMultiple\n      ? undefined\n      : () => {\n          const selectionTexts: Record<ProTableRowSelectionType, string> = {\n            SELECTION_ALL: '全选所有',\n            SELECTION_NONE: '清空所有',\n          };\n          const globalChecked = currentPageSelectedRowKeys.length > 0;\n          const globalCheckedIndeterminate =\n            globalChecked &&\n            (reverseSelection\n              ? selectedRowKeys.length > 0\n              : currentPageSelectedRowKeys.length < currentPageRowKeys.length);\n          const checkboxProps = titleProps ? titleProps() : {};\n          return (\n            <>\n              {!rowSelection.hideTooltip &&\n                tableBeforeContainer.current &&\n                tooltip &&\n                ReactDOM.createPortal(\n                  <div className=\"fusion-ui-pro-table-selection\">{tooltip}</div>,\n                  tableBeforeContainer.current,\n                )}\n              <div className=\"fusion-ui-pro-table-selection-checkbox\">\n                <Checkbox\n                  checked={globalChecked}\n                  indeterminate={globalCheckedIndeterminate}\n                  onChange={(selected) => {\n                    onSelectAll(selected, dataSource);\n                    selectCurrentPage(selected);\n                  }}\n                  {...checkboxProps}\n                />\n                {hasMenu && (\n                  <MenuButton\n                    label={\n                      <CustomIcon\n                        type=\"triangle-down\"\n                        size=\"xs\"\n                        className=\"fusion-ui-pro-table-selection-checkbox-icon\"\n                      />\n                    }\n                    text\n                    onItemClick={(key: ProTableRowSelectionType) => {\n                      if (key === 'SELECTION_ALL') {\n                        selectAllPages(true);\n                      } else if (key === 'SELECTION_NONE') {\n                        selectAllPages(false);\n                      }\n                    }}\n                    popupTriggerType=\"hover\"\n                    autoWidth={false}\n                    menuProps={{\n                      isSelectIconRight: false,\n                    }}\n                    dataSource={selections.map((vo) => ({ key: vo, label: selectionTexts[vo] }))}\n                  />\n                )}\n              </div>\n            </>\n          );\n        },\n    // ...rowSelection,\n  };\n};\n\nconst renders = {\n  selected: (amount: number) => (\n    <>\n      已选中\n      <span className=\"fusion-ui-pro-table-selection-number\">{numvert(amount).format('0,0')}</span>\n      条\n    </>\n  ),\n  selectedWithPageCount: (amount: number, pageCount: number) => (\n    <>\n      已选中<span className=\"fusion-ui-pro-table-selection-number\">{pageCount}</span>页, 共\n      <span className=\"fusion-ui-pro-table-selection-number\">{numvert(amount).format('0,0')}</span>\n      条\n    </>\n  ),\n\n  allPageUnselected: (amount: number) => (\n    <>\n      已选中所有页，反选\n      <span className=\"fusion-ui-pro-table-selection-number\">{numvert(amount).format('0,0')}</span>\n      条\n    </>\n  ),\n\n  allPageSelectedAll: () => <>已选中所有项</>,\n};\nconst useProTableSelectionTooltip = (selecteAmount: number, reverseSelection: boolean) => {\n  const { total, pageSize } = React.useContext(ProTableContext);\n\n  return React.useMemo(() => {\n    if (reverseSelection) {\n      if (is.number(total)) {\n        if (total === 0) {\n          return undefined;\n        }\n        const pageCount =\n          is.number(pageSize) && is.number(total) && pageSize !== 0\n            ? Math.ceil(total / pageSize)\n            : undefined;\n        return is.number(pageCount)\n          ? renders.selectedWithPageCount(total - selecteAmount, pageCount)\n          : renders.selected(total - selecteAmount);\n      }\n      if (selecteAmount > 0) {\n        return renders.allPageUnselected(selecteAmount);\n      }\n      return renders.allPageSelectedAll();\n    }\n    if (selecteAmount > 0) {\n      return renders.selected(selecteAmount);\n    }\n    return undefined;\n  }, [reverseSelection, selecteAmount, total, pageSize]);\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-base/index.scss",
    "content": ".fusion-ui-pro-table-base {\n  position: relative;\n  .next-table-empty {\n    min-height: 224px;\n  }\n\n  .next-table-cell-wrapper:hover {\n    .next-table-resize-handler {\n      border-color: var(--color-line1-4, $color-line1-4);\n    }\n  }\n  .next-table-header-resizable .next-table-resize-handler {\n    width: var(--s-2, $s-2);\n    border-right: 2px solid transparent;\n  }\n  // 标题样式修改\n  .next-table-header .next-table-cell .next-table-cell-wrapper {\n    word-break: break-word;\n  }\n\n  // 内容样式修改\n  .next-table-body .next-table-cell .next-table-cell-wrapper {\n    word-break: break-word;\n  }\n\n  .only-bottom-border td {\n    border: 0;\n  }\n\n  .only-bottom-border .next-table-group .next-table-body table {\n    border-top: 0;\n    border-left: 0;\n    border-bottom: 0;\n  }\n\n  // 统计列相关样式修改\n  .fusion-ui-pro-table-total-row {\n    background: var(--color-fill1-1, $color-fill1-1);\n    font-family: Roboto-Medium;\n    font-size: var(--font-size-body-2, $font-size-body-2);\n    line-height: 16px;\n    font-weight: var(--font-weight-medium, $font-weight-medium);\n  }\n\n  .cell-money {\n    white-space: nowrap;\n    overflow: visible;\n  }\n\n  .cell-nowrap {\n    white-space: nowrap;\n  }\n\n  .fusion-ui-table-sort {\n    .fusion-ui-pro-table-sort-icon {\n      left: 0;\n\n      &.fusion-ui-icon-triangle-down {\n        top: 6px;\n      }\n\n      &.fusion-ui-icon-triangle-up {\n        top: -2px;\n      }\n    }\n  }\n}\n\n// 在 selectedRowKeys.length > 0 时展示 \"已选择 x 项\" 的容器\n.fusion-ui-pro-table-selection {\n  position: absolute;\n  z-index: 50;\n  will-change: transform;\n  background-color: var(--color-white, $color-white);\n  border-radius: var(--s-1, $s-1);\n  padding: var(--s-1 $s-2, $s-1 $s-2);\n  text-align: center;\n  top: -16px;\n  left: var(--s-2, $s-2);\n  perspective: 800px;\n  box-shadow: var(--shadow-2, $shadow-2);\n  white-space: nowrap;\n  font-weight: normal;\n  font-size: var(--font-size-body-1, $font-size-body-1);\n\n  &-placeholder {\n    position: absolute;\n    width: 10px;\n    height: 10px;\n    background-color: red;\n    left: -8px;\n    top: 0;\n  }\n  &-number {\n    color: var(--color-brand1-6, $color-brand1-6);\n    font-weight: var(--font-weight-medium, $font-weight-medium);\n    margin: 0 $s-1;\n  }\n}\n.fusion-ui-tablex-serial-number {\n  color: var(--color-white, $color-white);\n  text-align: center;\n  font-size: var(--font-size-body-1, $font-size-body-1);\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  height: var(--s-5, $s-5);\n  width: var(--s-5, $s-5);\n  border-radius: var(--corner-2, $corner-2);\n  background-color: var(--color-line1-4, $color-line1-4);\n}\n\n.fusion-ui-pro-table-selection-checkbox {\n  display: inline-flex;\n  flex-direction: row;\n  align-items: center;\n  gap: var(--s-1, $s-1);\n  .fusion-ui-menu-btn {\n    color: var(--color-text1-2, $color-text1-2);\n  }\n  .fusion-ui-menu-btn-arrow {\n    display: none !important;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-base/index.tsx",
    "content": "import * as React from 'react';\nimport cns from 'classnames';\nimport { Table } from '@alifd/next';\nimport { TableProps } from '@alifd/next/types/table';\nimport { getColumnKey, pickTableProps } from './utils';\nimport { useMemo } from 'react';\nimport { useActionColumn } from './columns/useActionColumn';\nimport { useIndexColumn } from './columns/useIndexColumn';\nimport { ProTableBaseProps } from '../../types';\nimport { renderColumns, useColumnsWithSetting } from '../pro-table-column';\nimport { useRowSelection } from './columns/useRowSelection';\nimport { ProTableColumnsSettingContext } from '../../contexts/pro-table-columns-setting-context';\nimport { ProTableSettingContext } from '@/components/pro-table/contexts/pro-table-setting-context';\nimport { registerColumnFormatters } from '../pro-table-column/pro-table-column-formatter';\nimport { defaultColumnFormatters } from '../pro-table-column/defaultColumnFormatters';\nimport { emptyFn } from '@/utils/constants';\nimport { ProTableCell } from '../pro-table-cell/pro-table-cell';\nimport { ProTableTreeCell } from '../pro-table-cell/pro-table-tree-cell';\n// import { ProTableCell } from '../pro-table-cell';\n\nregisterColumnFormatters(defaultColumnFormatters);\nconst totalCell = () => 'Total';\nconst valueCell = (val) => val;\n\nexport const ProTableBase: React.FC<ProTableBaseProps> = (props) => {\n  const { tableSetting } = React.useContext(ProTableSettingContext);\n  const {\n    columnKey,\n    resizable,\n    dataSource: originalDataSource,\n    rowSelection,\n    expandedRowRender,\n    groupHeader,\n    groupFooter,\n    totalDataSource,\n  } = props;\n\n  const actionColumnProps = useActionColumn(props);\n  const indexColumnProps = useIndexColumn(props);\n\n  const { updateColumnSetting, columnsSetting } = React.useContext(ProTableColumnsSettingContext);\n\n  const { flatColumns, columnsWithSetting } = useColumnsWithSetting({\n    columnKey,\n    columnsSetting,\n    columns: props.columns,\n    cellDefault: props.cellDefault,\n    cellTooltipMode: props.cellTooltipMode,\n  });\n\n  // table 属性\n  const externalProps: Partial<TableProps> = {\n    expandedIndexSimulate: expandedRowRender ? true : undefined,\n  };\n  if (resizable) {\n    externalProps.hasBorder = false;\n    externalProps.onResizeChange = (dataIndex, width) => {\n      const columnItem = flatColumns.find((vo) => vo.dataIndex === dataIndex);\n      if (!columnItem) {\n        console.warn(`未找到dataIndex=${dataIndex}的columnItem`);\n        return;\n      }\n      updateColumnSetting(\n        getColumnKey(columnItem, columnKey),\n        (oldSetting) => {\n          const oldWidth = +oldSetting.width || +columnItem.width || 200;\n          return {\n            width: Math.max(10, oldWidth + width),\n          };\n        },\n        'resize',\n      );\n    };\n  }\n\n  const dataSource = useMemo(\n    () => (totalDataSource ? [...(originalDataSource || []), totalDataSource] : originalDataSource),\n    [totalDataSource, originalDataSource],\n  );\n  if (totalDataSource) {\n    // 数据列第一列的下标，去掉表左侧功能列\n    const dataColumnsStartIndex = [expandedRowRender, rowSelection, indexColumnProps].filter(\n      (vo) => vo,\n    ).length;\n    // 数据列最后一列的下标，去掉表右侧功能列\n    const dataColumnsEndIndex = dataColumnsStartIndex + flatColumns.length - 1;\n\n    // 统计行下标\n    const totalRowIndex = dataSource.length - 1;\n    externalProps.rowProps = (record, rowIndex) => {\n      if (rowIndex === totalRowIndex) {\n        return {\n          className: 'fusion-ui-pro-table-total-row',\n        };\n      }\n      return {};\n    };\n\n    externalProps.cellProps = (rowIndex, colIndex) => {\n      if (rowIndex === totalRowIndex) {\n        // 统计行的数据第一列显示 Total 文案\n        if (colIndex === 0) {\n          return {\n            cell: totalCell,\n            onCellClick: undefined,\n            formatValue: undefined,\n          };\n        }\n        // 不在数据列范围内的隐藏\n        if (colIndex < dataColumnsStartIndex || colIndex > dataColumnsEndIndex) {\n          return {\n            cell: emptyFn,\n            onCellClick: undefined,\n            formatValue: undefined,\n          };\n        }\n\n        return {\n          cell: valueCell,\n          onCellClick: undefined,\n          formatValue: undefined,\n        };\n      }\n      return {};\n    };\n  }\n\n  const NextTable = props.stickyLock ? Table.StickyLock : Table;\n  const nextTableProps = pickTableProps({\n    ...externalProps,\n    ...props,\n    ...tableSetting,\n    rowSelection: useRowSelection(rowSelection, originalDataSource),\n    dataSource,\n    columns: undefined, // 剔除columns\n    className: cns('fusion-ui-pro-table-base', props.className),\n  });\n  const columns = renderColumns(columnsWithSetting, {\n    resizable,\n  });\n\n  return (\n    <NextTable\n      {...nextTableProps}\n      // @ts-ignore\n      components={{\n        Cell: nextTableProps.isTree ? ProTableTreeCell : ProTableCell,\n      }}\n    >\n      {groupHeader &&\n        (React.isValidElement(groupHeader) ? (\n          groupHeader\n        ) : (\n          <Table.GroupHeader {...(groupHeader as any)} />\n        ))}\n      {groupFooter &&\n        (React.isValidElement(groupFooter) ? (\n          groupFooter\n        ) : (\n          <Table.GroupFooter {...(groupFooter as any)} />\n        ))}\n\n      {indexColumnProps && <Table.Column {...indexColumnProps} />}\n      {columns}\n      {actionColumnProps && <Table.Column {...actionColumnProps} />}\n      {props.children}\n    </NextTable>\n  );\n};\n\nProTableBase.displayName = 'ProTableBase';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-base/utils.tsx",
    "content": "import pick from 'lodash/pick';\nimport { TableProps } from '@alifd/next/types/table';\nimport { ProTableColumnProps, ProTableBaseProps } from '../../types';\n\nexport function getColumnKey(column: ProTableColumnProps, columnKey?: string) {\n  if (columnKey) {\n    if (column[columnKey]) {\n      return column[columnKey];\n    }\n  }\n  if (column.key) {\n    return column.key;\n  }\n  if (column.dataIndex) {\n    return column.dataIndex;\n  }\n  console.warn(\n    `[TableX] 自定义列需要每个 column 必须有 ${columnKey} | key | dataIndex 属性`,\n    column,\n  );\n}\n\nconst nextTablePropsKeys: Array<keyof TableProps> = [\n  // next table 所有属性\n  'affixProps',\n  'cellProps',\n  'className',\n  'columns',\n  'crossline',\n  'dataSource',\n  'emptyContent',\n  'expandedIndexSimulate',\n  'expandedRowIndent',\n  'expandedRowRender',\n  'filterParams',\n  'fixedHeader',\n  // 'getCellProps', // fusion 废弃\n  'getExpandedColProps',\n  // 'getRowProps', // fusion 废弃\n  'hasBorder',\n  'hasExpandedRowCtrl',\n  'hasHeader',\n  'indent',\n  'isTree',\n  'isZebra',\n  'loading',\n  'loadingComponent',\n  'locale',\n  'maxBodyHeight',\n  'offsetTop',\n  'onBodyScroll',\n  'onExpandedRowClick',\n  'onFilter',\n  'onResizeChange',\n  'onRowClick',\n  'onRowMouseEnter',\n  'onRowMouseLeave',\n  'onRowOpen',\n  'onSort',\n  'openRowKeys',\n  'prefix',\n  'primaryKey',\n  'pure',\n  'rowExpandable',\n  'rowHeight',\n  'rowProps',\n  'rowSelection',\n  'rtl',\n  'scrollToRow',\n  'size',\n  'sort',\n  'sortIcons',\n  'stickyHeader',\n  'style',\n  'tableLayout',\n  'tableWidth',\n  'useVirtual',\n  'warning',\n];\nexport const pickTableProps = (whaleTableProps: ProTableBaseProps) => {\n  return pick(\n    whaleTableProps,\n    nextTablePropsKeys.filter((vo) => whaleTableProps[vo] !== undefined),\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-button-group/index.tsx",
    "content": "import * as React from 'react';\nimport { Button, ButtonProps } from '@/components/button';\nimport { MenuButton, MenuButtonProps } from '@/components/menu-button';\nimport { Space, SpaceProps } from '@/components/container';\nimport { PayloadButtonProps, usePayloadButtons } from './payload-button';\nimport { useI18nBundle } from '@/provider/contexts/locale-context/index';\nimport { omit } from 'lodash';\n\nexport interface ProTableButtonGroupProps<Payload = unknown> extends SpaceProps {\n  /**\n   * 是否设定按钮为文字模式\n   */\n  text?: boolean;\n  /**\n   * 可见按钮数量，超过会收起到”更多“菜单中\n   */\n  maxCount?: number;\n  /**\n   * 按钮\n   */\n  payload?: Payload;\n  /**\n   * 数据源驱动\n   */\n  dataSource?: Array<PayloadButtonProps<Payload>>;\n  /**\n   * \"更多\" 按钮的额外配置\n   */\n  moreMenuButtonProps?: Partial<MenuButtonProps>;\n}\n\nexport const ProTableButtonGroup: React.FC<ProTableButtonGroupProps> = ({\n  text,\n  maxCount,\n  payload,\n  dataSource,\n  moreMenuButtonProps,\n  ...otherProps\n}) => {\n  const i18nBundle = useI18nBundle('ButtonGroup');\n  const realDataSource = usePayloadButtons(dataSource, payload);\n  const splitIndex = getVisibleSplitIndex(realDataSource, maxCount);\n  const visibleButtons = realDataSource.slice(0, splitIndex);\n  const menuButtons = realDataSource.slice(splitIndex).map((vo) => omit(vo, ['type', 'text']));\n  return (\n    <Space {...otherProps}>\n      {text\n        ? visibleButtons.map((dataSourceItem, idx) => (\n            <Button key={idx} text type=\"primary\" {...dataSourceItem} />\n          ))\n        : visibleButtons.map((dataSourceItem, idx) => <Button key={idx} {...dataSourceItem} />)}\n      {menuButtons.length > 0 && (\n        <MenuButton\n          popupProps={{ align: 'tr br' }}\n          label={i18nBundle.more}\n          text={text}\n          type={text ? 'primary' : 'normal'}\n          dataSource={menuButtons}\n          {...moreMenuButtonProps}\n        />\n      )}\n    </Space>\n  );\n};\nProTableButtonGroup.defaultProps = {\n  maxCount: 4,\n  moreMenuButtonProps: {},\n};\n\nProTableButtonGroup.displayName = 'ProTableButtonGroup';\n\nconst getVisibleSplitIndex = (dataSource: ButtonProps[], maxCount: number) => {\n  /**\n   * ButtonGroup:\n   * maxCount 2 时\n   * 包括更多按钮显示的数量\n   *\n   * 按钮 4 个， 显示 3 个按钮 + 1 个更多按钮\n   * 按钮 3 个， 显示 3 个按钮\n   * 按钮 2 个， 显示 2 个按钮\n   *\n   * 改进方案:\n   * maxCount 2 时\n   * 包括更多按钮显示的数量\n   *\n   * 按钮 4 个， 显示 1 个按钮 + 1 个更多按钮\n   * 按钮 3 个， 显示 1 个按钮 + 1 个更多按钮\n   * 按钮 2 个， 显示 2 个按钮\n   *\n   */\n  if (dataSource.length <= maxCount) {\n    return dataSource.length;\n  }\n  return maxCount - 1;\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-button-group/payload-button.ts",
    "content": "import * as React from 'react';\nimport { ButtonProps } from '@/components/button';\nimport is from '@sindresorhus/is';\n\nexport interface PayloadButtonProps<Payload = unknown>\n  extends Omit<ButtonProps, 'hidden' | 'disabled'> {\n  payload?: Payload;\n  /**\n   * 是否隐藏按钮\n   * @default false\n   */\n  hidden?: boolean | ((payload?: Payload) => boolean);\n  /**\n   * 是否禁用按钮\n   * @default false\n   */\n  disabled?: boolean | ((payload?: Payload) => boolean);\n  /**\n   * 按钮点击事件\n   */\n  onClick?: (e: React.MouseEvent<Element>, payload?: Payload) => unknown;\n}\n\nfunction isPayloadButtonTruth<Payload>(\n  cb: boolean | ((payload?: Payload) => boolean),\n  payload?: Payload,\n): boolean {\n  return is.function_(cb) ? cb(payload) : cb;\n}\n\nexport const usePayloadButtons = <Payload = unknown>(\n  buttons: Array<PayloadButtonProps<Payload>>,\n  payload: Payload,\n) =>\n  React.useMemo(\n    () =>\n      buttons\n        .filter((vo) =>\n          is.nullOrUndefined(vo.hidden) ? true : !isPayloadButtonTruth(vo.hidden, payload),\n        )\n        .map((vo) => ({\n          ...vo,\n          disabled: is.nullOrUndefined(vo.disabled)\n            ? false\n            : isPayloadButtonTruth(vo.disabled, payload),\n          hidden: undefined,\n          onClick: vo.onClick && ((e) => vo.onClick(e, payload)),\n        })),\n    [buttons, payload],\n  );\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-cell/cell-label.tsx",
    "content": "import * as React from 'react';\n// import { Ellipsis } from '@/ellipsis';\nimport { Balloon } from '@alifd/next';\n// import { ColorType } from '@/types';\nimport classnames from 'classnames';\nimport { statusTypes } from '@/types/enum';\n\nconst { Tooltip } = Balloon;\n\nexport interface CellLabelProps extends React.HTMLProps<HTMLDivElement> {\n  toolTipMode?: 'always' | 'ellipsis' | 'none';\n  // color?: ColorType;\n}\nexport const CellLabel: React.FC<CellLabelProps> = ({\n  toolTipMode,\n  color,\n  children,\n  className,\n  style,\n  ...props\n}) => {\n  const isStatusColor = statusTypes.includes(color as any);\n  return (\n    <div\n      {...props}\n      className={classnames(className, {\n        [`cell-label-${color}`]: isStatusColor,\n      })}\n      style={{\n        color: isStatusColor ? undefined : color,\n        ...style,\n        display: 'inline',\n      }}\n    >\n      <CellToolTip toolTipMode={toolTipMode}>{children}</CellToolTip>\n    </div>\n  );\n};\nCellLabel.defaultProps = {\n  toolTipMode: 'none',\n};\n\nexport interface CellToolTipProps {\n  toolTipMode?: 'always' | 'ellipsis' | 'none';\n  onClick?: () => void;\n}\nconst CellToolTip: React.FC<CellToolTipProps> = ({ toolTipMode, children }) => {\n  // if (toolTipMode === 'ellipsis') {\n  //   return <Ellipsis>{children}</Ellipsis>;\n  // }\n  if (toolTipMode === 'always') {\n    return (\n      <Tooltip trigger={children}>\n        <>{children}</>\n      </Tooltip>\n    );\n  }\n  return <>{children}</>;\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-cell/pro-table-cell.tsx",
    "content": "import * as React from 'react';\nimport classnames from 'classnames';\nimport { ProTableColumnProps, ProTableCellCommonProps } from '@/components/pro-table/types';\nimport { CellLabel } from './cell-label';\nimport { getColorWithFormat } from '../pro-table-cells/utils';\n\nimport { obj, pickAttrs } from '@/utils/util';\n\nexport interface ProTableCellProps extends ProTableCellCommonProps, ProTableColumnProps {\n  record: any;\n  value: any;\n  isIconLeft: boolean;\n  colIndex: number;\n  rowIndex: number;\n  __colIndex: number | string; // 经过锁列调整后的列索引，lock right的列会从非0开始\n  context: any;\n  component: 'td' | 'th' | 'div';\n  innerStyle: object;\n  type: 'header' | 'body';\n  rowSpan?: number;\n  getCellDomRef?: string;\n  primaryKey: string;\n  dataKey: string;\n  __normalized: any;\n  filterMenuProps: any;\n  filterProps: any;\n  expandedIndexSimulate: any;\n  wordBreak: any;\n  editCell: any;\n}\n\nexport class ProTableCell extends React.Component<ProTableCellProps> {\n  static defaultProps = {\n    component: 'td',\n    type: 'body',\n    isIconLeft: false,\n    cell: (value: any) => value,\n    prefix: 'fusion-ui-',\n  };\n\n  shouldComponentUpdate(nextProps: ProTableCellProps) {\n    if (nextProps.pure) {\n      const isEqual = obj.shallowEqual(this.props, nextProps);\n      return !isEqual;\n    }\n    return true;\n  }\n\n  render() {\n    const {\n      prefix,\n      className,\n      cell,\n      value: originValue,\n      resizable,\n      asyncResizable,\n      colIndex,\n      rowIndex,\n      __colIndex,\n      record,\n      context,\n      align,\n      style = {},\n      formatValue,\n      component: Tag,\n      children,\n      title,\n      width,\n      innerStyle,\n      primaryKey,\n      __normalized,\n      filterMode,\n      filterMenuProps,\n      filterProps,\n      filters,\n      sortable,\n      sortDirections,\n      lock,\n      pure,\n      locale,\n      expandedIndexSimulate,\n      rtl,\n      isIconLeft,\n      type,\n      htmlTitle,\n      wordBreak,\n      editCell,\n      dataKey,\n      getCellDomRef,\n      onCellClick,\n      formatColor,\n      cellTooltipMode,\n      cellDefault,\n      ...others\n    } = this.props;\n    const tagStyle = { ...style };\n    const isDataRow = rowIndex !== undefined;\n    const value =\n      formatValue && isDataRow ? formatValue(originValue, rowIndex, record) : originValue;\n    const cellProps = { value, index: rowIndex, record, context };\n    let content = cell;\n    const editContent = editCell;\n    if (record?.editMode && editContent) {\n      content = editContent(value, rowIndex, record, context, dataKey);\n    } else if (React.isValidElement(content)) {\n      content = React.cloneElement(content, cellProps);\n    } else if (typeof content === 'function') {\n      content = content(value, rowIndex, record, context);\n    }\n    if (align) {\n      tagStyle.textAlign = align;\n      if (rtl) {\n        if (align === 'left') {\n          tagStyle.textAlign = 'right';\n        } else if (align === 'right') {\n          tagStyle.textAlign = 'left';\n        }\n      }\n    }\n    const cls = classnames({\n      [`${prefix}table-cell`]: true,\n      [`${prefix}table-word-break-${wordBreak}`]: !!wordBreak,\n      [className]: className,\n    });\n    const contentWithTooltip = isDataRow ? (\n      <CellLabel\n        onClick={onCellClick && (() => onCellClick(value, rowIndex, record))}\n        color={formatColor && getColorWithFormat(value, formatColor)}\n        toolTipMode={cellTooltipMode}\n      >\n        {content || cellDefault}\n      </CellLabel>\n    ) : (\n      content\n    );\n\n    return (\n      <Tag {...pickAttrs(others)} className={cls} style={tagStyle} role=\"gridcell\">\n        <div\n          className={`${prefix}table-cell-wrapper`}\n          ref={getCellDomRef}\n          style={innerStyle}\n          title={htmlTitle}\n          data-next-table-col={__colIndex}\n          data-next-table-row={rowIndex}\n        >\n          {isIconLeft ? children : contentWithTooltip}\n          {isIconLeft ? contentWithTooltip : children}\n        </div>\n      </Tag>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-cell/pro-table-tree-cell.tsx",
    "content": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Icon } from '@alifd/next';\n\nimport { ProTableCell, ProTableCellProps } from './pro-table-cell';\n\nexport interface ProTableTreeCellProps extends ProTableCellProps {\n  indent: number;\n}\nconst KEYCODE = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  SHIFT: 16,\n  CTRL: 17,\n  ALT: 18,\n  ESC: 27,\n  SPACE: 32,\n  END: 35,\n  HOME: 36,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  PAGE_UP: 33,\n  PAGE_DOWN: 34,\n\n  // version 0.x\n  ESCAPE: 27,\n  LEFT_ARROW: 37,\n  UP_ARROW: 38,\n  RIGHT_ARROW: 39,\n  DOWN_ARROW: 40,\n\n  // MacOS\n  CONTROL: 17,\n  OPTION: 18,\n  CMD: 91,\n  COMMAND: 91,\n  DELETE: 8,\n};\n\nexport class ProTableTreeCell extends React.Component<ProTableTreeCellProps> {\n  static defaultProps = {\n    component: 'td',\n    indent: 20,\n  };\n\n  static contextTypes = {\n    openTreeRowKeys: PropTypes.array,\n    indent: PropTypes.number,\n    onTreeNodeClick: PropTypes.func,\n    isTree: PropTypes.bool,\n    rowSelection: PropTypes.object,\n  };\n\n  onTreeNodeClick = (record, e) => {\n    e.stopPropagation();\n    this.context.onTreeNodeClick(record);\n  };\n\n  expandedKeydown = (record, e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    if (e.keyCode === KEYCODE.ENTER) {\n      this.onTreeNodeClick(record, e);\n    }\n  };\n\n  render() {\n    const { colIndex, record, prefix, primaryKey, locale, rtl, children } = this.props;\n    const { openTreeRowKeys: openRowKeys, indent, isTree, rowSelection } = this.context;\n    const treeArrowNodeIndex = rowSelection ? 1 : 0;\n    let firstCellStyle;\n    let treeArrowNode;\n    if (colIndex === treeArrowNodeIndex) {\n      let treeArrowType;\n      if (isTree) {\n        const paddingType = rtl ? 'paddingRight' : 'paddingLeft';\n        firstCellStyle = {\n          [paddingType]: indent * (record.__level + 1),\n        };\n        treeArrowNode = <Icon size=\"xs\" rtl={rtl} className={`${prefix}table-tree-placeholder`} />;\n        if (record.children && record.children.length) {\n          const hasExpanded = openRowKeys.indexOf(record[primaryKey]) > -1;\n\n          treeArrowType = hasExpanded ? 'arrow-down' : 'arrow-right';\n\n          treeArrowNode = (\n            <Icon\n              className={`${prefix}table-tree-arrow`}\n              type={treeArrowType}\n              size=\"xs\"\n              rtl={rtl}\n              onClick={(e) => this.onTreeNodeClick(record, e)}\n              onKeyDown={(e) => this.expandedKeydown(record, e)}\n              role=\"button\"\n              tabIndex={0}\n              aria-expanded={hasExpanded}\n              aria-label={hasExpanded ? locale.expanded : locale.folded}\n            />\n          );\n        }\n      }\n    }\n    return (\n      <ProTableCell {...this.props} innerStyle={firstCellStyle} isIconLeft={!!treeArrowNode}>\n        {children}\n        {treeArrowNode}\n      </ProTableCell>\n    );\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-cells/utils.ts",
    "content": "import is from '@sindresorhus/is';\n\nexport type StatusColorType =\n  | 'success'\n  | 'error'\n  | 'warning'\n  | 'notice'\n  | 'help'\n  | 'normal'\n  | string;\n\n/** 颜色转换回调 */\nexport type FormatColor =\n  | StatusColorType\n  | ((value: unknown) => StatusColorType)\n  | Record<string, StatusColorType>;\n\n/**\n *\n * @param value 值\n * @param formatColor 状态/颜色\n * @returns 颜色\n */\nexport const getColorWithFormat = (value?: unknown, formatColor?: FormatColor): StatusColorType => {\n  if (is.object(formatColor)) {\n    return formatColor[value as string];\n  }\n  if (is.function_(formatColor)) {\n    return formatColor(value);\n  }\n  if (is.string(formatColor)) {\n    return formatColor;\n  }\n  return 'normal';\n};\n\nexport const colorToStatus = <Status extends StatusColorType>(\n  value: StatusColorType,\n  allowStatus: Status[],\n): Status | undefined => (allowStatus.includes(value as Status) ? (value as Status) : undefined);\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column/defaultColumnFormatters.tsx",
    "content": "import * as React from 'react';\nimport { ProTableColumnProps } from '../../types';\nimport { ProTableColumnFormatter } from './pro-table-column-formatter';\nimport is from '@sindresorhus/is';\nimport {\n  formatBankCard,\n  formatDate,\n  formatMoney,\n  formatNumber,\n  formatPercent,\n} from '@/utils/formatters';\n// import { EmployeeInfo } from '@/employee-select';\n// import { UploadList } from '@/upload/components/Upload/components/UploadList';\nimport { colorToStatus } from '../pro-table-cells/utils';\nimport {\n  Progress,\n  Tag,\n  Upload as UploadList,\n  Input,\n  NumberPicker,\n  DatePicker2,\n  Select,\n} from '@alifd/next';\n// import { Tag } from '@/tag';\n\nconst EditComponent = (props: any) => {\n  const { component, value, onChange, style = {}, ...otherProps } = props;\n  const [data, setData] = React.useState(value);\n  if (!style.width) {\n    style.width = '100%';\n  }\n  const Comp = component || Input;\n  return (\n    <Comp\n      value={data}\n      style={style}\n      fullWidth\n      hasClear\n      onChange={(changeValue) => {\n        setData(changeValue);\n        onChange && onChange(changeValue);\n      }}\n      {...otherProps}\n    />\n  );\n};\n\nconst TextEditCell = (value, rowIndex, record, context, dataIndex) => {\n  return (\n    <EditComponent\n      component={Input}\n      value={value}\n      onChange={(data) => {\n        record[dataIndex] = data;\n        record[`origin-${dataIndex}`] = value;\n      }}\n    />\n  );\n};\n\nconst NumberEditCell = (value, rowIndex, record, context, dataIndex) => {\n  return (\n    <EditComponent\n      component={NumberPicker}\n      value={value}\n      step=\"0.01\"\n      onChange={(data) => {\n        record[dataIndex] = data;\n        record[`origin-${dataIndex}`] = value;\n      }}\n    />\n  );\n};\n\nconst DateEditCell = (value, rowIndex, record, context, dataIndex) => {\n  return (\n    <EditComponent\n      component={DatePicker2}\n      value={value}\n      onChange={(data) => {\n        record[dataIndex] = data;\n        record[`origin-${dataIndex}`] = value;\n      }}\n    />\n  );\n};\n\nconst SelectEditCell = (value, rowIndex, record, context, dataIndex) => {\n  return (\n    <EditComponent\n      component={Select}\n      dataSource={[\n        {\n          label: 'BHD',\n          value: 'BHD',\n        },\n        {\n          label: 'BIF',\n          value: 'BIF',\n        },\n        {\n          label: 'CLF',\n          value: 'CLF',\n        },\n        {\n          label: 'CLP',\n          value: 'CLP',\n        },\n        {\n          label: 'DJF',\n          value: 'DJF',\n        },\n        {\n          label: 'GNF',\n          value: 'GNF',\n        },\n        {\n          label: 'IQD',\n          value: 'IQD',\n        },\n        {\n          label: 'ISK',\n          value: 'ISK',\n        },\n        {\n          label: 'JOD',\n          value: 'JOD',\n        },\n        {\n          label: 'JPY',\n          value: 'JPY',\n        },\n        {\n          label: 'KMF',\n          value: 'KMF',\n        },\n        {\n          label: 'KRW',\n          value: 'KRW',\n        },\n        {\n          label: 'KWD',\n          value: 'KWD',\n        },\n        {\n          label: 'LYD',\n          value: 'LYD',\n        },\n        {\n          label: 'OMR',\n          value: 'OMR',\n        },\n        {\n          label: 'PYG',\n          value: 'PYG',\n        },\n        {\n          label: 'RWF',\n          value: 'RWF',\n        },\n        {\n          label: 'TND',\n          value: 'TND',\n        },\n        {\n          label: 'UGX',\n          value: 'UGX',\n        },\n        {\n          label: 'UYI',\n          value: 'UYI',\n        },\n        {\n          label: 'UYW',\n          value: 'UYW',\n        },\n        {\n          label: 'VUV',\n          value: 'VUV',\n        },\n        {\n          label: 'XAF',\n          value: 'XAF',\n        },\n        {\n          label: 'XOF',\n          value: 'XOF',\n        },\n        {\n          label: 'XPF',\n          value: 'XPF',\n        },\n        {\n          label: 'IDR',\n          value: 'IDR',\n        },\n        {\n          label: 'TWD',\n          value: 'TWD',\n        },\n        {\n          label: 'VND',\n          value: 'VND',\n        },\n      ]}\n      value={value}\n      onChange={(data) => {\n        record[dataIndex] = data;\n        record[`origin-${dataIndex}`] = value;\n      }}\n    />\n  );\n};\n\n/**\n * 不同类型列的格式化方法a\n */\nexport const defaultColumnFormatters: Record<\n  ProTableColumnProps['formatType'],\n  ProTableColumnFormatter\n> = {\n  text: (options) => {\n    return {\n      cellTooltipMode: 'ellipsis',\n      width: 100,\n      cell: options.cellFactory(({ value, getLabel }) => value && getLabel()),\n      editCell: TextEditCell,\n    };\n  },\n  number: (options) => ({\n    cellTooltipMode: 'ellipsis',\n    cell: options.formatterCellFactory(formatNumber),\n    editCell: NumberEditCell,\n  }),\n  // 金额渲染\n  money: (options) => ({\n    cellTooltipMode: 'ellipsis',\n    // 金额 + 币种，宽度设置为 120\n    // 金额展示，宽度设置为 90\n    width: options.formatTypeParser.rawOptions[0] ? 120 : 90,\n    align: 'right',\n    cell: options.formatterCellFactory(formatMoney),\n    editCell: NumberEditCell,\n  }),\n  // 日期渲染\n  date: (options) => ({\n    cellTooltipMode: 'ellipsis',\n    width: 158,\n    align: 'center',\n    cell: options.formatterCellFactory(formatDate),\n    editCell: DateEditCell,\n  }),\n  // 电话显示\n  phone: () => ({\n    cellTooltipMode: 'ellipsis',\n    width: 142,\n    editCell: TextEditCell,\n  }),\n\n  // 币种展示\n  currency: (options) => ({\n    cellTooltipMode: 'ellipsis',\n    width: 40,\n    cell: options.cellFactory(({ value, getLabel }) => value && getLabel()),\n    editCell: SelectEditCell,\n  }),\n  // OU 编码\n  ou: () => ({\n    cellTooltipMode: 'ellipsis',\n    width: 58,\n    align: 'center',\n  }),\n  // 百分比\n  percent: (options) => ({\n    cellTooltipMode: 'ellipsis',\n    width: 80,\n    cell: options.formatterCellFactory(formatPercent),\n    editCell: NumberEditCell,\n  }),\n  // 进度条\n  progress: (options) => ({\n    cellTooltipMode: 'ellipsis',\n    width: 180,\n    cell: options.cellFactory(({ value, getCellColor }) => {\n      if (is.number(value) || is.numericString(value)) {\n        const status = colorToStatus(getCellColor(), ['normal', 'success', 'error']) || 'normal';\n        return <Progress percent={+value * 100} state={status} progressive={!status} />;\n      }\n      return undefined;\n    }),\n    formatColor: undefined,\n    editCell: NumberEditCell,\n  }),\n  link: () => ({\n    cellTooltipMode: 'none',\n    cell: (value) => (\n      <a href=\"#\" onClick={() => false}>\n        {value}\n      </a>\n    ),\n    editCell: TextEditCell,\n  }),\n  tag: (options) => ({\n    cellTooltipMode: 'none',\n    width: 90,\n    cell: options.cellFactory(\n      ({ value, getLabel, getCellColor }) =>\n        value && (\n          <Tag color={getCellColor()} size=\"small\">\n            {getLabel()}\n          </Tag>\n        ),\n    ),\n    formatColor: undefined,\n  }),\n  textTag: (options) => ({\n    cellTooltipMode: 'none',\n    width: 90,\n    cell: options.cellFactory(\n      ({ value, getLabel, getCellColor }) =>\n        value && (\n          <Tag color={getCellColor()} size=\"small\" shape=\"text\" type=\"primary\">\n            {getLabel()}\n          </Tag>\n        ),\n    ),\n    formatColor: undefined,\n  }),\n  files: () => ({\n    cellTooltipMode: 'none',\n    width: 180,\n    cell: (value) =>\n      value && <UploadList listType=\"table\" value={value} showDownloadIcon showPreviewIcon />,\n    formatColor: undefined,\n  }),\n  bankCard: () => ({\n    cellTooltipMode: 'ellipsis',\n    width: 183,\n    cell: formatBankCard,\n  }),\n  employee: () => ({\n    cellTooltipMode: 'none',\n    width: 160,\n    cell: (value) => value && <div dataSource={value} triggerType={['hover', 'click']} />,\n  }),\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column/index.tsx",
    "content": "import * as React from 'react';\nimport { ColumnProps } from '@alifd/next/types/table';\nimport { Table } from '@alifd/next';\nimport is from '@sindresorhus/is';\nimport omit from 'lodash/omit';\nimport { ProTableColumnTitle } from '../pro-table-column-title';\nimport { ProTableColumnProps, ProTableProps } from '../../types';\nimport { getColumnKey } from '../pro-table-base/utils';\nimport { formatColumnProps } from './pro-table-column-formatter';\n\ninterface ColumnWithSetting {\n  key: string;\n  column: ProTableColumnProps;\n  children: ColumnWithSetting[];\n}\n\nexport const useColumnsWithSetting = ({\n  columns,\n  columnKey,\n  columnsSetting,\n  cellDefault,\n  cellTooltipMode,\n}: Pick<\n  ProTableProps,\n  'columns' | 'columnKey' | 'columnsSetting' | 'cellDefault' | 'cellTooltipMode'\n>) =>\n  React.useMemo(() => {\n    const fn = (items: ProTableColumnProps[]): ColumnWithSetting[] =>\n      is.array(items)\n        ? items\n            .map((column, index) => {\n              const key = getColumnKey(column, columnKey);\n              // 列格式化\n              const typeColumnProps = formatColumnProps(column);\n              const col = {\n                // 设置优先级: 列配置 > 列类型提供值 > 表格\n                cellTooltipMode,\n                cellDefault,\n                ...typeColumnProps,\n                ...column,\n              };\n\n              const columnSetting = {\n                sortRank: index,\n                ...columnsSetting[key],\n              };\n              // 列设置参数\n              col.width = is.number(columnSetting.width) ? columnSetting.width : col.width;\n              col.lock = is.nullOrUndefined(columnSetting.lock) ? col.lock : columnSetting.lock;\n              let lockRank = 0;\n              if (col.lock === 'right') {\n                lockRank = 100000;\n              } else if (col.lock) {\n                lockRank = -100000;\n              }\n\n              return {\n                key,\n                hidden: is.boolean(columnSetting.hidden) ? columnSetting.hidden : false,\n                columnSort: columnSetting.sortRank + lockRank,\n                column: col,\n                children: col.group ? fn(column.children) : [],\n              };\n            })\n            .sort((aItem, bItem) => aItem.columnSort - bItem.columnSort)\n            .filter((item) => !item.hidden)\n        : [];\n    const columnsWithSetting = fn(columns);\n    const flatColumns = [];\n    const reduceflatColumns = (items: ColumnWithSetting[]) => {\n      items.forEach((vo) => {\n        if (vo.children.length > 0) {\n          reduceflatColumns(vo.children);\n        } else {\n          flatColumns.push(vo.column);\n        }\n      });\n    };\n    reduceflatColumns(columnsWithSetting);\n\n    return {\n      columnsWithSetting,\n      flatColumns,\n    };\n  }, [columnKey, columns, columnsSetting, cellTooltipMode, cellDefault]);\n\nexport const renderColumns = (\n  items: ColumnWithSetting[],\n  options: {\n    resizable: boolean;\n  },\n) =>\n  items.map(({ column, key, children }) => {\n    if (column.group) {\n      return (\n        <Table.ColumnGroup key={key} title={column.group} {...column}>\n          {renderColumns(children, options)}\n        </Table.ColumnGroup>\n      );\n    }\n    const _columnProps = pickColumnProps(column);\n    return (\n      <Table.Column\n        key={key}\n        resizable={options.resizable}\n        {..._columnProps}\n        dataKey={column.dataIndex}\n        title={<ProTableColumnTitle {...column}>{column.title}</ProTableColumnTitle>}\n      />\n    );\n  });\n\n/**\n * 不传多余的参数下去以免组件报不识别 prop 的 warning\n */\nexport const pickColumnProps = (col: ProTableColumnProps): ColumnProps => {\n  return omit(col, [\n    'tableEl',\n    'groupHeader',\n    'groupFooter',\n    'group',\n    'children',\n    'type',\n    'formatType',\n    'formatConfig',\n    'tagCondition',\n    'i18nBundle',\n    // 剔除排序/筛选功能\n    'searchable',\n    'sortable',\n    'sortDirections',\n    'filters',\n    'filterMode',\n  ]);\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column/pro-table-column-formatter.tsx",
    "content": "import is from '@sindresorhus/is';\nimport * as React from 'react';\nimport qs from 'qs';\nimport { ProTableColumnProps } from '../../types';\nimport { getColorWithFormat } from '../pro-table-cells/utils';\nimport { DataSourceLabel, DataSourceLabelProps } from '@/utils/dataSource/data-source-label';\nimport { ReactNode } from 'react';\nimport { asyncDataSourceToPromiseDataSource } from '@/utils/dataSource/utils';\n\nexport interface CellFactoryCellOptions {\n  /** 单元格值 */\n  value: unknown;\n  /** 单元格label */\n  getLabel: (props?: DataSourceLabelProps) => ReactNode;\n  /** 行下标 */\n  rowIndex: number;\n  /** 行数据 */\n  record: unknown;\n  /** 获取配置 */\n  getCellOptions: () => any[];\n  /** 获取颜色 */\n  getCellColor: () => string;\n}\nexport interface ProTableColumnFormatterOptions {\n  /** 列配置 */\n  column: ProTableColumnProps;\n  formatTypeParser: {\n    /** 类型原始值 */\n    raw: string;\n    /** 实际类型 */\n    type: string;\n    /** 参数 */\n    rawOptions: string[];\n  };\n  /** 获取真实参数 */\n  getCellOptions: (record: any) => any[];\n  /** 格式化 */\n  formatterCellFactory: <Value, Args extends unknown[]>(\n    cell: (value: Value, ...args: Args) => React.ReactNode,\n  ) => React.ReactNode;\n  /** 高阶格式化 */\n  cellFactory: (cell: (options: CellFactoryCellOptions) => React.ReactNode) => React.ReactNode;\n}\nexport type ProTableColumnFormatter = (\n  options: ProTableColumnFormatterOptions,\n) => Partial<ProTableColumnProps>;\n\nclass ProTableColumnFormatterManager {\n  columnFormatters: Record<string, ProTableColumnFormatter> = {};\n  /** 注册列格式化类型 */\n  registerColumnFormatter = (name: string, columnFormatter: ProTableColumnFormatter) => {\n    if (is.function_(columnFormatter)) {\n      this.columnFormatters[name] = columnFormatter;\n      return;\n    }\n    console.warn(`registerColumnFormatter: ${name}, columnFormatter不是函数`);\n  };\n  /** 批量注册列格式化类型 */\n  registerColumnFormatters = (columnFormatters: Record<string, ProTableColumnFormatter>) => {\n    Object.keys(columnFormatters).forEach((key) => {\n      this.registerColumnFormatter(key, columnFormatters[key]);\n    });\n  };\n  formatColumnProps = (col: ProTableColumnProps): ProTableColumnProps | undefined => {\n    if (is.string(col.formatType)) {\n      const formatterOptions = getFormatterOptions(col);\n      const { columnFormatters } = this;\n      if (formatterOptions.formatTypeParser.type in columnFormatters) {\n        return columnFormatters[formatterOptions.formatTypeParser.type](formatterOptions);\n      }\n    }\n    return undefined;\n  };\n}\nconst proTableColumnFormatterManager = new ProTableColumnFormatterManager();\nexport const { registerColumnFormatter, registerColumnFormatters, formatColumnProps } =\n  proTableColumnFormatterManager;\n\nconst getFormatterOptions = (column: ProTableColumnProps): ProTableColumnFormatterOptions => {\n  const formatTypeParser = parseFormatType(column.formatType);\n  if (is.array(column.formatOptions)) {\n    formatTypeParser.rawOptions = [...formatTypeParser.rawOptions, ...column.formatOptions];\n  }\n\n  const getCellOptions = (record: any = {}) =>\n    formatTypeParser.rawOptions.map((vo) => (vo.startsWith('$') ? record[vo.slice(1)] : vo));\n  // 优化性能，列dataSource缓存\n  const dataSource = column.dataSource\n    ? asyncDataSourceToPromiseDataSource(column.dataSource)\n    : undefined;\n  const cellFactory =\n    (cell: (options: CellFactoryCellOptions) => React.ReactNode) => (value, rowIndex, record) =>\n      cell({\n        getLabel: (props) =>\n          dataSource ? (\n            <DataSourceLabel\n              dataSource={dataSource}\n              value={value}\n              defaultLabel={value || column.cellDefault}\n              {...props}\n            />\n          ) : (\n            value\n          ),\n        value,\n        rowIndex,\n        record,\n        getCellOptions: () => getCellOptions(record),\n        getCellColor: () => getColorWithFormat(value, column.formatColor),\n      });\n  const formatterCellFactory = (cell) => (value, rowIndex, record) =>\n    cell(value, ...(getCellOptions(record) as any));\n  return {\n    column,\n    formatTypeParser,\n    getCellOptions,\n    cellFactory,\n    formatterCellFactory,\n  };\n};\n\n/**\n * 解析格式化字符串\n * @param raw 格式化字符串\n * @example\n * - number\n * - number:0,0.00%\n * - number:$format\n */\nconst parseFormatType = (raw: string): ProTableColumnFormatterOptions['formatTypeParser'] => {\n  try {\n    const res = raw.trim().match(/^([a-zA-Z-_0-9]+)(?:\\|(.*)?)?$/);\n    if (!res) {\n      throw new Error('不符合规则的formatType');\n    }\n    const [, type, optionStr = ''] = res;\n    return {\n      raw,\n      type,\n      rawOptions: Object.keys(qs.parse(optionStr)),\n    };\n  } catch (error) {\n    const err = new Error(`parseformatType: ${raw} 解析错误`);\n    err.stack = error?.stack;\n    throw err;\n  }\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column-title/index.scss",
    "content": "@import '../../../../variables.scss';\n\n.fusion-ui-pro-table-column-title-sortter {\n  display: inline-block;\n  position: relative;\n  height: 14px;\n  width: var(--s-2, $s-2);\n  cursor: pointer;\n  top: -3px;\n  .fusion-ui-icon {\n    position: absolute;\n    left: 0;\n    transform: scale(0.8);\n  }\n  .fusion-ui-icon-triangle-up {\n    top: 0;\n  }\n  .fusion-ui-icon-triangle-down {\n    top: 7px;\n  }\n  &--desc {\n    .fusion-ui-icon-triangle-down {\n      color: var(--color-brand1-6, $color-brand1-6);\n    }\n  }\n  &--asc {\n    .fusion-ui-icon-triangle-up {\n      color: var(--color-brand1-6, $color-brand1-6);\n    }\n  }\n}\n\n.fusion-ui-pro-table-column-title-icons {\n  display: inline-flex;\n  flex-direction: row;\n  gap: var(--s-2, $s-2);\n  margin-left: var(--s-2, $s-2);\n  color: var(--color-text1-2, $color-text1-2);\n  align-items: center;\n}\n.fusion-ui-pro-table-column-title-filter {\n  cursor: pointer;\n  color: var(--color-text1-2, $color-text1-2);\n  &--active {\n    color: var(--color-brand1-6, $color-brand1-6);\n  }\n}\n\n.fusion-ui-pro-table-column-title-filter-panel {\n  display: flex;\n  flex-direction: column;\n  background-color: var(--color-white, $color-white);\n  box-shadow: var(--shadow-2-down, $shadow-2-down);\n  border-radius: var(--corner-2, $corner-2);\n  width: calc(var(--s-1, 4) * 60);\n\n  &__bd {\n    display: flex;\n    flex-direction: column;\n    gap: var(--s-2, $s-2);\n    align-items: stretch;\n    padding: var(--s-3 $s-4, $s-3 $s-4);\n  }\n  &__ft {\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    align-items: center;\n    gap: var(--s-2, $s-2);\n    border-top: var(--line-1 solid $color-line1-1, $line-1 solid $color-line1-1);\n    padding: var(--s-2 $s-4, $s-2 $s-4);\n  }\n  &__segment {\n    // margin-bottom: var(--s-2, $s-2);\n    display: flex;\n    flex-direction: column;\n    align-items: stretch;\n  }\n  &__input {\n    // margin-bottom: var(--s-2, $s-2);\n  }\n  &__menu {\n    > .fusion-ui-menu.fusion-ui-ver {\n      padding: 0;\n    }\n    .fusion-ui-menu-header {\n      line-height: var(--s-7, $s-7);\n    }\n    > .fusion-ui-menu.fusion-ui-menu.fusion-ui-ver {\n      padding: 0 !important;\n      > .fusion-ui-menu-content {\n        margin: 0 -12px;\n      }\n      .fusion-ui-menu-item {\n        padding: 0 12px 0 12px;\n      }\n    }\n  }\n}\n\n.fusion-ui-pro-table-column-title {\n  display: inline-flex;\n  flex-direction: row;\n  align-items: center;\n  // white-space: nowrap;\n  &--wrap {\n    white-space: normal;\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column-title/index.tsx",
    "content": "import * as React from 'react';\nimport { ProTableColumnProps } from '../../types';\nimport { ProTableColumnTitleFilter } from './pro-table-column-title-filter';\nimport { ProTableColumnTitleSortter } from './pro-table-column-title-sortter';\n\nimport { Balloon } from '@alifd/next';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport { ProTableColumnsFilterContext } from '../../contexts/pro-table-columns-filters-context';\nimport { CellLabel } from '../pro-table-cell/cell-label';\n\nconst { Tooltip } = Balloon;\n\ntype ProTableColumnTitlePropsKey =\n  | 'sortable'\n  | 'sortDirections'\n  | 'filters'\n  | 'filterMode'\n  | 'lock'\n  | 'searchable'\n  | 'isImmediate'\n  | 'dataIndex'\n  | 'explanation'\n  | 'cellTooltipMode';\n\nexport type ProTableColumnTitleProps = Pick<ProTableColumnProps, ProTableColumnTitlePropsKey>;\n\nexport const ProTableColumnTitle: React.FC<ProTableColumnTitleProps> = ({\n  dataIndex,\n  sortable,\n  sortDirections,\n  filters,\n  filterMode,\n  searchable,\n  explanation,\n  isImmediate,\n  cellTooltipMode,\n  lock,\n  children,\n}) => {\n  const showFilter = searchable || !!filters;\n  const columnFilters = React.useContext(ProTableColumnsFilterContext);\n\n  return (\n    <div className=\"fusion-ui-pro-table-column-title\">\n      <CellLabel toolTipMode={cellTooltipMode === 'ellipsis' ? 'always' : cellTooltipMode}>\n        {children}\n      </CellLabel>\n      {(explanation || showFilter || sortable) && (\n        <div className=\"fusion-ui-pro-table-column-title-icons\">\n          {explanation && (\n            <Tooltip trigger={<CustomIcon type=\"ic_error2\" size={14} />} align=\"bl\">\n              {explanation}\n            </Tooltip>\n          )}\n          {!showFilter && sortable && (\n            <ProTableColumnTitleSortter\n              onChange={(val) => columnFilters.setColumnSort(dataIndex, val)}\n              value={columnFilters.getColumnSort(dataIndex)}\n              sortDirections={sortDirections}\n            />\n          )}\n          {showFilter && (\n            <ProTableColumnTitleFilter\n              sortable={sortable}\n              lock={lock}\n              searchable={searchable}\n              filters={filters}\n              filterMode={filterMode}\n              isImmediate={isImmediate}\n              columnFilters={columnFilters}\n              dataIndex={dataIndex}\n              iconType={searchable && !sortable && !filters ? 'search' : undefined}\n            />\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\n\nProTableColumnTitle.displayName = 'ProTableColumnTitle';\nProTableColumnTitle.defaultProps = {};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column-title/pro-table-column-title-filter-panel.tsx",
    "content": "import * as React from 'react';\nimport { Segment } from '@/components/segment';\nimport { Button, Input } from '@alifd/next';\nimport { Menu, MenuProps } from '@/components/menu';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport { useMemo } from 'react';\nimport is from '@sindresorhus/is';\nimport { SortValue } from '../../types';\nimport { InputProps } from '@alifd/next/types/input';\nimport { useFiledState } from '@/utils/hooks/useFiledState';\nimport { useI18nBundle } from '@/provider';\nimport { ProTableColumnsFilterValue } from '../../contexts/pro-table-columns-filters-context';\nimport { useDataSource } from '@/utils/dataSource/hooks';\nimport { dataSourceToMenuDataSource } from '@/utils/dataSource';\nimport { AsyncDataSource } from '@/types';\n\nexport interface ProTableColumnFilterPanelProps {\n  sortable?: boolean;\n  sortDirections?: SortValue[];\n  searchable?: boolean;\n  filters?: FilterMenuProps['dataSource'];\n  filterMode?: FilterMenuProps['selectMode'];\n  filterMenuProps?: FilterMenuProps;\n  onClose?: () => void;\n  lock?: boolean | string;\n  dataIndex: string;\n  columnFilters: ProTableColumnsFilterValue;\n  /**\n   * 是否是即时生效\n   */\n  isImmediate?: boolean;\n  rtl?: boolean;\n}\n\nexport const ProTableColumnTitleFilterPanel: React.FC<ProTableColumnFilterPanelProps> = ({\n  sortable,\n  searchable,\n  filters,\n  filterMode,\n  filterMenuProps,\n  onClose,\n  columnFilters,\n  isImmediate,\n  dataIndex,\n  // rtl,\n}) => {\n  const i18nBundle = useI18nBundle('ProTable');\n  const showFooter = filters || sortable;\n  const [sort, setSort] = useFiledState(\n    {\n      value: columnFilters.getColumnSort(dataIndex),\n      onChange: (val) => {\n        if (isImmediate) {\n          columnFilters.setColumnSort(dataIndex, val);\n        }\n      },\n    },\n    isImmediate,\n  );\n\n  const [keywords, setKeywords] = useFiledState(\n    {\n      value: columnFilters.getColumnKeywords(dataIndex),\n      onChange: (val) => {\n        if (isImmediate) {\n          columnFilters.setColumnKeywords(dataIndex, val, true);\n        }\n      },\n    },\n    isImmediate,\n  );\n\n  const [selectedKeys, setSelectedKeys] = useFiledState(\n    {\n      value: columnFilters.getColumnSelectedKeys(dataIndex),\n      onChange: (val) => {\n        if (isImmediate) {\n          columnFilters.setColumnSelectedKeys(dataIndex, val, true);\n        }\n      },\n    },\n    isImmediate,\n  );\n  return (\n    <div className=\"fusion-ui-pro-table-column-title-filter-panel\">\n      <div className=\"fusion-ui-pro-table-column-title-filter-panel__bd\">\n        {sortable && (\n          <div className=\"fusion-ui-pro-table-column-title-filter-panel__segment\">\n            <Segment\n              value={sort}\n              dataSource={[\n                { label: i18nBundle.columnTitleFilterPanelAsc, value: 'asc' },\n                { label: i18nBundle.columnTitleFilterPanelDesc, value: 'desc' },\n              ]}\n              onChange={setSort}\n              fullWidth\n            />\n          </div>\n        )}\n        {searchable && (\n          <div className=\"fusion-ui-pro-table-column-title-filter-panel__input\">\n            <SearchInput\n              value={keywords}\n              autoFocus\n              onChange={setKeywords}\n              placeholder={i18nBundle.columnTitleFilterPanelSearchPlaceholder}\n            />\n          </div>\n        )}\n        {filters && (\n          <div className=\"fusion-ui-pro-table-column-title-filter-panel__menu\">\n            <FilterMenu\n              dataSource={filters}\n              selectMode={filterMode}\n              selectedKeys={selectedKeys}\n              onSelect={setSelectedKeys}\n              {...filterMenuProps}\n            />\n          </div>\n        )}\n      </div>\n      {showFooter && (\n        <div className=\"fusion-ui-pro-table-column-title-filter-panel__ft\">\n          <Button\n            size=\"small\"\n            onClick={() => {\n              setSort('default');\n              setKeywords('');\n              setSelectedKeys([]);\n            }}\n          >\n            {i18nBundle.columnTitleFilterPanelReset}\n          </Button>\n          {!isImmediate && (\n            <Button\n              size=\"small\"\n              type=\"primary\"\n              onClick={() => {\n                // 提交状态\n                columnFilters.setColumnSort(dataIndex, sort);\n                columnFilters.setColumnKeywords(dataIndex, keywords, false);\n                columnFilters.setColumnSelectedKeys(dataIndex, selectedKeys, false);\n                onClose();\n              }}\n            >\n              {i18nBundle.columnTitleFilterPanelOk}\n            </Button>\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\n\nProTableColumnTitleFilterPanel.defaultProps = {\n  onClose: () => {},\n  isImmediate: true,\n};\n\ninterface FilterMenuProps extends Omit<MenuProps, 'dataSource'> {\n  dataSource?: AsyncDataSource;\n}\nconst FilterMenu: React.FC<FilterMenuProps> = ({ dataSource, ...otherProps }) => {\n  const [keywords, setKeywords] = React.useState<string>();\n\n  const { data, loading, error } = useDataSource({ dataSource });\n  const menuDataSource = useMemo(\n    () => (is.array(data) ? dataSourceToMenuDataSource(data) : []),\n    [data],\n  );\n\n  const filterDataSource = React.useMemo(() => {\n    if (!keywords) {\n      return menuDataSource;\n    }\n    return menuDataSource.filter(\n      (vo) => is.string(vo.label) && vo.label.toLowerCase().indexOf(keywords) > -1,\n    );\n  }, [menuDataSource, keywords]);\n  const i18nBundle = useI18nBundle('ProTable');\n  return (\n    <Menu\n      embeddable\n      header={\n        <SearchInput\n          onChange={(val) => setKeywords(val.trim().toLowerCase())}\n          placeholder={i18nBundle.columnTitleFilterPanelMenuSearchPlaceholder}\n        />\n      }\n      style={{\n        maxHeight: 'auto',\n      }}\n      loading={loading}\n      error={error?.message}\n      {...otherProps}\n      dataSource={filterDataSource}\n    />\n  );\n};\n\nconst SearchInput: React.FC<InputProps> = (props) => (\n  <Input\n    innerBefore={<CustomIcon type=\"search\" size=\"xs\" style={{ margin: 4, marginRight: 0 }} />}\n    hasClear\n    style={{\n      width: '100%',\n    }}\n    {...props}\n  />\n);\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column-title/pro-table-column-title-filter.tsx",
    "content": "import * as React from 'react';\nimport { Dropdown } from '@alifd/next';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport cns from 'classnames';\nimport {\n  ProTableColumnTitleFilterPanel,\n  ProTableColumnFilterPanelProps,\n} from './pro-table-column-title-filter-panel';\nimport { ProTableContext } from '@/components/pro-table/contexts/pro-table-context';\n\nexport interface ProTableColumnTitleFilterProps\n  extends Omit<ProTableColumnFilterPanelProps, 'value' | 'defaultValue' | 'onChange'> {\n  iconType?: string;\n}\n\n/**\n * ProTable 列标题\n */\nexport const ProTableColumnTitleFilter: React.FC<ProTableColumnTitleFilterProps> = ({\n  rtl,\n  iconType,\n  columnFilters,\n  dataIndex,\n  ...others\n}) => {\n  const [visible, setVisible] = React.useState(false);\n\n  const hasValue = React.useMemo(() => {\n    return !!(\n      columnFilters.getColumnKeywords(dataIndex) ||\n      columnFilters.getColumnSort(dataIndex) ||\n      columnFilters.getColumnSelectedKeys(dataIndex)?.length > 0\n    );\n  }, [columnFilters, dataIndex]);\n\n  const { tableBeforeContainer } = React.useContext(ProTableContext);\n  const triggerRef = React.useRef();\n  const trigger = (\n    <span style={{ lineHeight: '100%' }} role=\"button\" tabIndex={0} ref={triggerRef}>\n      <CustomIcon\n        type={iconType || 'table-filter'}\n        size={14}\n        style={{\n          position: 'relative',\n          top: iconType ? 0 : -1,\n        }}\n        className={cns('fusion-ui-pro-table-column-title-filter', {\n          'fusion-ui-pro-table-column-title-filter--active': visible || hasValue,\n        })}\n      />\n    </span>\n  );\n  return (\n    <Dropdown\n      visible={visible}\n      onVisibleChange={(val) => {\n        columnFilters.setFilterPanelVisible(val);\n        setVisible(val);\n      }}\n      offset={[0, 8]}\n      trigger={trigger}\n      triggerType=\"click\"\n      rtl={rtl}\n      container={tableBeforeContainer.current}\n    >\n      <ProTableColumnTitleFilterPanel\n        rtl={rtl}\n        dataIndex={dataIndex}\n        columnFilters={columnFilters}\n        onClose={() => setVisible(false)}\n        {...others}\n      />\n    </Dropdown>\n  );\n};\nProTableColumnTitleFilter.displayName = 'ProTableColumnTitleFilter';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column-title/pro-table-column-title-sortter.tsx",
    "content": "import * as React from 'react';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport { SortValue } from '../../types';\nimport cns from 'classnames';\n\nexport interface ProTableColumnTitleSortterProps {\n  value?: SortValue;\n  className?: string;\n  sortDirections?: SortValue[];\n  onChange: (val: SortValue) => void;\n}\nexport const ProTableColumnTitleSortter: React.FC<ProTableColumnTitleSortterProps> = ({\n  sortDirections = ['desc', 'asc', 'default'],\n  value,\n  onChange,\n}) => {\n  const val = value || 'default';\n  return (\n    <div\n      className={cns(\n        'fusion-ui-pro-table-column-title-sortter',\n        `fusion-ui-pro-table-column-title-sortter--${val}`,\n      )}\n      onClick={() => {\n        const index = sortDirections.indexOf(val);\n        onChange(sortDirections[(index + 1) % sortDirections.length]);\n      }}\n    >\n      <CustomIcon type=\"triangle-up\" size={12} />\n      <CustomIcon type=\"triangle-down\" size={12} />\n    </div>\n  );\n};\nProTableColumnTitleSortter.displayName = 'ProTableColumnTitleSortter';\nProTableColumnTitleSortter.defaultProps = {\n  sortDirections: ['desc', 'asc', 'default'],\n  value: 'default',\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-column-title/utils.ts",
    "content": "// export const filterTree = () => {}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-compact-button.tsx",
    "content": "import * as React from 'react';\nimport { FC, useContext } from 'react';\nimport { useI18nBundle } from '@/provider';\nimport { ProTableSettingContext } from '../contexts/pro-table-setting-context';\nimport { ToggleIcon } from '@/components/toggle-icon';\n\n/**\n * 表格密度调整按钮\n */\nexport const ProTableCompactButton: FC = () => {\n  const i18nBundle = useI18nBundle('ProTable');\n  const { tableSetting, setTableSetting } = useContext(ProTableSettingContext);\n\n  const onSizeChange = () => {\n    setTableSetting((oldState) => ({\n      ...oldState,\n      size: oldState.size === 'small' ? 'medium' : 'small',\n    }));\n  };\n  return (\n    <ToggleIcon\n      title={\n        tableSetting.size === 'small'\n          ? i18nBundle.compactButtonNormalTooltip\n          : i18nBundle.compactButtonCompactTooltip\n      }\n      type={tableSetting.size === 'small' ? 'table-wide' : 'table-narrow'}\n      onClick={onSizeChange}\n    />\n  );\n};\nProTableCompactButton.displayName = 'ProTableCompactButton';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-fullscreen-button.tsx",
    "content": "import * as React from 'react';\nimport { useFullscreen } from 'ahooks';\nimport is from '@sindresorhus/is';\nimport { useI18nBundle } from '@/provider';\nimport { ToggleIcon } from '@/components/toggle-icon';\nimport { ProTableContext } from '../contexts/pro-table-context';\n\ninterface ProTableFullscreenButtonProps {\n  /**\n   * 全屏状态变化回调\n   */\n  onFullscreenStateChange?: (fullscreenState: boolean) => void;\n}\n\n/**\n * 表格全屏设置按钮\n */\nexport const ProTableFullscreenButton: React.FC<ProTableFullscreenButtonProps> = ({\n  onFullscreenStateChange,\n}) => {\n  const i18nBundle = useI18nBundle('ProTable');\n  const { proTableContainer } = React.useContext(ProTableContext);\n\n  const [isFullscreen, { toggleFull }] = useFullscreen(proTableContainer, {\n    onFull: () => {\n      const ele = proTableContainer.current;\n      if (ele) {\n        ele.classList.add('fullscreen');\n      }\n      if (is.function_(onFullscreenStateChange)) {\n        onFullscreenStateChange(true);\n      }\n    },\n    onExitFull: () => {\n      const ele = proTableContainer.current;\n      if (ele) {\n        ele.classList.remove('fullscreen');\n      }\n\n      if (is.function_(onFullscreenStateChange)) {\n        onFullscreenStateChange(false);\n      }\n    },\n  });\n\n  return (\n    <ToggleIcon\n      title={\n        isFullscreen\n          ? i18nBundle.fullscreenButtonCloseTooltip\n          : i18nBundle.fullscreenButtonOpenTooltip\n      }\n      type={isFullscreen ? 'table-disfullscreen' : 'table-fullscreen'}\n      onClick={toggleFull}\n    />\n  );\n};\n\nProTableFullscreenButton.displayName = 'ProTableFullscreenButton';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-setting-button/index.scss",
    "content": "@import '../../../../variables.scss';\n\n.fusion-ui-pro-table-setting-panel {\n  background: var(--color-white, $color-white);\n  padding: 0 $s-2;\n\n  border-radius: var(--corner-1, $corner-1);\n  box-shadow: var(--shadow-2-down, $shadow-2-down);\n\n  max-height: 400px;\n  overflow-y: auto;\n  width: 240px;\n  box-sizing: border-box;\n}\n\n.fusion-ui-pro-table-setting-block {\n  display: flex;\n  flex-direction: column;\n  &:first-child {\n    margin-top: var(--s-4, $s-4);\n  }\n  &:last-child {\n    margin-bottom: var(--s-4, $s-4);\n  }\n  &__title {\n    font-size: var(--font-size-body-1, $font-size-body-1);\n    color: var(--color-text1-1, $color-text1-1);\n    margin-left: var(--s-2, $s-2);\n    padding: var(--s-2 0, $s-2 0);\n    position: sticky;\n    background-color: var(--color-white, $color-white);\n    top: 0;\n    bottom: 0;\n    z-index: 1;\n  }\n}\n.fusion-ui-pro-table-setting-item {\n  display: flex;\n  flex-direction: column;\n\n  .fusion-ui-checkbox-label {\n    margin-left: var(--s-2, $s-2);\n  }\n  &__bd {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    justify-content: space-between;\n    box-sizing: border-box;\n\n    padding: var(--s-2, $s-2);\n    font-size: var(--font-size-body-1, $font-size-body-1);\n    border-radius: var(--corner-2, $corner-2);\n    &:hover {\n      background-color: var(--color-fill1-1, $color-fill1-1);\n    }\n  }\n  &__icons {\n    display: flex;\n    gap: var(--s-3, $s-3);\n    flex-direction: row;\n    align-items: center;\n  }\n  &__drag,\n  &__icon {\n    color: var(--color-text1-2, $color-text1-2);\n    cursor: pointer;\n    &:hover {\n      color: var(--color-brand1-6, $color-brand1-6);\n    }\n  }\n  &__icon {\n    display: none;\n  }\n  &__drag {\n    cursor: move;\n  }\n\n  &:hover {\n    .fusion-ui-pro-table-setting-item__icon {\n      display: block;\n    }\n  }\n  .fusion-ui-pro-table-setting-item {\n    padding-left: var(--s-4, $s-4);\n  }\n}\n\n// .sort-item {\n//   margin-bottom: 11px;\n//   .fusion-ui-checkbox-wrapper.sort-checkbox {\n//     white-space: nowrap;\n//     max-width: calc(100% - 16px - 20px);\n\n//     .fusion-ui-checkbox-label {\n//       white-space: nowrap;\n//       text-overflow: ellipsis;\n//       overflow: hidden;\n//     }\n//   }\n\n//   .column-drag-handle {\n//     display: block;\n//     cursor: move;\n//     color: var(--color-text1-2, $color-text1-2);\n//   }\n// }\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-setting-button/index.tsx",
    "content": "import * as React from 'react';\nimport { useRef } from 'react';\nimport { OverlayProps } from '@alifd/next/types/overlay/index';\nimport { ProTableSettingOverlay } from './pro-table-setting-overlay';\nimport { useI18nBundle } from '@/provider';\nimport { ToggleIcon } from '@/components/toggle-icon';\nimport { ProTableColumnsSettingContext } from '@/components/pro-table/contexts/pro-table-columns-setting-context';\n\nexport interface ProTableSettingButtonProps {\n  /**\n   * 排序窗口属性，属性参考 Fusion Overlay\n   */\n  sortOverlayProps?: Partial<OverlayProps>;\n}\n\nconst settingKeys = new Set(['sortRank', 'hidden', 'lock']);\nexport const ProTableSettingButton: React.FC<ProTableSettingButtonProps> = ({\n  sortOverlayProps,\n}) => {\n  const [visible, setVisible] = React.useState(false);\n  const { columnsSetting } = React.useContext(ProTableColumnsSettingContext);\n  const buttonRef = useRef();\n  const i18nBundle = useI18nBundle('ProTable');\n  const hasSetting = React.useMemo(\n    () =>\n      Object.values(columnsSetting).some(\n        (vo) => vo && Object.keys(vo).some((k) => settingKeys.has(k)),\n      ),\n    [columnsSetting],\n  );\n  return (\n    <div>\n      <ToggleIcon\n        title={i18nBundle.settingButtonTooltip}\n        type=\"table-setting\"\n        onClick={() => setVisible(!visible)}\n        active={visible || hasSetting}\n        ref={buttonRef}\n      />\n      {visible && (\n        <ProTableSettingOverlay\n          visible={visible}\n          onRequestClose={(type) => type === 'docClick' && setVisible(false)}\n          target={buttonRef.current}\n          safeNode={buttonRef.current}\n          offset={[8, 8]}\n          {...sortOverlayProps}\n        />\n      )}\n    </div>\n  );\n};\nProTableSettingButton.displayName = 'ProTableSettingButton';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-setting-button/pro-table-setting-overlay.tsx",
    "content": "import * as React from 'react';\nimport cx from 'classnames';\nimport { Overlay } from '@alifd/next';\nimport { OverlayProps } from '@alifd/next/types/overlay/index';\nimport { ProTableSettingSortableList } from './pro-table-setting-sortable-list';\nimport { ProTableSettingItem, ProTableSettingMenuItem } from './types';\nimport { ProTableColumnsSettingContext } from '@/components/pro-table/contexts/pro-table-columns-setting-context';\nimport { ProTableColumnProps } from '@/components/pro-table/types';\nimport { getColumnKey } from '../pro-table-base/utils';\nimport { ProTableContext } from '@/components/pro-table/contexts/pro-table-context';\nimport is from '@sindresorhus/is';\nimport { ProTableColumnsContext } from '@/components/pro-table/contexts/pro-table-columns-context';\n\nexport type ProTableSettingOverlayActionType = 'init' | 'input' | 'resize';\nexport type ProTableSettingOverlayValue = Record<string, ProTableSettingItem>;\n\nexport const ProTableSettingOverlay: React.FC<OverlayProps> = (props) => {\n  const { columnsSetting, updateColumnSetting, updateColumnsSetting } = React.useContext(\n    ProTableColumnsSettingContext,\n  );\n  const { tableBeforeContainer } = React.useContext(ProTableContext);\n  const { columns, columnKey } = React.useContext(ProTableColumnsContext);\n\n  const onToggleShow = React.useCallback(\n    (item: ProTableSettingMenuItem, checked: boolean) => {\n      updateColumnSetting(item.id, () => ({ hidden: !checked }), 'input');\n    },\n    [updateColumnSetting],\n  );\n  const onLock = React.useCallback(\n    (id: string, lock: boolean | 'left' | 'right') => {\n      updateColumnSetting(id, () => ({ lock }), 'input');\n    },\n    [updateColumnSetting],\n  );\n\n  const onSortEnd = React.useCallback(\n    (oldIndex: number, newIndex: number, ids: string[]) => {\n      ids.splice(newIndex, 0, ...ids.splice(oldIndex, 1)); // 当前项移至新位置\n      // 按新顺序更新sortRank\n      updateColumnsSetting(\n        ids.reduce(\n          (p, key, sortRank) => ({\n            ...p,\n            [key]: {\n              sortRank,\n            },\n          }),\n          {},\n        ),\n        'input',\n      );\n    },\n    [updateColumnsSetting],\n  );\n\n  const dataSource = React.useMemo(() => {\n    const formatItems = (items: ProTableColumnProps[]): ProTableSettingMenuItem[] =>\n      items\n        .map((vo, index) => {\n          const id = getColumnKey(vo, columnKey);\n\n          return {\n            id,\n            title: vo.title || vo.group,\n            defaultSortRank: index,\n            defaultLock: vo.lock,\n            children:\n              vo.group && is.array(vo.children) && vo.children.length > 0\n                ? formatItems(vo.children)\n                : undefined,\n          };\n        })\n        .filter((vo) => vo.id);\n    return formatItems(columns || []);\n  }, [columnKey, columns]);\n  const dataSourceGroup = React.useMemo(() => {\n    const leftLock = [];\n    const rightLock = [];\n    const noLock = [];\n    dataSource.forEach((vo) => {\n      const settingLock = columnsSetting[vo.id]?.lock;\n      const lock = is.undefined(settingLock) ? vo.defaultLock : settingLock;\n      if (lock === 'left' || lock === true) {\n        leftLock.push(vo);\n      } else if (lock === 'right') {\n        rightLock.push(vo);\n      } else {\n        noLock.push(vo);\n      }\n    });\n    return [\n      {\n        title: '固定在左侧',\n        key: 'left',\n        lock: 'left',\n        dataSource: leftLock,\n      },\n      {\n        title: '不固定',\n        key: 'no',\n        lock: false,\n        dataSource: noLock,\n      },\n      {\n        title: '固定在右侧',\n        key: 'right',\n        lock: 'right',\n        dataSource: rightLock,\n      },\n    ].filter((vo) => vo.dataSource.length > 0);\n  }, [dataSource, columnsSetting]);\n\n  return (\n    <Overlay\n      align=\"tr br\"\n      container={tableBeforeContainer.current}\n      {...props}\n      className={cx('fusion-ui-pro-table-setting-panel', props?.className)}\n    >\n      <div>\n        {dataSourceGroup.map((vo) => (\n          <div className=\"fusion-ui-pro-table-setting-block\" key={vo.key}>\n            <div className=\"fusion-ui-pro-table-setting-block__title\">{vo.title}</div>\n            <ProTableSettingSortableList\n              dataSource={vo.dataSource}\n              lock={vo.lock}\n              setting={columnsSetting}\n              onLock={onLock}\n              onSortEnd={onSortEnd}\n              onToggleShow={onToggleShow}\n            />\n          </div>\n        ))}\n      </div>\n    </Overlay>\n  );\n};\nProTableSettingOverlay.displayName = 'ProTableSettingOverlay';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-setting-button/pro-table-setting-sortable-list.tsx",
    "content": "import * as React from 'react';\nimport { ReactSortable } from 'react-sortablejs';\nimport { Checkbox, Balloon } from '@alifd/next';\nimport { CustomIcon } from '@/components/toggle-icon';\nimport is from '@sindresorhus/is';\nimport { ProTableSettingItem, ProTableSettingMenuItem } from './types';\nimport { useI18nBundle } from '@/provider';\n\nconst { Tooltip } = Balloon;\nexport interface ProTableSettingSortableListProps {\n  dataSource: ProTableSettingMenuItem[];\n  onToggleShow: (item: ProTableSettingMenuItem, checked: boolean) => void;\n  onSortEnd?: (oldIndex: number, newIndex: number, keys: string[]) => void;\n  onLock?: (id: string, lock: boolean | string) => void;\n  lock?: boolean | string;\n  parentHidden?: boolean;\n  setting: Record<string, ProTableSettingItem>;\n}\n\nconst getSortRank = (\n  item: ProTableSettingMenuItem,\n  columnsSetting: Record<string, ProTableSettingItem>,\n) => {\n  const settingSortRank = columnsSetting[item.id]?.sortRank;\n  return is.undefined(settingSortRank) ? item.defaultSortRank : settingSortRank;\n};\nexport const ProTableSettingSortableList: React.FC<ProTableSettingSortableListProps> = ({\n  dataSource,\n  onToggleShow,\n  onSortEnd,\n  onLock,\n  lock,\n  setting,\n  parentHidden,\n}) => {\n  const i18nBundle = useI18nBundle('ProTable');\n  const items = React.useMemo(\n    () =>\n      dataSource.sort((aItem, bItem) => getSortRank(aItem, setting) - getSortRank(bItem, setting)),\n    [dataSource, setting],\n  );\n\n  return (\n    <ReactSortable\n      handle=\".fusion-ui-pro-table-setting-item__drag\"\n      onEnd={(e) =>\n        is.function_(onSortEnd) &&\n        onSortEnd(\n          e.oldIndex,\n          e.newIndex,\n          items.map((vo) => vo.id),\n        )\n      }\n      swap\n      list={items}\n      setList={() => {}}\n    >\n      {items.map((item) => (\n        <div className=\"fusion-ui-pro-table-setting-item\" key={item.id}>\n          <div className=\"fusion-ui-pro-table-setting-item__bd\">\n            <Checkbox\n              className=\"sort-checkbox\"\n              checked={!setting[item.id]?.hidden}\n              disabled={parentHidden}\n              onChange={(checked) => onToggleShow(item, checked)}\n            >\n              {item.title}\n            </Checkbox>\n            <div className=\"fusion-ui-pro-table-setting-item__icons\">\n              {onLock && (\n                <>\n                  {lock !== 'left' && (\n                    <Tooltip\n                      trigger={\n                        <CustomIcon\n                          className=\"fusion-ui-pro-table-setting-item__icon\"\n                          type=\"arrow-top\"\n                          size=\"xs\"\n                          onClick={() => onLock(item.id, 'left')}\n                        />\n                      }\n                    >\n                      {i18nBundle.settingButtonLockLeft}\n                    </Tooltip>\n                  )}\n                  {lock && (\n                    <Tooltip\n                      trigger={\n                        <CustomIcon\n                          className=\"fusion-ui-pro-table-setting-item__icon\"\n                          type=\"arrows-collapse\"\n                          size=\"xs\"\n                          onClick={() => onLock(item.id, false)}\n                        />\n                      }\n                    >\n                      {i18nBundle.settingButtonLockCancel}\n                    </Tooltip>\n                  )}\n                  {lock !== 'right' && (\n                    <Tooltip\n                      trigger={\n                        <CustomIcon\n                          className=\"fusion-ui-pro-table-setting-item__icon\"\n                          type=\"arrow-bottom\"\n                          size=\"xs\"\n                          onClick={() => onLock(item.id, 'right')}\n                        />\n                      }\n                    >\n                      {i18nBundle.settingButtonLockRight}\n                    </Tooltip>\n                  )}\n                </>\n              )}\n              <CustomIcon\n                className=\"fusion-ui-pro-table-setting-item__drag\"\n                type=\"drag\"\n                size=\"xs\"\n              />\n            </div>\n          </div>\n          {is.array(item.children) && item.children.length > 0 && (\n            <ProTableSettingSortableList\n              dataSource={item.children}\n              setting={setting}\n              onToggleShow={onToggleShow}\n              onSortEnd={onSortEnd}\n              parentHidden={parentHidden || setting[item.id]?.hidden}\n            />\n          )}\n        </div>\n      ))}\n    </ReactSortable>\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-setting-button/types.ts",
    "content": "export interface ProTableSettingItem {\n  /**\n   * 排序排名，顺序从小到大\n   */\n  sortRank?: number;\n  /**\n   * 是否隐藏\n   * @default false\n   */\n  hidden?: boolean;\n  /**\n   * 拖拽宽度\n   */\n  width?: number | string;\n  /**\n   * 锁列\n   */\n  lock?: boolean | string;\n}\n\nexport type ProTableSettingActionType = 'init' | 'input' | 'resize';\n\nexport interface ProTableSettingMenuItem {\n  children?: ProTableSettingMenuItem[];\n  title?: React.ReactNode;\n  defaultSortRank?: number;\n  defaultLock?: boolean | string;\n  id: string;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-slot.tsx",
    "content": "import * as React from 'react';\nimport { ReactNode, PropsWithChildren, FC, isValidElement, ReactElement } from 'react';\n\n/** 运行的槽位 */\nexport type ProTableSlotPosition =\n  | 'actionBarLeft'\n  | 'actionBarRight'\n  | 'actionBarBefore'\n  | 'actionBarAfter'\n  | 'table'\n  | 'tableAfter';\n/** 默认的槽位 */\nconst defaultPosition: ProTableSlotPosition = 'table';\n\nexport interface ProTableSlotProps {\n  /**\n   * 插入槽位\n   * - actionBarLeft 操作条左侧\n   * - actionBarRight 操作条右侧\n   * - actionBarBefore 操作条前\n   * - actionBarAfter 操作条后\n   * - table 表格内\n   */\n  position: ProTableSlotPosition;\n}\nexport const ProTableSlot: FC<ProTableSlotProps> = ({ children }) => <>{children}</>;\nProTableSlot.displayName = 'ProTableSlot';\n\nconst isProTableSlot = (element: unknown): element is ReactElement<ProTableSlotProps> =>\n  isValidElement(element) &&\n  (element.type as typeof ProTableSlot)?.displayName === ProTableSlot.displayName;\n\nexport interface ProTableSlotsOptions {\n  /** 操作条左侧槽位 */\n  actionBarLeft?: ReactNode;\n  /** 操作条右侧槽位 */\n  actionBarRight?: ReactNode;\n  /** 操作条前槽位 */\n  actionBarBefore?: ReactNode;\n  /** 操作条后槽位 */\n  actionBarAfter?: ReactNode;\n  /** 表格内槽位 */\n  table?: ReactNode;\n  tableAfter?: ReactNode;\n}\nexport const useProTableSlots = ({\n  children,\n  ...defaultSlots\n}: PropsWithChildren<ProTableSlotsOptions>) => {\n  const slots: Partial<Record<ProTableSlotPosition, ReactNode[]>> = {};\n  const pushSlot = (position: ProTableSlotPosition, node: ReactNode) => {\n    if (!node) {\n      return;\n    }\n    if (position in slots) {\n      slots[position].push(node);\n    } else {\n      slots[position] = [node];\n    }\n  };\n  Object.keys(defaultSlots).forEach((position: ProTableSlotPosition) =>\n    pushSlot(position, defaultSlots[position]),\n  );\n  React.Children.forEach(children, (vo) => {\n    if (!isProTableSlot(vo)) {\n      pushSlot(defaultPosition, vo);\n      return;\n    }\n    pushSlot(vo.props.position, vo);\n  });\n  return slots;\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/components/pro-table-zebra-button.tsx",
    "content": "import * as React from 'react';\nimport { useContext, useCallback } from 'react';\nimport { useI18nBundle } from '@/provider';\nimport { ProTableSettingContext } from '../contexts/pro-table-setting-context';\nimport { ToggleIcon } from '@/components/toggle-icon';\n\n/**\n * 表格设置斑马线按钮\n */\nexport const ProTableZebraButton: React.FC = () => {\n  const { tableSetting, setTableSetting } = useContext(ProTableSettingContext);\n  const i18nBundle = useI18nBundle('ProTable');\n  const handleClick = useCallback(\n    () =>\n      setTableSetting((oldState) => ({\n        ...oldState,\n        isZebra: !oldState.isZebra,\n      })),\n    [setTableSetting],\n  );\n  return (\n    <ToggleIcon\n      title={\n        tableSetting.isZebra\n          ? i18nBundle.zebraButtonOpenTooltip\n          : i18nBundle.zebraButtonCloseTooltip\n      }\n      type={tableSetting.isZebra ? 'table-zebra' : 'table-zebra'}\n      active={tableSetting.isZebra}\n      onClick={handleClick}\n    />\n  );\n};\nProTableZebraButton.displayName = 'ProTableZebraButton';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/contexts/pro-table-columns-context.tsx",
    "content": "import { createContext, useMemo } from 'react';\nimport { ProTableBaseProps } from '../types';\n\nexport const useProTableColumnsValue = ({\n  columns = [],\n  columnKey = 'key',\n}: Pick<ProTableBaseProps, 'columns' | 'columnKey'>) => {\n  return useMemo(\n    () => ({\n      columns,\n      columnKey,\n    }),\n    [columnKey, columns],\n  );\n};\n\nexport type ProTableColumnsValue = ReturnType<typeof useProTableColumnsValue>;\nexport const ProTableColumnsContext = createContext<ProTableColumnsValue>({\n  columns: [],\n  columnKey: 'key',\n});\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/contexts/pro-table-columns-filters-context.tsx",
    "content": "import { emptyFn } from '@/utils/constants';\nimport { useFiledState } from '@/utils/hooks/useFiledState';\nimport is from '@sindresorhus/is';\nimport { useState, useMemo, useCallback, createContext } from 'react';\nimport { SortValue, ProTableBaseProps } from '../types';\n\ntype UseColumnsFilterOptions = Pick<\n  ProTableBaseProps,\n  'searchParams' | 'sort' | 'filterParams' | 'sortMode' | 'onSort' | 'onSearch' | 'onFilter'\n>;\n\nexport const useColumnsFilterValue = (options: UseColumnsFilterOptions) => {\n  const [sort, setSort] = useFiledState(\n    {\n      value: options.sort,\n      onChange: (sortMap: Record<string, SortValue>, dataIndex: string) => {\n        if (is.function_(options.onSort)) {\n          options.onSort(dataIndex, sortMap[dataIndex], sortMap);\n        }\n      },\n    },\n    !!options.sort,\n  );\n  const [filterParams, setFilterParams] = useFiledState(\n    {\n      value: options.filterParams,\n      onChange: options.onFilter,\n    },\n    !!options.filterParams,\n  );\n\n  const [searchParams, setSearchParams] = useFiledState(\n    {\n      value: options.searchParams,\n      onChange: options.onSearch,\n    },\n    !!options.filterParams,\n  );\n  /** 获取列的排序值 */\n  const getColumnSort = useCallback((dataIndex: string) => sort?.[dataIndex], [sort]);\n  /** 设置列的排序值 */\n  const setColumnSort = useCallback(\n    (dataIndex: string, val: SortValue) =>\n      setSort((oldVal) => {\n        const newVal = !val || val === 'default' ? undefined : val;\n        if (options.sortMode === 'single') {\n          return {\n            [dataIndex]: newVal,\n          };\n        }\n        return {\n          ...oldVal,\n          [dataIndex]: newVal,\n        };\n      }, dataIndex),\n    [setSort, options.sortMode],\n  );\n  /** 获取列的筛选值 */\n  const getColumnSelectedKeys = useCallback(\n    (dataIndex: string) => filterParams?.[dataIndex]?.selectedKeys,\n    [filterParams],\n  );\n  /** 设置列的筛选值 */\n  const setColumnSelectedKeys = useCallback(\n    (dataIndex: string, selectedKeys: string[], visible: boolean) =>\n      setFilterParams((oldVal) => ({\n        ...oldVal,\n        [dataIndex]:\n          selectedKeys?.length > 0\n            ? {\n                visible,\n                selectedKeys,\n              }\n            : undefined,\n      })),\n    [setFilterParams],\n  );\n  /** 获取列的关键字值 */\n  const getColumnKeywords = useCallback(\n    (dataIndex: string) => searchParams?.[dataIndex]?.keywords,\n    [searchParams],\n  );\n  /** 设置列的关键字值 */\n  const setColumnKeywords = useCallback(\n    (dataIndex: string, keywords: string, visible: boolean) =>\n      setSearchParams((oldVal) => ({\n        ...oldVal,\n        [dataIndex]: keywords\n          ? {\n              visible,\n              keywords,\n            }\n          : undefined,\n      })),\n    [setSearchParams],\n  );\n  /** 是否有过滤面板显示 */\n  const [filterPanelVisible, setFilterPanelVisible] = useState(false);\n  return useMemo(\n    () => ({\n      filterPanelVisible,\n      setFilterPanelVisible,\n      sort,\n      setSort,\n      filterParams,\n      setFilterParams,\n      searchParams,\n      setSearchParams,\n      getColumnSort,\n      getColumnSelectedKeys,\n      getColumnKeywords,\n      setColumnSort,\n      setColumnSelectedKeys,\n      setColumnKeywords,\n    }),\n    [\n      filterPanelVisible,\n      filterParams,\n      getColumnKeywords,\n      getColumnSelectedKeys,\n      getColumnSort,\n      searchParams,\n      setColumnKeywords,\n      setColumnSelectedKeys,\n      setColumnSort,\n      setFilterParams,\n      setSearchParams,\n      setSort,\n      sort,\n    ],\n  );\n};\nexport type ProTableColumnsFilterValue = ReturnType<typeof useColumnsFilterValue>;\nexport const ProTableColumnsFilterContext = createContext<ProTableColumnsFilterValue>({\n  filterPanelVisible: false,\n  setFilterPanelVisible: emptyFn,\n  filterParams: {},\n  getColumnKeywords: () => '',\n  getColumnSelectedKeys: () => [],\n  getColumnSort: () => 'default',\n  searchParams: {},\n  setFilterParams: emptyFn,\n  setSearchParams: emptyFn,\n  setSort: emptyFn,\n  sort: {},\n  setColumnSort: emptyFn,\n  setColumnSelectedKeys: emptyFn,\n  setColumnKeywords: emptyFn,\n});\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/contexts/pro-table-columns-setting-context.tsx",
    "content": "import { emptyFn } from '@/utils/constants';\nimport { useFiledState } from '@/utils/hooks/useFiledState';\nimport is from '@sindresorhus/is';\nimport { useMemo, useCallback, createContext } from 'react';\nimport { ProTableProps } from '../types';\nimport {\n  ProTableSettingActionType,\n  ProTableSettingItem,\n} from '../components/pro-table-setting-button/types';\n\nexport const useColumnsSettingValue = (\n  options: Pick<\n    ProTableProps,\n    'columnsSetting' | 'onColumnsSettingChange' | 'defaultColumnsSetting' | 'columns'\n  >,\n) => {\n  const [columnsSetting, setColumnsSetting] = useFiledState(\n    {\n      value: options.columnsSetting,\n      defaultValue: options.defaultColumnsSetting || {},\n      onChange: options.onColumnsSettingChange,\n    },\n    !!options.columnsSetting,\n  );\n  const updateColumnsSetting = useCallback(\n    (\n      newSetting:\n        | Record<string, Partial<ProTableSettingItem>>\n        | ((\n            oldVal: Record<string, ProTableSettingItem>,\n          ) => Record<string, Partial<ProTableSettingItem>>),\n      actionType: ProTableSettingActionType,\n    ) => {\n      setColumnsSetting((oldVal) => {\n        const val = is.function_(newSetting) ? newSetting(oldVal || {}) : newSetting;\n\n        return Object.keys(val).reduce(\n          (p, key) => ({\n            ...p,\n            [key]: {\n              ...p[key],\n              ...val[key],\n            },\n          }),\n          oldVal,\n        );\n      }, actionType);\n    },\n    [setColumnsSetting],\n  );\n  const updateColumnSetting = useCallback(\n    (\n      key: string,\n      newSetting:\n        | Partial<ProTableSettingItem>\n        | ((oldVal: ProTableSettingItem) => Partial<ProTableSettingItem>),\n      actionType: ProTableSettingActionType,\n    ) => {\n      updateColumnsSetting(\n        (oldVal) => ({\n          [key]: is.function_(newSetting) ? newSetting(oldVal[key] || {}) : newSetting,\n        }),\n        actionType,\n      );\n    },\n    [updateColumnsSetting],\n  );\n\n  const getColumnSetting = useCallback(\n    (key: string): ProTableSettingItem => columnsSetting[key] || {},\n    [columnsSetting],\n  );\n\n  return useMemo(\n    () => ({\n      columnsSetting,\n      setColumnsSetting,\n      updateColumnsSetting,\n      getColumnSetting,\n      updateColumnSetting,\n    }),\n    [\n      columnsSetting,\n      getColumnSetting,\n      setColumnsSetting,\n      updateColumnSetting,\n      updateColumnsSetting,\n    ],\n  );\n};\nexport type ProTableColumnsSettingValue = ReturnType<typeof useColumnsSettingValue>;\nexport const ProTableColumnsSettingContext = createContext<ProTableColumnsSettingValue>({\n  columnsSetting: {},\n  setColumnsSetting: emptyFn,\n  updateColumnSetting: emptyFn,\n  updateColumnsSetting: emptyFn,\n  getColumnSetting: () => ({}),\n});\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/contexts/pro-table-context.tsx",
    "content": "import { createContext, MutableRefObject, useMemo } from 'react';\n\nexport const useProTableValue = (options: {\n  tableBeforeContainer: MutableRefObject<HTMLElement>;\n  proTableContainer: MutableRefObject<HTMLElement>;\n  pageSize?: number;\n  total?: number;\n}) => {\n  const { proTableContainer, tableBeforeContainer, pageSize, total } = options;\n  return useMemo(\n    () => ({\n      proTableContainer,\n      tableBeforeContainer,\n      pageSize,\n      total,\n    }),\n    [proTableContainer, tableBeforeContainer, pageSize, total],\n  );\n};\n\nexport type ProTableValue = ReturnType<typeof useProTableValue>;\nexport const ProTableContext = createContext<ProTableValue>({\n  proTableContainer: { current: document.body },\n  tableBeforeContainer: { current: document.body },\n  pageSize: undefined,\n  total: undefined,\n});\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/contexts/pro-table-pagination-context.tsx",
    "content": "import { createContext, useMemo } from 'react';\nimport { ProTableProps, ProTablePaginationInstance } from '../types';\nimport { useFiledState } from '../../utils/hooks/useFiledState';\nimport { emptyFn } from '../../utils/constants';\n\nexport const useProTablePaginationValue = ({\n  paginationProps = {},\n}: Pick<ProTableProps, 'paginationProps'>) => {\n  const [pageSize, setPageSize] = useFiledState(\n    {\n      value: paginationProps.pageSize,\n      defaultValue: 10,\n      onChange: paginationProps.onPageSizeChange,\n    },\n    !!paginationProps.pageSize,\n  );\n\n  const [current, setCurrent] = useFiledState<number, []>(\n    {\n      value: paginationProps.current,\n      defaultValue: paginationProps.defaultCurrent,\n      onChange: (newVal) => paginationProps.onChange(newVal, {}),\n    },\n    !!paginationProps.pageSize,\n  );\n  const total = paginationProps.total || 0;\n  return useMemo<ProTablePaginationInstance>(\n    () => ({\n      total,\n      current,\n      setCurrent,\n      pageSize,\n      setPageSize,\n    }),\n    [total, current, setCurrent, pageSize, setPageSize],\n  );\n};\n\nexport type ProTablePaginationValue = ReturnType<typeof useProTablePaginationValue>;\nexport const ProTablePaginationContext = createContext<ProTablePaginationValue>({\n  total: 0,\n  current: 0,\n  setCurrent: emptyFn,\n  pageSize: 10,\n  setPageSize: emptyFn,\n});\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/contexts/pro-table-row-selection-context.tsx",
    "content": "import { createContext, useMemo, useCallback } from 'react';\nimport {\n  ProTableBaseProps,\n  ProTableRowKey,\n  ProTableRowRecord,\n  ProTableRowSelectionInstance,\n} from '../types';\n\nimport is from '@sindresorhus/is';\nimport { emptyArray, emptyFn } from '@/utils/constants';\nimport { useFiledState } from '@/utils/hooks/useFiledState';\nimport { useUpdateEffect } from 'ahooks';\n\nexport const isSelectedAllPages = (selectedRowKeys: ProTableRowKey[], reverseSelection: boolean) =>\n  reverseSelection && selectedRowKeys.length === 0;\n\nconst arrayOmit = (arr: string[] = [], omitArr: string[] = []) => {\n  if (omitArr.length === 0) {\n    return arr;\n  }\n  const keySet = new Set(omitArr);\n  return arrayUnique(arr.filter((vo) => !keySet.has(vo))); // 剔除keys\n};\nconst arrayUnique = (arr: string[] = []) => Array.from(new Set(arr));\nconst arrayMerge = (arr1: string[] = [], arr2: string[] = []) => {\n  return arrayUnique([...arr1, ...arr2]);\n};\nconst arrayPick = (arr: string[] = [], pickArr: string[] = []) => {\n  if (arr.length === 0) {\n    return arr;\n  }\n  if (!pickArr || pickArr.length === 0) {\n    return [];\n  }\n  const keySet = new Set(pickArr);\n  return arrayUnique(arr.filter((vo) => keySet.has(vo))); // 剔除keys\n};\nconst flatDataSource = (dataSource: ProTableRowRecord[]) => {\n  let ret = [];\n  dataSource.forEach((vo) => {\n    if (!vo) return;\n    ret.push(vo);\n    if (is.array(vo.children)) {\n      ret = ret.concat(vo.children);\n    }\n  });\n  return ret.length === dataSource.length ? dataSource : ret;\n};\n\nexport const useProTableRowSelectionValue = ({\n  rowSelection = {},\n  dataSource = [],\n  primaryKey = 'id',\n}: Pick<\n  ProTableBaseProps,\n  'rowSelection' | 'dataSource' | 'primaryKey'\n>): ProTableRowSelectionInstance => {\n  const mode = rowSelection.mode || 'multiple';\n\n  /** 是否是反向选择状态 */\n  const [reverseSelection, setReverseSelection] = useFiledState(\n    {\n      value: rowSelection.reverseSelection,\n      defaultValue: rowSelection.defaultReverseSelection || false,\n    },\n    'reverseSelection' in rowSelection,\n  );\n  const getRowKeyByRecord = useCallback(\n    (record: ProTableRowRecord) => record && record[primaryKey],\n    [primaryKey],\n  );\n\n  /**\n   * 反/已选keys列表\n   * - reverseSelection为false时为已选的keys\n   * - reverseSelection为true时为反选的keys\n   */\n  const [selectedRowKeys, setSelectRowKeys] = useFiledState(\n    {\n      value: rowSelection.selectedRowKeys,\n      defaultValue: rowSelection.defaultSelectedRowKeys || [],\n      onChange: (keys, isReverseSelection) => {\n        setReverseSelection(isReverseSelection);\n        if (is.function_(rowSelection.onChange)) {\n          const keysSet = new Set(keys);\n          const selectedRecords = isReverseSelection\n            ? dataSource.filter((vo) => !keysSet.has(getRowKeyByRecord(vo)))\n            : dataSource.filter((vo) => keysSet.has(getRowKeyByRecord(vo)));\n          rowSelection.onChange(keys, isReverseSelection, selectedRecords);\n        }\n      },\n    },\n    !!rowSelection.selectedRowKeys,\n  );\n  // mode修改时，清空所选项\n  useUpdateEffect(() => {\n    setSelectRowKeys([], false);\n  }, [mode, setSelectRowKeys]);\n  /** 当前页keys */\n  const flattedDataSource = useMemo(() => flatDataSource(dataSource), [dataSource]);\n\n  const { getProps } = rowSelection;\n  /** 当前页disabledKeys */\n  const currentPageDisableKeys = useMemo(() => {\n    if (!is.function_(getProps)) {\n      return emptyArray;\n    }\n    return flattedDataSource\n      .filter((vo, index) => getProps(vo, index).disabled)\n      .map(getRowKeyByRecord);\n  }, [flattedDataSource, getProps, getRowKeyByRecord]);\n\n  /** 增加/取消选择 */\n  const selectRows = useCallback(\n    (selected: boolean, keys: ProTableRowKey[]) => {\n      if (mode === 'single') {\n        if (keys.length === 0) {\n          return;\n        }\n        setSelectRowKeys((oldKeys) => {\n          if (selected) {\n            if (keys.length > 1) {\n              console.warn('当前是单选模式, 不支持全选所有页');\n            }\n\n            return [keys[keys.length - 1]];\n          }\n          // 取消选择: 已选模式剔除选择的keys\n          return arrayOmit(oldKeys, keys);\n        }, false);\n        return;\n      }\n\n      setSelectRowKeys((oldKeys) => {\n        if (selected) {\n          // 增加选择: 反选模式下剔除keys; 已选模式增加选择的keys\n          return reverseSelection ? arrayOmit(oldKeys, keys) : arrayMerge(oldKeys, keys);\n        }\n        // 取消选择: 反选模式下增加keys; 已选模式剔除选择的keys\n        return reverseSelection ? arrayMerge(oldKeys, keys) : arrayOmit(oldKeys, keys);\n      }, reverseSelection);\n    },\n    [reverseSelection, setSelectRowKeys, mode],\n  );\n  /** 当前页keys */\n  const currentPageRowKeys = arrayOmit(\n    useMemo(() => flattedDataSource.map(getRowKeyByRecord), [flattedDataSource, getRowKeyByRecord]),\n    currentPageDisableKeys,\n  );\n  // arrayOmit(currentPageRowKeys, currentPageDisableKeys);\n  /** 本页已选行 */\n  const currentPageSelectedRowKeys = useMemo(\n    () =>\n      reverseSelection\n        ? arrayOmit(currentPageRowKeys, selectedRowKeys)\n        : arrayPick(currentPageRowKeys, selectedRowKeys),\n    [currentPageRowKeys, reverseSelection, selectedRowKeys],\n  );\n\n  const selectAllPages = useCallback(\n    (selected: boolean) => {\n      if (selected && mode === 'single') {\n        console.warn('当前是单选模式, 不支持全选所有页');\n        return;\n      }\n      return setSelectRowKeys([], selected);\n    },\n    [setSelectRowKeys, mode],\n  );\n  const selectCurrentPage = useCallback(\n    (selected: boolean) => {\n      if (selected && mode === 'single') {\n        console.warn('当前是单选模式, 不支持全选当前页');\n        return;\n      }\n      return selectRows(selected, currentPageRowKeys);\n    },\n    [currentPageRowKeys, selectRows, mode],\n  );\n  const isSelectedRowKey = useCallback(\n    (rowKey: ProTableRowKey) =>\n      reverseSelection ? !selectedRowKeys.includes(rowKey) : selectedRowKeys.includes(rowKey),\n    [reverseSelection, selectedRowKeys],\n  );\n  const hasSelectedRows = useCallback(\n    () => reverseSelection || selectedRowKeys.length > 0,\n    [reverseSelection, selectedRowKeys],\n  );\n\n  return {\n    selectAllPages,\n    selectCurrentPage,\n    selectRows,\n    hasSelectedRows,\n    isSelectedRowKey,\n    currentPageSelectedRowKeys,\n    currentPageRowKeys,\n    reverseSelection,\n    selectedRowKeys,\n    getRowKeyByRecord,\n  };\n};\n\nexport const ProTableRowSelectionContext = createContext<ProTableRowSelectionInstance>({\n  selectAllPages: emptyFn,\n  selectCurrentPage: emptyFn,\n  selectRows: emptyFn,\n  currentPageSelectedRowKeys: emptyArray,\n  currentPageRowKeys: emptyArray,\n  reverseSelection: false,\n  selectedRowKeys: emptyArray,\n  isSelectedRowKey: () => false,\n  getRowKeyByRecord: () => '',\n  hasSelectedRows: () => false,\n});\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/contexts/pro-table-setting-context.tsx",
    "content": "import { emptyFn } from '@/utils/constants';\nimport { useFiledState } from '@/utils/hooks/useFiledState';\nimport { useMemo, createContext, useEffect } from 'react';\nimport { ProTableBaseProps } from '../types';\n\ntype UseProTableSettingOptions = Pick<ProTableBaseProps, 'isZebra' | 'size'>;\n\nexport const useProTableSettingValue = (options: UseProTableSettingOptions) => {\n  const [tableSetting, setTableSetting] = useFiledState({\n    defaultValue: {\n      isZebra: options.isZebra,\n      size: options.size,\n    },\n  });\n  useEffect(\n    () =>\n      setTableSetting({\n        ...options,\n      }),\n    Object.values(options),\n  );\n  return useMemo(\n    () => ({\n      tableSetting,\n      setTableSetting,\n    }),\n    [tableSetting, setTableSetting],\n  );\n};\nexport type ProTableSettingValue = ReturnType<typeof useProTableSettingValue>;\nexport const ProTableSettingContext = createContext<ProTableSettingValue>({\n  tableSetting: {\n    isZebra: false,\n    size: 'medium',\n  },\n  setTableSetting: emptyFn,\n});\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/hooks.ts",
    "content": "import * as React from 'react';\nimport { useDebounceFn, useFusionTable } from 'ahooks';\nimport { ProTableProps, SortValue } from './types';\nimport mapValues from 'lodash/mapValues';\nimport { BasePaginatedOptions, Result } from 'ahooks/lib/useFusionTable';\nimport { FilterProps } from '@/components/filter';\nimport { Field } from '@alifd/next';\n\ninterface TableParams {\n  sorters: Record<string, SortValue>;\n  searchers: Record<string, string | undefined>;\n  filters: Record<string, any[]>;\n}\ntype FilterParams = Record<string, any>;\n\nexport interface UseProTableResult<Item> extends Omit<Result<Item>, 'tableProps'> {\n  tableProps: {\n    dataSource: Item[];\n    loading: boolean;\n    onSort: ProTableProps['onSort'];\n    onFilter: ProTableProps['onFilter'];\n    onSearch: ProTableProps['onSearch'];\n    paginationProps: ProTableProps['paginationProps'];\n  };\n  filterProps: FilterProps;\n}\n\nexport interface UseProTableServiceParams {\n  /**\n   * 当前页\n   */\n  current: number;\n  /**\n   * 每页条数\n   */\n  pageSize: number;\n  /**\n   * 表格筛选/排序/搜索参数\n   */\n  tableParams: TableParams;\n\n  /**\n   * 筛选表单参数\n   */\n  filterParams: FilterParams;\n}\n\nexport type UseProTableService<Item = unknown> = (params: UseProTableServiceParams) => Promise<{\n  total: number;\n  dataSource: Item[];\n  [key: string]: any;\n}>;\n\nexport interface UseProTableOptions<Item = unknown>\n  extends Omit<BasePaginatedOptions<Item>, 'paginated'> {\n  field?: Field;\n}\n\n/**\n * ProTable hooks\n * @param service 请求service\n * @param options 参数\n */\nexport const useProTable = <Item = unknown>(\n  service: UseProTableService<Item>,\n  options: UseProTableOptions<Item> = {},\n): UseProTableResult<Item> => {\n  const [tableParams, setTableParams] = React.useState<TableParams>({\n    sorters: {},\n    searchers: {},\n    filters: {},\n  });\n  const selfField = Field.useField();\n  const field = options.field || selfField;\n  const { run: setTableParamsDebounce } = useDebounceFn(setTableParams, { wait: 300 });\n\n  const fusionTable = useFusionTable(\n    async (p, filterParams) => {\n      const res = await service({ ...p, tableParams, filterParams });\n      return {\n        ...res,\n        list: res.dataSource,\n      };\n    },\n    {\n      defaultPageSize: 10,\n      ...options,\n      field,\n    },\n  );\n  const { run: refresh } = useDebounceFn(fusionTable.refresh, { wait: 100 });\n  const tableEvents = React.useMemo<{\n    onSort: ProTableProps['onSort'];\n    onFilter: ProTableProps['onFilter'];\n    onSearch: ProTableProps['onSearch'];\n  }>(() => {\n    return {\n      onFilter: (newVal) => {\n        setTableParams((oldVal) => ({\n          ...oldVal,\n          filters: mapValues(newVal, (vo) => vo && vo.selectedKeys),\n        }));\n        refresh();\n      },\n      onSearch: (newVal) =>\n        setTableParamsDebounce((oldVal) => {\n          refresh();\n          return {\n            ...oldVal,\n            searchers: mapValues(newVal, (vo) => vo && vo.keywords),\n          };\n        }),\n      onSort: (index, order, sorters) => {\n        setTableParams((oldVal) => ({\n          ...oldVal,\n          sorters,\n        }));\n        refresh();\n      },\n    };\n  }, [setTableParamsDebounce, refresh]);\n  const { type, changeType, submit, reset } = fusionTable.search || {};\n  return {\n    ...fusionTable,\n    tableProps: {\n      ...fusionTable.tableProps,\n      ...tableEvents,\n      paginationProps: fusionTable.paginationProps,\n    },\n    filterProps: {\n      enableForm: true,\n      onSearch: submit,\n      onReset: reset,\n      expand: type === 'advance',\n      formProps: {\n        field,\n      },\n      onExpand: (expand) => {\n        if ((type === 'advance') !== expand) {\n          changeType();\n        }\n      },\n    },\n  };\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/i18n.ts",
    "content": "export default {\n  'zh-CN': {\n    columnTitleFilterPanelOk: '确认',\n    columnTitleFilterPanelReset: '重置',\n    columnTitleFilterPanelSearchPlaceholder: '搜索',\n    columnTitleFilterPanelMenuSearchPlaceholder: '搜索',\n    columnTitleFilterPanelAsc: '升序',\n    columnTitleFilterPanelDesc: '倒序',\n\n    selectionTooltipChosen: '已选择',\n    selectionTooltipChosenEnd: '项',\n    operation: '操作',\n    indexColumnTitle: '序号',\n\n    fullscreenButtonOpenTooltip: '全屏',\n    fullscreenButtonCloseTooltip: '取消全屏',\n    compactButtonCompactTooltip: '紧凑模式',\n    compactButtonNormalTooltip: '正常模式',\n    zebraButtonOpenTooltip: '斑马线',\n    zebraButtonCloseTooltip: '隐藏斑马线',\n    settingButtonTooltip: '列展示',\n\n    settingButtonLockLeft: '固定在表格左侧',\n    settingButtonLockRight: '固定在表格右侧',\n    settingButtonLockCancel: '取消固定',\n\n    // 分页\n    pagiationTotal: '共',\n    pagiationItem: '项',\n    pagiationItems: '项',\n  },\n  'en-US': {\n    columnTitleFilterPanelOk: 'Ok',\n\n    selectionTooltipChosen: '',\n    selectionTooltipChosenEnd: 'items selected',\n    operation: 'Action',\n    indexColumnTitle: 'Index',\n\n    fullscreenButtonOpenTooltip: 'Fullscreen',\n    compactButtonBalloonText: 'Density Adjustment',\n    zebraButtonOpenTooltip: 'Zebra',\n\n    // 分页\n    pagiationTotal: 'Total',\n    pagiationItem: 'item',\n    pagiationItems: 'items',\n  },\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/index.scss",
    "content": "@import './theme-dark.scss';\n@import './components/edit-table/index.scss';\n@import './components/pro-table/index.scss';\n@import './components/pro-table-base/index.scss';\n@import './components/pro-table-column-title/index.scss';\n@import './components/pro-table-setting-button/index.scss';\n\n.fusion-ui-pro-table-action-bar {\n  display: flex;\n  margin-bottom: var(--s-5, $s-5);\n  align-items: center;\n  justify-content: space-between;\n}\n\n.cell-label {\n  &-success {\n    color: var(--color-success-3, $color-success-3);\n  }\n  &-error {\n    color: var(--color-error-3, $color-error-3);\n  }\n  &-warning {\n    color: var(--color-warning-3, $color-warning-3);\n  }\n  &-notice {\n    color: var(--color-notice-3, $color-notice-3);\n  }\n  &-help {\n    color: var(--color-help-3, $color-help-3);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/index.tsx",
    "content": "export { EditTable } from './components/edit-table';\nexport { ProTable } from './components/pro-table';\nexport { GroupTable } from './components/group-table';\nexport { ProTableProps, ProTableColumnProps } from './types';\nexport { ProTableSlot, ProTableSlotProps, ProTableSlotPosition } from './components/pro-table-slot';\n\nexport * from './hooks';\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/theme-dark.scss",
    "content": ".dark {\n  .fusion-ui-pro-table.fullscreen {\n    background-color: var(--color-fill1-4, $color-fill1-4);\n    .fusion-ui-pagination {\n      background-color: var(--color-fill1-4, $color-fill1-4);\n    }\n  }\n\n  .fusion-ui-pro-table-column-title-filter-panel {\n    background-color: var(--color-fill1-4, $color-fill1-4);\n    &__ft {\n      border-top-color: var(--color-line1-2, $color-line1-2);\n    }\n  }\n  .fusion-ui-pro-table-setting-panel {\n    background-color: var(--color-fill1-4, $color-fill1-4);\n  }\n  .fusion-ui-pro-table-setting-block {\n    &__title {\n      background-color: var(--color-fill1-4, $color-fill1-4);\n    }\n  }\n  .fusion-ui-table.zebra tr:nth-child(2n + 1) td {\n    background-color: var(--color-fill1-2, $color-fill1-2);\n  }\n  .fusion-ui-pro-table-selection {\n    background-color: var(--color-fill1-4, $color-fill1-4);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/types/index.ts",
    "content": "import * as React from 'react';\nimport {\n  ColumnProps,\n  GroupFooterProps,\n  GroupHeaderProps,\n  TableProps,\n} from '@alifd/next/types/table';\nimport { ButtonGroupProps } from '@/components/button-group';\n// import { PaginationProps } from '@/pagination';\nimport { ProTableSlotsOptions } from '../components/pro-table-slot';\nimport {\n  ProTableSettingActionType,\n  ProTableSettingItem,\n} from '../components/pro-table-setting-button/types';\nimport { CheckboxProps } from '@alifd/next/types/checkbox';\nimport { RadioProps } from '@alifd/next/types/radio';\nimport { AsyncDataSource, ColorType } from '@/types';\nimport { ProTableButtonGroupProps } from '../components/pro-table-button-group/index';\nimport { PayloadButtonProps } from '../components/pro-table-button-group/payload-button';\n\n/**\n * 全局和列都支持的配置\n * 设置优先级: 列配置 > 列类型提供值 > 表格\n */\nexport interface ProTableCellCommonProps {\n  /**\n   * 单元格没值时缺省值\n   * 设置优先级: 列配置 > 列类型提供值 > 表格\n   * @default ''\n   */\n  cellDefault?: React.ReactNode;\n  /**\n   * 单元格tooltip显示逻辑\n   * 设置优先级: 列配置 > 列类型提供值 > 表格\n   * - ellipsis 在显示省略号时显示tooltip\n   * - none 不显示tooltip\n   * @default 'none'\n   */\n  cellTooltipMode?: 'ellipsis' | 'none';\n}\n\nexport interface ProTableRowInstance {\n  /** 当前行主键值 */\n  rowKey?: ProTableRowKey;\n  /** 当前行下标 */\n  rowIndex: number;\n  /** 当前行数据 */\n  rowRecord: ProTableRowRecord;\n}\n\nexport interface ProTablePaginationInstance {\n  /** 表格总行数 */\n  total: number;\n  /** 当前页数 */\n  current: number;\n  /** 当前每页行数 */\n  pageSize: number;\n  /** 设置当前页数 */\n  setCurrent: (page: number) => void;\n  /** 设置每页行数 */\n  setPageSize: (pageSize: number) => void;\n}\nexport interface ProTableInstance {\n  rowSelection: ProTableRowSelectionInstance;\n  // pagination: ProTablePaginationInstance;\n}\nexport interface ProTableColumnProps extends ProTableCellCommonProps, Omit<ColumnProps, 'filters'> {\n  /**\n   * 列的唯一表示，当不存在是默认取dataIndex的值\n   */\n  key?: string;\n  /**\n   * 当设定 group, 表明此为父子表头的父表头, 值会作为父表头标题存在\n   */\n  group?: React.ReactNode;\n\n  // totalCell?: ColumnProps['cell'];\n  /**\n   * 传入ProTable预置类型 或是 通过columnFormatter的扩展类型\n   * https://yuque.antfin-inc.com/docs/share/34a98885-3630-4a3f-921e-f29366b586b7\n   */\n  formatType?:\n    | 'id'\n    | 'number'\n    | 'money'\n    | 'currency'\n    | 'date'\n    | 'phone'\n    | 'ou'\n    | 'bankCard'\n    | 'percent'\n    | 'progress'\n    | 'link'\n    | 'tag'\n    | 'textTag'\n    | 'files'\n    | 'employee'\n    | string;\n  /** 格式化参数 */\n  formatOptions?: string[];\n  /**\n   * 值转换，如果是字典转换走dataSource\n   */\n  formatValue?: (value: unknown, rowIndex: number, record: unknown) => unknown;\n  /**\n   * 回调、对象映射得到单元格的颜色\n   */\n  formatColor?: ColorType | ((value: unknown) => ColorType) | Record<string, ColorType>;\n  /**\n   * 单元格点击事件\n   */\n  onCellClick?: (value: unknown, rowIndex: number, record: unknown) => void;\n  /**\n   * 列dataSource，当前仅text/currency/textTag/tag类型的formatter支持\n   */\n  dataSource?: AsyncDataSource;\n\n  /**\n   * 帮助信息\n   */\n  explanation?: string;\n  /**\n   * 设定 group 后, children作为子表头的值存在\n   */\n  children?: ProTableColumnProps[];\n  /**\n   * 是否支持关键字搜索\n   * @default false\n   */\n  searchable?: boolean;\n\n  /**\n   * 生成标题过滤的菜单, 格式为`[{label:'xxx', value:'xxx'}]`\n   */\n  filters?: AsyncDataSource;\n\n  /**\n   * 关键字和筛选是否是即时生效\n   * @default true\n   */\n  isImmediate?: boolean;\n  cell?:\n    | React.ReactNode\n    | ((value: unknown, rowIndex: number, record: unknown, context: any) => React.ReactNode);\n}\n\nexport interface SearchParam {\n  keywords: string;\n  visible: boolean;\n}\nexport interface FilterParam {\n  selectedKeys: string[];\n  visible: boolean;\n}\n\nexport type SortValue = 'desc' | 'asc' | 'default';\nexport interface ProTableColumnFilterValue {\n  keywords?: string;\n  sort?: SortValue;\n  selectedKeys?: string[];\n}\nexport type ProTableColumnsFilterValue = Record<string, ProTableColumnFilterValue>;\n\nexport type ProTableRowRecord = Record<string, any>;\nexport type ProTableRowKey = string;\nexport interface ProTableRowSelectionInstance {\n  /** 选中/反选的key */\n  readonly selectedRowKeys: ProTableRowKey[];\n  /** 是否是反选模式 */\n  readonly reverseSelection: boolean;\n  /** 当前页选中所有的key */\n  readonly currentPageSelectedRowKeys: ProTableRowKey[];\n  /** 当前页所有的key */\n  readonly currentPageRowKeys: ProTableRowKey[];\n  /** 当前是否有选中的 */\n  readonly hasSelectedRows: () => boolean;\n  /** 选择/取消选择所有页所有项 */\n  readonly selectAllPages: (selected: boolean) => void;\n  /** 选择/取消选择当前页所有项 */\n  readonly selectCurrentPage: (selected: boolean) => void;\n  /** 选择/取消选择多项 */\n  readonly selectRows: (selected: boolean, rowKeys: ProTableRowKey[]) => void;\n  /** 判断当前行是否是选中状态 */\n  readonly isSelectedRowKey: (rowKey: ProTableRowKey) => boolean;\n  /** 获取行数据key */\n  readonly getRowKeyByRecord: (rowRecord: ProTableRowRecord) => ProTableRowKey;\n}\nexport type ProTableRowSelectionType = 'SELECTION_ALL' | 'SELECTION_NONE';\n\nexport type ProTableRowPayload = ProTableRowInstance;\nexport type ProTablePayload = ProTableInstance;\n\ninterface ActionColumnButton\n  extends Omit<PayloadButtonProps<ProTableRowPayload>, 'disabled' | 'hidden'> {\n  key?: string;\n  /**\n   * 是否禁用\n   * @default false\n   */\n  disabled?: boolean | ((payload: ProTableRowPayload) => boolean) | string;\n  /**\n   * 是否隐藏\n   * @default false\n   */\n  hidden?: boolean | ((payload: ProTableRowPayload) => boolean) | string;\n}\n\nexport interface ProTableActionColumnButtons\n  extends Omit<ProTableButtonGroupProps<ProTableRowPayload>, 'dataSource'> {\n  dataSource: ActionColumnButton[];\n}\nexport type ProTableActionBarButtons = ProTableButtonGroupProps<ProTablePayload>;\nexport interface ProTableBaseProps\n  extends ProTableCellCommonProps,\n    Omit<TableProps, 'columns' | 'onSort' | 'rowSelection'> {\n  /**\n   * 指定列唯一的标识，一般不需要设置\n   * @default key\n   */\n  columnKey?: 'dataIndex' | 'key';\n\n  /**\n   * 表格列设置\n   */\n  columns?: ProTableColumnProps[];\n\n  /**\n   * 可以调整大小\n   */\n  resizable?: boolean;\n\n  /**\n   * 排序模式是单列还是多列\n   * @default 'multiple'\n   */\n  sortMode?: 'single' | 'multiple';\n  /**\n   * 排序值\n   */\n  sort?: Record<string, SortValue>;\n  /**\n   * 点击列排序触发的事件\n   */\n  onSort?: (dataIndex: string, order: SortValue, sort: Record<string, SortValue>) => void;\n  searchParams?: Record<string, SearchParam>;\n  /**\n   * 点击列搜索触发的事件\n   */\n  onSearch?: (searchParams: Record<string, SearchParam>) => void;\n  filterParams?: Record<string, FilterParam>;\n  /**\n   * 点击列排序触发的事件\n   */\n  onFilter?: (filterParams: Record<string, FilterParam>) => void;\n  columnFilters?: ProTableColumnsFilterValue;\n  onColumnsFilterChange?: (\n    newValue: ProTableColumnsFilterValue,\n    oldValue: ProTableColumnsFilterValue,\n    changedColumnFilterValue?: ProTableColumnFilterValue,\n    changedColumnDataIndex?: string,\n  ) => void;\n\n  groupHeader?: React.ReactNode | GroupHeaderProps;\n  groupFooter?: React.ReactNode | GroupFooterProps;\n  /**\n   * 是否设置 Table 为 Table.stickyLock\n   */\n  stickyLock?: boolean;\n  /**\n   * 序号列\n   */\n  indexColumn?: boolean;\n  /**\n   * 序号列props\n   */\n  indexColumnProps?: Partial<ColumnProps>;\n  /**\n   * 操作列配置覆盖\n   */\n  actionColumnProps?: Partial<ColumnProps>;\n  /**\n   * 操作列按钮组\n   */\n  actionColumnButtons?: ProTableActionColumnButtons;\n  /**\n   * 操作列按钮配置列表\n   * @deprecated 使用 actionColumnButtons\n   */\n  actionColumn?: ActionColumnButton[];\n  /**\n   * 操作列按钮组的props\n   * @deprecated 使用 actionColumnButtons\n   */\n  actionButtonGroupProps?: ButtonGroupProps;\n  /**\n   * 自定义列操作\n   * @deprecated 使用 actionColumnButtons\n   */\n  actionColumnPredication?: (payload: {\n    actionColumn?: any[];\n    index: number;\n    record: any;\n  }) => ActionColumnButton[];\n  /**\n   * 操作列点击触发事件\n   * @deprecated 使用 actionColumnButtons\n   */\n  onActionColumnClick?: (payload: {\n    currentActionKey: string;\n    selectedRowKey: string;\n    record: any;\n  }) => void;\n  /**\n   * 总计数据源, 传入后显示总计行, 统计行需要\n   */\n  totalDataSource?: Record<string, React.ReactNode>;\n\n  /**\n   * 是否启用选择模式\n   * https://yuque.antfin-inc.com/docs/share/34ec077c-14d5-4408-bfd4-d2827bfd87ec\n   */\n  rowSelection?: {\n    /**\n     * 选择实例\n     * https://yuque.antfin-inc.com/docs/share/34ec077c-14d5-4408-bfd4-d2827bfd87ec\n     */\n    ref?: React.MutableRefObject<ProTableRowSelectionInstance>;\n    // columnProps?: () => any;\n    // titleAddons?: () => any;\n    /**\n     * 获取selection的默认属性\n     * @param record 当前操作行数据\n     * @param index 当前行下标\n     */\n    getProps?: (record: ProTableRowRecord, index: number) => CheckboxProps | RadioProps;\n    /**\n     * 选择改变的时候触发的事件，\n     * @param selectedRowKeys 选中/反选的keys\n     * @param reverseSelection 是否反选模式\n     * @param records 只会包含当前dataSource的数据，很可能会小于selectedRowKeys的长度。\n     */\n    onChange?: (\n      selectedRowKeys: ProTableRowKey[],\n      reverseSelection: boolean,\n      records: ProTableRowRecord[],\n    ) => void;\n    /**\n     * 用户手动选择/取消选择某行的回调\n     * @param selected 选择/取消选择\n     * @param record 当前操作行数据\n     * @param records 只会包含当前dataSource的数据\n     */\n    onSelect?: (selected: boolean, record: ProTableRowRecord, records: ProTableRowRecord[]) => void;\n    /**\n     * 用户手动选择/取消选择本页所有行的回调\n     * @param selected 选择/取消选择\n     * @param records 只会包含当前dataSource的数据。\n     */\n    onSelectAll?: (selected: boolean, records: ProTableRowRecord[]) => void;\n    /**\n     * 用户手动选择/取消选择本页所有行的回调\n     * @param selected 选择/取消选择\n     * @param records 只会包含当前dataSource的数据。\n     */\n    onSelectAllPages?: (selected: boolean, records: ProTableRowRecord[]) => void;\n    /**\n     * 选择selection的模式, 可选值为single, multiple\n     * @default 'multiple'\n     */\n    mode?: 'single' | 'multiple';\n    /**\n     * 菜单配置项\n     * - SELECTION_ALL 开启全选所有页\n     * - SELECTION_NONE 开启取消选择所有项\n     * @default ['SELECTION_ALL', 'SELECTION_NONE']\n     */\n    selections?: Array<'SELECTION_ALL' | 'SELECTION_NONE'>;\n    /**\n     * 选中的值\n     */\n    selectedRowKeys?: ProTableRowKey[];\n    /**\n     * 默认选中的值\n     */\n    defaultSelectedRowKeys?: ProTableRowKey[];\n    /**\n     * 是否是反向选择\n     * @default false\n     */\n    reverseSelection?: boolean;\n    /**\n     * 默认反向选择\n     * @default false\n     */\n    defaultReverseSelection?: boolean;\n\n    /**\n     * 是否可以跨页选择，全选所有页强制开启跨页\n     * @default true\n     */\n    crossPageSelection?: boolean;\n\n    /**\n     * 是否隐藏 tooltip\n     * @default false\n     */\n    hideTooltip?: boolean;\n    /**\n     * 列头标题CheckBox样式覆盖\n     */\n    titleProps?: () => CheckboxProps;\n  };\n\n  // /**\n  //  * 单元格内容过长配置\n  //  * @default 'ellipsis'\n  //  */\n  // cellOverflow?: 'ellipsis' | 'warp' | 'visible';\n}\n\ntype ProTableColumnsSetting = Record<string, ProTableSettingItem>;\nexport type ProTableSettingButtonType = 'compact' | 'zebra' | 'fullscreen' | 'setting';\nexport interface ProTableProps\n  extends ProTableSlotsOptions,\n    Omit<ProTableBaseProps, 'settingProps'> {\n  /**\n   * 表格操作栏按钮\n   */\n  actionBarButtons?: ProTableActionBarButtons;\n  /**\n   * 表格设置按钮\n   * @default false\n   */\n  settingButtons?: ProTableSettingButtonType[] | boolean;\n  /**\n   * 分页设置\n   */\n  // paginationProps?: PaginationProps;\n  /**\n   * 列设置\n   */\n  columnsSetting?: ProTableColumnsSetting;\n  /** 默认列设置 */\n  defaultColumnsSetting?: ProTableColumnsSetting;\n  /**\n   * 设置改变时的回调\n   */\n  onColumnsSettingChange?: (\n    newSetting: ProTableColumnsSetting,\n    actionType: ProTableSettingActionType,\n  ) => void;\n  /**\n   * 全屏状态变化回调\n   */\n  onFullscreenStateChange?: (fullscreenState: boolean) => void;\n\n  /**\n   * 是否是子母表的子表\n   * @default false\n   */\n  isExpandedChild?: boolean;\n\n  paginationProps?: Record<string, any>;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/pro-table/types/instance.ts",
    "content": ""
  },
  {
    "path": "packages/fusion-ui/src/components/segment/index.scss",
    "content": "@import './theme-dark.scss';\n\n.fusion-ui-segment {\n  position: relative;\n  border-radius: var(--corner-2, $corner-2);\n  background-color: var(--color-fill1-2, $color-fill1-2);\n  display: inline-flex;\n  padding: 2px;\n  &-primary {\n    .fusion-ui-segment-item {\n      &:hover {\n        color: var(--color-brand1-6, $color-brand1-6);\n      }\n      &.item-selected {\n        color: var(--color-brand1-6, $color-brand1-6);\n      }\n    }\n  }\n  &-secondary {\n    background-color: var(--color-brand1-1, $color-brand1-1);\n    .fusion-ui-segment-item {\n      color: var(--color-brand1-6, $color-brand1-6);\n      &:hover {\n        color: var(--color-brand1-9, $color-brand1-9);\n      }\n      &.item-selected {\n        color: var(--color-white, $color-white);\n      }\n    }\n    .fusion-ui-segment-handler {\n      background-color: var(--color-brand1-6, $color-brand1-6);\n    }\n  }\n  &-small {\n    height: var(--s-6, $s-6);\n    .fusion-ui-segment-item {\n      padding: 0 var(--s-2, $s-2);\n      line-height: var(--s-5, $s-5);\n      height: var(--s-5, $s-5);\n    }\n  }\n  &-medium {\n    height: var(--s-7, $s-7);\n    .fusion-ui-segment-item {\n      padding: 0 var(--s-3, $s-3);\n      line-height: var(--s-6, $s-6);\n      height: var(--s-6, $s-6);\n    }\n  }\n  &-large {\n    height: var(--s-8, $s-8);\n    padding: var(--s-1, $size-base);\n    .fusion-ui-segment-item {\n      padding: 0 var(--s-4, $s-4);\n      line-height: var(--s-6, $s-6);\n      height: var(--s-6, $s-6);\n    }\n  }\n  &-item {\n    height: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    z-index: 9;\n    cursor: pointer;\n    transition: color 0.3s;\n    color: var(--color-text1-3, $color-text1-3);\n    &:hover {\n      color: var(--color-text1-4, $color-text1-4);\n    }\n    &.item-selected {\n      color: var(--color-text1-4, $color-text1-4);\n      // font-weight: 500;\n    }\n  }\n  &-handler {\n    position: absolute;\n    border-radius: var(--corner-2, $corner-2);\n    background-color: var(--color-white, $color-white);\n    z-index: 1;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n  }\n  &-full {\n    width: 100%;\n    .fusion-ui-box {\n      width: 100%;\n      .fusion-ui-segment-item {\n        flex: 1;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/segment/index.tsx",
    "content": "import React, { useEffect, useRef, useState, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport { Space } from '../container';\nimport set from 'lodash/set';\nimport cn from 'classnames';\n\nexport interface SegmentDataSourceItem {\n  label: React.ReactNode;\n  value: any;\n}\n\nexport interface SegmentProps {\n  /**\n   * 自定义样式\n   */\n  style?: React.CSSProperties;\n  /**\n   * 自定义样式名\n   */\n  className?: string;\n  /**\n   * 按钮数据源\n   */\n  dataSource: SegmentDataSourceItem[];\n  /**\n   * 选中值的回调\n   */\n  onChange?: (value: any, data: SegmentDataSourceItem) => void;\n  /**\n   * 受控的值\n   */\n  value?: any;\n  /**\n   * 默认的值\n   */\n  defaultValue?: any;\n  /**\n   * @default \"medium\"\n   * 按钮组大小\n   */\n  size?: 'small' | 'medium' | 'large';\n  /**\n   * 是否占满容器的宽度，如果为 true，下面的元素将均分展示\n   */\n  fullWidth?: boolean;\n  /**\n   * @default \"normal\"\n   * 按钮类型\n   */\n  type?: 'normal' | 'primary' | 'secondary';\n}\n\nconst Segment: React.FC<SegmentProps> = ({\n  className,\n  style,\n  dataSource,\n  onChange,\n  value: propsValue,\n  defaultValue,\n  fullWidth,\n  size,\n  type,\n}) => {\n  const [selectedDom, setSelectedDom] = useState(null);\n  const [value, setValue] = useState(defaultValue);\n  const itemRef = useRef({});\n  const beforeWidth = useRef(null);\n  const { width, height } = useMemo(\n    () => selectedDom?.getBoundingClientRect() || {},\n    [selectedDom],\n  );\n  const handlerOffsetLeft = useMemo(\n    () => selectedDom?.offsetLeft - (size === 'large' ? 4 : 2),\n    [selectedDom],\n  );\n\n  // 首次进入的时候不需要动画\n  const noDuring = !beforeWidth.current && width;\n  beforeWidth.current = width;\n  // 受控模式处理\n  useEffect(() => {\n    if (propsValue !== undefined) {\n      setValue(propsValue);\n    }\n  }, [propsValue]);\n  // 更新选中 dom\n  useEffect(() => {\n    setSelectedDom(itemRef.current[value]);\n  }, [value]);\n  // 点击选中某个值\n  const handleItemClick = (val: any, data: SegmentDataSourceItem) => {\n    if (propsValue === undefined) {\n      setValue(val);\n    }\n    onChange(val, data);\n  };\n  const cssPrefix = 'fusion-ui-segment';\n  return (\n    <div\n      style={style}\n      className={cn(\n        cssPrefix,\n        `${cssPrefix}-${size}`,\n        `${cssPrefix}-${type}`,\n        fullWidth && `${cssPrefix}-full`,\n        className,\n      )}\n    >\n      <Space split spacing={-1}>\n        {dataSource.map((item, index) => (\n          <div\n            className={cn(`${cssPrefix}-item`, { 'item-selected': value === item.value })}\n            onClick={() => handleItemClick(item.value, item)}\n            key={index}\n            ref={(ref) => {\n              set(itemRef.current, item.value, ref);\n            }}\n          >\n            {item.label}\n          </div>\n        ))}\n      </Space>\n      <motion.div\n        className={`${cssPrefix}-handler`}\n        transition={noDuring ? { duration: 0 } : { ease: 'easeInOut' }}\n        initial={false}\n        animate={{ height, width, x: isNaN(handlerOffsetLeft) ? 0 : handlerOffsetLeft, y: 0 }}\n      />\n    </div>\n  );\n};\n\nSegment.defaultProps = {\n  onChange: () => {},\n  size: 'medium',\n  type: 'normal',\n};\n\nSegment.displayName = 'Segment';\nexport { Segment };\n"
  },
  {
    "path": "packages/fusion-ui/src/components/segment/theme-dark.scss",
    "content": "body.dark {\n  /* 这里写暗色覆盖主题 */\n  .fusion-ui-segment {\n    transition: 0.3s background-color;\n    background-color: var(--color-fill1-1, $color-fill1-1);\n    &-handler {\n      transition: 0.3s background-color;\n      background-color: var(--color-line1-2, $color-line1-2);\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/story-placeholder/index.tsx",
    "content": "import * as React from 'react';\n\n// 新结构\ninterface IContent {\n  aone?: {\n    // 可能未绑定\n    url: string;\n    priorityId: string;\n    project: { id: string; name: string };\n    creator: { empId: string; name: string };\n    assigner: { empId: string; name: string };\n  };\n  subject: string;\n  description: string;\n  hideTitle?: boolean;\n  id?: string;\n}\ninterface IStoryPlaceholderProps {\n  content?: IContent | string;\n  className?: string;\n  maxHeight?: string;\n}\n\n/**\n * 文字 字体、大小、行高\n * @param props\n */\nconst StoryPlaceholder: React.ForwardRefRenderFunction<HTMLImageElement, IStoryPlaceholderProps> = (\n  props,\n  ref,\n) => {\n  const {\n    content = { subject: '', description: '' },\n    maxHeight = 'auto',\n    ...others\n  }: IStoryPlaceholderProps = props;\n  const oldType = typeof content === 'string';\n  const desc = oldType ? content : content?.description || '';\n  const title = (!oldType && content?.subject) || '';\n  const hideTitle = oldType || content?.hideTitle;\n  return (\n    <div {...others} ref={ref}>\n      {!hideTitle && (\n        <div style={{ fontSize: '30px', color: '#333', lineHeight: '32px' }}>\n          <span>{title}</span>\n        </div>\n      )}\n      <div\n        style={{ maxHeight, overflowY: 'scroll' }}\n        className=\"message-content\"\n        dangerouslySetInnerHTML={{\n          __html: desc,\n        }}\n      />\n    </div>\n  );\n};\n\nconst RefStoryPlaceholder = React.forwardRef(StoryPlaceholder);\n\nRefStoryPlaceholder.defaultProps = {\n  content: {\n    subject: '需求标题',\n    hideTitle: false,\n    description:\n      '<div><span>- 你可以在这里描述需求</span><br /><span>- 或者粘贴需求截图</span></div>',\n  },\n  className: '',\n};\n\nexport default RefStoryPlaceholder;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/tab-container/index.scss",
    "content": ".fusion-ui-tab {\n  display: block;\n  background-color: #fff;\n\n  &.next-medium {\n    .next-tabs-content {\n      padding: 16px;\n    }\n  }\n\n  &.next-small {\n    .next-tabs-content {\n      padding: 12px;\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/tab-container/index.tsx",
    "content": "import * as React from 'react';\nimport cx from 'classnames';\nimport { Tab } from '@alifd/next';\n\nexport interface ITabContainerProps extends React.ComponentProps<typeof Tab> {\n  className?: string;\n}\n\nexport const TabContainer = (props: ITabContainerProps) => {\n  const { className, ...restProps } = props;\n\n  return <Tab className={cx(className, 'fusion-ui-tab')} {...restProps} />;\n};\n\nTabContainer.Item = Tab.Item;\n"
  },
  {
    "path": "packages/fusion-ui/src/components/toggle-icon/index.scss",
    "content": "@import './theme-dark.scss';\n\n.fusion-ui-toggle-icon-group {\n  display: flex;\n  gap: var(--s-1, $s-1);\n  background-color: var(--color-fill1-2, $color-fill1-2);\n  border-radius: var(--s-1, $s-1);\n  padding: 2px $s-2;\n}\n\n.fusion-ui-toggle-icon {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  width: var(--s-7, $s-7);\n  height: var(--s-7, $s-7);\n  border-radius: var(--corner-2, $corner-2);\n  background-color: var(--color-fill1-2, $color-fill1-2);\n  &:hover {\n    background-color: #e6e8eb;\n    color: var(--color-brand1-6, $color-brand1-6);\n  }\n  &--active {\n    color: var(--color-brand1-6, $color-brand1-6);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/components/toggle-icon/index.tsx",
    "content": "import { Icon, Balloon } from '@alifd/next';\nimport * as React from 'react';\nimport cns from 'classnames';\nimport { IconProps } from '@alifd/next/types/icon';\n\nconst RemoteIcon = Icon.createFromIconfontCN({\n  scriptUrl: '//at.alicdn.com/t/font_2535522_4oyyibdwj5v.js',\n});\n\nexport const CustomIcon = (props) => {\n  const { type, ...otherProps } = props;\n  return <RemoteIcon type={`icon${type}`} {...otherProps} />;\n};\n\nconst { Tooltip } = Balloon;\n/**\n * icon组\n */\nexport const ToggleIconGroup: React.FC<React.HtmlHTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cns('fusion-ui-toggle-icon-group', className)} {...props} />;\nexport interface ToggleIconProps extends React.HtmlHTMLAttributes<HTMLSpanElement> {\n  title?: string;\n  active?: boolean;\n  type: IconProps['type'];\n  size?: IconProps['size'];\n}\nexport const ToggleIcon = React.forwardRef<HTMLSpanElement, ToggleIconProps>(\n  ({ title, active, type, size, className, ...props }, ref) => {\n    const trigger = (\n      <span\n        ref={ref}\n        {...props}\n        className={cns(\n          'fusion-ui-toggle-icon',\n          {\n            'fusion-ui-toggle-icon--active': active,\n          },\n          className,\n        )}\n      >\n        <CustomIcon type={type} size={size} />\n      </span>\n    );\n    if (!title) return trigger;\n    return <Tooltip trigger={trigger}>{title}</Tooltip>;\n  },\n);\nToggleIcon.defaultProps = {\n  size: 'small',\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/components/toggle-icon/theme-dark.scss",
    "content": ".dark {\n  .fusion-ui-toggle-icon {\n    &:hover {\n      background-color: var(--color-fill1-4, $color-fill1-4);\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/index.scss",
    "content": "@import './variables.scss';\n\n@import './common/operations/index.scss';\n@import './components/anchor/index.scss';\n@import './components/ellipsis/index.scss';\n@import './components/expand-table/index.scss';\n@import './components/filter/index.scss';\n@import './components/menu/index.scss';\n@import './components/menu-button/index.scss';\n\n@import './components/pro-dialog/index.scss';\n@import './components/pro-drawer/index.scss';\n@import './components/page-header/index.scss';\n@import './components/pro-table/index.scss';\n@import './components/pro-form/index.scss';\n@import './components/segment/index.scss';\n@import './components/tab-container/index.scss';\n@import './components/toggle-icon/index.scss';\n\n\n#{$biz-css-prefix}page .lc-container-placeholder {\n  min-height: 48px;\n  background: #f1f1f1;\n  border: 1px solid #e0e0e0;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/index.tsx",
    "content": "import { version } from '../package';\n\n// export { default as ProCard } from './components/pro-card';\n// export type { CardProps, CardSectionProps } from './components/pro-card';\n\nexport { default as PieChart } from './components/pie-chart';\nexport { default as ColumnChart } from './components/column-chart';\nexport { default as BarChart } from './components/bar-chart';\nexport { default as LineChart } from './components/line-chart';\nexport { default as AreaChart } from './components/area-chart';\nexport { default as DonutChart } from './components/donut-chart';\n\nexport * from './components/page-header';\nexport * from './components/pro-form';\nexport * from './components/pro-table';\nexport * from './components/expand-table';\nexport * from './components/filter';\nexport * from './components/anchor';\nexport * from './components/pro-dialog';\nexport * from './components/tab-container';\nexport * from './components/pro-drawer';\nexport * from './components/button';\nexport * from './components/button-group';\nexport { default as StoryPlaceholder } from './components/story-placeholder';\n\nexport * from './variables';\n\nconst bizCssPrefix = 'fusion-ui';\nconst displayName = 'FusionUI';\n\nexport { bizCssPrefix, displayName, version };\n"
  },
  {
    "path": "packages/fusion-ui/src/provider/contexts/locale-context/index.ts",
    "content": "import React, { useContext, useMemo, createContext, useState, useCallback } from 'react';\nimport { locales as defaultI18nBundles } from '@/utils/locales';\nimport { getCookieLanguage, toISOLanguage } from './util';\n\nexport type LanguageType = 'zh-CN' | 'en-US';\nconst DEFAULT_LANGUAGE: LanguageType = 'zh-CN';\ntype I18nBundlesType = typeof defaultI18nBundles;\n\n/**\n * 所有定义文案的组件名字\n */\nexport type I18nBundlesNames = keyof I18nBundlesType;\n\n/** 某一组的文案集合类型 */\nexport type ComponentI18nBundleType<Name extends I18nBundlesNames> = I18nBundlesType[Name]['zh-CN'];\n\n/**\n * 用户定义的多语言文案\n */\nexport type CustomI18nBundles = {\n  [Name in I18nBundlesNames]?: Partial<ComponentI18nBundleType<Name>>;\n};\n\n/**\n * 传入组件名字获取文案集合\n *\n * @example\n * ``` ts\n * const i18nBundle = getI18nBundle('card', 'zh-CN', { collapse: '收起abc' });\n * i18nBundle.collapse // '收起abc'\n * i18nBundle.open // '打开'\n * ```\n * @param componentName 组件名称，如tablex\n * @param lang 需要的语言，默认是中文\n * @param customI18nBundle 自定义文案\n * @returns 当前组件的文案集合\n */\nconst getI18nBundleBase = <Name extends I18nBundlesNames>(\n  componentName: Name,\n  lang: 'zh-CN' | 'en-US' = 'zh-CN',\n  customI18nBundle?: Partial<ComponentI18nBundleType<Name>>,\n): ComponentI18nBundleType<Name> => {\n  const componentBundles = defaultI18nBundles[componentName];\n  if (!componentBundles) {\n    return {} as any;\n  }\n  if (lang === 'en-US') {\n    return {\n      ...componentBundles['zh-CN'],\n      ...componentBundles['en-US'],\n      ...customI18nBundle,\n    };\n  }\n\n  if (customI18nBundle) {\n    return {\n      ...componentBundles['zh-CN'],\n      ...customI18nBundle,\n    };\n  }\n  return componentBundles['zh-CN'];\n};\n\nexport interface LocaleContextValue {\n  language: LanguageType;\n  setLanguage: React.Dispatch<React.SetStateAction<LanguageType>>;\n  i18nBundles?: CustomI18nBundles;\n  getI18nBundle: <Name extends I18nBundlesNames>(\n    componentName: Name,\n  ) => ComponentI18nBundleType<Name>;\n}\n\nexport const LocaleContext = createContext<LocaleContextValue>({\n  language: DEFAULT_LANGUAGE,\n  setLanguage: () => {},\n  getI18nBundle: (componentName) => getI18nBundleBase(componentName, DEFAULT_LANGUAGE),\n  i18nBundles: {},\n});\n\nexport const useLanguage = () => useContext(LocaleContext).language;\n\nexport const useLocaleContextValue = (\n  defaultLanguage: LanguageType = DEFAULT_LANGUAGE,\n  i18nBundles?: CustomI18nBundles,\n): LocaleContextValue => {\n  const [language, setLanguage] = useState(\n    defaultLanguage ? toISOLanguage(defaultLanguage) : getCookieLanguage(),\n  );\n  const getI18nBundleCtx = useCallback(\n    <Name extends I18nBundlesNames>(componentName: Name): ComponentI18nBundleType<Name> =>\n      getI18nBundleBase(componentName, language, i18nBundles?.[componentName]),\n    [i18nBundles, language],\n  );\n  return {\n    language,\n    setLanguage,\n    i18nBundles,\n    getI18nBundle: getI18nBundleCtx,\n  };\n};\n\n/**\n * Hooks: 传入组件名字获取文案集合\n *\n * @example\n * ``` ts\n * const i18nBundle = useI18nBundle('card');\n * i18nBundle.collapse // '收起'\n * ```\n * @param componentName 组件名称，如tablex\n * @returns 当前组件的文案集合\n */\nexport const useI18nBundle = <Name extends I18nBundlesNames>(componentName: Name) => {\n  const { getI18nBundle } = useContext(LocaleContext);\n  return useMemo<ComponentI18nBundleType<Name>>(\n    () => getI18nBundle(componentName),\n    [componentName, getI18nBundle],\n  );\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/provider/contexts/locale-context/util.ts",
    "content": "import Cookies from 'js-cookie';\n\nexport const toSSOLanguage = (language: 'zh-CN' | 'en-US'): 'zh-CN' | 'en' => {\n  return language.toLowerCase().includes('en') ? 'en' : 'zh-CN';\n};\n\nexport const toISOLanguage = (language: string): 'zh-CN' | 'en-US' => {\n  return language.toLowerCase().includes('en') ? 'en-US' : 'zh-CN';\n};\n\nexport const getCookieLanguageKey = () => {\n  // 首先从全局作用域中获取 _i18nCookieName_ 变量值作为 cookie 名称，便于可能由于历史原因而暂无法统一 cookie 名称的场景\n  // 如果没全局设定，那么使用实参\n  // 如果无实参，那么使用默认值 SSO_LANG_V2\n  let _cookieName;\n  if (typeof window !== 'undefined') {\n    _cookieName = (window as any)._i18nCookieName_;\n  }\n  if (!_cookieName) {\n    _cookieName = 'SSO_LANG_V2';\n  }\n  return _cookieName;\n};\n/**\n * 获取页面所用的多语言 locale\n *\n * 首先从 cookie 中获取，cookie 名称优先通过 window._i18nCookieName_ 来获取，如果为空且无显式传参时，默认是 SSO_LANG_V2\n * 没有，从 navigator 中获取；\n * 没有，最后使用默认值 zh-CN\n */\nexport function getCookieLanguage() {\n  let language = Cookies.get(getCookieLanguageKey());\n\n  if (!language && typeof navigator === 'object') {\n    language = navigator.language;\n  }\n\n  return toISOLanguage(language || 'zh-CN');\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/provider/contexts/theme-context/index.ts",
    "content": "import { createContext, useContext, useEffect, useState, useRef } from 'react';\n\nexport type ThemeType = 'light' | 'dark';\nexport interface ThemeContextValue {\n  theme: ThemeType;\n  setTheme: React.Dispatch<React.SetStateAction<ThemeType>>;\n}\nexport const ThemeContext = createContext<ThemeContextValue>({\n  theme: 'light',\n  setTheme: () => {},\n});\n\nexport const useThemeContextValue = (defaultTheme: ThemeType = 'light'): ThemeContextValue => {\n  const [theme, setTheme] = useState(defaultTheme);\n  const stylePoolsRef = useRef([]);\n  // 加载样式\n  const loadStyle = (styleString) => {\n    const oStyle = document.createElement('style');\n    oStyle.innerHTML = styleString;\n    document.head.appendChild(oStyle);\n    stylePoolsRef.current.push(oStyle);\n    return oStyle;\n  };\n  // 主题样式清理\n  const cleanup = () => {\n    while (stylePoolsRef.current.length) {\n      stylePoolsRef.current.pop().remove();\n    }\n  };\n  useEffect(() => {\n    return cleanup;\n  });\n  // 主题切换\n  useEffect(() => {\n    const DARK_THEME_VERSION = '0.4.2';\n    const THEME_CDN_PREFIX = 'https://unpkg.alibaba-inc.com/@alifd/next';\n    if (theme === 'dark') {\n      document.body.classList.add('dark');\n      fetch(`${THEME_CDN_PREFIX}@${DARK_THEME_VERSION}/variables.css`)\n        .then((res) => res.text())\n        .then((tokens) => {\n          loadStyle(tokens);\n          loadStyle(`\n          :root {\n            color-scheme: dark;\n          }`);\n        });\n    } else {\n      document.body.classList.remove('dark');\n      cleanup();\n    }\n  }, [theme]);\n  return {\n    theme,\n    setTheme,\n  };\n};\n\nexport const useTheme = () => useContext(ThemeContext).theme;\n"
  },
  {
    "path": "packages/fusion-ui/src/provider/index.tsx",
    "content": "export * from './provider';\nexport * from './contexts/locale-context';\nexport * from './contexts/theme-context';\n"
  },
  {
    "path": "packages/fusion-ui/src/provider/provider.tsx",
    "content": "import {\n  I18nBundlesNames,\n  LocaleContext,\n  LocaleContextValue,\n  useI18nBundle,\n  CustomI18nBundles,\n  LanguageType,\n  useLocaleContextValue,\n  useLanguage,\n} from '@/provider/contexts/locale-context';\nimport {\n  ThemeContext,\n  ThemeContextValue,\n  ThemeType,\n  useThemeContextValue,\n} from '@/provider/contexts/theme-context';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { ConfigProvider } from '@alifd/next';\nimport enUS from '@alifd/next/lib/locale/en-us';\nimport zhCN from '@alifd/next/lib/locale/zh-cn';\n\nexport type GlobalConfig = LocaleContextValue & ThemeContextValue;\n\nexport const GlobalConfigProvider: React.FC<{\n  theme?: ThemeType;\n  language?: LanguageType;\n  i18nBundles?: CustomI18nBundles;\n}> = ({ theme: propsTheme, language, i18nBundles, children }) => {\n  const themeContextValue = useThemeContextValue(propsTheme);\n  const localeContextValue = useLocaleContextValue(language, i18nBundles);\n\n  React.useEffect(() => {\n    themeContextValue.setTheme(propsTheme);\n  }, [propsTheme]);\n\n  return (\n    <LocaleContext.Provider value={localeContextValue}>\n      <ThemeContext.Provider value={themeContextValue}>\n        <ConfigProvider locale={localeContextValue.language === 'en-US' ? enUS : zhCN}>\n          {children}\n        </ConfigProvider>\n      </ThemeContext.Provider>\n    </LocaleContext.Provider>\n  );\n};\n\nGlobalConfigProvider.propTypes = {\n  theme: PropTypes.oneOf(['dark', 'light']),\n  language: PropTypes.oneOf(['zh-CN', 'en-US']),\n};\n\ninterface GlobalConfigOptions {\n  /**\n   * 使用的 i18nBundle 名称\n   */\n  i18nBundleName?: I18nBundlesNames;\n}\n\ninterface GlobalHocOption extends GlobalConfigOptions {\n  /**\n   * 转换函数\n   */\n  transform?: (props: any) => any;\n}\n\nexport const useGlobal = (options?: GlobalConfigOptions) => {\n  const localeContextValue = React.useContext(LocaleContext);\n  const i18nBundle = useI18nBundle(options?.i18nBundleName);\n  return React.useMemo(\n    () => ({\n      ...localeContextValue,\n      i18nBundle,\n    }),\n    [localeContextValue, i18nBundle],\n  );\n};\n\nexport function withGlobal<Props>(\n  ReactComp: React.ComponentType<Props & Partial<GlobalConfig>>,\n  options?: GlobalHocOption,\n) {\n  const { transform, ...others } = options;\n  const Comp = React.forwardRef<unknown, Props>((props, ref) => {\n    const globalConfig = useGlobal(others);\n    const newProps = transform ? transform(props) : props;\n\n    const componentProps = {\n      language: globalConfig.language,\n      i18nBundle: globalConfig.i18nBundle,\n      ...newProps,\n      ref,\n    };\n\n    return <ReactComp {...componentProps} />;\n  });\n  hoistNonReactStatics(Comp, ReactComp);\n  // 由于 displayName 在 React 属性中，不会被 hoistNonReactStatics 复制，需要单独处理\n  Comp.displayName = ReactComp.displayName;\n  return Comp;\n}\n\nexport function withBizGlobal<Props>(\n  ReactComp: React.ComponentType<Props & Partial<LocaleContextValue>>,\n  options?: {\n    i18nBundles: any;\n  },\n) {\n  const { i18nBundles = {} } = options;\n  const Comp = React.forwardRef<unknown, Props>((props, ref) => {\n    const language = useLanguage();\n\n    let i18nBundle = {};\n    if (language === 'en-US') {\n      i18nBundle = {\n        ...i18nBundles['zh-CN'],\n        ...i18nBundles['en-US'],\n      };\n    } else {\n      i18nBundle = i18nBundles['zh-CN'];\n    }\n\n    const componentProps = {\n      language,\n      i18nBundle,\n      ...props,\n      ref,\n    };\n\n    return <ReactComp {...componentProps} />;\n  });\n\n  hoistNonReactStatics(Comp, ReactComp);\n  // 由于 displayName 在 React 属性中，不会被 hoistNonReactStatics 复制，需要单独处理\n  Comp.displayName = ReactComp.displayName;\n  return Comp;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/types/dataSource.ts",
    "content": "export type DefaultLabel = string | number | boolean;\nexport type DefaultValue = string | number | boolean;\ntype DefaultKey = string | number;\nexport interface DataSourceNode<Label = DefaultLabel, Value = DefaultValue> {\n  label: Label;\n  value: Value;\n  key?: DefaultKey;\n  isLeaf?: boolean;\n  children?: this[];\n}\n\nexport type DataSource<Label = DefaultLabel, Value = DefaultValue> = Array<\n  DataSourceNode<Label, Value>\n>;\n\nexport type PromiseOrSync<T> = Promise<T> | T;\nexport type DataSourceService<Label = DefaultLabel, Value = DefaultValue> = () => PromiseOrSync<\n  DataSource<Label, Value>\n>;\n\nexport type DataSourceOnLoadNode<Label = DefaultLabel, Value = DefaultValue> = (\n  node: DataSourceNode<Label, Value>,\n) => DataSourceNode<Label, Value>;\nexport type LooseDataSource<Label = DefaultLabel, Value = DefaultValue> = Array<\n  Value | DataSourceNode<Label, Value>\n>;\n\nexport type AsyncDataSource<Label = DefaultLabel, Value = DefaultValue> =\n  | PromiseOrSync<DataSource<Label, Value>>\n  | DataSourceService<Label, Value>;\n"
  },
  {
    "path": "packages/fusion-ui/src/types/enum.ts",
    "content": "export type StatusType = 'success' | 'error' | 'warning' | 'notice' | 'help' | 'normal';\nexport const statusTypes: StatusType[] = [\n  'success',\n  'error',\n  'warning',\n  'notice',\n  'help',\n  'normal',\n];\n\nexport type ColorType = 'success' | 'error' | 'warning' | 'notice' | 'help' | 'normal' | string;\n"
  },
  {
    "path": "packages/fusion-ui/src/types/index.ts",
    "content": "export * from './enum';\nexport * from './dataSource';\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/checkComName.ts",
    "content": "import * as React from 'react';\n\n/**\n * 用于检测组件的 displayName\n */\nconst checkComName = <Props = unknown>(\n  checkElement: React.ReactNode,\n  sourceComp: React.ComponentType<Props>,\n  compDisplayName?: string | string[],\n): checkElement is React.ReactElement<Props> => {\n  const compDisplayNames = compDisplayName || [sourceComp.displayName?.toLowerCase()];\n\n  const displayNames: string[] = (\n    Array.isArray(compDisplayNames) ? compDisplayNames : [compDisplayNames]\n  )\n    .filter((item) => item)\n    .map((item) => item.toLowerCase());\n  if (!displayNames || !displayNames.length) {\n    return false;\n  }\n  if (React.isValidElement(checkElement)) {\n    const checkElementDisplayName = checkElement.type?.displayName?.toLowerCase();\n    if (checkElementDisplayName) {\n      return displayNames.includes(checkElementDisplayName);\n    }\n    return false;\n  }\n  return false;\n};\n\nexport default checkComName;\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/constants.ts",
    "content": "export const emptyFn = () => {};\nexport const emptyArray = [];\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/currency.ts",
    "content": "// 除下列特殊币种外，小数点后面一致保留两位,小数点前用,进行千分位。当前特殊货币规范取自ISO 4217 1 January 2019版本\nimport numvert from 'numvert';\n\nconst currencyMap = {\n  BHD: {\n    e: 3,\n  },\n  BIF: {\n    e: 0,\n  },\n  CLF: {\n    e: 4,\n  },\n  CLP: {\n    e: 0,\n  },\n  DJF: {\n    e: 0,\n  },\n  GNF: {\n    e: 0,\n  },\n  IQD: {\n    e: 3,\n  },\n  ISK: {\n    e: 0,\n  },\n  JOD: {\n    e: 3,\n  },\n  JPY: {\n    e: 0,\n  },\n  KMF: {\n    e: 0,\n  },\n  KRW: {\n    e: 0,\n  },\n  KWD: {\n    e: 3,\n  },\n  LYD: {\n    e: 3,\n  },\n  OMR: {\n    e: 3,\n  },\n  PYG: {\n    e: 0,\n  },\n  RWF: {\n    e: 0,\n  },\n  TND: {\n    e: 3,\n  },\n  UGX: {\n    e: 0,\n  },\n  UYI: {\n    e: 0,\n  },\n  UYW: {\n    e: 4,\n  },\n  VUV: {\n    e: 0,\n  },\n  XAF: {\n    e: 0,\n  },\n  XOF: {\n    e: 0,\n  },\n  XPF: {\n    e: 0,\n  },\n  // 财务特殊处理\n  IDR: {\n    e: 0,\n  },\n  TWD: {\n    e: 0,\n  },\n  VND: {\n    e: 0,\n  },\n};\nconst CurrencyFormat = {\n  getFormatDetails(p) {\n    const { currency = 'CNY', precision = '' } = p;\n    if (!`${precision}`) {\n      // 不存在 precision 的情况下使用 currency\n      if (currencyMap[currency]) {\n        p.precision = currencyMap[currency].e;\n      } else {\n        p.precision = 2;\n      }\n    }\n    p.currency = currency;\n    return p;\n  },\n\n  getFormatter(n, fd) {\n    if (isNaN(n) || !`${n}`) {\n      return '';\n    }\n    const { precision } = fd;\n    const baseRule = '0,0';\n    let precisionRule = '';\n    if (precision > 0) {\n      for (let i = 0; i < precision; i++) {\n        precisionRule += '0';\n      }\n    }\n    const finalRule = precisionRule ? `${baseRule}.${precisionRule}` : baseRule;\n    const formatedData = numvert(n).format(finalRule);\n    return formatedData;\n  },\n  /**\n   *\n   * @param {*} value\n   * @param {*} currency [currency = CNY]货币种类,支持ISO_4217的code规范\n   * @param {*} config   [precision='']保留小数位数\n   */\n  formatAmount(value, currency = 'CNY', config = {}) {\n    config.currency = currency;\n    const formatDetail = this.getFormatDetails(config);\n    return this.getFormatter(value, formatDetail);\n  },\n};\n\nexport const formatAmount = CurrencyFormat.formatAmount.bind(CurrencyFormat);\nexport const currencyMapData = currencyMap;\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/dataSource/data-source-label.tsx",
    "content": "import * as React from 'react';\nimport { FC, ReactNode } from 'react';\nimport { useDataSourceNode } from './hooks';\nimport { AsyncDataSource, DefaultLabel, DefaultValue } from '@/types';\n\nexport interface DataSourceLabelProps<Label = DefaultLabel, Value = DefaultValue> {\n  dataSource?: AsyncDataSource<Label, Value>;\n  value?: Value;\n  defaultLabel?: ReactNode;\n}\nexport const DataSourceLabel: FC<DataSourceLabelProps> = (props) => {\n  const { data } = useDataSourceNode(props);\n  return <>{data?.label || props.defaultLabel}</>;\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/dataSource/hooks.ts",
    "content": "import { DefaultLabel, DefaultValue, AsyncDataSource } from '@/types';\nimport { useRequest } from 'ahooks';\nimport { findNodeFromDataSource, asyncDataSourceToPromiseDataSource } from './utils';\nimport { useMemo } from 'react';\n\ninterface UseDataSourceOptions<Label = DefaultLabel, Value = DefaultValue> {\n  dataSource?: AsyncDataSource<Label, Value>;\n}\n\nexport const useDataSource = <Label = DefaultLabel, Value = DefaultValue>(\n  options: UseDataSourceOptions<Label, Value>,\n) => useRequest(() => asyncDataSourceToPromiseDataSource(options.dataSource));\n\ninterface UseDataSourceNodeOptions<Label = DefaultLabel, Value = DefaultValue> {\n  dataSource?: AsyncDataSource<Label, Value>;\n  value?: Value;\n}\nexport const useDataSourceNode = <Label = DefaultLabel, Value = DefaultValue>(\n  options: UseDataSourceNodeOptions<Label, Value>,\n) => {\n  const { data: dataSource, ...res } = useDataSource(options);\n  const data = useMemo(\n    () => findNodeFromDataSource(dataSource, options.value),\n    [dataSource, options.value],\n  );\n  return {\n    data,\n    dataSource,\n    ...res,\n  };\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/dataSource/index.ts",
    "content": "export * from './utils';\nexport * from './hooks';\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/dataSource/utils.ts",
    "content": "import is from '@sindresorhus/is';\nimport { LooseDataSource, DefaultValue, DataSource, DefaultLabel, AsyncDataSource } from '@/types';\n\nexport const looseDataSourceToDataSource = <Value = DefaultValue>(\n  looseDataSource?: LooseDataSource<Value, Value>,\n): DataSource<Value, Value> =>\n  is.array(looseDataSource)\n    ? looseDataSource.map((vo) => {\n        if (is.object(vo) && 'value' in vo) {\n          return vo;\n        }\n        return {\n          label: vo,\n          value: vo,\n        };\n      })\n    : [];\n\n/**\n * 查找节点\n */\nexport const findNodeFromDataSource = <Label = DefaultLabel, Value = DefaultValue>(\n  dataSource: DataSource<Label, Value>,\n  value: Value,\n) => {\n  if (!is.array(dataSource) || is.nullOrUndefined(value)) {\n    return undefined;\n  }\n  return dataSource.find((vo) => vo.value === value);\n};\n/**\n * dataSource转换为Menu需要的格式\n */\nexport const dataSourceToMenuDataSource = <Label = DefaultLabel, Value = DefaultValue>(\n  dataSource: DataSource<Label, Value>,\n): DataSource<Label, Value> =>\n  is.array(dataSource)\n    ? dataSource.map((vo) => ({\n        label: vo.label,\n        key: vo.value as any,\n        value: vo.value,\n      }))\n    : [];\n\nexport const asyncDataSourceToPromiseDataSource = <Label = DefaultLabel, Value = DefaultValue>(\n  asyncDataSource: AsyncDataSource<Label, Value>,\n): Promise<DataSource<Label, Value>> => {\n  if (is.function_(asyncDataSource)) {\n    return Promise.resolve(asyncDataSource());\n  }\n  return Promise.resolve(asyncDataSource);\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/formatters.ts",
    "content": "import { formatAmount } from '@/utils/currency';\nimport numvert from 'numvert';\nimport is from '@sindresorhus/is';\nimport dayjs from 'dayjs';\n\n/** 金额格式化 */\nexport const formatMoney = (\n  /** 值, 金额 */\n  value: string | number,\n  /** 币种 */\n  currency?: string,\n) => {\n  if (is.nullOrUndefined(value)) {\n    return undefined;\n  }\n  return currency ? `${formatAmount(value, currency)} ${currency}` : formatAmount(value);\n};\n\nexport const formatNumber = (\n  /** 值 */\n  value?: string | number,\n  /** 格式, numvert支持的所有格式 */\n  format?: string,\n) => {\n  if (is.nullOrUndefined(value)) {\n    return undefined;\n  }\n  return format ? numvert(value).format(format) : value;\n};\n\nexport const formatPercent = (\n  /** 值 */\n  value?: string | number,\n  /** 格式, numvert支持的所有格式 */\n  format?: string,\n) => formatNumber(value, format || '0%');\n\nexport const formatBankCard = (\n  /** 值 */\n  value?: string | number,\n) => {\n  if (is.nullOrUndefined(value)) {\n    return undefined;\n  }\n  return `${value}`.replace(/(\\d{4})(?=\\d)/g, '$1 ');\n};\n\nconst presetDateTemplates = {\n  date: 'YYYY-MM-DD',\n  datetime: 'YYYY-MM-DD HH:mm:ss',\n  time: 'HH:mm:ss',\n};\n\n/**\n * 时间格式化\n * @param value 值, 时间\n * @param template 格式, dayjs 支持的所有格式\n */\nexport const formatDate = (value?: string | number, template = 'date') => {\n  if (is.nullOrUndefined(value)) {\n    return undefined;\n  }\n  return dayjs(value).format(presetDateTemplates[template] || template);\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/hooks/useFiledState.ts",
    "content": "import is from '@sindresorhus/is';\nimport { useCallback, useState, useRef, useEffect, SetStateAction } from 'react';\n\nexport interface FiledState<Value, OnChangeOtherArgs extends any[]> {\n  value?: Value;\n  defaultValue?: Value;\n  onChange?: (val: Value, ...args: OnChangeOtherArgs) => void;\n}\ntype SetFiledState<Value, OnChangeOtherArgs extends any[]> = (\n  val: SetStateAction<Value>,\n  ...args: OnChangeOtherArgs\n) => void;\nexport function useFiledState<Value = unknown, OnChangeOtherArgs extends any[] = []>(\n  options: FiledState<Value, OnChangeOtherArgs>,\n  isCtrl = 'value' in options,\n): [Value, SetFiledState<Value, OnChangeOtherArgs>] {\n  const [value, setValue] = useState(options.defaultValue);\n\n  const originSetState = useRef<SetFiledState<Value, OnChangeOtherArgs>>();\n  originSetState.current = (action, ...args) => {\n    const val = is.function_(action) ? action(value) : action;\n    if (!isCtrl) {\n      setValue(val);\n    }\n    if (options.onChange) {\n      options.onChange(val, ...args);\n    }\n  };\n\n  const setState = useCallback<SetFiledState<Value, OnChangeOtherArgs>>(\n    (...args) => originSetState.current(...args),\n    [],\n  );\n  useEffect(() => {\n    if (isCtrl) {\n      setValue(options.value);\n    }\n  }, [isCtrl, options.value]);\n  return [isCtrl ? options.value : value, setState];\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/index.ts",
    "content": "import * as ObjUtils from './object';\n\nexport { ObjUtils };\n\n/*\n * 数组转字符串\n */\nexport function arrayToString(ar, symbolChar) {\n  let result = '';\n  for (let i = 0; i < ar.length; i++) {\n    result += ar[i] + symbolChar;\n  }\n  if (result != '') {\n    result = result.substring(0, result.length - 1);\n  }\n  return result;\n}\n\nexport function getRandomIntInclusive(min, max) {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min; // The maximum is inclusive and the minimum is inclusive\n}\n\nfunction getCookie(name) {\n  let arr;\n  const reg = new RegExp(`(^| )${name}=([^;]*)(;|$)`);\n  if ((arr = document.cookie.match(reg))) {\n    return unescape(arr[2]);\n  } else {\n    return null;\n  }\n}\n\nexport function getLanguage() {\n  return getCookie('languageSet');\n}\n\nconst loadMap = {};\n\nexport function loadScriptAndCss({ jses = [], csses = [] }, once) {\n  const key = `${JSON.stringify(jses)}_${JSON.stringify(csses)}`;\n  if (loadMap[key]) {\n    return loadMap[key];\n  }\n  const promise = new Promise((resolve, reject) => {\n    const head = document.getElementsByTagName('head')[0];\n    csses\n      // .filter(url => !document.querySelector(`link[href=\"${url}\"]`))\n      .forEach((url) => {\n        const ref = document.createElement('link');\n        ref.rel = 'stylesheet';\n        ref.type = 'text/css';\n        ref.href = url;\n        head.appendChild(ref);\n      });\n    // jses = jses.filter(url => !document.querySelector(`script[src=\"${url}\"]`));\n    // 没有loadMap[key] 的情况指的是资源没通过现函数加载，并且已经存在\n    // if (!jses.length && !loadMap[key]) {\n    //   resolve(true);\n    // }\n    jses.forEach((url, index, array) => {\n      const ref = document.createElement('script');\n      ref.type = 'text/javascript';\n      ref.src = url;\n      ref.async = false;\n      if (index === array.length - 1) {\n        ref.onload = () => {\n          resolve(true);\n        };\n      }\n      document.body.appendChild(ref);\n    });\n  });\n  loadMap[key] = promise;\n  return promise;\n}\n\n// 快速id生成器\nfunction gid(len) {\n  // 随机ID生成\n  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n  const uuid = [];\n  let i;\n  const radix = chars.length;\n\n  if (len) {\n    // Compact form\n    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\n  } else {\n    // rfc4122, version 4 form\n    let r;\n\n    // rfc4122 requires these characters\n    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n    uuid[14] = '4';\n\n    // Fill in random data.  At i==19 set the high bits of clock sequence as\n    // per rfc4122, sec. 4.1.5\n    for (i = 0; i < 36; i++) {\n      if (!uuid[i]) {\n        r = 0 | (Math.random() * 16);\n        uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];\n      }\n    }\n  }\n  return uuid.join('');\n}\n\n// 随机ID生成\nexport function getId() {\n  return gid(8);\n}\n\n// 为日期添加格式化功能\nDate.prototype.format = function (fmt) {\n  // author: meizz\n  const o = {\n    'M+': this.getMonth() + 1, // 月份\n    'd+': this.getDate(), // 日\n    'h+': this.getHours(), // 小时\n    'm+': this.getMinutes(), // 分\n    's+': this.getSeconds(), // 秒\n    'q+': Math.floor((this.getMonth() + 3) / 3), // 季度\n    S: this.getMilliseconds(), // 毫秒\n  };\n  if (/(y+)/.test(fmt))\n    fmt = fmt.replace(RegExp.$1, `${this.getFullYear()}`.substr(4 - RegExp.$1.length));\n  for (const k in o)\n    if (new RegExp(`(${k})`).test(fmt))\n      fmt = fmt.replace(\n        RegExp.$1,\n        RegExp.$1.length == 1 ? o[k] : `00${o[k]}`.substr(`${o[k]}`.length),\n      );\n  return fmt;\n};\n\n// 深度克隆\nexport function clone(obj) {\n  let result = obj;\n  if (obj != null && typeof obj === 'object') {\n    result = JSON.parse(JSON.stringify(obj));\n  }\n  return result;\n}\n\nexport function measureText(text, style) {\n  let lDiv = document.getElementById('measureTextFake');\n  if (!lDiv) {\n    lDiv = document.createElement('div');\n    lDiv.id = 'measureTextFake';\n    document.body.appendChild(lDiv);\n  }\n\n  if (style != null) {\n    lDiv.style.fontSize = style.fontSize;\n    lDiv.style.fontFamily = style.fontFamily;\n  }\n  lDiv.style.position = 'absolute';\n  lDiv.style.left = '-1000px';\n  lDiv.style.top = '-100px';\n  lDiv.style.padding = '0 3px';\n  lDiv.style.visibility = 'hidden';\n\n  lDiv.innerHTML = text;\n\n  const lResult = {\n    width: lDiv.clientWidth,\n    height: lDiv.clientHeight,\n  };\n\n  return lResult;\n}\n\n// 提取url参数\nexport function getUrlParam(name) {\n  return (\n    decodeURIComponent(\n      (new RegExp(`[?|&]${name}=([^&;]+?)(&|#|;|$)`, 'i').exec(location.search) || [\n        undefined,\n        '',\n      ])[1].replace(/\\+/g, '%20'),\n    ) || null\n  );\n}\n\nexport const getByPath = (obj, path = '') => {\n  path = path.replace(/\\[(\\S+?)]/g, '.$1');\n  return path.split('.').reduce((p, c) => p && p[c], obj);\n};\n\nexport const setByPath = (obj, path = '', value) => {\n  path = path.replace(/\\[(\\S+?)]/g, '.$1');\n  return path.split('.').reduce((p, c, i, arr) => {\n    if (i === arr.length - 1 && p) {\n      p[c] = value;\n      return obj;\n    }\n    return p && p[c];\n  }, obj);\n};\n\nexport function transferProps(props, keys) {\n  const out = {};\n  keys &&\n    keys.forEach((key) => {\n      out[key] = props[key];\n    });\n  return out;\n}\n\nexport function isEditorEnv(props) {\n  const { __designMode } = props;\n  return __designMode === 'design';\n}\n\n// 数组去重\nexport function uniqueArray(arr) {\n  return arr.filter((item, index, arr) => {\n    // 当前元素，在原始数组中的第一个索引==当前索引值，否则返回当前元素\n    return arr.indexOf(item, 0) === index;\n  });\n}\n\nexport function getContentParentElement(ele: any, i = 0): any {\n  if (!ele || i > 100) {\n    return;\n  }\n  i++;\n  if (ele.parentElement && ele.clientHeight <= ele.parentElement.clientHeight) {\n    return getContentParentElement(ele.parentElement, i);\n  }\n  return ele;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/locales/index.ts",
    "content": "import ProTable from '@/components/pro-table/i18n';\nimport Filter from '@/components/container/i18n';\n\nexport const locales = {\n  ProTable,\n  Filter,\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/object.ts",
    "content": "import React from 'react';\n\n/**\n * 获取对象的类型\n * @param  {*} obj\n * @return {String}\n *\n * @example\n * typeOf([]) === 'Array'\n * typeOf() === 'Undefined'\n * typeOf(1) === 'Number'\n */\nexport function typeOf(obj) {\n  return Object.prototype.toString.call(obj).replace(/\\[object\\s|]/g, '');\n}\n\n/**\n * 判断是否是数组或类数组对象\n * @param  {*}  obj\n * @return {Boolean}\n *\n * @example\n * isArrayLike([]) === true\n * isArrayLike(arguments) === true\n * isArrayLike(this.props.children) === true\n */\nexport function isArrayLike(obj) {\n  const length = !!obj && 'length' in obj && obj.length;\n  const type = typeOf(obj);\n\n  return (\n    type === 'Array' ||\n    length === 0 ||\n    (typeof length === 'number' && length > 0 && length - 1 in obj)\n  );\n}\n\n/**\n * 判断对象是否是一个promise，即是否可以用.then\n * @param  {*}  obj\n * @return {Boolean}\n */\nexport function isPromise(obj) {\n  return (\n    !!obj &&\n    (typeof obj === 'object' || typeof obj === 'function') &&\n    typeof obj.then === 'function'\n  );\n}\n\n/**\n * 是否是一个纯净的对象\n * @param  {*}  obj\n * @return {Boolean}\n * @reference https://github.com/jonschlinkert/is-plain-object\n */\nexport function isPlainObject(obj) {\n  if (typeOf(obj) !== 'Object') {\n    return false;\n  }\n\n  const ctor = obj.constructor;\n\n  if (typeof ctor !== 'function') {\n    return false;\n  }\n\n  const prot = ctor.prototype;\n\n  if (typeOf(prot) !== 'Object') {\n    return false;\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(prot, 'isPrototypeOf')) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * 对象浅比较\n * @param  {Object} objA\n * @param  {Object} objB\n * @param  {Function}  [compare] 手动调用方法比较\n * @return {Boolean}      对象浅比较是否相等\n *\n * @example\n * object.shallowEqual({a: 100}, {a: 100}); // true\n */\nexport function shallowEqual(objA, objB, compare) {\n  if (objA === objB) {\n    return true;\n  }\n\n  // 其中一个不是object，则不相等\n  if (!objA || !objB || typeof objA + typeof objB !== 'objectobject') {\n    return false;\n  }\n\n  const keyA = Object.keys(objA);\n  const keyB = Object.keys(objB);\n  const len = keyA.length;\n\n  // key 数量不一致则不相等\n  if (len !== keyB.length) {\n    return false;\n  }\n\n  const hasCallback = typeof compare === 'function';\n\n  for (let i = 0; i < len; i++) {\n    const key = keyA[i];\n\n    if (!Object.prototype.hasOwnProperty.call(objB, key)) {\n      return false;\n    }\n\n    const valA = objA[key];\n    const valB = objB[key];\n\n    const ret = hasCallback ? compare(valA, valB, key) : undefined;\n\n    if (ret === false || (ret === undefined && valA !== valB)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * 遍历对象或数组，或者类数组，例如React中的children对象、arguments等\n * @param  {Object|Array}   obj\n * @param  {Function} callback fn(n, i) or fn(val, key)\n * @param  {Number}   [direction = 1] 是否倒序遍历，只对数组有效\n * @return {Object|Array}\n *\n * @example\n * // 遍历数组\n * object.each([100, 200, 300], (n, i) => console.log(n, i));\n * // 遍历json对象\n * object.each({a: 100, b: 200}, (value, key) => console.log(key, value));\n * // 遍历React子节点\n * object.each(this.props.children, (child, index) => console.log(child));\n * // 遍历arguments\n * object.each(arguments, (arg, i) => console.log(arg));\n */\nexport function each(obj, callback, direction) {\n  const reversed = direction === -1;\n  const { length } = obj;\n  let value;\n  let i = reversed ? length - 1 : 0;\n\n  if (isArrayLike(obj)) {\n    for (; i < length && i >= 0; reversed ? i-- : i++) {\n      value = callback.call(obj[i], obj[i], i);\n\n      if (value === false) {\n        break;\n      }\n    }\n  } else {\n    for (i in obj) {\n      /* istanbul ignore else */\n      if (Object.prototype.hasOwnProperty.call(obj, i)) {\n        value = callback.call(obj[i], obj[i], i);\n\n        if (value === false) {\n          break;\n        }\n      }\n    }\n  }\n\n  return obj;\n}\n\n// @private 判断key是否在数组或对象中\nconst _isInObj = (key, obj, isArray) => (isArray ? obj.indexOf(key) > -1 : key in obj);\n\nexport function pickDefined(obj: any) {\n  const newObj: Record<string, any> = {};\n  Object.keys(obj).forEach((i) => {\n    if (typeof obj[i] !== 'undefined') {\n      newObj[i] = obj[i] as any;\n    }\n  });\n  return newObj;\n}\n\n/**\n * 过滤出其它属性\n * @param  {Object|Array} holdProps 过滤的参照对象，最终的结果只保留不在参照对象中的key\n * @param  {Object} props     被过滤的对象\n * @return {Object}           others\n *\n * @example\n * object.pickOthers(FooComponent.propTypes, this.props);\n * object.pickOthers(['className', 'onChange'], this.props);\n */\nexport function pickOthers(holdProps, props) {\n  const others = {};\n  const isArray = typeOf(holdProps) === 'Array';\n\n  for (const key in props) {\n    if (!_isInObj(key, holdProps, isArray)) {\n      others[key] = props[key];\n    }\n  }\n\n  return others;\n}\n\n/**\n * 过滤出需要的属性\n * @param  {Object|Array} holdProps 过滤的参照对象，最终的结果只保留在参照对象中的key\n * @param  {Object} props     被过滤的对象\n * @return {Object}           others\n *\n * @example\n * object.pickProps(FooComponent.propTypes, this.props);\n * object.pickProps(['className', 'onChange'], this.props);\n */\nexport function pickProps(holdProps, props) {\n  const others = {};\n  const isArray = typeOf(holdProps) === 'Array';\n\n  for (const key in props) {\n    if (_isInObj(key, holdProps, isArray)) {\n      others[key] = props[key];\n    }\n  }\n\n  return others;\n}\n\n/**\n * 过滤出带prefix的属性\n * @param  {Object} holdProps 过滤的参照对象，最终的结果只保留不在参照对象中的key\n * @param  {string} prefix    包含的字符串\n * @return {Object}           others\n *\n * @example\n * object.pickAttrsWith(FooComponent.propTypes, 'data-');\n */\nexport function pickAttrsWith(holdProps, prefix) {\n  const others = {};\n\n  for (const key in holdProps) {\n    if (key.match(prefix)) {\n      others[key] = holdProps[key];\n    }\n  }\n\n  return others;\n}\n\n/**\n * Checks if value is `null` or `undefined`.\n * @param {*} value\n * @return {Boolean}\n */\nexport function isNil(value) {\n  // It will returns `true` only if `null` or `undefined` compare with `null`\n  // with loose equaliy\n  return value == null; // eslint-disable-line eqeqeq\n}\n\n/**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n * @reference https://stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge?page=1&tab=votes#tab-top\n */\nexport function deepMerge(target, ...sources) {\n  if (!sources.length) return target;\n  const source = sources.shift();\n\n  if (!isPlainObject(target)) {\n    target = {};\n  }\n\n  if (isPlainObject(target) && isPlainObject(source)) {\n    for (const key in source) {\n      // 如果是object 进行深拷贝\n      if (isPlainObject(source[key]) && !React.isValidElement(source[key])) {\n        if (!target[key]) Object.assign(target, { [key]: {} });\n        // fix {a: 'te'}, {a:{b:3}}\n        if (!isPlainObject(target[key])) {\n          target[key] = source[key];\n        }\n        deepMerge(target[key], source[key]);\n        // string/number/function/react node 等直接复制\n      } else {\n        Object.assign(target, { [key]: source[key] });\n      }\n    }\n  }\n\n  return deepMerge(target, ...sources);\n}\n\n/**\n * 组件是否为 Fucntion Component\n * @param {*} component 传入的组件\n */\nexport function isFunctionComponent(component) {\n  return (\n    typeOf(component) === 'Function' &&\n    component.prototype &&\n    component.prototype.isReactComponent === undefined\n  );\n}\n\n/**\n * 组件是否为 Class Component\n * @param {*} component  传入的组件\n */\nexport function isClassComponent(component) {\n  return (\n    typeOf(component) === 'Function' &&\n    component.prototype &&\n    component.prototype.isReactComponent !== undefined\n  );\n}\n\n/**\n * 判断是否为 ReactFragment\n * @param {*} component  传入的组件\n */\nexport function isReactFragment(component) {\n  if (isNil(component)) {\n    return false;\n  }\n\n  if (component.type) {\n    return component.type === React.Fragment;\n  }\n  return component === React.Fragment;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/date.js",
    "content": "'use strict';\n\nexports.__esModule = true;\n\nconst _dayjs = require('dayjs');\n\nconst _dayjs2 = _interopRequireDefault(_dayjs);\n\nconst _customParseFormat = require('dayjs/plugin/customParseFormat');\n\nconst _customParseFormat2 = _interopRequireDefault(_customParseFormat);\n\nconst _updateLocale = require('dayjs/plugin/updateLocale');\n\nconst _updateLocale2 = _interopRequireDefault(_updateLocale);\n\nconst _localeData = require('dayjs/plugin/localeData');\n\nconst _localeData2 = _interopRequireDefault(_localeData);\n\nconst _quarterOfYear = require('dayjs/plugin/quarterOfYear');\n\nconst _quarterOfYear2 = _interopRequireDefault(_quarterOfYear);\n\nconst _advancedFormat = require('dayjs/plugin/advancedFormat');\n\nconst _advancedFormat2 = _interopRequireDefault(_advancedFormat);\n\nconst _weekOfYear = require('dayjs/plugin/weekOfYear');\n\nconst _weekOfYear2 = _interopRequireDefault(_weekOfYear);\n\nrequire('dayjs/locale/zh-cn');\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\n_dayjs2.default.extend(_advancedFormat2.default);\n_dayjs2.default.extend(_quarterOfYear2.default);\n_dayjs2.default.extend(_customParseFormat2.default);\n_dayjs2.default.extend(_updateLocale2.default);\n_dayjs2.default.extend(_localeData2.default);\n_dayjs2.default.extend(_weekOfYear2.default);\n_dayjs2.default.locale('zh-cn');\n\nconst datejs = _dayjs2.default;\ndatejs.isSelf = _dayjs2.default.isDayjs;\n\n_dayjs2.default.localeData();\n\nexports.default = datejs;\nmodule.exports = exports.default;\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/dom.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.matches = exports.hasDOM = undefined;\n\nconst _typeof2 = require('babel-runtime/helpers/typeof');\n\nconst _typeof3 = _interopRequireDefault(_typeof2);\n\nexports.hasClass = hasClass;\nexports.addClass = addClass;\nexports.removeClass = removeClass;\nexports.toggleClass = toggleClass;\nexports.getStyle = getStyle;\nexports.setStyle = setStyle;\nexports.scrollbar = scrollbar;\nexports.getOffset = getOffset;\nexports.getPixels = getPixels;\nexports.getClosest = getClosest;\nexports.getMatches = getMatches;\n\nconst _string = require('./string');\n\nconst _object = require('./object');\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\n/**\n * 是否能使用 DOM 方法\n * @type {Boolean}\n */\nconst hasDOM = (exports.hasDOM =\n  typeof window !== 'undefined' && !!window.document && !!document.createElement);\n\n/**\n * 节点是否包含指定 className\n * @param  {Element}  node\n * @param  {String}  className\n * @return {Boolean}\n *\n * @example\n * dom.hasClass(document.body, 'foo');\n */\nfunction hasClass(node, className) {\n  /* istanbul ignore if */\n  if (!hasDOM || !node) {\n    return false;\n  }\n\n  if (node.classList) {\n    return node.classList.contains(className);\n  } else {\n    return node.className.indexOf(className) > -1;\n  }\n}\n\n/**\n * 添加 className\n * @param {Element} node\n * @param {String} className\n *\n * @example\n * dom.addClass(document.body, 'foo');\n */\nfunction addClass(node, className, _force) {\n  /* istanbul ignore if */\n  if (!hasDOM || !node) {\n    return;\n  }\n\n  if (node.classList) {\n    node.classList.add(className);\n  } else if (_force === true || !hasClass(node, className)) {\n    node.className += ` ${className}`;\n  }\n}\n\n/**\n * 移除 className\n * @param  {Element} node\n * @param  {String} className\n *\n * @example\n * dom.removeClass(document.body, 'foo');\n */\nfunction removeClass(node, className, _force) {\n  /* istanbul ignore if */\n  if (!hasDOM || !node) {\n    return;\n  }\n\n  if (node.classList) {\n    node.classList.remove(className);\n  } else if (_force === true || hasClass(node, className)) {\n    node.className = node.className.replace(className, '').replace(/\\s+/g, ' ').trim();\n  }\n}\n\n/**\n * 切换 className\n * @param  {Element} node\n * @param  {String} className\n * @return {Boolean}           执行后节点上是否还有此 className\n *\n * @example\n * dom.toggleClass(document.body, 'foo');\n */\nfunction toggleClass(node, className) {\n  /* istanbul ignore if */\n  if (!hasDOM || !node) {\n    return false;\n  }\n\n  if (node.classList) {\n    return node.classList.toggle(className);\n  } else {\n    const flag = hasClass(node, className);\n    flag ? removeClass(node, className, true) : addClass(node, className, true);\n\n    return !flag;\n  }\n}\n\n/**\n * 元素是否匹配 CSS 选择器\n * @param  {Element} node       DOM 节点\n * @param  {String}  selector   CSS 选择器\n * @return {Boolean}\n *\n * @example\n * dom.matches(mountNode, '.container'); // boolean\n */\nconst matches = (exports.matches = (function () {\n  let matchesFn = null;\n  /* istanbul ignore else */\n  if (hasDOM) {\n    const _body = document.body || document.head;\n    matchesFn = _body.matches\n      ? 'matches'\n      : _body.webkitMatchesSelector\n      ? 'webkitMatchesSelector'\n      : _body.msMatchesSelector\n      ? 'msMatchesSelector'\n      : _body.mozMatchesSelector\n      ? 'mozMatchesSelector'\n      : null;\n  }\n\n  return function (node, selector) {\n    if (!hasDOM || !node) {\n      return false;\n    }\n\n    return matchesFn ? node[matchesFn](selector) : false;\n  };\n})());\n\n/**\n * 获取元素计算后的样式\n * @private\n * @param  {Element} node\n * @return {Object}\n */\nfunction _getComputedStyle(node) {\n  return node && node.nodeType === 1 ? window.getComputedStyle(node, null) : {};\n}\n\nconst PIXEL_PATTERN = /margin|padding|width|height|max|min|offset|size|top/i;\nconst removePixel = { left: 1, top: 1, right: 1, bottom: 1 };\n\n/**\n * 校验并修正元素的样式属性值\n * @private\n * @param  {Element} node\n * @param  {String} type\n * @param  {Number} value\n */\nfunction _getStyleValue(node, type, value) {\n  type = type.toLowerCase();\n\n  if (value === 'auto') {\n    if (type === 'height') {\n      return node.offsetHeight || 0;\n    }\n    if (type === 'width') {\n      return node.offsetWidth || 0;\n    }\n  }\n\n  if (!(type in removePixel)) {\n    // 属性值是否需要去掉 px 单位，这里假定此类的属性值都是 px 为单位的\n    removePixel[type] = PIXEL_PATTERN.test(type);\n  }\n\n  return removePixel[type] ? parseFloat(value) || 0 : value;\n}\n\nconst floatMap = { cssFloat: 1, styleFloat: 1, float: 1 };\n\n/**\n * 获取元素计算后的样式\n * @param  {Element} node DOM 节点\n * @param  {String} name 属性名\n * @return {Number|Object}\n */\nfunction getStyle(node, name) {\n  /* istanbul ignore if */\n  if (!hasDOM || !node) {\n    return null;\n  }\n\n  const style = _getComputedStyle(node);\n\n  // 如果不指定属性名，则返回全部值\n  if (arguments.length === 1) {\n    return style;\n  }\n\n  name = floatMap[name] ? ('cssFloat' in node.style ? 'cssFloat' : 'styleFloat') : name;\n\n  return _getStyleValue(\n    node,\n    name,\n    style.getPropertyValue((0, _string.hyphenate)(name)) ||\n      node.style[(0, _string.camelcase)(name)],\n  );\n}\n\n/**\n * 设置元素的样式\n * @param {Element} node  DOM 节点\n * @param {Object|String} name  属性名，或者是一个对象，包含多个属性\n * @param {Number|String} value 属性值\n *\n * @example\n * // 设置单个属性值\n * dom.setStyle(mountNode, 'width', 100);\n * // 设置多条属性值\n * dom.setStyle(mountNode, {\n *     width: 100,\n *     height: 200\n * });\n */\nfunction setStyle(node, name, value) {\n  /* istanbul ignore if */\n  if (!hasDOM || !node) {\n    return false;\n  }\n\n  // 批量设置多个值\n  if (\n    (typeof name === 'undefined' ? 'undefined' : (0, _typeof3.default)(name)) === 'object' &&\n    arguments.length === 2\n  ) {\n    (0, _object.each)(name, (val, key) => {\n      return setStyle(node, key, val);\n    });\n  } else {\n    name = floatMap[name] ? ('cssFloat' in node.style ? 'cssFloat' : 'styleFloat') : name;\n    if (typeof value === 'number' && PIXEL_PATTERN.test(name)) {\n      value += 'px';\n    }\n    node.style[(0, _string.camelcase)(name)] = value; // IE8 support\n  }\n}\n\n/**\n * 获取默认的滚动条大小\n * @return {Object} width, height\n */\nfunction scrollbar() {\n  const scrollDiv = document.createElement('div');\n  scrollDiv.className += 'just-to-get-scrollbar-size';\n\n  setStyle(scrollDiv, {\n    position: 'absolute',\n    width: '100px',\n    height: '100px',\n    overflow: 'scroll',\n    top: '-9999px',\n  });\n  document.body && document.body.appendChild(scrollDiv);\n  const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  const scrollbarHeight = scrollDiv.offsetHeight - scrollDiv.clientHeight;\n  document.body.removeChild(scrollDiv);\n\n  return {\n    width: scrollbarWidth,\n    height: scrollbarHeight,\n  };\n}\n\n/**\n * 获取元素距离视口顶部和左边的偏移距离\n * @return {Object} top, left\n */\nfunction getOffset(node) {\n  const rect = node.getBoundingClientRect();\n  const win = node.ownerDocument.defaultView;\n  return {\n    top: rect.top + win.pageYOffset,\n    left: rect.left + win.pageXOffset,\n  };\n}\n\n/**\n * 获取不同单位转为 number 的长度\n * @param {string|number} len 传入的长度\n * @return {number} pixels\n */\nfunction getPixels(len) {\n  const win = document.defaultView;\n  if (typeof +len === 'number' && !isNaN(+len)) {\n    return +len;\n  }\n\n  if (typeof len === 'string') {\n    const PX_REG = /(\\d+)px/;\n    const VH_REG = /(\\d+)vh/;\n    if (Array.isArray(len.match(PX_REG))) {\n      return +len.match(PX_REG)[1] || 0;\n    }\n\n    if (Array.isArray(len.match(VH_REG))) {\n      const _1vh = win.innerHeight / 100;\n      return +(len.match(VH_REG)[1] * _1vh) || 0;\n    }\n  }\n\n  return 0;\n}\n\n/**\n * 匹配特定选择器且离当前元素最近的祖先元素（也可以是当前元素本身），如果匹配不到，则返回 null\n * @param {element} dom 待匹配的元素\n * @param {string} selecotr 选择器\n * @return {element} parent\n */\nfunction getClosest(dom, selector) {\n  /* istanbul ignore if */\n  if (!hasDOM || !dom) {\n    return null;\n  }\n\n  // ie9\n  /* istanbul ignore if */\n  if (!Element.prototype.closest) {\n    if (!document.documentElement.contains(dom)) return null;\n    do {\n      if (getMatches(dom, selector)) return dom;\n      dom = dom.parentElement;\n    } while (dom !== null);\n  } else {\n    return dom.closest(selector);\n  }\n  return null;\n}\n\n/**\n * 如果元素被指定的选择器字符串选择，getMatches()  方法返回true; 否则返回false\n * @param {element} dom 待匹配的元素\n * @param {string} selecotr 选择器\n * @return {element} parent\n */\nfunction getMatches(dom, selector) {\n  /* istanbul ignore if */\n  if (!hasDOM || !dom) {\n    return null;\n  }\n\n  /* istanbul ignore if */\n  if (Element.prototype.matches) {\n    return dom.matches(selector);\n  } else if (Element.prototype.msMatchesSelector) {\n    return dom.msMatchesSelector(selector);\n  } else if (Element.prototype.webkitMatchesSelector) {\n    return dom.webkitMatchesSelector(selector);\n  }\n\n  return null;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/env.js",
    "content": "'use strict';\n\nexports.__esModule = true;\n/**\n * IE浏览器的渲染引擎版本号\n * 注意：此属性与浏览器版本号不同，IE的渲染引擎版本号是可以通过HTML header或手动设置去更改的\n * @type {Number} 6 ~ 11\n */\nconst ieVersion = (exports.ieVersion =\n  typeof document !== 'undefined' ? document.documentMode : undefined);\n\n/**\n * 判断是否是生产环境\n * @type {Boolean}\n */\nconst isProduction = (exports.isProduction = function isProduction() {\n  const PRODUCTION_ENV = 'production';\n  let result = false;\n  try {\n    if (process.env.NODE_ENV === PRODUCTION_ENV) {\n      result = true;\n    }\n  } catch (err) {\n    //\n  }\n\n  return result;\n});\n\nexports.default = {\n  ieVersion,\n  isProduction,\n};\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/events.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.on = on;\nexports.once = once;\n/**\n * 取消事件绑定\n * @param  {*}   node       DOM节点或任何可以绑定事件的对象\n * @param  {String}   eventName  事件名\n * @param  {Function} callback   回调方法\n * @param  {Boolean}   [useCapture=false] 是否开启事件捕获优先\n */\nfunction _off(node, eventName, callback, useCapture) {\n  /* istanbul ignore else */\n  if (node.removeEventListener) {\n    node.removeEventListener(eventName, callback, useCapture || false);\n  }\n}\n\n/**\n * 绑定事件\n * @param  {*}   node       DOM节点或任何可以绑定事件的对象\n * @param  {String}   eventName  事件名\n * @param  {Function} callback   回调方法\n * @param  {Boolean}   useCapture 是否开启事件捕获优先\n * @return {Object}               返回的object中包含一个off方法，用于取消事件监听\n *\n * @example\n * const handler = events.on(document.body, 'click', e => {\n *     // handle click ...\n * });\n * // 取消事件绑定\n * handler.off();\n */\nexports.off = _off;\nfunction on(node, eventName, callback, useCapture) {\n  /* istanbul ignore else */\n  if (node.addEventListener) {\n    node.addEventListener(eventName, callback, useCapture || false);\n  }\n\n  return {\n    off: function off() {\n      return _off(node, eventName, callback, useCapture);\n    },\n  };\n}\n\n/**\n * 绑定事件，只执行一次后销毁\n * @param  {*}   node       DOM节点或任何可以绑定事件的对象\n * @param  {String}   eventName  事件名\n * @param  {Function} callback   回调方法\n * @param  {Boolean}   useCapture 是否开启事件捕获优先\n * @return {Function}             返回的object中包含一个off方法，用于取消事件监听\n */\nfunction once(node, eventName, callback, useCapture) {\n  return on(\n    node,\n    eventName,\n    function __fn() {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      callback.apply(this, args);\n\n      // 由于addEventListener中的参数options只在Chrome 55、Firefox(Gecko)以上版本支持，故还是用传统的方法实现once\n      _off(node, eventName, __fn, useCapture);\n    },\n    useCapture,\n  );\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/focus.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.getFocusNodeList = getFocusNodeList;\nexports.saveLastFocusNode = saveLastFocusNode;\nexports.clearLastFocusNode = clearLastFocusNode;\nexports.backLastFocusNode = backLastFocusNode;\nexports.limitTabRange = limitTabRange;\n\nconst _keycode = require('./keycode');\n\nconst _keycode2 = _interopRequireDefault(_keycode);\n\nconst _object = require('./object');\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\n/**\n * 用于切换页面元素的焦点\n */\n\n/**\n * 元素是否可见\n * @private\n * @param   {Element}  node\n * @return  {Boolean}\n */\nfunction _isVisible(node) {\n  while (node) {\n    if (node === document.body || node === document.documentElement) {\n      break;\n    }\n    if (node.style.display === 'none' || node.style.visibility === 'hidden') {\n      return false;\n    }\n    node = node.parentNode;\n  }\n  return true;\n}\n\n/**\n * 元素是否可以获取焦点\n * @private\n * @param   {Element}  node\n * @return  {Boolean}\n */\nfunction _isFocusable(node) {\n  const nodeName = node.nodeName.toLowerCase();\n  const tabIndex = parseInt(node.getAttribute('tabindex'), 10);\n  const hasTabIndex = !isNaN(tabIndex) && tabIndex > -1;\n\n  if (_isVisible(node)) {\n    if (nodeName === 'input') {\n      return !node.disabled && node.type !== 'hidden';\n    } else if (['select', 'textarea', 'button'].indexOf(nodeName) > -1) {\n      return !node.disabled;\n    } else if (nodeName === 'a') {\n      return node.getAttribute('href') || hasTabIndex;\n    } else {\n      return hasTabIndex;\n    }\n  }\n  return false;\n}\n\n/**\n * 列出能获取焦点的子节点\n * @param  {Element} node 容器节点\n * @return {Array<Element>}\n */\nfunction getFocusNodeList(node) {\n  const res = [];\n  const nodeList = node.querySelectorAll('*');\n\n  (0, _object.each)(nodeList, (item) => {\n    if (_isFocusable(item)) {\n      const method = item.getAttribute('data-auto-focus') ? 'unshift' : 'push';\n      res[method](item);\n    }\n  });\n\n  if (_isFocusable(node)) {\n    res.unshift(node);\n  }\n\n  return res;\n}\n\n// 用于记录上一次获得焦点的无素\nlet lastFocusElement = null;\n\n/**\n * 保存最近一次获得焦点的无素\n */\nfunction saveLastFocusNode() {\n  lastFocusElement = document.activeElement;\n}\n\n/**\n * 清除焦点记录\n */\nfunction clearLastFocusNode() {\n  lastFocusElement = null;\n}\n\n/**\n * 尝试将焦点切换到上一个元素\n */\nfunction backLastFocusNode() {\n  if (lastFocusElement) {\n    try {\n      // 元素可能已经被移动了\n      lastFocusElement.focus();\n    } catch (e) {\n      // ignore ...\n    }\n  }\n}\n\n/**\n * 在限制的范围内切换焦点\n * @param  {Element} node 容器节点\n * @param  {Event} e      键盘事件\n */\nfunction limitTabRange(node, e) {\n  if (e.keyCode === _keycode2.default.TAB) {\n    const tabNodeList = getFocusNodeList(node);\n    const maxIndex = tabNodeList.length - 1;\n    const index = tabNodeList.indexOf(document.activeElement);\n\n    if (index > -1) {\n      let targetIndex = index + (e.shiftKey ? -1 : 1);\n      targetIndex < 0 && (targetIndex = maxIndex);\n      targetIndex > maxIndex && (targetIndex = 0);\n      tabNodeList[targetIndex].focus();\n      e.preventDefault();\n    }\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/func.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.prevent = exports.noop = undefined;\nexports.makeChain = makeChain;\nexports.bindCtx = bindCtx;\nexports.promiseCall = promiseCall;\nexports.invoke = invoke;\nexports.renderNode = renderNode;\n\nconst _object = require('./object');\n\n/**\n * 一个空方法，返回入参本身或空对象\n */\nconst noop = (exports.noop = function noop() {});\n\n/**\n * 一个空方法，返回false\n */\nconst prevent = (exports.prevent = function prevent() {\n  return false;\n});\n\n/**\n * 将N个方法合并为一个链式调用的方法\n * @return {Function}     合并后的方法\n * 参考 https://github.com/react-component/util/\n *\n * @example\n * func.makeChain(this.handleChange, this.props.onChange);\n */\nfunction makeChain() {\n  for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n\n  if (fns.length === 1) {\n    return fns[0];\n  }\n\n  return function chainedFunction() {\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    for (let i = 0, j = fns.length; i < j; i++) {\n      if (fns[i] && fns[i].apply) {\n        fns[i].apply(this, args);\n      }\n    }\n  };\n}\n\n/**\n * 批量改变方法的上下文\n * 此方法在react组件中很有用，在constructor中批量将组件上的方法执行上下文绑定到组件本身\n * 注意：用bind改变函数运行的上下文只会生效一次\n * @param  {Object} ctx 方法挂载的对象以及执行的上下文\n * @param  {Array<String>} fns 方法名列表\n *\n * @example\n * func.bindCtx(this, ['handleClick', 'handleChange']);\n */\nfunction bindCtx(ctx, fns, ns) {\n  if (typeof fns === 'string') {\n    fns = [fns];\n  }\n\n  // 方法的挂载空间，如果不传，默认与ctx相同\n  ns = ns || ctx;\n\n  fns.forEach((fnName) => {\n    // 这里不要添加空方法判断，由调用者保证正确性，否则出了问题无法排查\n    ns[fnName] = ns[fnName].bind(ctx);\n  });\n}\n\n/**\n * 用于执行回调方法后的逻辑\n * @param  {*} ret            回调方法执行结果\n * @param  {Function} success 执行结果返回非false的回调\n * @param  {Function} [failure=noop] 执行结果返回false的回调\n */\nfunction promiseCall(ret, success) {\n  const failure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;\n\n  if ((0, _object.isPromise)(ret)) {\n    return ret\n      .then((result) => {\n        success(result);\n        return result;\n      })\n      .catch((e) => {\n        failure(e);\n        // throw e;\n      });\n  }\n\n  return ret !== false ? success(ret) : failure(ret);\n}\n\n/**\n * 方法调用，如果obj对象中存在名为method的方法则调用该方法\n * @param {Object} target 目标对象\n * @param {string} method 方法名\n * @param {Array} args 函数参数列表\n * @returns {*} 函数返回值 如果不存在返回undefined\n */\nfunction invoke(target, method, args) {\n  const func = target && method in target ? target[method] : undefined;\n  return func && func.apply(undefined, args);\n}\n\nfunction renderNode(render, defaultRender) {\n  let renderProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n  const r = render !== undefined ? render : defaultRender;\n\n  if (renderProps && !Array.isArray(renderProps)) {\n    renderProps = [renderProps];\n  }\n  return typeof r === 'function' ? r.apply(undefined, renderProps) : r;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/guid.js",
    "content": "'use strict';\n\nexports.__esModule = true;\n\nexports.default = function (prefix) {\n  prefix = prefix || '';\n\n  return prefix + (timestamp++).toString(36);\n};\n\nvar timestamp = Date.now();\n\n/**\n * 生成全局唯一的id\n * @param  {String} [prefix=''] 前缀字符串\n * @return {String}\n *\n * @example\n * guid(); // j7jv509c\n * guid('prefix-'); // prefix-j7jv509d\n */\nmodule.exports = exports.default;\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/htmlId.js",
    "content": "'use strict';\n\nexports.__esModule = true;\n\nconst _typeof2 = require('babel-runtime/helpers/typeof');\n\nconst _typeof3 = _interopRequireDefault(_typeof2);\n\nexports.randomId = randomId;\nexports.escapeForId = escapeForId;\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\n/**\n * Generate a string to be used for HTML id attributes\n *\n * @param {String} prefix - prefix text for the id. Important because without one, eventually there will be 2 elements with the same id on the same page\n * @param {Number} max - range for the random number generator. Defaults to 1,000,000, but can be set higher if necessary.\n * @returns {String}\n */\nfunction randomId(prefix) {\n  const max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000000;\n\n  const rand = Math.ceil(Math.random() * max);\n\n  return prefix ? `${escapeForId(prefix)}-${rand}` : rand.toString(10);\n}\n\n/**\n * Replace characters not allowed for HTML id attributes\n *\n * @param {String} text\n * @returns {String}\n */\nfunction escapeForId(text) {\n  if (!text) {\n    return '';\n  }\n\n  if ((typeof text === 'undefined' ? 'undefined' : (0, _typeof3.default)(text)) === 'object') {\n    text = JSON.stringify(text);\n  } else if (typeof text !== 'string') {\n    text = String(text);\n  }\n\n  return text.replace(/['\"]/gm, '').replace(/[\\s'\"]/gm, '-');\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/index.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.pickAttrs =\n  exports.datejs =\n  exports.htmlId =\n  exports.KEYCODE =\n  exports.guid =\n  exports.focus =\n  exports.support =\n  exports.str =\n  exports.obj =\n  exports.log =\n  exports.func =\n  exports.events =\n  exports.env =\n  exports.dom =\n    undefined;\n\nconst _dom2 = require('./dom');\n\nconst _dom = _interopRequireWildcard(_dom2);\n\nconst _env2 = require('./env');\n\nconst _env = _interopRequireWildcard(_env2);\n\nconst _events2 = require('./events');\n\nconst _events = _interopRequireWildcard(_events2);\n\nconst _func2 = require('./func');\n\nconst _func = _interopRequireWildcard(_func2);\n\nconst _log2 = require('./log');\n\nconst _log = _interopRequireWildcard(_log2);\n\nconst _object2 = require('./object');\n\nconst _object = _interopRequireWildcard(_object2);\n\nconst _string2 = require('./string');\n\nconst _string = _interopRequireWildcard(_string2);\n\nconst _support2 = require('./support');\n\nconst _support = _interopRequireWildcard(_support2);\n\nconst _focus2 = require('./focus');\n\nconst _focus = _interopRequireWildcard(_focus2);\n\nconst _htmlId2 = require('./htmlId');\n\nconst _htmlId = _interopRequireWildcard(_htmlId2);\n\nconst _guid2 = require('./guid');\n\nconst _guid3 = _interopRequireDefault(_guid2);\n\nconst _keycode = require('./keycode');\n\nconst _keycode2 = _interopRequireDefault(_keycode);\n\nconst _date2 = require('./date');\n\nconst _date3 = _interopRequireDefault(_date2);\n\nconst _pickAttrs2 = require('./pick-attrs');\n\nconst _pickAttrs3 = _interopRequireDefault(_pickAttrs2);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\nfunction _interopRequireWildcard(obj) {\n  if (obj && obj.__esModule) {\n    return obj;\n  } else {\n    const newObj = {};\n    if (obj != null) {\n      for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n      }\n    }\n    newObj.default = obj;\n    return newObj;\n  }\n}\n\nconst dom = (exports.dom = _dom);\nconst env = (exports.env = _env);\nconst events = (exports.events = _events);\nconst func = (exports.func = _func);\nconst log = (exports.log = _log);\nconst obj = (exports.obj = _object);\nconst str = (exports.str = _string);\nconst support = (exports.support = _support);\nconst focus = (exports.focus = _focus);\nconst guid = (exports.guid = _guid3.default);\nconst KEYCODE = (exports.KEYCODE = _keycode2.default);\nconst htmlId = (exports.htmlId = _htmlId);\nconst datejs = (exports.datejs = _date3.default);\nconst pickAttrs = (exports.pickAttrs = _pickAttrs3.default);\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/keycode.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.default = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  SHIFT: 16,\n  CTRL: 17,\n  ALT: 18,\n  ESC: 27,\n  SPACE: 32,\n  END: 35,\n  HOME: 36,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  PAGE_UP: 33,\n  PAGE_DOWN: 34,\n\n  // version 0.x\n  ESCAPE: 27,\n  LEFT_ARROW: 37,\n  UP_ARROW: 38,\n  RIGHT_ARROW: 39,\n  DOWN_ARROW: 40,\n\n  // MacOS\n  CONTROL: 17,\n  OPTION: 18,\n  CMD: 91,\n  COMMAND: 91,\n  DELETE: 8,\n};\nmodule.exports = exports.default;\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/log.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.deprecated = deprecated;\nexports.warning = warning;\n\nconst _env = require('./env');\n\n/* eslint no-console: 0 */\n\n/**\n * 反对使用某一方法或属性的警告\n * @param  {String} props     过时的属性或方法名\n * @param  {String} instead   替代的属性或方法名\n * @param  {String} component 组件名\n *\n * @example\n * log.deprecated('onBeforeClose', 'beforeClose', 'Dialog');\n * // Warning: onBeforeClose is deprecated at [ Dialog ], use [ beforeClose ] instead of it.\n */\nfunction deprecated(props, instead, component) {\n  /* istanbul ignore else */\n  if (!(0, _env.isProduction)() && typeof console !== 'undefined' && console.error) {\n    return console.error(\n      `Warning: [ ${props} ] is deprecated at [ ${component} ], ` +\n        `use [ ${instead} ] instead of it.`,\n    );\n  }\n}\n\n/**\n * 控制台警告日志\n * @param {String} msg\n * @return {Console<Error> | void}\n */\nfunction warning(msg) {\n  /* istanbul ignore else */\n  if (!(0, _env.isProduction)() && typeof console !== 'undefined' && console.error) {\n    return console.error(`Warning: ${msg}`);\n  }\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/mobile/index.js",
    "content": "'use strict';\n\nexports.__esModule = true;\n\nconst _meetReact = require('@alifd/meet-react');\n\nconst _index = require('../index');\n\nconst _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\nconst Util = _meetReact.Util ? _meetReact.Util : _index2.default;\n\nexports.default = Util;\nmodule.exports = exports.default;\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/object.js",
    "content": "'use strict';\n\nexports.__esModule = true;\n\nconst _extends4 = require('babel-runtime/helpers/extends');\n\nconst _extends5 = _interopRequireDefault(_extends4);\n\nconst _typeof2 = require('babel-runtime/helpers/typeof');\n\nconst _typeof3 = _interopRequireDefault(_typeof2);\n\nexports.typeOf = typeOf;\nexports.isArrayLike = isArrayLike;\nexports.isPromise = isPromise;\nexports.isPlainObject = isPlainObject;\nexports.shallowEqual = shallowEqual;\nexports.each = each;\nexports.pickOthers = pickOthers;\nexports.pickProps = pickProps;\nexports.pickAttrsWith = pickAttrsWith;\nexports.isNil = isNil;\nexports.deepMerge = deepMerge;\nexports.isFunctionComponent = isFunctionComponent;\nexports.isClassComponent = isClassComponent;\nexports.isReactFragment = isReactFragment;\n\nconst _react = require('react');\n\nconst _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj };\n}\n\n/**\n * 获取对象的类型\n * @param  {*} obj\n * @return {String}\n *\n * @example\n * typeOf([]) === 'Array'\n * typeOf() === 'Undefined'\n * typeOf(1) === 'Number'\n */\nfunction typeOf(obj) {\n  return Object.prototype.toString.call(obj).replace(/\\[object\\s|]/g, '');\n}\n\n/**\n * 判断是否是数组或类数组对象\n * @param  {*}  obj\n * @return {Boolean}\n *\n * @example\n * isArrayLike([]) === true\n * isArrayLike(arguments) === true\n * isArrayLike(this.props.children) === true\n */\nfunction isArrayLike(obj) {\n  const length = !!obj && 'length' in obj && obj.length;\n  const type = typeOf(obj);\n\n  return (\n    type === 'Array' ||\n    length === 0 ||\n    (typeof length === 'number' && length > 0 && length - 1 in obj)\n  );\n}\n\n/**\n * 判断对象是否是一个promise，即是否可以用.then\n * @param  {*}  obj\n * @return {Boolean}\n */\nfunction isPromise(obj) {\n  return (\n    !!obj &&\n    ((typeof obj === 'undefined' ? 'undefined' : (0, _typeof3.default)(obj)) === 'object' ||\n      typeof obj === 'function') &&\n    typeof obj.then === 'function'\n  );\n}\n\n/**\n * 是否是一个纯净的对象\n * @param  {*}  obj\n * @return {Boolean}\n * @reference https://github.com/jonschlinkert/is-plain-object\n */\nfunction isPlainObject(obj) {\n  if (typeOf(obj) !== 'Object') {\n    return false;\n  }\n\n  const ctor = obj.constructor;\n\n  if (typeof ctor !== 'function') {\n    return false;\n  }\n\n  const prot = ctor.prototype;\n\n  if (typeOf(prot) !== 'Object') {\n    return false;\n  }\n\n  if (!prot.hasOwnProperty('isPrototypeOf')) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * 对象浅比较\n * @param  {Object} objA\n * @param  {Object} objB\n * @param  {Function}  [compare] 手动调用方法比较\n * @return {Boolean}      对象浅比较是否相等\n *\n * @example\n * object.shallowEqual({a: 100}, {a: 100}); // true\n */\nfunction shallowEqual(objA, objB, compare) {\n  if (objA === objB) {\n    return true;\n  }\n\n  // 其中一个不是object，则不相等\n  if (\n    !objA ||\n    !objB ||\n    (typeof objA === 'undefined' ? 'undefined' : (0, _typeof3.default)(objA)) +\n      (typeof objB === 'undefined' ? 'undefined' : (0, _typeof3.default)(objB)) !==\n      'objectobject'\n  ) {\n    return false;\n  }\n\n  const keyA = Object.keys(objA);\n  const keyB = Object.keys(objB);\n  const len = keyA.length;\n\n  // key 数量不一致则不相等\n  if (len !== keyB.length) {\n    return false;\n  }\n\n  const hasCallback = typeof compare === 'function';\n\n  for (let i = 0; i < len; i++) {\n    const key = keyA[i];\n\n    if (!Object.prototype.hasOwnProperty.call(objB, key)) {\n      return false;\n    }\n\n    const valA = objA[key];\n    const valB = objB[key];\n\n    const ret = hasCallback ? compare(valA, valB, key) : void 0;\n\n    if (ret === false || (ret === void 0 && valA !== valB)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * 遍历对象或数组，或者类数组，例如React中的children对象、arguments等\n * @param  {Object|Array}   obj\n * @param  {Function} callback fn(n, i) or fn(val, key)\n * @param  {Number}   [direction = 1] 是否倒序遍历，只对数组有效\n * @return {Object|Array}\n *\n * @example\n * // 遍历数组\n * object.each([100, 200, 300], (n, i) => console.log(n, i));\n * // 遍历json对象\n * object.each({a: 100, b: 200}, (value, key) => console.log(key, value));\n * // 遍历React子节点\n * object.each(this.props.children, (child, index) => console.log(child));\n * // 遍历arguments\n * object.each(arguments, (arg, i) => console.log(arg));\n */\nfunction each(obj, callback, direction) {\n  const reversed = direction === -1;\n  const { length } = obj;\n  let value = void 0;\n  let i = reversed ? length - 1 : 0;\n\n  if (isArrayLike(obj)) {\n    for (; i < length && i >= 0; reversed ? i-- : i++) {\n      value = callback.call(obj[i], obj[i], i);\n\n      if (value === false) {\n        break;\n      }\n    }\n  } else {\n    for (i in obj) {\n      /* istanbul ignore else */\n      if (obj.hasOwnProperty(i)) {\n        value = callback.call(obj[i], obj[i], i);\n\n        if (value === false) {\n          break;\n        }\n      }\n    }\n  }\n\n  return obj;\n}\n\n// @private 判断key是否在数组或对象中\nconst _isInObj = function _isInObj(key, obj, isArray) {\n  return isArray ? obj.indexOf(key) > -1 : key in obj;\n};\n\n/**\n * 过滤出其它属性\n * @param  {Object|Array} holdProps 过滤的参照对象，最终的结果只保留不在参照对象中的key\n * @param  {Object} props     被过滤的对象\n * @return {Object}           others\n *\n * @example\n * object.pickOthers(FooComponent.propTypes, this.props);\n * object.pickOthers(['className', 'onChange'], this.props);\n */\nfunction pickOthers(holdProps, props) {\n  const others = {};\n  const isArray = typeOf(holdProps) === 'Array';\n\n  for (const key in props) {\n    if (!_isInObj(key, holdProps, isArray)) {\n      others[key] = props[key];\n    }\n  }\n\n  return others;\n}\n\n/**\n * 过滤出需要的属性\n * @param  {Object|Array} holdProps 过滤的参照对象，最终的结果只保留在参照对象中的key\n * @param  {Object} props     被过滤的对象\n * @return {Object}           others\n *\n * @example\n * object.pickProps(FooComponent.propTypes, this.props);\n * object.pickProps(['className', 'onChange'], this.props);\n */\nfunction pickProps(holdProps, props) {\n  const others = {};\n  const isArray = typeOf(holdProps) === 'Array';\n\n  for (const key in props) {\n    if (_isInObj(key, holdProps, isArray)) {\n      others[key] = props[key];\n    }\n  }\n\n  return others;\n}\n\n/**\n * 过滤出带prefix的属性\n * @param  {Object} holdProps 过滤的参照对象，最终的结果只保留不在参照对象中的key\n * @param  {string} prefix    包含的字符串\n * @return {Object}           others\n *\n * @example\n * object.pickAttrsWith(FooComponent.propTypes, 'data-');\n */\nfunction pickAttrsWith(holdProps, prefix) {\n  const others = {};\n\n  for (const key in holdProps) {\n    if (key.match(prefix)) {\n      others[key] = holdProps[key];\n    }\n  }\n\n  return others;\n}\n\n/**\n * Checks if value is `null` or `undefined`.\n * @param {*} value\n * @return {Boolean}\n */\nfunction isNil(value) {\n  // It will returns `true` only if `null` or `undefined` compare with `null`\n  // with loose equaliy\n  return value == null; // eslint-disable-line eqeqeq\n}\n\n/**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n * @reference https://stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge?page=1&tab=votes#tab-top\n */\nfunction deepMerge(target) {\n  for (\n    var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1;\n    _key < _len;\n    _key++\n  ) {\n    sources[_key - 1] = arguments[_key];\n  }\n\n  if (!sources.length) return target;\n  const source = sources.shift();\n\n  if (!isPlainObject(target)) {\n    target = {};\n  }\n\n  if (isPlainObject(target) && isPlainObject(source)) {\n    for (const key in source) {\n      // 如果是object 进行深拷贝\n      if (isPlainObject(source[key]) && !_react2.default.isValidElement(source[key])) {\n        var _extends2;\n\n        if (!target[key])\n          (0, _extends5.default)(target, ((_extends2 = {}), (_extends2[key] = {}), _extends2));\n        // fix {a: 'te'}, {a:{b:3}}\n        if (!isPlainObject(target[key])) {\n          target[key] = source[key];\n        }\n        deepMerge(target[key], source[key]);\n        // string/number/function/react node 等直接复制\n      } else {\n        var _extends3;\n\n        (0, _extends5.default)(\n          target,\n          ((_extends3 = {}), (_extends3[key] = source[key]), _extends3),\n        );\n      }\n    }\n  }\n\n  return deepMerge.apply(undefined, [target].concat(sources));\n}\n\n/**\n * 组件是否为 Fucntion Component\n * @param {*} component 传入的组件\n */\nfunction isFunctionComponent(component) {\n  return (\n    typeOf(component) === 'Function' &&\n    component.prototype &&\n    component.prototype.isReactComponent === undefined\n  );\n}\n\n/**\n * 组件是否为 Class Component\n * @param {*} component  传入的组件\n */\nfunction isClassComponent(component) {\n  return (\n    typeOf(component) === 'Function' &&\n    component.prototype &&\n    component.prototype.isReactComponent !== undefined\n  );\n}\n\n/**\n * 判断是否为 ReactFragment\n * @param {*} component  传入的组件\n */\nfunction isReactFragment(component) {\n  if (isNil(component)) {\n    return false;\n  }\n\n  if (component.type) {\n    return component.type === _react2.default.Fragment;\n  }\n  return component === _react2.default.Fragment;\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/pick-attrs.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nconst attributes =\n  'accept acceptCharset accessKey action allowFullScreen allowTransparency\\nalt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\\ncharSet checked classID className colSpan cols content contentEditable contextMenu\\ncontrols coords crossOrigin data dateTime default defer dir disabled download draggable\\nencType form formAction formEncType formMethod formNoValidate formTarget frameBorder\\nheaders height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\\nis keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\\nmediaGroup method min minLength multiple muted name noValidate nonce open\\noptimum pattern placeholder poster preload radioGroup readOnly rel required\\nreversed role rowSpan rows sandbox scope scoped scrolling seamless selected\\nshape size sizes span spellCheck src srcDoc srcLang srcSet start step style\\nsummary tabIndex target title type useMap value width wmode wrap'\n    .replace(/\\s+/g, ' ')\n    .replace(/\\t|\\n|\\r/g, '')\n    .split(' ');\n\nconst eventsName =\n  'onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError'\n    .replace(/\\s+/g, ' ')\n    .replace(/\\t|\\n|\\r/g, '')\n    .split(' ');\n\nconst attrsPrefix = ['data-', 'aria-'];\n/**\n * 过滤掉无效的透传到 DOM 属性\n */\n\nexports.default = function (props) {\n  const attrs = {};\n\n  const _loop = function _loop(key) {\n    if (attributes.indexOf(key) > -1 || eventsName.indexOf(key) > -1) {\n      attrs[key] = props[key];\n    } else if (\n      attrsPrefix\n        .map((prefix) => {\n          return new RegExp(`^${prefix}`);\n        })\n        .some((reg) => {\n          return key.replace(reg, '') !== key;\n        })\n    ) {\n      attrs[key] = props[key];\n    }\n  };\n\n  for (const key in props) {\n    _loop(key);\n  }\n  return attrs;\n};\n\nmodule.exports = exports.default;\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/string.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.camelcase = camelcase;\nexports.hyphenate = hyphenate;\nexports.template = template;\n\nconst _log = require('./log');\n\nconst _object = require('./object');\n\n/**\n * 将字符串转化为驼峰式写法\n * @param  {String} str 例：-webkit-transition\n * @return {String}     例：WebkitTransition\n */\nfunction camelcase(str) {\n  if (!/-/.test(str)) {\n    return str || '';\n  }\n  return str.toLowerCase().replace(/-([a-z])/g, ($0, $1) => {\n    return $1.toUpperCase();\n  });\n}\n\n/**\n * 将驼峰式字符串转化为连字符写法\n * @param  {String} str 例：WebkitTransition\n * @return {String}     例：-webkit-transition\n */\nfunction hyphenate(str) {\n  const strType = (0, _object.typeOf)(str);\n  if (strType !== 'String') {\n    (0, _log.warning)(\n      `[ hyphenate(str: string): string ] ` +\n        `Expected arguments[0] to be a string but get a ${strType}.` +\n        `It will return an empty string without any processing.`,\n    );\n    return '';\n  }\n  return str.replace(/([A-Z])/g, ($0) => {\n    return `-${$0.toLowerCase()}`;\n  });\n}\n\n/**\n * 替换模板字符串\n * @param {String} tpl     例：当前{current}, 共{total}页\n * @param {Object} object  例：{current: 1, total: 9}\n * @return {String}        例：\n */\nfunction template(tpl) {\n  const object = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  const tplType = (0, _object.typeOf)(tpl);\n  if (tplType !== 'String') {\n    (0, _log.warning)(\n      `[ template(tpl: string, object: object): string ] ` +\n        `Expected arguments[0] to be a string but get a ${tplType}.` +\n        `It will return an empty string without any processing.`,\n    );\n    return '';\n  }\n\n  return tpl.replace(/\\{[a-z]*\\}/g, (str) => {\n    const key = str.substring(1, str.length - 1);\n    return object[key] || '';\n  });\n}\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/util/support.js",
    "content": "'use strict';\n\nexports.__esModule = true;\nexports.flex = exports.transition = exports.animation = undefined;\n\nconst _dom = require('./dom');\n\nconst _object = require('./object');\n\nconst animationEndEventNames = {\n  WebkitAnimation: 'webkitAnimationEnd',\n  OAnimation: 'oAnimationEnd',\n  animation: 'animationend',\n};\n\nconst transitionEventNames = {\n  WebkitTransition: 'webkitTransitionEnd',\n  OTransition: 'oTransitionEnd',\n  transition: 'transitionend',\n};\n\n/**\n * 是否支持某些动效事件，如果支持，返回相应的end事件名\n * @private\n * @param  {Object<String>} names\n * @return {Object|false}\n */\nfunction _supportEnd(names) {\n  /* istanbul ignore if */\n  if (!_dom.hasDOM) {\n    return false;\n  }\n\n  const el = document.createElement('div');\n  let ret = false;\n\n  (0, _object.each)(names, (val, key) => {\n    /* istanbul ignore else */\n    if (el.style[key] !== undefined) {\n      ret = { end: val };\n      return false;\n    }\n  });\n\n  return ret;\n}\n\n/**\n * 是否支持某些CSS属性\n * @private\n * @param  {Object<Array<String>>} names\n * @return {Boolean}       is support\n */\nfunction _supportCSS(names) {\n  /* istanbul ignore if */\n  if (!_dom.hasDOM) {\n    return false;\n  }\n\n  const el = document.createElement('div');\n  let ret = false;\n\n  (0, _object.each)(names, (val, key) => {\n    (0, _object.each)(val, (item) => {\n      try {\n        el.style[key] = item;\n        ret = ret || el.style[key] === item;\n      } catch (e) {\n        // It will be throw error when set unknown property under IE8\n      }\n      return !ret; // 如果有一个支持就返回false，后面不需要再判断\n    });\n\n    return !ret;\n  });\n\n  return ret;\n}\n\n/**\n * 是否支持animation以及动画结束事件名\n * @type {Object|false}\n * @property {String} end 动画结束事件名\n */\nconst animation = (exports.animation = _supportEnd(animationEndEventNames));\n\n/**\n * 是否支持transition以及过滤效果结束事件名\n * @type {Object|false}\n * @property {String} end 过渡效果结束事件名\n */\nconst transition = (exports.transition = _supportEnd(transitionEventNames));\n\n/**\n * 是否支持flex属性\n * @type {Boolean}\n */\nconst flex = (exports.flex = _supportCSS({\n  display: ['flex', '-webkit-flex', '-moz-flex', '-ms-flexbox'],\n}));\n"
  },
  {
    "path": "packages/fusion-ui/src/utils/variables.scss",
    "content": "$css-prefix: 'cz5-';\n\n$field: '#{$css-prefix}field';\n$field-medium-lineheight: 28px;\n$font-lineheight-2: 1.3em;\n"
  },
  {
    "path": "packages/fusion-ui/src/variables.scss",
    "content": "@import '~@alifd/next/variables.scss';\n\n$biz-css-prefix: '.fusion-ui-';\n"
  },
  {
    "path": "packages/fusion-ui/src/variables.tsx",
    "content": "const bizCssPrefix = 'fusion-ui';\n\nexport { bizCssPrefix };\n"
  },
  {
    "path": "packages/fusion-ui/tsconfig.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"buildOnSave\": false,\n  \"compilerOptions\": {\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"outDir\": \"build\",\n    \"module\": \"esnext\",\n    \"target\": \"es6\",\n    \"jsx\": \"react\",\n    \"moduleResolution\": \"node\",\n    \"lib\": [\"es6\", \"dom\"],\n    \"sourceMap\": true,\n    \"allowJs\": true,\n    \"noUnusedLocals\": true,\n    \"noImplicitReturns\": true,\n    \"noImplicitThis\": true,\n    \"noImplicitAny\": true,\n    \"skipLibCheck\": true,\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    },\n    \"baseUrl\": \"./\"\n  },\n  \"include\": [\"src/*.ts\", \"src/*.tsx\", \"src/**/*.ts\", \"src/**/*.tsx\"],\n  \"exclude\": [\"node_modules\", \"build\", \"public\"]\n}\n"
  },
  {
    "path": "packages/graph-x6-materials/.editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nquote_type = single\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": "packages/graph-x6-materials/.eslintignore",
    "content": "node_modules/\nbuild/\ndist/\nlib/\nes/\ndocs/\nplugins/\nbuild*\n**/*.min.js\n**/*-min.js\n**/*.bundle.js\n"
  },
  {
    "path": "packages/graph-x6-materials/.eslintrc.js",
    "content": "module.exports = {\n  extends: [\n    'eslint-config-ali/typescript/react',\n    'prettier',\n    'prettier/@typescript-eslint',\n    'prettier/react',\n  ],\n  rules: {\n    '@typescript-eslint/ban-ts-comment': 'off',\n  },\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/.gitignore",
    "content": "# See https://help.github.com/ignore-files/ for more about ignoring files.\n\n# dependencies\nnode_modules/\n\n# production\nbuild/\ndist/\ntmp/\nlib/\nes/\n\n# misc\n.idea/\n.happypack\n.DS_Store\n*.swp\n*.dia~\n.tmp\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nyarn.lock\n\nstorybook-static/\n"
  },
  {
    "path": "packages/graph-x6-materials/.markdownlint.json",
    "content": "{\n  \"extends\": \"markdownlint-config-ali\"\n}\n"
  },
  {
    "path": "packages/graph-x6-materials/.markdownlintignore",
    "content": "node_modules/\nbuild/\ndist/\n\n"
  },
  {
    "path": "packages/graph-x6-materials/.prettierrc.js",
    "content": "module.exports = {\n  printWidth: 100,\n  tabWidth: 2,\n  semi: true,\n  singleQuote: true,\n  trailingComma: 'all',\n  arrowParens: 'always',\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/.stylelintignore",
    "content": "node_modules/\nbuild/\ndist/\nes/\nlib/\ndocs/\n**/*.min.css\n**/*-min.css\n**/*.bundle.css\n\n"
  },
  {
    "path": "packages/graph-x6-materials/.stylelintrc.js",
    "content": "module.exports = {\n  extends: 'stylelint-config-ali',\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/README.md",
    "content": "# README\n\n## 开发常用命令\n\n- `cnpm start` 运行所有组件的开发调试环境\n- `cnpm start page-header` 运行单个组件的开发调试环境\n- `cnpm run lowcode:dev` 启动低代码开发调试环境\n- `cnpm run lowcode:build` 构建低代码产物\n- `cnpm run build` 打包生成 lib/ es/ dist/ build/文件\n- `cnpm run materials` 生成物料中心需要的入库 JSON 文件\n- `cnpm run lint` 进行代码检查\n"
  },
  {
    "path": "packages/graph-x6-materials/build.json",
    "content": "{\n  \"library\": \"AlilcLceX6Items\",\n  \"libraryTarget\": \"umd\",\n  \"sourceMap\": true,\n  \"alias\": {\n    \"@\": \"./src/components\"\n  },\n  \"plugins\": [\n    [\n      \"build-plugin-component-multiple\",\n      {\n        \"themePackage\": \"@alifd/theme-2\",\n        \"addons\": \"@storybook/addon-outline\"\n      }\n    ]\n  ]\n}"
  },
  {
    "path": "packages/graph-x6-materials/build.lowcode.js",
    "content": "const { library } = require('./build.json');\n\nmodule.exports = {\n  alias: {\n    '@': './src',\n  },\n  plugins: [\n    [\n      '@alifd/build-plugin-lowcode',\n      {\n        library,\n        engineScope: \"@alilc\"\n      },\n    ],\n  ],\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/commitlint.config.js",
    "content": "module.exports = {\n  extends: ['ali'],\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/f2elint.config.js",
    "content": "module.exports = {\n  enableStylelint: true,\n  enableMarkdownlint: true,\n  enablePrettier: true,\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/jest.config.js",
    "content": "module.exports = {\n  setupFilesAfterEnv: ['<rootDir>/test/setupTests.js'],\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/lowcode/line/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@alilc/lowcode-engine';\n\nconst LineMeta: ComponentMetadata = {\n  componentName: 'Line',\n  title: '连接线',\n  docUrl: '',\n  screenshot: '',\n  tags: ['edge'],\n  devMode: 'proCode',\n  npm: {\n    package: '@alilc/lce-x6-items',\n    version: '0.1.3',\n    exportName: 'Line',\n    main: 'src/index.tsx',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    supports: {\n      style: false,\n      loop: false,\n      condition: false\n    }\n  }\n};\nconst snippets: Snippet[] = [\n  {\n    title: '连接线',\n    screenshot: '',\n    schema: {\n      componentName: 'Line',\n      props: {},\n    },\n  },\n];\n\nexport default {\n  ...LineMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/lowcode/send-email/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@alilc/lowcode-engine';\n\nconst SendEmailMeta: ComponentMetadata = {\n  componentName: 'SendEmail',\n  title: '发送邮件',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  tags: ['node'],\n  npm: {\n    package: '@alilc/lce-x6-items',\n    version: '0.1.3',\n    exportName: 'SendEmail',\n    main: 'src/index.tsx',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'name',\n            'zh-CN': '名称',\n          },\n        },\n        name: 'name',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: true,\n          initialValue: '',\n        },\n      },\n    ],\n    supports: {\n      style: false,\n      loop: false,\n      condition: false\n    },\n    component: {},\n  },\n  category: '事件节点',\n  priority: 1\n};\nconst snippets: Snippet[] = [\n  {\n    title: '发送邮件',\n    screenshot: '',\n    schema: {\n      componentName: 'SendEmail',\n      props: {},\n    },\n  },\n];\n\nexport default {\n  ...SendEmailMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/lowcode/start-end/meta.ts",
    "content": "import { ComponentMetadata, Snippet } from '@alilc/lowcode-types';\n\nconst StartEndMeta: ComponentMetadata = {\n  componentName: 'StartEnd',\n  title: '起止节点',\n  docUrl: '',\n  screenshot: '',\n  devMode: 'proCode',\n  tags: ['node'],\n  npm: {\n    package: '@alilc/lce-x6-items',\n    version: '0.1.3',\n    exportName: 'StartEnd',\n    main: 'src/index.tsx',\n    destructuring: true,\n    subName: '',\n  },\n  configure: {\n    props: [\n      {\n        title: {\n          label: {\n            type: 'i18n',\n            'en-US': 'name',\n            'zh-CN': '名称',\n          },\n        },\n        name: 'name',\n        setter: {\n          componentName: 'StringSetter',\n          isRequired: true,\n          initialValue: '',\n        },\n      },\n    ],\n    supports: {\n      style: false,\n      loop: false,\n      condition: false\n    },\n    component: {},\n  },\n  category: '事件节点',\n  priority: 2\n};\nconst snippets: Snippet[] = [\n  {\n    title: '起止节点',\n    screenshot: 'https://img.alicdn.com/imgextra/i4/O1CN01sZwPKb1f1JgS9ayrg_!!6000000003946-55-tps-16-16.svg',\n    schema: {\n      componentName: 'StartEnd',\n      props: {},\n    },\n  },\n];\n\nexport default {\n  ...StartEndMeta,\n  snippets,\n};\n"
  },
  {
    "path": "packages/graph-x6-materials/package.json",
    "content": "{\n  \"name\": \"@alilc/lce-x6-items\",\n  \"version\": \"1.0.7\",\n  \"description\": \"x6-items\",\n  \"main\": \"lib/index.js\",\n  \"module\": \"es/index.js\",\n  \"typings\": \"types/index.d.ts\",\n  \"files\": [\n    \"build\",\n    \"dist\",\n    \"lib\",\n    \"es\",\n    \"types\"\n  ],\n  \"scripts\": {\n    \"start\": \"build-scripts start\",\n    \"build\": \"build-scripts build\",\n    \"lowcode:dev\": \"build-scripts start --config ./build.lowcode.js\",\n    \"lowcode:build\": \"build-scripts build --config ./build.lowcode.js\",\n    \"f2elint-scan\": \"f2elint scan\",\n    \"f2elint-fix\": \"f2elint fix\",\n    \"prepublishOnly\": \"npm run build && npm run lowcode:build\"\n  },\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"keywords\": [\n    \"Fusion\"\n  ],\n  \"author\": \"fusion-team\",\n  \"license\": \"MIT\",\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"f2elint commit-file-scan\",\n      \"commit-msg\": \"f2elint commit-msg-scan\"\n    }\n  },\n  \"lint-staged\": {\n    \"**/*.{js,jsx,ts,tsx,vue}\": \"f2elint exec eslint\",\n    \"**/*.{css,scss,less,acss}\": \"f2elint exec stylelint\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"^16.x\",\n    \"react-dom\": \"^16.x\",\n    \"moment\": \"latest\",\n    \"@antv/x6\": \"^1.6.1\"\n  },\n  \"devDependencies\": {\n    \"@alib/build-scripts\": \"^0.1.3\",\n    \"@alifd/build-plugin-lowcode\": \"^0.3.0\",\n    \"@alifd/theme-2\": \"^0.4.0\",\n    \"@types/react\": \"^16.14.24\",\n    \"@types/react-dom\": \"^16.9.4\",\n    \"build-plugin-component-multiple\": \"^1.0.0-beta.5\",\n    \"build-plugin-fusion\": \"^0.1.0\",\n    \"f2elint\": \"^1.2.0\",\n    \"react\": \"^16.14.0\",\n    \"react-dom\": \"^16.14.0\",\n    \"@antv/x6\": \"^1.6.1\"\n  },\n  \"dependencies\": {\n    \"@alifd/next\": \"^1.25.27\",\n    \"prop-types\": \"^15.5.8\"\n  },\n  \"acceptDependencies\": {\n    \"webpack\": \"^4.46.x\"\n  },\n  \"resolutions\": {\n    \"webpack\": \"^4.46.x\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\"\n  },\n  \"componentConfig\": {\n    \"isComponentLibrary\": true,\n    \"materialSchema\": \"https://unpkg.com/@alilc/lce-x6-items@1.0.7/build/lowcode/assets-prod.json\"\n  }\n}"
  },
  {
    "path": "packages/graph-x6-materials/src/components/line/index.tsx",
    "content": "\n\nconst SequenceFlow = () => ({\n  attrs: {\n    line: {\n      stroke: '#4C6079',\n      strokeWidth: 1,\n      targetMarker: { // 箭头\n        name: 'block',\n        size: 8,\n      },\n    },\n  },\n  router: {\n    name: 'manhattan',\n  },\n});\n\nexport default SequenceFlow;\n"
  },
  {
    "path": "packages/graph-x6-materials/src/components/send-email/index.tsx",
    "content": "import { createElement } from 'react';\nimport { Node } from '@antv/x6';\n\n\nconst CustomNode = () => ({\n  width: 120,\n  height: 50,\n  shape: 'react-shape',\n  ports: {\n    groups: {\n      top: {\n        position: 'top',\n        attrs: {\n          circle: {\n            r: 5,\n            magnet: true,\n            stroke: '#027AFF',\n            strokeWidth: 1,\n            fill: '#fff',\n            style: {\n              visibility: 'hidden',\n              opacity: '1'\n            },\n          },\n        },\n        zIndex: 99,\n      },\n      right: {\n        position: 'right',\n        attrs: {\n          circle: {\n            r: 5,\n            magnet: true,\n            stroke: '#027AFF',\n            strokeWidth: 1,\n            fill: '#fff',\n            style: {\n              visibility: 'hidden',\n              opacity: '1'\n            },\n          },\n        },\n        zIndex: 99,\n      },\n      bottom: {\n        position: 'bottom',\n        attrs: {\n          circle: {\n            r: 5,\n            magnet: true,\n            stroke: '#027AFF',\n            strokeWidth: 1,\n            fill: '#fff',\n            style: {\n              visibility: 'hidden',\n              opacity: '1'\n            },\n          },\n        },\n        zIndex: 99,\n      },\n      left: {\n        position: 'left',\n        attrs: {\n          circle: {\n            r: 5,\n            magnet: true,\n            stroke: '#027AFF',\n            strokeWidth: 1,\n            fill: '#fff',\n            style: {\n              visibility: 'hidden',\n              opacity: '1'\n            },\n          },\n        },\n        zIndex: 99,\n      },\n    },\n    items: [\n      {\n        id: 't',\n        group: 'top',\n      },\n      {\n        id: 'r',\n        group: 'right',\n      },\n      {\n        id: 'b',\n        group: 'bottom',\n      },\n      {\n        id: 'l',\n        group: 'left',\n      },\n    ],\n  },\n  component(node: Node) {\n    const name = node.prop<string>('name');\n    return (\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          textAlign: 'center',\n          lineHeight: '50px',\n          border: '2px solid #9254de',\n          borderRadius: 4,\n          background: '#efdbff',\n        }}\n      >\n        {name}\n      </div>\n    )\n  },\n});\n\nexport default CustomNode;\n"
  },
  {
    "path": "packages/graph-x6-materials/src/components/start-end/index.tsx",
    "content": "const StartEnd = () => ({\n  shape: 'lce-rect',\n  attrs: {\n    image: {\n      'xlink:href': 'https://img.alicdn.com/imgextra/i3/O1CN010QekGb1vDFjCLldzk_!!6000000006138-2-tps-500-500.png',\n    }\n  },\n});\n\nexport default StartEnd;\n"
  },
  {
    "path": "packages/graph-x6-materials/src/index.scss",
    "content": ""
  },
  {
    "path": "packages/graph-x6-materials/src/index.tsx",
    "content": "export { default as Line } from './components/line';\nexport { default as SendEmail } from './components/send-email';\nexport { default as StartEnd } from './components/start-end';\n\nconst bizCssPrefix = 'bizpack';\n\nexport {\n  bizCssPrefix\n}\n"
  },
  {
    "path": "packages/graph-x6-materials/src/sync-oss.js",
    "content": "#!/usr/bin/env node\nconst http = require('http');\nconst projectPackage = require('../package.json');\n\nconst { version, name } = projectPackage;\nconst options = {\n  method: 'PUT',\n  hostname: 'uipaas-node.alibaba-inc.com',\n  path: '/staticAssets/cdn/packages',\n  headers: {\n    'Content-Type': 'application/json',\n    Cookie: 'locale=en-us',\n  },\n  maxRedirects: 20,\n};\n\nconst onResponse = function (res) {\n  const chunks = [];\n  res.on('data', (chunk) => {\n    chunks.push(chunk);\n  });\n\n  res.on('end', () => {\n    const body = Buffer.concat(chunks);\n    console.table(JSON.stringify(JSON.parse(body.toString()), null, 2));\n  });\n\n  res.on('error', (error) => {\n    console.error(error);\n  });\n};\n\nconst req = http.request(options, onResponse);\n\nconst postData = JSON.stringify({\n  packages: [\n    {\n      packageName: name,\n      version,\n    },\n  ],\n  // 可以发布指定源的 npm 包，默认公网 npm\n  useTnpm: false,\n});\n\nreq.write(postData);\n\nreq.end();"
  },
  {
    "path": "packages/graph-x6-materials/src/variables.scss",
    "content": "@import '~@alifd/next/variables.scss';\n\n$biz-css-prefix: '.bizpack';\n"
  },
  {
    "path": "packages/graph-x6-materials/src/variables.tsx",
    "content": "const bizCssPrefix = 'bizpack';\n\nexport { bizCssPrefix };\n"
  },
  {
    "path": "packages/graph-x6-materials/tsconfig.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"buildOnSave\": false,\n  \"compilerOptions\": {\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"outDir\": \"build\",\n    \"module\": \"esnext\",\n    \"target\": \"es6\",\n    \"jsx\": \"react\",\n    \"moduleResolution\": \"node\",\n    \"lib\": [\"es6\", \"dom\"],\n    \"sourceMap\": true,\n    \"allowJs\": true,\n    \"noUnusedLocals\": true,\n    \"noImplicitReturns\": true,\n    \"noImplicitThis\": true,\n    \"noImplicitAny\": true,\n    \"skipLibCheck\": true,\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    },\n    \"baseUrl\": \"./\"\n  },\n  \"include\": [\"src/*.ts\", \"src/*.tsx\", \"src/**/*.ts\", \"src/**/*.tsx\"],\n  \"exclude\": [\"node_modules\", \"build\", \"public\"]\n}\n"
  },
  {
    "path": "scripts/update-readme.js",
    "content": "const glob = require('glob');\nconst fs = require('fs');\n\nconst nameVersionList = glob.sync('packages/*/package.json', {\n  absolute: true,\n}).map(require).map(({ name, version }) => ({\n  name,\n  version,\n}));\n\nconst readmeFiles = glob.sync('**/README.md', {\n  absolute: true,\n  ignore: ['node_modules/**'],\n});\n\nreadmeFiles.forEach((readmeFile) => {\n  const content = fs.readFileSync(readmeFile, 'utf8');\n\n  let newContent = content;\n\n  nameVersionList.forEach(({ name, version }) => {\n    const re = new RegExp(`${name}@\\\\d+\\\\.\\\\d+\\\\.\\\\d+`, 'g');\n    newContent = newContent.replace(re, `${name}@${version}`);\n  });\n\n  if (newContent !== content) {\n    console.log(`Updating ${readmeFile}`);\n    fs.writeFileSync(readmeFile, newContent);\n  }\n});\n\n\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"importHelpers\": true,\n    \"jsx\": \"react\",\n    \"esModuleInterop\": true,\n    \"sourceMap\": true,\n    \"baseUrl\": \"./\",\n    \"strict\": true,\n    \"paths\": {\n      \"@/*\": [\"components/*\"]\n    },\n    \"allowSyntheticDefaultImports\": true,\n    \"resolveJsonModule\": true,\n    \"allowJs\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"lib\",\n    \"es\",\n    \"docs\",\n    \"public\",\n    \"scripts\",\n    \"dist\",\n    \"typings\",\n    \"**/__test__\",\n    \"test\"\n  ]\n}\n"
  },
  {
    "path": "typings.d.ts",
    "content": "declare module '*.css';\ndeclare module '*.scss';\n"
  }
]